Module: Curator::Repository::ClassMethods
- Defined in:
- lib/curator/repository.rb
Instance Method Summary collapse
- #_build_finder_methods(attribute) ⇒ Object
- #_deserialize(id, data) ⇒ Object
- #_find_by_attribute(attribute, value) ⇒ Object
- #_format_time_for_index(time) ⇒ Object
- #_indexed_fields ⇒ Object
- #_indexes(object) ⇒ Object
- #_serialize(object) ⇒ Object
- #_update_timestamps(object) ⇒ Object
- #collection(explicit_collection_name) ⇒ Object
- #collection_name ⇒ Object
- #data_store ⇒ Object
- #data_store=(store) ⇒ Object
- #default_collection_name ⇒ Object
- #delete(object) ⇒ Object
- #deserialize(attributes) ⇒ Object
- #find_by_created_at(start_time, end_time) ⇒ Object
- #find_by_id(id) ⇒ Object
- #find_by_updated_at(start_time, end_time) ⇒ Object
- #find_by_version(version) ⇒ Object
- #indexed_fields(*fields) ⇒ Object
- #klass ⇒ Object
- #migrator ⇒ Object
- #save(object) ⇒ Object
- #save_without_timestamps(object) ⇒ Object
- #serialize(object) ⇒ Object
Instance Method Details
#_build_finder_methods(attribute) ⇒ Object
96 97 98 99 100 101 102 103 104 105 106 |
# File 'lib/curator/repository.rb', line 96 def _build_finder_methods(attribute) eigenclass = class << self; self; end eigenclass.class_eval do define_method("find_by_#{attribute}") do |value| _find_by_attribute(attribute, value) end define_method("find_first_by_#{attribute}") do |value| _find_by_attribute(attribute, value).first end end end |
#_deserialize(id, data) ⇒ Object
120 121 122 123 124 125 |
# File 'lib/curator/repository.rb', line 120 def _deserialize(id, data) attributes = data.with_indifferent_access migrated_attributes = migrator.migrate(attributes) migrated_attributes[:id] = id deserialize(migrated_attributes) end |
#_find_by_attribute(attribute, value) ⇒ Object
108 109 110 111 112 113 114 |
# File 'lib/curator/repository.rb', line 108 def _find_by_attribute(attribute, value) if results = data_store.find_by_attribute(collection_name, attribute, value) results.map do |hash| _deserialize(hash[:key], hash[:data]) end end end |
#_format_time_for_index(time) ⇒ Object
127 128 129 |
# File 'lib/curator/repository.rb', line 127 def _format_time_for_index(time) time.to_json.gsub('"', '') end |
#_indexed_fields ⇒ Object
131 132 133 |
# File 'lib/curator/repository.rb', line 131 def _indexed_fields @indexed_fields || [] end |
#_indexes(object) ⇒ Object
135 136 137 138 139 140 141 142 143 |
# File 'lib/curator/repository.rb', line 135 def _indexes(object) index_values = _indexed_fields.map { |field| [field, object.send(field)] } index_values += [ [:created_at, _format_time_for_index(object.send(:created_at))], [:updated_at, _format_time_for_index(object.send(:updated_at))], [:version, object.version] ] Hash[index_values] end |
#_serialize(object) ⇒ Object
145 146 147 |
# File 'lib/curator/repository.rb', line 145 def _serialize(object) serialize(object).reject { |key, val| val.nil? }.merge(:version => object.version) end |
#_update_timestamps(object) ⇒ Object
149 150 151 152 |
# File 'lib/curator/repository.rb', line 149 def (object) object.updated_at = Time.now.utc object.created_at ||= object.updated_at end |
#collection(explicit_collection_name) ⇒ Object
11 12 13 |
# File 'lib/curator/repository.rb', line 11 def collection(explicit_collection_name) @collection_name = explicit_collection_name end |
#collection_name ⇒ Object
15 16 17 |
# File 'lib/curator/repository.rb', line 15 def collection_name @collection_name ||= default_collection_name end |
#data_store ⇒ Object
23 24 25 |
# File 'lib/curator/repository.rb', line 23 def data_store @data_store ||= Curator.data_store end |
#data_store=(store) ⇒ Object
27 28 29 |
# File 'lib/curator/repository.rb', line 27 def data_store=(store) @data_store = store end |
#default_collection_name ⇒ Object
19 20 21 |
# File 'lib/curator/repository.rb', line 19 def default_collection_name ActiveSupport::Inflector.tableize(klass) end |
#delete(object) ⇒ Object
31 32 33 34 |
# File 'lib/curator/repository.rb', line 31 def delete(object) data_store.delete(collection_name, object.id) nil end |
#deserialize(attributes) ⇒ Object
116 117 118 |
# File 'lib/curator/repository.rb', line 116 def deserialize(attributes) klass.new(attributes) end |
#find_by_created_at(start_time, end_time) ⇒ Object
36 37 38 |
# File 'lib/curator/repository.rb', line 36 def find_by_created_at(start_time, end_time) _find_by_attribute(:created_at, _format_time_for_index(start_time).._format_time_for_index(end_time)) end |
#find_by_id(id) ⇒ Object
48 49 50 51 52 |
# File 'lib/curator/repository.rb', line 48 def find_by_id(id) if hash = data_store.find_by_key(collection_name, id) _deserialize(hash[:key], hash[:data]) end end |
#find_by_updated_at(start_time, end_time) ⇒ Object
40 41 42 |
# File 'lib/curator/repository.rb', line 40 def find_by_updated_at(start_time, end_time) _find_by_attribute(:updated_at, _format_time_for_index(start_time).._format_time_for_index(end_time)) end |
#find_by_version(version) ⇒ Object
44 45 46 |
# File 'lib/curator/repository.rb', line 44 def find_by_version(version) _find_by_attribute(:version, version) end |
#indexed_fields(*fields) ⇒ Object
54 55 56 57 58 59 60 |
# File 'lib/curator/repository.rb', line 54 def indexed_fields(*fields) @indexed_fields = fields @indexed_fields.each do |field_name| _build_finder_methods(field_name) end end |
#klass ⇒ Object
62 63 64 |
# File 'lib/curator/repository.rb', line 62 def klass name.to_s.gsub("Repository", "").constantize end |
#migrator ⇒ Object
66 67 68 |
# File 'lib/curator/repository.rb', line 66 def migrator @migrator ||= Curator::Migrator.new(collection_name) end |
#save(object) ⇒ Object
70 71 72 73 |
# File 'lib/curator/repository.rb', line 70 def save(object) object.touch (object) end |
#save_without_timestamps(object) ⇒ Object
75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 |
# File 'lib/curator/repository.rb', line 75 def (object) hash = { :collection_name => collection_name, :value => _serialize(object), :index => _indexes(object) } if object.id hash[:key] = object.id data_store.save(hash) else object.instance_variable_set("@id", data_store.save(hash)) end object end |
#serialize(object) ⇒ Object
92 93 94 |
# File 'lib/curator/repository.rb', line 92 def serialize(object) object.instance_values end |