module Firecord::Model
Public Class Methods
extended(model)
click to toggle source
# File lib/firecord/model.rb, line 3 def self.extended(model) model.instance_variable_set(:@fields, []) model.fields << OpenStruct.new(name: :id, type: :private_key) end
Public Instance Methods
all()
click to toggle source
# File lib/firecord/model.rb, line 20 def all repository .all .reject { |response| response.keys.include?(:error) } .map { |response| new(response).persist } end
field(name, type = nil)
click to toggle source
# File lib/firecord/model.rb, line 8 def field(name, type = nil) return timestamps if name == :timestamps @fields << OpenStruct.new(name: name, type: type) end
fields()
click to toggle source
# File lib/firecord/model.rb, line 46 def fields @fields end
find(id)
click to toggle source
# File lib/firecord/model.rb, line 27 def find(id) response = repository.get(id) response.nil? ? nil : new(response).persist end
repository()
click to toggle source
# File lib/firecord/model.rb, line 54 def repository @repository ||= Repository::Firebase.new(root) end
root()
click to toggle source
# File lib/firecord/model.rb, line 50 def root @root || name.downcase end
root_key(root_name)
click to toggle source
# File lib/firecord/model.rb, line 42 def root_key(root_name) @root = root_name end
timestamps()
click to toggle source
# File lib/firecord/model.rb, line 14 def timestamps %i(created_at updated_at).each do |stamp| @fields << OpenStruct.new(name: stamp, type: :datetime) end end
validate_query!(query)
click to toggle source
# File lib/firecord/model.rb, line 58 def validate_query!(query) result = query.keys - fields.map(&:name) raise InvalidQuery, 'Your query contains invalid key(s)' \ unless result.empty? end
where(query)
click to toggle source
# File lib/firecord/model.rb, line 32 def where(query) validate_query!(query) all.select do |record| result = query.map { |name, value| record.send(name) == value }.uniq result.size == 1 && result[0] == true ? true : false end end