Module: Yao::Resources::RestfullyAccessible

Included in:
Base
Defined in:
lib/yao/resources/restfully_accessible.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#api_versionObject

Returns the value of attribute api_version.



31
32
33
# File 'lib/yao/resources/restfully_accessible.rb', line 31

def api_version
  @api_version
end

#serviceObject

Returns the value of attribute service.



21
22
23
# File 'lib/yao/resources/restfully_accessible.rb', line 21

def service
  @service
end

Class Method Details

.extended(base) ⇒ Object



5
6
7
8
9
10
11
12
13
14
15
16
# File 'lib/yao/resources/restfully_accessible.rb', line 5

def self.extended(base)
  base.class_eval do
    class << self
      attr_accessor :resource_name, :resources_name

      extend Forwardable
      %w(get post put delete).each do |method_name|
        def_delegator :client, method_name, method_name.upcase
      end
    end
  end
end

Instance Method Details

#admin=(bool) ⇒ Object



33
34
35
# File 'lib/yao/resources/restfully_accessible.rb', line 33

def admin=(bool)
  @admin = bool
end

#as_member(&blk) ⇒ Object



57
58
59
60
61
62
63
64
65
66
# File 'lib/yao/resources/restfully_accessible.rb', line 57

def as_member(&blk)
  if @admin
    @admin = false
    result = yield(blk)
    @admin = true
    result
  else
    yield blk
  end
end

#clientObject



49
50
51
52
53
54
55
# File 'lib/yao/resources/restfully_accessible.rb', line 49

def client
  if @admin
    Yao.default_client.admin_pool[service]
  else
    Yao.default_client.pool[service]
  end
end

#create(resource_params) ⇒ Object



105
106
107
108
109
110
111
112
113
114
# File 'lib/yao/resources/restfully_accessible.rb', line 105

def create(resource_params)
  params = {
    resource_name_in_json => resource_params
  }
  res = POST(resources_path) do |req|
    req.body = params.to_json
    req.headers['Content-Type'] = 'application/json'
  end
  return_resource(resource_from_json(res.body))
end

#destroy(id) ⇒ Object



127
128
129
130
# File 'lib/yao/resources/restfully_accessible.rb', line 127

def destroy(id)
  res = DELETE([resources_path, id].join("/"))
  res.body
end

#get(id_or_permalink, query = {}) ⇒ Object Also known as: find



95
96
97
98
99
100
101
102
# File 'lib/yao/resources/restfully_accessible.rb', line 95

def get(id_or_permalink, query={})
  res = if id_or_permalink =~ /^https?:\/\//
          GET(id_or_permalink, query)
        else
          GET([resources_path, id_or_permalink].join("/"), query)
        end
  return_resource(resource_from_json(res.body))
end

#list(query = {}) ⇒ Object

restful methods



78
79
80
81
82
83
84
85
# File 'lib/yao/resources/restfully_accessible.rb', line 78

def list(query={})
  json = GET(resources_path, query).body
  if @return_single_on_querying && !query.empty?
    return_resource(resource_from_json(json))
  else
    return_resources(resources_from_json(json))
  end
end

#list_detail(query = {}) ⇒ Object



87
88
89
90
91
92
93
# File 'lib/yao/resources/restfully_accessible.rb', line 87

def list_detail(query={})
  return_resources(
    resources_from_json(
      GET([resources_path, "detail"].join("/"), query).body
    )
  )
end

#resources_pathObject



41
42
43
# File 'lib/yao/resources/restfully_accessible.rb', line 41

def resources_path
  @resources_path || resources_name
end

#resources_path=(path) ⇒ Object



45
46
47
# File 'lib/yao/resources/restfully_accessible.rb', line 45

def resources_path=(path)
  @resources_path = path.sub(%r!^\/!, "")
end

#return_single_on_querying=(bool) ⇒ Object



37
38
39
# File 'lib/yao/resources/restfully_accessible.rb', line 37

def return_single_on_querying=(bool)
  @return_single_on_querying = bool
end

#update(id, resource_params) ⇒ Object



116
117
118
119
120
121
122
123
124
125
# File 'lib/yao/resources/restfully_accessible.rb', line 116

def update(id, resource_params)
  params = {
    resource_name_in_json => resource_params
  }
  res = PUT([resources_path, id].join("/")) do |req|
    req.body = params.to_json
    req.headers['Content-Type'] = 'application/json'
  end
  return_resource(resource_from_json(res.body))
end

#with_resources_path(path, &blk) ⇒ Object



68
69
70
71
72
73
74
75
# File 'lib/yao/resources/restfully_accessible.rb', line 68

def with_resources_path(path, &blk)
  original = @resources_path
  @resources_path = path
  result = yield(blk)
  @resources_path = original

  result
end