class Economic::BaseRepo

Constants

URL

Attributes

endpoint[RW]

Public Class Methods

all(filter_text: "", url: endpoint_url) click to toggle source
# 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) click to toggle source
# 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_url() click to toggle source
# File lib/economic/base_repo.rb, line 66
def endpoint_url
  URL + endpoint_name
end
filter(filter_text, url: endpoint_url) click to toggle source
# 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) click to toggle source
# 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) click to toggle source
# File lib/economic/base_repo.rb, line 89
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) click to toggle source
# 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) click to toggle source
# 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) click to toggle source
# File lib/economic/base_repo.rb, line 78
def send_request(method:, url:, payload: "", &block)
  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) click to toggle source
# File lib/economic/base_repo.rb, line 54
def updated_after(date)
  filter("lastUpdated$gt:#{to_iso8601z(date)}")
end

Private Class Methods

endpoint_name() click to toggle source
# File lib/economic/base_repo.rb, line 114
def endpoint_name
  return endpoint unless endpoint.nil?

  end_p = name.sub("Economic::", "")
  if end_p.include?("::")
    end_p = end_p.gsub("Repo", "")
    end_p = end_p.gsub("::", "/")
  else
    end_p = end_p.gsub("Repo", "s")
  end
  kebab(end_p)
end
fetch(url: endpoint_url, pageindex: 0, filter_text: "") click to toggle source
# File lib/economic/base_repo.rb, line 137
def fetch(url: endpoint_url, pageindex: 0, filter_text: "")
  url = url.dup
  url << "?skippages=#{pageindex}&pagesize=1000"
  url << "&filter=#{filter_text}" unless filter_text == ""

  send_request(method: :get, url: url)
end
headers() click to toggle source
# File lib/economic/base_repo.rb, line 133
def headers
  {'X-AppSecretToken': Session.app_secret_token, 'X-AgreementGrantToken': Session.agreement_grant_token, 'Content-Type': "application/json"}
end
kebab(string) click to toggle source
# File lib/economic/base_repo.rb, line 145
def kebab(string)
  string.gsub(/::/, "/")
    .gsub(/([A-Z]+)([A-Z][a-z])/, '\1_\2')
    .gsub(/([a-z\d])([A-Z])/, '\1_\2')
    .tr("_", "-")
    .downcase
end
model() click to toggle source
# File lib/economic/base_repo.rb, line 108
def model
  scopes = name.split("::")
  scopes[1] = scopes[1][0...-1] if scopes.count == 3
  Object.const_get("#{scopes[0]}::#{scopes[1].sub("Repo", "")}")
end
modelize_response(response) click to toggle source
# File lib/economic/base_repo.rb, line 153
def modelize_response(response)
  entry_hash = response.body.blank? ? {} : JSON.parse(response.body)

  model.new(entry_hash)
end
to_iso8601z(date) click to toggle source
# File lib/economic/base_repo.rb, line 127
def to_iso8601z(date)
  date = date.iso8601
  date = date[0...-5].tr("+", "Z") if date.include?("+")
  date
end