restaurant 0.1.2 → 0.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: b3f1d76c4e2e076ae74aab8564275da04ef24a55
4
- data.tar.gz: d86e4d33694c9faba170aeec9deb699cb78be05c
3
+ metadata.gz: 7b71b7b9e2f1badd422562dbd949f97726687e86
4
+ data.tar.gz: a062a4d399caec20cc4632c4b18944202b8d1fda
5
5
  SHA512:
6
- metadata.gz: 996b518bb2182fed86fd59e97ec8ae4f01a1d5c8570cc03c2132ee005c27d5a615226ae7ca8d99bb96046bc96151a4c0d4bcd75753b82efac759fa8daaf93fc0
7
- data.tar.gz: ac833d067a1e7be9a37c95a1e2632c631394c29b9a2ebbc68214b63713bff71c60c02be4c9e65f883a6da247d2d254911b2377faeaf780a4211f267ea3ab7824
6
+ metadata.gz: 9f2b51e1b30de2786cb3ce4578073b6832a4e21863e84caf0e96886f65bd8eda8b42c7c980db443c5f6d8bde9ed69696d36a9437548d53f6b7800ddf5ab724b3
7
+ data.tar.gz: 04dbbaa38de272c411809c1a4d887feb24fe5b6a7fb0f4b80c62b2cb5b2148ba043bacedbaeb2e9ff6ca36ae5a84ce44241ca8b67eb7a651c0e6efd5b02a6e3a
data/README.md CHANGED
@@ -90,7 +90,7 @@ module V1
90
90
  end
91
91
  ```
92
92
 
93
- ### authentication & authorization
93
+ ### authentication
94
94
  Restaurant does not provide any auth layer, but it's easy to add it to your application.
95
95
  Here is a short example to authenticate users with [doorkeeper](https://github.com/applicake/doorkeeper).
96
96
 
@@ -115,12 +115,52 @@ irb(main):002:0> app.get "/v2/recipes"
115
115
  => 401
116
116
  irb(main):003:0> application = Doorkeeper::Application.create(name: "example", redirect_uri: "http://example.com")
117
117
  => #<Doorkeeper::Application ...>
118
- irb(main):004:0> create = application.access_tokens.create
118
+ irb(main):004:0> token = application.access_tokens.create
119
119
  => #<Doorkeeper::AccessToken ...>
120
120
  irb(main):005:0> app.get "/v2/recipes", access_token: token.token
121
121
  => 200
122
- irb(main):006:0> JSON.parse(app.response.body)
123
- => [...]
122
+ ```
123
+
124
+ ### authorization
125
+ Here is an example of a scope-based authorization system.
126
+
127
+ ```
128
+ $ vi app/controllers/application_controller.rb
129
+ class ApplicationController < ActionController::Base
130
+ doorkeeper_for :all
131
+ before_filter :require_authorization
132
+
133
+ private
134
+
135
+ def require_authorization
136
+ head 403 unless has_authorization?
137
+ end
138
+
139
+ def has_authorization?
140
+ doorkeeper_token.scopes.any? do |scope|
141
+ if role = Mongoid.default_session["roles"].find(:scope => scope).first
142
+ if action_names = role[resources_name]
143
+ action_names.include?(action_name)
144
+ end
145
+ end
146
+ end
147
+ end
148
+ end
149
+
150
+ $ rails c
151
+ irb(main):001:0> app.accept = "application/json"
152
+ irb(main):002:0> application = Doorkeeper::Application.create(name: "example", redirect_uri: "http://example.com")
153
+ => #<Doorkeeper::Application ...>
154
+ irb(main):003:0> token = application.access_tokens.create(scopes: "admin")
155
+ => #<Doorkeeper::AccessToken ...>
156
+ irb(main):004:0> app.get "/v2/recipes", access_token: token.token
157
+ => 403
158
+ irb(main):005:0> Mongoid.default_session["roles"].insert(scope: "admin", recipes: ["index", "show"])
159
+ => nil
160
+ irb(main):006:0> app.get "/v2/recipes", access_token: token.token
161
+ => 200
162
+ irb(main):007:0> app.post "/v2/recipes", access_token: token.token, recipe: { title: "created" }
163
+ => 403
124
164
  ```
125
165
 
126
166
  ## More
@@ -2,6 +2,8 @@ module Restaurant
2
2
  module Actions
3
3
  def self.included(base)
4
4
  base.before_filter :require_valid_id, :require_resource, :only => [:show, :update, :destroy]
5
+ base.before_filter :add_created_at, :only => :create
6
+ base.before_filter :add_updated_at, :only => :update
5
7
  end
6
8
 
7
9
  def index
@@ -48,7 +50,7 @@ module Restaurant
48
50
  end
49
51
 
50
52
  def resource_params
51
- params[resource_name] || {}
53
+ @resource_params ||= params[resource_name] || {}
52
54
  end
53
55
 
54
56
  def resource_id
@@ -66,31 +68,27 @@ module Restaurant
66
68
  end
67
69
 
68
70
  def sort_params
69
- if params[:sort]
70
- Hash[
71
- params[:sort].map do |key, value|
72
- [key, value.to_i]
73
- end
74
- ]
75
- else
76
- {}
77
- end
71
+ Hash[(params[:sort] || []).map {|key, value| [key, value.to_i] }]
78
72
  end
79
73
 
80
74
  def skip_params
81
- (page - 1) * per_page
75
+ ([params[:page].to_i, 1].max - 1) * per_page
82
76
  end
83
77
 
84
78
  def limit_params
85
79
  per_page
86
80
  end
87
81
 
88
- def page
89
- [params[:page].to_i, 1].max
90
- end
91
-
92
82
  def per_page
93
83
  10
94
84
  end
85
+
86
+ def add_created_at
87
+ resource_params[:created_at] = resource_params[:updated_at] = Time.now
88
+ end
89
+
90
+ def add_updated_at
91
+ resource_params[:updated_at] = Time.now
92
+ end
95
93
  end
96
94
  end
@@ -1,3 +1,3 @@
1
1
  module Restaurant
2
- VERSION = "0.1.2"
2
+ VERSION = "0.1.3"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: restaurant
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.1.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ryo Nakamura