Class: FsApi::Service::BaseService

Inherits:
Object
  • Object
show all
Defined in:
lib/fs_api/service/base_service.rb

Direct Known Subclasses

Client, Invoice, InvoicesPayment, InvoicesSaved, Product

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(api_client) ⇒ BaseService

Returns a new instance of BaseService.



7
8
9
# File 'lib/fs_api/service/base_service.rb', line 7

def initialize(api_client)
  @api_client = api_client
end

Instance Attribute Details

#api_clientObject (readonly)

Returns the value of attribute api_client.



5
6
7
# File 'lib/fs_api/service/base_service.rb', line 5

def api_client
  @api_client
end

#command_class=(value) ⇒ Object (writeonly)

Sets the attribute command_class

Parameters:

  • value

    the value to set the attribute command_class to.



4
5
6
# File 'lib/fs_api/service/base_service.rb', line 4

def command_class=(value)
  @command_class = value
end

Instance Method Details

#all(params = {}) ⇒ Object



77
78
79
80
81
82
83
84
85
86
87
# 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) ⇒ Object



46
47
48
49
# File 'lib/fs_api/service/base_service.rb', line 46

def build(attributes)
  instance = collection_class.new(attributes)
  instance
end

#create(attributes) ⇒ Object



40
41
42
43
44
# File 'lib/fs_api/service/base_service.rb', line 40

def create(attributes)
  instance = build(attributes)
  save(instance)
  instance
end

#create_success_status_codeObject



89
90
91
# File 'lib/fs_api/service/base_service.rb', line 89

def create_success_status_code
  201
end

#delete(instance) ⇒ Object



51
52
53
54
55
56
57
# 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) ⇒ Object



27
28
29
30
31
32
33
34
35
36
37
38
# 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) ⇒ Object



23
24
25
# File 'lib/fs_api/service/base_service.rb', line 23

def instance_path(instance)
  [path, instance.path].join
end

#pathObject



19
20
21
# File 'lib/fs_api/service/base_service.rb', line 19

def path
  "/#{resource_type_plural}"
end

#resource_typeObject



11
12
13
# File 'lib/fs_api/service/base_service.rb', line 11

def resource_type
  self.class.name.split('::').last.downcase
end

#resource_type_pluralObject



15
16
17
# File 'lib/fs_api/service/base_service.rb', line 15

def resource_type_plural
  "#{resource_type}s"
end

#save(instance) ⇒ Object



59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
# 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_codeObject



93
94
95
# File 'lib/fs_api/service/base_service.rb', line 93

def success_status_code
  200
end