Class: Economic::BaseRepo

Inherits:
Object
  • Object
show all
Defined in:
lib/economic/base_repo.rb

Constant Summary collapse

URL =
"https://restapi.e-conomic.com/".freeze

Class Attribute Summary collapse

Class Method Summary collapse

Class Attribute Details

.endpointObject

Returns the value of attribute endpoint.



10
11
12
# File 'lib/economic/base_repo.rb', line 10

def endpoint
  @endpoint
end

Class Method Details

.all(filter_text: "", url: endpoint_url) ⇒ Object



28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
# File 'lib/economic/base_repo.rb', line 28

def all(filter_text: "", url: endpoint_url)
  pagination = {}
  pageindex = 0
  entries = []

  # Loop until last page, last page does not have a 'nextPage'
  while pagination["nextPage"] || pageindex.zero?
    response = fetch(url: url, pageindex: pageindex, filter_text: filter_text)

    hash = JSON.parse(response.body)
    hash["collection"].each do |entry_hash|
      entries.push model.new(entry_hash)
    end

    pagination = hash["pagination"]
    pageindex += 1
  end
  entries
end

.destroy(id, url: endpoint_url) ⇒ Object



68
69
70
71
72
73
74
# File 'lib/economic/base_repo.rb', line 68

def destroy(id, url: endpoint_url)
  url += "/" + id_to_url_formatted_id(id)
  response = send_request(method: :delete, url: url)

  success_codes = [200, 204]
  return true if success_codes.include?(response.code)
end

.endpoint_urlObject



64
65
66
# File 'lib/economic/base_repo.rb', line 64

def endpoint_url
  URL + endpoint_name
end

.filter(filter_text, url: endpoint_url) ⇒ Object



48
49
50
# File 'lib/economic/base_repo.rb', line 48

def filter(filter_text, url: endpoint_url)
  all(filter_text: filter_text, url: url)
end

.find(id, url: endpoint_url) ⇒ Object



56
57
58
59
60
61
62
# File 'lib/economic/base_repo.rb', line 56

def find(id, url: endpoint_url)
  url += "/" + id_to_url_formatted_id(id)
  response = send_request(method: :get, url: url)

  entry_hash = JSON.parse(response.body)
  model.new(entry_hash)
end

.id_to_url_formatted_id(id) ⇒ Object



88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
# File 'lib/economic/base_repo.rb', line 88

def id_to_url_formatted_id(id)
  id.to_s.gsub("_", "_8_")
    .gsub("<", "_0_")
    .gsub(">", "_1_")
    .gsub("*", "_2_")
    .gsub("%", "_3_")
    .gsub(":", "_4_")
    .gsub("&", "_5_")
    .gsub("/", "_6_")
    .gsub('\\', "_7_")
    .gsub(" ", "_9_")
    .gsub("?", "_10_")
    .gsub(".", "_11_")
    .gsub("#", "_12_")
    .gsub("+", "_13_")
end

.save(model, url: endpoint_url) ⇒ Object



12
13
14
15
16
17
18
19
# File 'lib/economic/base_repo.rb', line 12

def save(model, url: endpoint_url)
  post_or_put = model.id_key.nil? ? :post : :put
  url += "/" + id_to_url_formatted_id(model.id_key)

  response = send_request(method: post_or_put, url: url, payload: model.to_h.to_json)

  modelize_response(response)
end

.send(model, url: endpoint_url) ⇒ Object

TODO: This method does not seem to do anything that the save method cannot do - is there any reason to keep it? Posting to a not-existing id is apparenly fine



22
23
24
25
26
# File 'lib/economic/base_repo.rb', line 22

def send(model, url: endpoint_url)
  response = send_request(method: :post, url: url, payload: model.to_h.to_json)

  modelize_response(response)
end

.send_request(method:, url:, payload: "", &block) ⇒ Object



76
77
78
79
80
81
82
83
84
85
86
# File 'lib/economic/base_repo.rb', line 76

def send_request(method:, url:, payload: "", &block)
  url = URI.escape(url)
  if payload.strip.empty?
    RestClient::Request.execute(method: method, url: url, headers: headers, &block)
  else
    RestClient::Request.execute(method: method, url: url, payload: payload, headers: headers, &block)
  end
rescue => e
  warn "#{e} #{e.response}" if e.respond_to?(:response)
  raise e
end

.updated_after(date) ⇒ Object



52
53
54
# File 'lib/economic/base_repo.rb', line 52

def updated_after(date)
  filter("lastUpdated$gt:#{to_iso8601z(date)}")
end