Class: SupplejackApi::Fragment
- Inherits:
-
Object
- Object
- SupplejackApi::Fragment
show all
- Includes:
- Mongoid::Attributes::Dynamic, Mongoid::Document, Mongoid::Timestamps
- Defined in:
- app/models/supplejack_api/fragment.rb
Constant Summary
collapse
- MONGOID_TYPE_NAMES =
{
string: String,
integer: Integer,
datetime: DateTime,
boolean: Boolean
}.freeze
Class Method Summary
collapse
Instance Method Summary
collapse
Class Method Details
.build_mongoid_schema ⇒ Object
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
|
# File 'app/models/supplejack_api/fragment.rb', line 32
def self.build_mongoid_schema
schema_class.fields.each do |name, field|
next if field.store == false
type = field.multi_value.presence ? Array : MONGOID_TYPE_NAMES[field.type]
self.field name, type: type
end
if schema_class.mongo_indexes.present?
schema_class.mongo_indexes.each do |_name, index|
index_options = !!index.index_options ? index.index_options : {}
self.index index.fields.first, index_options
end
end
end
|
.schema_class ⇒ Object
28
29
30
|
# File 'app/models/supplejack_api/fragment.rb', line 28
def self.schema_class
raise NotImplementedError, 'All subclasses of SupplejackApi::Fragment must define a #schema_class method.'
end
|
Instance Method Details
#clear_attributes ⇒ Object
53
54
55
56
57
58
59
|
# File 'app/models/supplejack_api/fragment.rb', line 53
def clear_attributes
mutable_fields = self.class.mutable_fields.dup
mutable_fields.delete('priority') if primary?
raw_attributes.each do |name, _value|
self[name] = nil if mutable_fields.key?(name)
end
end
|
#primary? ⇒ Boolean
49
50
51
|
# File 'app/models/supplejack_api/fragment.rb', line 49
def primary?
priority.zero?
end
|
#update_from_harvest(attributes = {}) ⇒ Object
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
|
# File 'app/models/supplejack_api/fragment.rb', line 61
def update_from_harvest(attributes = {})
attributes = attributes.try(:symbolize_keys) || {}
self.source_id = Array(attributes[:source_id]).first if attributes[:source_id].present?
attributes.each do |field, value|
if self.class.mutable_fields[field.to_s] == Array
self[field] ||= []
values = *value
existing_values = *self[field]
values = existing_values += values
send("#{field}=", values.uniq)
elsif self.class.mutable_fields[field.to_s]
value = value.first if value.is_a?(Array)
send("#{field}=", value)
end
end
self.updated_at = Time.now
end
|