Class: Eluvia::Fieldset::RestField

Inherits:
Object
  • Object
show all
Defined in:
lib/eluvia/fieldset/rest_field.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(name, fieldset = nil) ⇒ RestField

Returns a new instance of RestField.



11
12
13
14
# File 'lib/eluvia/fieldset/rest_field.rb', line 11

def initialize(name, fieldset = nil)
  @name = name
  @fieldset = fieldset
end

Instance Attribute Details

#fieldsetObject

Returns the value of attribute fieldset.



9
10
11
# File 'lib/eluvia/fieldset/rest_field.rb', line 9

def fieldset
  @fieldset
end

#nameObject (readonly)

Returns the value of attribute name.



8
9
10
# File 'lib/eluvia/fieldset/rest_field.rb', line 8

def name
  @name
end

Class Method Details

.create_from_string(field_string, default_fieldset_string: nil) ⇒ Object



16
17
18
19
20
21
22
23
24
25
# File 'lib/eluvia/fieldset/rest_field.rb', line 16

def self.create_from_string(field_string, default_fieldset_string: nil)
  if FIELDSET_PATTERN.match?(field_string)
    name, subfields_string = field_string[0..-2].split('(', 2)
    fieldset = RestFieldset.create_from_string(subfields_string, default_field_fieldset_string: default_fieldset_string)
  else
    name = field_string
    fieldset = default_fieldset_string.present? ? RestFieldset.create_from_string(default_fieldset_string) : nil
  end
  new(name, fieldset)
end

Instance Method Details

#&(other) ⇒ Object



69
70
71
# File 'lib/eluvia/fieldset/rest_field.rb', line 69

def &(other)
  intersection(other)
end

#==(other) ⇒ Object



77
78
79
# File 'lib/eluvia/fieldset/rest_field.rb', line 77

def ==(other)
  other.is_a?(RestField) && name == other.name && fieldset == other.fieldset
end

#deep_dupObject



27
28
29
# File 'lib/eluvia/fieldset/rest_field.rb', line 27

def deep_dup
  self.class.new(name, fieldset&.deep_dup)
end

#intersection(rest_field) ⇒ Object

Raises:

  • (ArgumentError)


43
44
45
46
47
48
49
50
51
52
53
# File 'lib/eluvia/fieldset/rest_field.rb', line 43

def intersection(rest_field)
  raise ArgumentError, "name mismatch ('#{name}' != '#{rest_field.name}')" unless name == rest_field.name

  field = deep_dup
  if field.fieldset.present? && rest_field.fieldset.present?
    field.fieldset = field.fieldset.intersection(rest_field.fieldset)
  elsif rest_field.fieldset.present?
    field.fieldset = rest_field.fieldset.deep_dup
  end
  field
end

#join(rest_field) ⇒ Object

Raises:

  • (ArgumentError)


31
32
33
34
35
36
37
38
39
40
41
# File 'lib/eluvia/fieldset/rest_field.rb', line 31

def join(rest_field)
  raise ArgumentError, "name mismatch ('#{name}' != '#{rest_field.name}')" unless name == rest_field.name

  field = deep_dup
  if field.fieldset.present? && rest_field.fieldset.present?
    field.fieldset = field.fieldset.join(rest_field.fieldset)
  elsif rest_field.fieldset.present?
    field.fieldset = field.fieldset&.deep_dup
  end
  field
end

#left_intersection(rest_field) ⇒ Object

Raises:

  • (ArgumentError)


55
56
57
58
59
60
61
62
63
# File 'lib/eluvia/fieldset/rest_field.rb', line 55

def left_intersection(rest_field)
  raise ArgumentError, "name mismatch ('#{name}' != '#{rest_field.name}')" unless name == rest_field.name

  field = deep_dup
  if field.fieldset.present? && rest_field.fieldset.present?
    field.fieldset = field.fieldset.left_intersection(rest_field.fieldset)
  end
  field
end

#to_sObject



73
74
75
# File 'lib/eluvia/fieldset/rest_field.rb', line 73

def to_s
  fieldset.present? ? "#{name}(#{fieldset})" : name
end

#|(other) ⇒ Object



65
66
67
# File 'lib/eluvia/fieldset/rest_field.rb', line 65

def |(other)
  join(other)
end