class FsApi::Service::BaseService

Attributes

api_client[R]
command_class[W]

Public Class Methods

new(api_client) click to toggle source
# File lib/fs_api/service/base_service.rb, line 7
def initialize(api_client)
  @api_client = api_client
end

Public Instance Methods

all(params = {}) click to toggle source
# File lib/fs_api/service/base_service.rb, line 77
def all(params = {})
  query_path = params.empty? ? path : "#{path}?#{URI.encode_www_form(params)}"

  if response = api_client.get(query_path)
    if response.code.to_i == success_status_code
      JSON.parse(response.body).map do |attributes|
        collection_class.new(attributes.merge(from_api: true))
      end
    end
  end
end
build(attributes) click to toggle source
# File lib/fs_api/service/base_service.rb, line 46
def build(attributes)
  instance = collection_class.new(attributes)
  instance
end
create(attributes) click to toggle source
# File lib/fs_api/service/base_service.rb, line 40
def create(attributes)
  instance = build(attributes)
  save(instance)
  instance
end
create_success_status_code() click to toggle source
# File lib/fs_api/service/base_service.rb, line 89
def create_success_status_code
  201
end
delete(instance) click to toggle source
# File lib/fs_api/service/base_service.rb, line 51
def delete(instance)
  @api_client.delete(instance_path(instance))
  if api_client._last_response.code.to_i != success_status_code
    instance.errors = api_client._last_response.body
    return false
  end
end
find(id) click to toggle source
# File lib/fs_api/service/base_service.rb, line 27
def find(id)
  if response = @api_client.get([path,id].join('/'))
    if response.code.to_i == success_status_code
      json_response = JSON.parse(response.body)
      # Weird case when nothing is found all clients are returned
      # #find should only return a single record
      return nil if json_response.is_a? Array
      # Return instance
      collection_class.new(json_response[resource_type].merge(from_api: true))
    end
  end
end
instance_path(instance) click to toggle source
# File lib/fs_api/service/base_service.rb, line 23
def instance_path(instance)
  [path, instance.path].join
end
path() click to toggle source
# File lib/fs_api/service/base_service.rb, line 19
def path
  "/#{resource_type_plural}"
end
resource_type() click to toggle source
# File lib/fs_api/service/base_service.rb, line 11
def resource_type
  self.class.name.split('::').last.downcase
end
resource_type_plural() click to toggle source
# File lib/fs_api/service/base_service.rb, line 15
def resource_type_plural
  "#{resource_type}s"
end
save(instance) click to toggle source
# File lib/fs_api/service/base_service.rb, line 59
def save(instance)
  return false if instance.persisted? && !instance.updateable?
  if instance.persisted?
    @api_client.put(instance_path(instance), instance.to_json)
    if api_client._last_response.code.to_i != success_status_code
      instance.errors = api_client._last_response
      return false
    end
  else
    @api_client.post(instance_path(instance), instance.to_json)
    if api_client._last_response.code.to_i != create_success_status_code
      instance.errors = api_client._last_response.body
      return false
    end
  end
  true
end
success_status_code() click to toggle source
# File lib/fs_api/service/base_service.rb, line 93
def success_status_code
  200
end