Module: Collector::Repository::ClassMethods
- Defined in:
- lib/collector/repository.rb
Instance Method Summary
collapse
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(method_sym, *arguments, &block) ⇒ Object
86
87
88
89
90
91
92
93
94
|
# File 'lib/collector/repository.rb', line 86
def method_missing(method_sym, *arguments, &block)
if method_sym.to_s =~ /^find_by_(.*)$/
find_by($1.to_sym => arguments.first)
elsif method_sym.to_s =~ /^find_first_by_(.*)$/
find_first_by($1.to_sym => arguments.first)
else
super
end
end
|
Instance Method Details
#all ⇒ Object
74
75
76
|
# File 'lib/collector/repository.rb', line 74
def all
find_by
end
|
#collection ⇒ Object
14
15
16
|
# File 'lib/collector/repository.rb', line 14
def collection
Collector.connection[collection_name]
end
|
#collection_name ⇒ Object
18
19
20
|
# File 'lib/collector/repository.rb', line 18
def collection_name
ActiveSupport::Inflector.tableize(model)
end
|
#delete(model) ⇒ Object
38
39
40
|
# File 'lib/collector/repository.rb', line 38
def delete(model)
collection.remove(_id: normalize_id(model.id))
end
|
#deserialize(attributes) ⇒ Object
59
60
61
|
# File 'lib/collector/repository.rb', line 59
def deserialize(attributes)
model.new(attributes)
end
|
#deserialize!(attributes) ⇒ Object
53
54
55
56
57
|
# File 'lib/collector/repository.rb', line 53
def deserialize!(attributes)
attributes = attributes.with_indifferent_access
attributes["id"] = attributes.delete("_id").to_s
deserialize(attributes)
end
|
#find_by(attributes = {}) ⇒ Object
63
64
65
66
67
68
|
# File 'lib/collector/repository.rb', line 63
def find_by(attributes = {})
attributes[:_id] = normalize_id(attributes[:_id]) if attributes[:_id]
collection.find(attributes).map do |document|
deserialize!(document)
end
end
|
#find_by_id(id) ⇒ Object
78
79
80
|
# File 'lib/collector/repository.rb', line 78
def find_by_id(id)
find_by(_id: id)
end
|
#find_first_by(attributes) ⇒ Object
70
71
72
|
# File 'lib/collector/repository.rb', line 70
def find_first_by(attributes)
find_by(attributes).first
end
|
#find_first_by_id(id) ⇒ Object
82
83
84
|
# File 'lib/collector/repository.rb', line 82
def find_first_by_id(id)
find_first_by(_id: id)
end
|
#model ⇒ Object
22
23
24
|
# File 'lib/collector/repository.rb', line 22
def model
name.to_s.gsub("Repository", "").constantize
end
|
#respond_to?(method_sym, include_private = false) ⇒ Boolean
96
97
98
99
100
101
102
103
104
|
# File 'lib/collector/repository.rb', line 96
def respond_to?(method_sym, include_private = false)
if method_sym.to_s =~ /^find_by_(.*)$/
true
elsif method_sym.to_s =~ /^find_first_by_(.*)$/
true
else
super
end
end
|
#save(model) ⇒ Object
26
27
28
29
|
# File 'lib/collector/repository.rb', line 26
def save(model)
model.touch
save_without_updating_timestamps(model)
end
|
#save_without_updating_timestamps(model) ⇒ Object
31
32
33
34
35
36
|
# File 'lib/collector/repository.rb', line 31
def save_without_updating_timestamps(model)
attributes = serialize!(model)
id = collection.save(attributes)
model.instance_variable_set("@id", id.to_s)
model
end
|
#serialize(model) ⇒ Object
49
50
51
|
# File 'lib/collector/repository.rb', line 49
def serialize(model)
model.attributes.with_indifferent_access
end
|
#serialize!(model) ⇒ Object
42
43
44
45
46
47
|
# File 'lib/collector/repository.rb', line 42
def serialize!(model)
attributes = serialize(model)
attributes["_id"] = normalize_id(attributes.delete("id")) if attributes["id"]
attributes.reject! { |key, val| val.nil? }
attributes
end
|