module Pina::Resource

Public Instance Methods

paginate(options = {}) click to toggle source
# File lib/pina/resource.rb, line 3
def paginate(options = {})
  @per_page = options.fetch(:per_page)
end
per_page() click to toggle source
# File lib/pina/resource.rb, line 18
def per_page
  @per_page || ::Pina.configuration.default_per_page
end
resource_methods(*methods) click to toggle source
# File lib/pina/resource.rb, line 7
def resource_methods(*methods)
  methods.each do |method|
    next unless method

    method_name = "define_#{method}".to_sym
    next unless respond_to?(method_name, true)

    send(method_name)
  end
end

Private Instance Methods

attributes(response) click to toggle source
# File lib/pina/resource.rb, line 100
def attributes(response)
  response.to_hash.merge(response: response)
end
collection() click to toggle source
# File lib/pina/resource.rb, line 92
def collection
  Object.const_get("Pina::Collections::#{resource_name}")
end
define_all() click to toggle source
# File lib/pina/resource.rb, line 32
def define_all
  define_singleton_method(:all) do |params = {}|
    params[:per_page] = per_page if per_page

    response = Pina::RestAdapter.get(resource_path, params)

    return collection.new(attributes(response)) if response.ok?

    response
  end
end
define_create() click to toggle source
# File lib/pina/resource.rb, line 54
def define_create
  define_singleton_method(:create) do |entity|
    response = Pina::RestAdapter.post(resource_path, entity)

    return model.new(attributes(response)) if response.ok?

    response
  end
end
define_delete() click to toggle source
# File lib/pina/resource.rb, line 74
def define_delete
  define_singleton_method(:delete) do |id|
    response = Pina::RestAdapter.delete(resource_path, id)

    return model.new(attributes(response)) if response.ok?

    response
  end
end
define_find() click to toggle source
# File lib/pina/resource.rb, line 44
def define_find
  define_singleton_method(:find) do |id|
    response = Pina::RestAdapter.get(resource_path, id)

    return model.new(attributes(response)) if response.ok?

    response
  end
end
define_update() click to toggle source
# File lib/pina/resource.rb, line 64
def define_update
  define_singleton_method(:update) do |id, entity|
    response = Pina::RestAdapter.patch(resource_path, id, entity)

    return model.new(attributes(response)) if response.ok?

    response
  end
end
define_where() click to toggle source
# File lib/pina/resource.rb, line 24
def define_where
  define_all unless respond_to?(:all)

  singleton_class.class_eval do
    alias_method :where, :all
  end
end
model() click to toggle source
# File lib/pina/resource.rb, line 96
def model
  Object.const_get("Pina::Models::#{resource_name}")
end
resource_name() click to toggle source
# File lib/pina/resource.rb, line 84
def resource_name
  name.demodulize
end
resource_path() click to toggle source
# File lib/pina/resource.rb, line 88
def resource_path
  resource_name.underscore.pluralize
end