Class: Bsm::Sso::Client::AbstractResource
- Inherits:
-
Hash
- Object
- Hash
- Bsm::Sso::Client::AbstractResource
- Defined in:
- lib/bsm/sso/client/abstract_resource.rb
Direct Known Subclasses
Class Method Summary collapse
-
.get(path, params = {}) ⇒ Bsm::Sso::Client::AbstractResource
Fetches object from remote.
-
.headers ⇒ Hash
Default headers.
-
.site ⇒ Excon::Connection
Site connection.
- .site=(url) ⇒ Object
Instance Method Summary collapse
-
#attributes ⇒ Hash
Attributes hash.
-
#id ⇒ Integer
ID, the primary key.
-
#initialize(attributes = nil) ⇒ AbstractResource
constructor
Constuctor.
-
#respond_to?(method) ⇒ Boolean
True, if method exists?.
Constructor Details
#initialize(attributes = nil) ⇒ AbstractResource
Constuctor
54 55 56 57 |
# File 'lib/bsm/sso/client/abstract_resource.rb', line 54 def initialize(attributes = nil) super() update(attributes.stringify_keys) if attributes.is_a?(Hash) end |
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(method, *arguments) ⇒ Object (protected)
76 77 78 79 80 81 82 83 84 85 86 87 |
# File 'lib/bsm/sso/client/abstract_resource.rb', line 76 def method_missing(method, *arguments) method, punctation = method.to_s.sub(/([=?])$/, ''), $1 case punctation when "=" store(method, arguments.first) when "?" self[method] else key?(method) ? fetch(method) : super end end |
Class Method Details
.get(path, params = {}) ⇒ Bsm::Sso::Client::AbstractResource
Returns fetches object from remote.
31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
# File 'lib/bsm/sso/client/abstract_resource.rb', line 31 def get(path, params = {}) params[:query] ||= params.delete(:params) collection = params.delete(:collection) params = params.merge(:path => path) params[:headers] = (params[:headers] || {}).merge(headers) response = site.get(params) return (collection ? [] : nil) unless response.status == 200 result = ActiveSupport::JSON.decode(response.body) result = Array.wrap(result).map do |record| instance = new(record) instance if instance.id end.compact collection ? result : result.first rescue MultiJson::DecodeError collection ? [] : nil end |
.headers ⇒ Hash
Returns default headers.
24 25 26 |
# File 'lib/bsm/sso/client/abstract_resource.rb', line 24 def headers { 'Authorization' => Bsm::Sso::Client.verifier.generate(Bsm::Sso::Client.token_timeout.from_now) } end |
.site ⇒ Excon::Connection
Returns site connection.
19 20 21 |
# File 'lib/bsm/sso/client/abstract_resource.rb', line 19 def site @site || (superclass.respond_to?(:site) && superclass.site) || raise("No site specified for #{name}. Please specify #{name}.site = 'http://your.sso.host'") end |
.site=(url) ⇒ Object
11 12 13 14 15 16 |
# File 'lib/bsm/sso/client/abstract_resource.rb', line 11 def site=(url) @site = Excon.new url, :idempotent => true, :expects => [200, 422], :headers => { 'Accept' => Mime[:json].to_s, 'Content-Type' => Mime[:json].to_s } end |
Instance Method Details
#attributes ⇒ Hash
Returns attributes hash.
70 71 72 |
# File 'lib/bsm/sso/client/abstract_resource.rb', line 70 def attributes dup end |
#id ⇒ Integer
Returns ID, the primary key.
60 61 62 |
# File 'lib/bsm/sso/client/abstract_resource.rb', line 60 def id self["id"] end |
#respond_to?(method) ⇒ Boolean
Returns true, if method exists?.
65 66 67 |
# File 'lib/bsm/sso/client/abstract_resource.rb', line 65 def respond_to?(method, *) super || key?(method.to_s.sub(/[=?]$/, '')) end |