Class: Chewy::Fields::Root
Instance Attribute Summary collapse
-
#dynamic_templates ⇒ Object
readonly
Returns the value of attribute dynamic_templates.
-
#id ⇒ Object
readonly
Returns the value of attribute id.
-
#parent ⇒ Object
readonly
Returns the value of attribute parent.
-
#parent_id ⇒ Object
readonly
Returns the value of attribute parent_id.
Attributes inherited from Base
#children, #name, #options, #value
Instance Method Summary collapse
-
#child_hash ⇒ Hash{Symbol => Chewy::Fields::Base}
Children indexed by name as a hash.
-
#compose(object, crutches = nil, fields: []) ⇒ Hash
Converts passed object to JSON-ready hash.
- #compose_id(object) ⇒ Object
- #compose_parent(object) ⇒ Object
- #dynamic_template(*args) ⇒ Object
-
#initialize(*args) ⇒ Root
constructor
A new instance of Root.
- #mappings_hash ⇒ Object
Methods inherited from Base
Constructor Details
#initialize(*args) ⇒ Root
Returns a new instance of Root.
9 10 11 12 13 14 15 16 17 |
# File 'lib/chewy/fields/root.rb', line 9 def initialize(*args) super(*args) @id = .delete(:id) || .delete(:_id) @parent = .delete(:parent) || .delete(:_parent) @parent_id = .delete(:parent_id) @dynamic_templates = [] .delete(:type) end |
Instance Attribute Details
#dynamic_templates ⇒ Object (readonly)
Returns the value of attribute dynamic_templates.
4 5 6 |
# File 'lib/chewy/fields/root.rb', line 4 def dynamic_templates @dynamic_templates end |
#id ⇒ Object (readonly)
Returns the value of attribute id.
5 6 7 |
# File 'lib/chewy/fields/root.rb', line 5 def id @id end |
#parent ⇒ Object (readonly)
Returns the value of attribute parent.
6 7 8 |
# File 'lib/chewy/fields/root.rb', line 6 def parent @parent end |
#parent_id ⇒ Object (readonly)
Returns the value of attribute parent_id.
7 8 9 |
# File 'lib/chewy/fields/root.rb', line 7 def parent_id @parent_id end |
Instance Method Details
#child_hash ⇒ Hash{Symbol => Chewy::Fields::Base}
Children indexed by name as a hash.
90 91 92 |
# File 'lib/chewy/fields/root.rb', line 90 def child_hash @child_hash ||= children.index_by(&:name) end |
#compose(object, crutches = nil, fields: []) ⇒ Hash
Converts passed object to JSON-ready hash. Used for objects import.
69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 |
# File 'lib/chewy/fields/root.rb', line 69 def compose(object, crutches = nil, fields: []) if children.present? child_fields = if fields.present? child_hash.slice(*fields).values else children end child_fields.each_with_object({}) do |field, result| result.merge!(field.compose(object, crutches) || {}) end.as_json elsif fields.present? object.as_json(only: fields) else object.as_json end end |
#compose_id(object) ⇒ Object
58 59 60 61 |
# File 'lib/chewy/fields/root.rb', line 58 def compose_id(object) return unless id id.arity.zero? ? object.instance_exec(&id) : id.call(object) end |
#compose_parent(object) ⇒ Object
53 54 55 56 |
# File 'lib/chewy/fields/root.rb', line 53 def compose_parent(object) return unless parent_id parent_id.arity.zero? ? object.instance_exec(&parent_id) : parent_id.call(object) end |
#dynamic_template(*args) ⇒ Object
32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
# File 'lib/chewy/fields/root.rb', line 32 def dynamic_template(*args) = args..deep_symbolize_keys if args.first template_name = :"template_#{dynamic_templates.count.next}" template = {template_name => {mapping: }} template[template_name][:match_mapping_type] = args.second.to_s if args.second.present? regexp = args.first.is_a?(Regexp) template[template_name][:match_pattern] = 'regexp' if regexp match = regexp ? args.first.source : args.first path = match.include?(regexp ? '\.' : '.') template[template_name][path ? :path_match : :match] = match @dynamic_templates.push(template) else @dynamic_templates.push() end end |
#mappings_hash ⇒ Object
19 20 21 22 23 24 25 26 27 28 29 30 |
# File 'lib/chewy/fields/root.rb', line 19 def mappings_hash mappings = super mappings[name].delete(:type) if dynamic_templates.present? mappings[name][:dynamic_templates] ||= [] mappings[name][:dynamic_templates].concat dynamic_templates end mappings[name][:_parent] = parent.is_a?(Hash) ? parent : {type: parent} if parent mappings end |