the_garage 2.0.3 → 2.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 99630344263372cbbc03bbb368b252f8dd4b0ad7
4
- data.tar.gz: 4964f4f54a1904eeb14313d8f6830ab36a7b346b
3
+ metadata.gz: e6f0a02d10dc0502a581d667dc02746962f7a23a
4
+ data.tar.gz: 7141e3b4235a0f2767e1d01635fff8bf58af542a
5
5
  SHA512:
6
- metadata.gz: 191aa740289c4fd51763f25d5697909c0e1076585598d20b1c9730369c20a91a3c8bcdba752ca96f0c94c0b025d11f84a287d3a08df0cdeddcb5318cb47fe1b7
7
- data.tar.gz: 92d938a94a78c38813109bd5bae630c9724f8e36d9adbdd6ee0d66c370bef783aa0ac8ae6571582d311dd6daa628f20e28985aa8e29d7e975d3cf4744c527180
6
+ metadata.gz: cb32724f1086c7f9609624f40d1db6155e9202e79bf6eb22589d02cb2a48c2ae4c2298b95fbf68ff9b50676b555d34337196186f59f529285f577fcc9322f966
7
+ data.tar.gz: 2455ad6edb9abd271c9286a8a070d9beaca25e526ae5c2bc523c8f889cb422ddd6bd3e88e7a675514fb26d82dbfb0c03411383e10c1ab64ba6d31a33f9dc5056
data/README.md CHANGED
@@ -26,6 +26,7 @@ In your Rails model class:
26
26
  ```ruby
27
27
  class Employee < ActiveRecord::Base
28
28
  include Garage::Representer
29
+ include Garage::Authorizable
29
30
 
30
31
  belongs_to :division
31
32
  has_many :projects
@@ -58,6 +59,34 @@ class EmployeesController < ApplicationController
58
59
  end
59
60
  ```
60
61
 
62
+ ## Create decorator for your AR models
63
+ With not small application, you may add a presentation layer to build API responses.
64
+ Define a decorator class with `Resource` suffix and define `#to_resource` in
65
+ your AR model.
66
+
67
+ ```ruby
68
+ class User < ActiveRecord::Base
69
+ def to_resource
70
+ UserResource.new(self)
71
+ end
72
+ end
73
+
74
+ class UserResource
75
+ include Garage::Representer
76
+ include Garage::Authorizable
77
+
78
+ property :id
79
+ property :name
80
+ property :email
81
+
82
+ delegate :id, :name, :email, to: :@model
83
+
84
+ def initialize(model)
85
+ @model = model
86
+ end
87
+ end
88
+ ```
89
+
61
90
  ## Advanced Configurations
62
91
 
63
92
  In `config/initializers/garage.rb`:
data/lib/garage/config.rb CHANGED
@@ -6,7 +6,7 @@ module Garage
6
6
  end
7
7
 
8
8
  def self.configuration
9
- @config
9
+ @config ||= configure {}
10
10
  end
11
11
 
12
12
  class Config
@@ -32,7 +32,22 @@ module Garage
32
32
  end
33
33
 
34
34
  def resource_class
35
- @resource_class ||= name.sub(/Controller\z/, '').demodulize.singularize.constantize
35
+ @resource_class ||= default_resource_class
36
+ end
37
+
38
+ private
39
+
40
+ def default_resource_class
41
+ class_name = name.sub(/Controller\z/, '').demodulize.singularize
42
+ begin
43
+ return "#{class_name}Resource".constantize
44
+ rescue NameError
45
+ begin
46
+ return class_name.constantize
47
+ rescue NameError
48
+ raise "Garage needs `#{class_name}Resource` or `#{class_name}` for resource class of #{name} but neither was found. If you want use an alternative class for the resource class, specify the resource class by `.resource_class=` in your controller."
49
+ end
50
+ end
36
51
  end
37
52
  end
38
53
 
@@ -45,7 +60,7 @@ module Garage
45
60
 
46
61
  # Public: Get the resource
47
62
  # Renders `@resource` with options specified with `respond_with_resource_options`
48
- # Requries `:read` permission on `@resource`
63
+ # Requires `:read` permission on `@resource`
49
64
  def show
50
65
  respond_with @resource, respond_with_resource_options
51
66
  end
@@ -173,7 +188,7 @@ module Garage
173
188
  elsif @resources
174
189
  MetaResource.new(self.class.resource_class)
175
190
  else
176
- @resource
191
+ Garage.configuration.cast_resource.call(@resource)
177
192
  end
178
193
  end
179
194
 
@@ -1,9 +1,10 @@
1
1
  module Garage
2
2
  module Strategy
3
3
  class AccessToken
4
- attr_reader :scope, :token, :token_type
4
+ attr_reader :scope, :token, :token_type, :raw_response
5
5
 
6
6
  def initialize(attrs)
7
+ @raw_response = attrs
7
8
  @scope, @token, @token_type = attrs[:scope], attrs[:token], attrs[:token_type]
8
9
  @application_id, @resource_owner_id = attrs[:application_id], attrs[:resource_owner_id]
9
10
  @expired_at, @revoked_at = attrs[:expired_at], attrs[:revoked_at]
@@ -1,3 +1,3 @@
1
1
  module Garage
2
- VERSION = '2.0.3'
2
+ VERSION = '2.1.0'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: the_garage
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.3
4
+ version: 2.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tatsuhiko Miyagawa
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-04-14 00:00:00.000000000 Z
11
+ date: 2016-05-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -269,7 +269,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
269
269
  version: '0'
270
270
  requirements: []
271
271
  rubyforge_project:
272
- rubygems_version: 2.5.1
272
+ rubygems_version: 2.4.8
273
273
  signing_key:
274
274
  specification_version: 4
275
275
  summary: Garage Platform Engine