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