Module: SupplejackApi::Support::Harvestable
- Extended by:
- ActiveSupport::Concern
- Included in:
- PreviewRecord, Record
- Defined in:
- app/models/supplejack_api/support/harvestable.rb
Defined Under Namespace
Modules: ClassMethods
Instance Method Summary collapse
-
#clear_attributes ⇒ Object
Sets all the Record attributes to nil except the internal ones that shouldn’t be removed (_id, _type, etc..).
- #create_or_update_fragment(attributes) ⇒ Object
- #set_status(required_fragments) ⇒ Object
- #unset_null_fields ⇒ Object
- #update_from_harvest(attributes = {}) ⇒ Object
- #update_from_harvest!(attributes = {}) ⇒ Object
Instance Method Details
#clear_attributes ⇒ Object
Sets all the Record attributes to nil except the internal ones that shouldn’t be removed (_id, _type, etc..)
55 56 57 58 |
# File 'app/models/supplejack_api/support/harvestable.rb', line 55 def clear_attributes self[:source_url] = nil primary_fragment.clear_attributes end |
#create_or_update_fragment(attributes) ⇒ Object
14 15 16 17 18 19 20 21 22 23 24 |
# File 'app/models/supplejack_api/support/harvestable.rb', line 14 def create_or_update_fragment(attributes) if fragment = find_fragment(attributes['source_id']) fragment.clear_attributes elsif fragments.count.zero? fragment = primary_fragment else fragment = fragments.build end fragment.update_from_harvest(attributes) end |
#set_status(required_fragments) ⇒ Object
47 48 49 50 |
# File 'app/models/supplejack_api/support/harvestable.rb', line 47 def set_status(required_fragments) missing_fragments = Array(required_fragments) - fragments.map(&:source_id) self.status = missing_fragments.empty? ? 'active' : 'partial' end |
#unset_null_fields ⇒ Object
60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 |
# File 'app/models/supplejack_api/support/harvestable.rb', line 60 def unset_null_fields raw_json = raw_attributes || {} unset_hash = {} raw_json.each do |key, value| unset_hash.merge!(key => true) if value.nil? end if raw_json['fragments'].present? raw_json['fragments'].each_with_index do |fragment, index| next if fragment.nil? fragment.each do |key, value| unset_hash.merge!("fragments.#{index}.#{key}" => true) if value.nil? end end end collection.find(atomic_selector).update('$unset' => unset_hash) if unset_hash.any? end |
#update_from_harvest(attributes = {}) ⇒ Object
26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
# File 'app/models/supplejack_api/support/harvestable.rb', line 26 def update_from_harvest(attributes = {}) attributes = attributes.try(:symbolize_keys) || {} attributes[:status] ||= 'active' self.class.fields.each do |name, _field| if attributes.key?(name.to_sym) value = Array(attributes[name.to_sym]).first send("#{name}=", value) end end primary_fragment.update_from_harvest(attributes) self.updated_at = Time.now end |
#update_from_harvest!(attributes = {}) ⇒ Object
42 43 44 45 |
# File 'app/models/supplejack_api/support/harvestable.rb', line 42 def update_from_harvest!(attributes = {}) update_from_harvest(attributes) save end |