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

#allObject



74
75
76
# File 'lib/collector/repository.rb', line 74

def all
  find_by
end

#collectionObject



14
15
16
# File 'lib/collector/repository.rb', line 14

def collection
   Collector.connection[collection_name]
end

#collection_nameObject



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

#modelObject



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

Returns:

  • (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