class HotsApi::Repositories::Repository

Public Class Methods

new(where_values: {}) click to toggle source
# File lib/hots_api/repositories/repository.rb, line 8
def initialize(where_values: {})
  @where_values = where_values
end

Public Instance Methods

each(&block) click to toggle source
# File lib/hots_api/repositories/repository.rb, line 36
def each(&block)
  fetch { @records.each(&block) }
end
find(id) click to toggle source
# File lib/hots_api/repositories/repository.rb, line 12
def find(id)
  response = HotsApi.get("#{collection_path}/#{id}")

  if response.status.ok?
    instantiate_record_with(response.parse)
  end
end
find_each(&block) click to toggle source
# File lib/hots_api/repositories/repository.rb, line 40
def find_each(&block)
  find_each_enum.each(&block)
end
last(n = nil) click to toggle source
# File lib/hots_api/repositories/repository.rb, line 44
def last(n = nil)
  fetch { n ? @records.last(n) : @records.last }
end
length() click to toggle source
# File lib/hots_api/repositories/repository.rb, line 52
def length
  fetch { @records.length }
end
next_page() click to toggle source
# File lib/hots_api/repositories/repository.rb, line 32
def next_page
  fetch { where(min_id: @records.last.id + 1) if @records.any? }
end
size() click to toggle source
# File lib/hots_api/repositories/repository.rb, line 48
def size
  fetch { @records.size }
end
where(conditions = {}) click to toggle source
# File lib/hots_api/repositories/repository.rb, line 20
def where(conditions = {})
  copy do
    conditions.each do |attribute, value|
      if respond_to?("#{attribute}=", true)
        send("#{attribute}=", value)
      else
        raise "Unknown attribute: #{attribute}"
      end
    end
  end
end

Private Instance Methods

collection_path() click to toggle source
# File lib/hots_api/repositories/repository.rb, line 100
def collection_path
  raise NotImplementedError
end
copy(&block) click to toggle source
# File lib/hots_api/repositories/repository.rb, line 58
def copy(&block)
  self.class.new(where_values: @where_values.clone, &block).tap do |repository|
    repository.instance_exec(&block)
  end
end
fetch() { || ... } click to toggle source
# File lib/hots_api/repositories/repository.rb, line 68
def fetch
  unless @fetched
    response = HotsApi.get(collection_path, params: @where_values)
    @records = instantiate_records(response.parse)

    @fetched = true
  end

  yield
end
fetched?() click to toggle source
# File lib/hots_api/repositories/repository.rb, line 64
def fetched?
  @fetched
end
find_each_enum() click to toggle source
# File lib/hots_api/repositories/repository.rb, line 79
def find_each_enum
  Enumerator.new do |yielder|
    page = self

    while page && page.any?
      page.each { |model| yielder << model }
      page = page.next_page
    end
  end
end
instantiate_record_with(attributes) click to toggle source
# File lib/hots_api/repositories/repository.rb, line 96
def instantiate_record_with(attributes)
  raise NotImplementedError
end
instantiate_records(json) click to toggle source
# File lib/hots_api/repositories/repository.rb, line 90
def instantiate_records(json)
  json.map do |attributes|
    instantiate_record_with(attributes)
  end
end