Module: Curator::Repository::ClassMethods
- Defined in:
- lib/curator/repository.rb
Instance Method Summary collapse
- #_build_finder_methods(field_name) ⇒ Object
- #_deserialize(id, data) ⇒ Object
- #_find_by_index(collection_name, field_name, value) ⇒ Object
- #_format_time_for_index(time) ⇒ Object
- #_indexed_fields ⇒ Object
- #_indexes(object) ⇒ Object
- #_serialize(object) ⇒ Object
- #_update_timestamps(object) ⇒ Object
- #collection_name ⇒ Object
- #data_store ⇒ Object
- #data_store=(store) ⇒ 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(field_name) ⇒ Object
85 86 87 88 89 90 91 92 93 94 95 |
# File 'lib/curator/repository.rb', line 85 def _build_finder_methods(field_name) eigenclass = class << self; self; end eigenclass.class_eval do define_method("find_by_#{field_name}") do |value| _find_by_index(collection_name, field_name, value) end define_method("find_first_by_#{field_name}") do |value| _find_by_index(collection_name, field_name, value).first end end end |
#_deserialize(id, data) ⇒ Object
109 110 111 112 113 114 115 116 |
# File 'lib/curator/repository.rb', line 109 def _deserialize(id, data) attributes = data.with_indifferent_access migrated_attributes = migrator.migrate(attributes) migrated_attributes[:id] = id migrated_attributes[:created_at] = Time.parse(migrated_attributes[:created_at]) if migrated_attributes[:created_at] migrated_attributes[:updated_at] = Time.parse(migrated_attributes[:updated_at]) if migrated_attributes[:updated_at] deserialize(migrated_attributes) end |
#_find_by_index(collection_name, field_name, value) ⇒ Object
97 98 99 100 101 102 103 |
# File 'lib/curator/repository.rb', line 97 def _find_by_index(collection_name, field_name, value) if results = data_store.find_by_index(collection_name, field_name, value) results.map do |hash| _deserialize(hash[:key], hash[:data]) end end end |
#_format_time_for_index(time) ⇒ Object
118 119 120 |
# File 'lib/curator/repository.rb', line 118 def _format_time_for_index(time) time.to_json.gsub('"', '') end |
#_indexed_fields ⇒ Object
122 123 124 |
# File 'lib/curator/repository.rb', line 122 def _indexed_fields @indexed_fields || [] end |
#_indexes(object) ⇒ Object
126 127 128 129 130 131 132 133 134 |
# File 'lib/curator/repository.rb', line 126 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
136 137 138 |
# File 'lib/curator/repository.rb', line 136 def _serialize(object) serialize(object).reject { |key, val| val.nil? }.merge(:version => object.version) end |
#_update_timestamps(object) ⇒ Object
140 141 142 143 |
# File 'lib/curator/repository.rb', line 140 def (object) object.updated_at = Time.now.utc object.created_at ||= object.updated_at end |
#collection_name ⇒ Object
11 12 13 |
# File 'lib/curator/repository.rb', line 11 def collection_name ActiveSupport::Inflector.tableize(klass) end |
#data_store ⇒ Object
15 16 17 |
# File 'lib/curator/repository.rb', line 15 def data_store @data_store ||= Curator.data_store end |
#data_store=(store) ⇒ Object
19 20 21 |
# File 'lib/curator/repository.rb', line 19 def data_store=(store) @data_store = store end |
#delete(object) ⇒ Object
23 24 25 |
# File 'lib/curator/repository.rb', line 23 def delete(object) data_store.delete(collection_name, object.id) end |
#deserialize(attributes) ⇒ Object
105 106 107 |
# File 'lib/curator/repository.rb', line 105 def deserialize(attributes) klass.new(attributes) end |
#find_by_created_at(start_time, end_time) ⇒ Object
27 28 29 |
# File 'lib/curator/repository.rb', line 27 def find_by_created_at(start_time, end_time) _find_by_index(collection_name, :created_at, _format_time_for_index(start_time).._format_time_for_index(end_time)) end |
#find_by_id(id) ⇒ Object
39 40 41 42 43 |
# File 'lib/curator/repository.rb', line 39 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
31 32 33 |
# File 'lib/curator/repository.rb', line 31 def find_by_updated_at(start_time, end_time) _find_by_index(collection_name, :updated_at, _format_time_for_index(start_time).._format_time_for_index(end_time)) end |
#find_by_version(version) ⇒ Object
35 36 37 |
# File 'lib/curator/repository.rb', line 35 def find_by_version(version) _find_by_index(collection_name, :version, version) end |
#indexed_fields(*fields) ⇒ Object
45 46 47 48 49 50 51 |
# File 'lib/curator/repository.rb', line 45 def indexed_fields(*fields) @indexed_fields = fields @indexed_fields.each do |field_name| _build_finder_methods(field_name) end end |
#klass ⇒ Object
53 54 55 |
# File 'lib/curator/repository.rb', line 53 def klass name.to_s.gsub("Repository", "").constantize end |
#migrator ⇒ Object
57 58 59 |
# File 'lib/curator/repository.rb', line 57 def migrator @migrator ||= Curator::Migrator.new(collection_name) end |
#save(object) ⇒ Object
61 62 63 64 |
# File 'lib/curator/repository.rb', line 61 def save(object) object.touch (object) end |
#save_without_timestamps(object) ⇒ Object
66 67 68 69 70 71 72 73 74 75 76 77 78 79 |
# File 'lib/curator/repository.rb', line 66 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).key) end end |
#serialize(object) ⇒ Object
81 82 83 |
# File 'lib/curator/repository.rb', line 81 def serialize(object) object.instance_values end |