Class: Eluvia::Fieldset::RestFieldset
- Includes:
- Enumerable
- Defined in:
- lib/eluvia/fieldset/rest_fieldset.rb
Class Method Summary collapse
- .create_from_list(fields, default_field_fieldset_string: nil) ⇒ Object
- .create_from_string(fields_string, default_field_fieldset_string: nil) ⇒ Object
Instance Method Summary collapse
- #&(other) ⇒ Object
- #==(other) ⇒ Object
- #append(field) ⇒ Object
- #deep_dup ⇒ Object
- #delete(key) ⇒ Object
- #each(&block) ⇒ Object
- #empty? ⇒ Boolean
- #fields ⇒ Object
- #flat ⇒ Object
- #get(key) ⇒ Object (also: #[])
- #has_any_key(*keys) ⇒ Object
- #include?(key) ⇒ Boolean
-
#initialize(*fields) ⇒ RestFieldset
constructor
A new instance of RestFieldset.
- #intersection(rest_fieldset) ⇒ Object
- #join(rest_fieldset) ⇒ Object
- #left_intersection(rest_fieldset) ⇒ Object
- #to_s ⇒ Object
- #|(other) ⇒ Object
Constructor Details
#initialize(*fields) ⇒ RestFieldset
Returns a new instance of RestFieldset.
6 7 8 9 |
# File 'lib/eluvia/fieldset/rest_fieldset.rb', line 6 def initialize(*fields) @fields_map = {} fields.each { |field| append(field) } end |
Class Method Details
.create_from_list(fields, default_field_fieldset_string: nil) ⇒ Object
13 14 15 |
# File 'lib/eluvia/fieldset/rest_fieldset.rb', line 13 def create_from_list(fields, default_field_fieldset_string: nil) new(*fields.map { |field_string| RestField.create_from_string(field_string, default_fieldset_string: default_field_fieldset_string) }) end |
.create_from_string(fields_string, default_field_fieldset_string: nil) ⇒ Object
17 18 19 |
# File 'lib/eluvia/fieldset/rest_fieldset.rb', line 17 def create_from_string(fields_string, default_field_fieldset_string: nil) new(*split_fields(fields_string).map { |field_string| RestField.create_from_string(field_string, default_fieldset_string: default_field_fieldset_string) }) end |
Instance Method Details
#&(other) ⇒ Object
94 95 96 |
# File 'lib/eluvia/fieldset/rest_fieldset.rb', line 94 def &(other) intersection(other) end |
#==(other) ⇒ Object
148 149 150 |
# File 'lib/eluvia/fieldset/rest_fieldset.rb', line 148 def ==(other) other.is_a?(RestFieldset) && fields_map == other.fields_map end |
#append(field) ⇒ Object
115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 |
# File 'lib/eluvia/fieldset/rest_fieldset.rb', line 115 def append(field) rest_field = case field when RestField field when String RestField.create_from_string(field) else raise ArgumentError, "field can be only RestField or string ('#{field}' [#{field.class}])" end rest_field = @fields_map[rest_field.name].join(rest_field) if @fields_map.key?(rest_field.name) @fields_map[rest_field.name] = rest_field self end |
#deep_dup ⇒ Object
98 99 100 |
# File 'lib/eluvia/fieldset/rest_fieldset.rb', line 98 def deep_dup self.class.new(*fields.map(&:deep_dup)) end |
#delete(key) ⇒ Object
86 87 88 |
# File 'lib/eluvia/fieldset/rest_fieldset.rb', line 86 def delete(key) @fields_map.delete(key.to_s) end |
#each(&block) ⇒ Object
136 137 138 |
# File 'lib/eluvia/fieldset/rest_fieldset.rb', line 136 def each(&block) fields.each(&block) end |
#empty? ⇒ Boolean
106 107 108 |
# File 'lib/eluvia/fieldset/rest_fieldset.rb', line 106 def empty? @fields_map.empty? end |
#fields ⇒ Object
48 49 50 |
# File 'lib/eluvia/fieldset/rest_fieldset.rb', line 48 def fields @fields_map.values end |
#flat ⇒ Object
132 133 134 |
# File 'lib/eluvia/fieldset/rest_fieldset.rb', line 132 def flat @fields_map.keys.to_set end |
#get(key) ⇒ Object Also known as: []
110 111 112 |
# File 'lib/eluvia/fieldset/rest_fieldset.rb', line 110 def get(key) @fields_map[key.to_s] end |
#has_any_key(*keys) ⇒ Object
144 145 146 |
# File 'lib/eluvia/fieldset/rest_fieldset.rb', line 144 def has_any_key(*keys) keys.any? { |key| include?(key) } end |
#include?(key) ⇒ Boolean
140 141 142 |
# File 'lib/eluvia/fieldset/rest_fieldset.rb', line 140 def include?(key) @fields_map.key?(key.to_s) end |
#intersection(rest_fieldset) ⇒ Object
64 65 66 67 68 69 70 71 72 73 |
# File 'lib/eluvia/fieldset/rest_fieldset.rb', line 64 def intersection(rest_fieldset) fieldset = deep_dup fields_map = fieldset.fields_map fieldset.fields_map = {} fields_map.each do |name, rf| fieldset.append(rf.intersection(rest_fieldset.fields_map[name])) if rest_fieldset.fields_map.key?(name) end fieldset end |
#join(rest_fieldset) ⇒ Object
52 53 54 55 56 57 58 59 60 61 62 |
# File 'lib/eluvia/fieldset/rest_fieldset.rb', line 52 def join(rest_fieldset) fieldset = deep_dup rest_fieldset.fields.each do |rf| fieldset.fields_map[rf.name] = if fieldset.fields_map.key?(rf.name) fieldset.fields_map[rf.name].join(rf) else rf.deep_dup end end fieldset end |
#left_intersection(rest_fieldset) ⇒ Object
75 76 77 78 79 80 81 82 83 84 |
# File 'lib/eluvia/fieldset/rest_fieldset.rb', line 75 def left_intersection(rest_fieldset) fieldset = deep_dup fields_map = fieldset.fields_map fieldset.fields_map = {} fields_map.each do |name, rf| fieldset.append(rf.left_intersection(rest_fieldset.fields_map[name])) if rest_fieldset.fields_map.key?(name) end fieldset end |
#to_s ⇒ Object
102 103 104 |
# File 'lib/eluvia/fieldset/rest_fieldset.rb', line 102 def to_s fields.join(',') end |
#|(other) ⇒ Object
90 91 92 |
# File 'lib/eluvia/fieldset/rest_fieldset.rb', line 90 def |(other) join(other) end |