Sha256: 426cf0d21766b08b71c25a22464a15c2f837ee36b3f1e250263052e3fca319fb
Contents?: true
Size: 1.61 KB
Versions: 2
Compression:
Stored size: 1.61 KB
Contents
module SFKB # Some REST helpers module REST # Used to interpolate variables into REST endpoint URIs @@placeholder = /[<{](.+?)[>}]/ # { a: :b }.inject({}, &@@stringify) #=> { 'a' => :b } @@stringify = lambda do |collector, kv| collector.tap { |h| h[kv[0].to_s] = kv[1] } end # { a: 1 }.delete(:b, &@@required) # raises 'missing param: b' @@required = -> (s) { raise(ArgumentError, "missing param: <#{s}>") } # { a: b, c: d }.inject('x', &@@parameterize) #=> 'x?a=b&c=d' @@parameterize = lambda do |s, kv| k, *vs = *kv params = vs.flatten.map { |v| [k, v].join('=') } [s, params].flatten.compact.reject(&:empty?).join('&') end # Converts a path and params to a Salesforce-suitable URL. def url(path, params = {}) params = params.inject({}, &@@stringify) path = path.gsub(@@placeholder) { params.delete($1, &@@required) } params = params.inject('', &@@parameterize) [path, params].reject(&:nil?).reject(&:empty?).join('?') end # The REST API starts here def index endpoint("/services/data/v#{options[:api_version]}") do |k, v| endpoint(v) { |k, v| endpoint(v) } end end # Fetches the object at url, and extends it with methods def endpoint(url) get(url).body.tap do |o| o.each do |k, v| o.define_singleton_method(k) do ivar = :"@#{k}" return instance_variable_get(ivar) if instance_variable_defined?(ivar) instance_variable_set(ivar, block_given? ? yield(k, v) : v) end end end end extend self end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
sfkb-0.1.2 | lib/sfkb/rest.rb |
sfkb-0.1.0 | lib/sfkb/rest.rb |