Class: Usergrid::Resource

Inherits:
RestClient::Resource
  • Object
show all
Defined in:
lib/usergrid/core/resource.rb

Direct Known Subclasses

Application, Entity, Management, Organization

Constant Summary collapse

RESERVED =
%w( created modified metadata uri )
DEFAULT_API_URL =
'https://api.usergrid.com'
TYPE_HEADERS =
{ content_type: :json, accept: :json }

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(resource_url = DEFAULT_API_URL, api_url = nil, options = {}, response = nil) ⇒ Resource

Returns a new instance of Resource.



12
13
14
15
16
17
# File 'lib/usergrid/core/resource.rb', line 12

def initialize(resource_url=DEFAULT_API_URL, api_url=nil, options={}, response=nil)
  options[:headers] = TYPE_HEADERS.merge options[:headers] || {}
  @api_url = api_url || resource_url
  self.response = response
  super resource_url, options, &method(:handle_response)
end

Instance Attribute Details

#api_urlObject (readonly)

Returns the value of attribute api_url.



10
11
12
# File 'lib/usergrid/core/resource.rb', line 10

def api_url
  @api_url
end

#current_userObject (readonly)

Returns the value of attribute current_user.



10
11
12
# File 'lib/usergrid/core/resource.rb', line 10

def current_user
  @current_user
end

#responseObject

Returns the value of attribute response.



10
11
12
# File 'lib/usergrid/core/resource.rb', line 10

def response
  @response
end

Instance Method Details

#[](suburl, &new_block) ⇒ Object

overridden to ensure sub resources are instances of this class



83
84
85
86
87
88
89
90
# File 'lib/usergrid/core/resource.rb', line 83

def [](suburl, &new_block)
  case
    when block_given? then Resource.new(concat_urls(url, suburl), api_url, options, &new_block)
    when block        then Resource.new(concat_urls(url, suburl), api_url, options, &block)
    else
      Resource.new(concat_urls(url, suburl), api_url, options)
  end
end

#api_resource(suburl) ⇒ Object



92
93
94
# File 'lib/usergrid/core/resource.rb', line 92

def api_resource(suburl)
  Resource.new(concat_urls(api_url, suburl), api_url, options)
end

#application(organization, application = 'sandbox') ⇒ Object

application defaults to sandbox if none provided



45
46
47
# File 'lib/usergrid/core/resource.rb', line 45

def application(organization, application='sandbox')
  Usergrid::Application.new concat_urls(api_url, "#{organization}/#{application}"), options
end

#auth_tokenObject



118
119
120
121
122
123
124
# File 'lib/usergrid/core/resource.rb', line 118

def auth_token
  begin
    @options[:headers][:Authorization].gsub 'Bearer ', ''
  rescue
    nil
  end
end

#auth_token=(auth_token) ⇒ Object



110
111
112
113
114
115
116
# File 'lib/usergrid/core/resource.rb', line 110

def auth_token=(auth_token)
  if auth_token
    @options[:headers].merge!({ Authorization: "Bearer #{auth_token}" })
  else
    @options[:headers].delete :Authorization if @options
  end
end

#collectionObject



77
78
79
80
# File 'lib/usergrid/core/resource.rb', line 77

def collection
  get unless response
  Collection.new url, api_url, options, response
end

#delete_query(query = nil, options = {}) ⇒ Object

options: ‘reversed’, ‘start’, ‘cursor’, ‘limit’, ‘permission’



62
63
64
65
# File 'lib/usergrid/core/resource.rb', line 62

def delete_query(query=nil, options={})
  options = options.merge({ql: query}) if query
  delete({params: options})
end

#entitiesObject



72
73
74
75
# File 'lib/usergrid/core/resource.rb', line 72

def entities
  get unless response
  response.entities
end

#entityObject



67
68
69
70
# File 'lib/usergrid/core/resource.rb', line 67

def entity
  get unless response
  response.entity
end

#get(additional_headers = {}, &block) ⇒ Object



96
97
98
# File 'lib/usergrid/core/resource.rb', line 96

def get(additional_headers={}, &block)
  self.response = super additional_headers, &block
end

#logged_in?Boolean

Returns:

  • (Boolean)


36
37
38
# File 'lib/usergrid/core/resource.rb', line 36

def logged_in?
  !!auth_token
end

#login(username, password) ⇒ Object

gets user token and automatically set auth header for future requests precondition: resource must already be set to the correct context (application or management)



21
22
23
24
25
26
27
# File 'lib/usergrid/core/resource.rb', line 21

def (username, password)
  response = self['token'].post grant_type: 'password', username: username, password: password
  self.auth_token = response.data['access_token']
  user_uuid = response.data['user']['uuid']
  @current_user = self["/users/#{user_uuid}"].get.entity
  response
end

#logoutObject

remove auth header for future requests only affects self and derivative resources



31
32
33
34
# File 'lib/usergrid/core/resource.rb', line 31

def logout
  self.auth_token = nil
  @current_user = nil
end

#managementObject



40
41
42
# File 'lib/usergrid/core/resource.rb', line 40

def management
  Usergrid::Management.new api_url, options
end

#post(payload, additional_headers = {}, &block) ⇒ Object



100
101
102
103
# File 'lib/usergrid/core/resource.rb', line 100

def post(payload, additional_headers={}, &block)
  payload = MultiJson.dump(payload) unless payload.is_a? String
  self.response = super payload, additional_headers, &block
end

#put(payload, additional_headers = {}, &block) ⇒ Object



105
106
107
108
# File 'lib/usergrid/core/resource.rb', line 105

def put(payload, additional_headers={}, &block)
  payload = MultiJson.dump(payload) unless payload.is_a? String
  self.response = super payload, additional_headers, &block
end

#query(query = nil, options = {}) ⇒ Object

options: ‘reversed’, ‘start’, ‘cursor’, ‘limit’, ‘permission’



50
51
52
53
# File 'lib/usergrid/core/resource.rb', line 50

def query(query=nil, options={})
  options = options.merge({ql: query}) if query
  get({params: options})
end

#update_query(updates, query = nil, options = {}) ⇒ Object

options: ‘reversed’, ‘start’, ‘cursor’, ‘limit’, ‘permission’



56
57
58
59
# File 'lib/usergrid/core/resource.rb', line 56

def update_query(updates, query=nil, options={})
  options = options.merge({ql: query}) if query
  put(updates, {params: options})
end