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



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

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



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

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



66
67
68
# File 'lib/economic/base_repo.rb', line 66

def endpoint_url
  URL + endpoint_name
end

.filter(filter_text, url: endpoint_url) ⇒ Object



50
51
52
# File 'lib/economic/base_repo.rb', line 50

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

.find(id, url: endpoint_url) ⇒ Object



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

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



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

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
20
21
22
23
# File 'lib/economic/base_repo.rb', line 12

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

  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



25
26
27
28
# File 'lib/economic/base_repo.rb', line 25

def send(model, url: endpoint_url)
  warn "use #{self}.save().  #{self}.send() is deprecated"
  save(model, url: endpoint_url)
end

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



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

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



54
55
56
# File 'lib/economic/base_repo.rb', line 54

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