Class: Bsm::Sso::Client::AbstractResource

Inherits:
Hash
  • Object
show all
Defined in:
lib/bsm/sso/client/abstract_resource.rb

Direct Known Subclasses

User

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(attributes = nil) ⇒ AbstractResource

Constuctor

Parameters:

  • attributes (Hash, NilClass) (defaults to: nil)

    the attributes to assign



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.

Parameters:

  • path (String)
  • params, (Hash)

    request params - see Excon::Connection#request

Returns:



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

.headersHash

Returns default headers.

Returns:

  • (Hash)

    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

.siteExcon::Connection

Returns site connection.

Returns:

  • (Excon::Connection)

    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

Parameters:

  • url (String)


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

#attributesHash

Returns attributes hash.

Returns:

  • (Hash)

    attributes hash



70
71
72
# File 'lib/bsm/sso/client/abstract_resource.rb', line 70

def attributes
  dup
end

#idInteger

Returns ID, the primary key.

Returns:

  • (Integer)

    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?.

Returns:

  • (Boolean)

    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