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