module Curator::Repository::ClassMethods
Public Instance Methods
_build_finder_methods(attribute)
click to toggle source
# File lib/curator/repository.rb, line 120 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)
click to toggle source
# File lib/curator/repository.rb, line 144 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)
click to toggle source
# File lib/curator/repository.rb, line 132 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]) if hash end.compact end end
_format_time_for_index(time)
click to toggle source
# File lib/curator/repository.rb, line 151 def _format_time_for_index(time) time.to_json.gsub('"', '') end
_indexed_fields()
click to toggle source
# File lib/curator/repository.rb, line 155 def _indexed_fields @indexed_fields || [] end
_indexes(object)
click to toggle source
# File lib/curator/repository.rb, line 159 def _indexes(object) index_values = _indexed_fields.map { |field| [field, serialize(object)[field.to_sym]] } 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)
click to toggle source
# File lib/curator/repository.rb, line 169 def _serialize(object) serialize(object).reject { |key, val| val.nil? }.merge(:version => object.version) end
_update_timestamps(object)
click to toggle source
# File lib/curator/repository.rb, line 173 def _update_timestamps(object) object.updated_at = Time.now.utc object.created_at ||= object.updated_at end
all()
click to toggle source
# File lib/curator/repository.rb, line 20 def all data_store.find_all(collection_name).map do |result| _deserialize(result[:key], result[:data]) end end
apply_settings!()
click to toggle source
# File lib/curator/repository.rb, line 115 def apply_settings! settings.apply!(:data_store => data_store, :collection_name => collection_name) end
collection(explicit_collection_name)
click to toggle source
# File lib/curator/repository.rb, line 26 def collection(explicit_collection_name) @collection_name = explicit_collection_name end
collection_name()
click to toggle source
# File lib/curator/repository.rb, line 30 def collection_name @collection_name ||= default_collection_name end
data_store()
click to toggle source
# File lib/curator/repository.rb, line 38 def data_store @data_store ||= Curator.data_store end
data_store=(store)
click to toggle source
# File lib/curator/repository.rb, line 42 def data_store=(store) @data_store = store end
default_collection_name()
click to toggle source
# File lib/curator/repository.rb, line 34 def default_collection_name ActiveSupport::Inflector.tableize(klass.name) end
delete(object)
click to toggle source
# File lib/curator/repository.rb, line 46 def delete(object) data_store.delete(collection_name, object.id) nil end
deserialize(attributes)
click to toggle source
# File lib/curator/repository.rb, line 140 def deserialize(attributes) klass.new(attributes) end
find_by_created_at(start_time, end_time)
click to toggle source
# File lib/curator/repository.rb, line 51 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)
click to toggle source
# File lib/curator/repository.rb, line 63 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)
click to toggle source
# File lib/curator/repository.rb, line 55 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)
click to toggle source
# File lib/curator/repository.rb, line 59 def find_by_version(version) _find_by_attribute(:version, version) end
indexed_fields(*fields)
click to toggle source
# File lib/curator/repository.rb, line 69 def indexed_fields(*fields) @indexed_fields = fields @indexed_fields.each do |field_name| _build_finder_methods(field_name) end end
klass()
click to toggle source
# File lib/curator/repository.rb, line 77 def klass name.to_s.gsub("Repository", "").constantize end
migrator()
click to toggle source
# File lib/curator/repository.rb, line 81 def migrator @migrator ||= Curator::Migrator.new(collection_name) end
save(object)
click to toggle source
# File lib/curator/repository.rb, line 85 def save(object) object.touch save_without_timestamps(object) end
save_without_timestamps(object)
click to toggle source
# File lib/curator/repository.rb, line 90 def save_without_timestamps(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)
click to toggle source
# File lib/curator/repository.rb, line 107 def serialize(object) HashWithIndifferentAccess.new(object.instance_values) end
settings()
click to toggle source
# File lib/curator/repository.rb, line 111 def settings @settings ||= Settings.new(data_store.settings(collection_name)) end