grape-cancan 0.0.2 → 0.0.3

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
- SHA1:
3
- metadata.gz: 34714b17e347b036572b0167cf8a550319b4fbf7
4
- data.tar.gz: 17667b2a66979de84ef5b36d3a312e7d5b1716bc
2
+ SHA256:
3
+ metadata.gz: b9b072e32444e118343956cb4f3cffa02d7587e8fa9b7744a2dcccb0a3a28e33
4
+ data.tar.gz: 604a6a1d922507672f37db5983f738793cd427035aa8833d6493922ca5fba40e
5
5
  SHA512:
6
- metadata.gz: 89c43f7809c5dff5fe1e56d30993f9216ba9be96397f9128d15aa8fdc308b54361c5b9677a4aa249b04533aaef85399dfa9f972684ea2e8b146ba4dcdcf585a4
7
- data.tar.gz: f9855032826bc43bad8438fd5caf06e31cb5ff8b32361d82ede73113a92ac733bcb17f3331b9d253cea8202aeaa8697043c17ec94911021075c43f24c68292ed
6
+ metadata.gz: 75e723b3b127a99fd703f8ba468283890cea6234cc7f547cdd4f5b22a894dae4da54b5ff258fd66cb58439cd02a3736bd3e7ab72320d818570e69cab9de40368
7
+ data.tar.gz: f91bbcb23de8f2f9fc89f632544df3adb3613dfeed7ebb7e9e4997f328b83dbcfd8c973491481dfd09174f287b42fde8d342b417102c4a32282ac354a1c0f87a
@@ -0,0 +1,14 @@
1
+ language: ruby
2
+
3
+ rvm:
4
+ - 2.6.3
5
+ - 2.5.4
6
+ - 2.4.5
7
+
8
+ before_install: gem install bundler
9
+
10
+ env:
11
+ matrix:
12
+ - GRAPE=HEAD
13
+ - GRAPE=1.2.4
14
+ - GRAPE=1.2.0
data/Gemfile CHANGED
@@ -2,3 +2,12 @@ source 'https://rubygems.org'
2
2
 
3
3
  # Specify your gem's dependencies in grape-cancan.gemspec
4
4
  gemspec
5
+
6
+ case ENV['GRAPE']
7
+ when nil
8
+ gem 'grape'
9
+ when 'HEAD'
10
+ gem 'grape', github: 'ruby-grape/grape'
11
+ else
12
+ gem 'grape', ENV['GRAPE']
13
+ end
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # Grape::CanCan
1
+ # Grape::CanCan [![Build Status](https://travis-ci.org/rzane/grape-cancan.svg?branch=master)](https://travis-ci.org/rzane/grape-cancan)
2
2
 
3
3
  Use CanCan to authorize your Grape endpoints.
4
4
 
@@ -71,6 +71,25 @@ class Users < Grape::API
71
71
  end
72
72
  ```
73
73
 
74
+ #### Handle Unauthorized Access
75
+
76
+ If the user authorization fails, a `CanCan::AccessDenied` exception will be raised. You should catch this and respond appropriately. For example, you could [redirect the user to the root page](https://github.com/CanCanCommunity/cancancan#3-handle-unauthorized-access), or return a 403 Forbidden as in this example (the `error!` is a [convenience provided by Grape](https://github.com/ruby-grape/grape#raising-exceptions)):
77
+
78
+ ```ruby
79
+ class Users < Grape::API
80
+ resource :users
81
+ rescue_from ::CanCan::AccessDenied do
82
+ error!('403 Forbidden', 403)
83
+ end
84
+
85
+ get '/:id' do
86
+ @user = User.find(params[:id])
87
+ authorize! :read, @user
88
+ @user
89
+ end
90
+ end
91
+ ```
92
+
74
93
  ## Contributing
75
94
 
76
95
  1. Fork it ( https://github.com/rzane/grape-cancan/fork )
data/Rakefile CHANGED
@@ -1,2 +1,8 @@
1
- require "bundler/gem_tasks"
1
+ require 'bundler/gem_tasks'
2
+ require 'rake/testtask'
2
3
 
4
+ Rake::TestTask.new :test do |t|
5
+ t.test_files = FileList['test/**/*_test.rb']
6
+ end
7
+
8
+ task default: :test
@@ -18,9 +18,11 @@ Gem::Specification.new do |spec|
18
18
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
19
  spec.require_paths = ["lib"]
20
20
 
21
- spec.add_dependency 'grape', '>= 0.6.0'
21
+ spec.add_dependency 'grape', '~> 1.2'
22
22
  spec.add_dependency 'cancancan'
23
23
 
24
- spec.add_development_dependency 'bundler', '~> 1.7'
24
+ spec.add_development_dependency 'bundler', '~> 2.0'
25
25
  spec.add_development_dependency 'rake', '~> 10.0'
26
+ spec.add_development_dependency 'minitest', '~> 5.8.4'
27
+ spec.add_development_dependency 'rack-test'
26
28
  end
@@ -1,5 +1,7 @@
1
1
  require 'grape'
2
2
  require 'grape/cancan/version'
3
+ require 'active_support/inflector'
4
+ require 'active_support/core_ext/module/delegation'
3
5
 
4
6
  module Grape
5
7
  module CanCan
@@ -23,8 +25,8 @@ module Grape
23
25
  authorize!(*opts[:authorize]) if opts.key?(:authorize)
24
26
  end
25
27
  end
26
-
27
- Grape::API.extend Grape::CanCan::API
28
- Grape::Endpoint.send :include, Grape::CanCan::Endpoint
29
28
  end
30
29
  end
30
+
31
+ Grape::API::Instance.extend Grape::CanCan::API
32
+ Grape::Endpoint.send :include, Grape::CanCan::Endpoint
@@ -1,5 +1,5 @@
1
1
  module Grape
2
2
  module CanCan
3
- VERSION = "0.0.2"
3
+ VERSION = "0.0.3"
4
4
  end
5
5
  end
@@ -0,0 +1,66 @@
1
+ require 'minitest/autorun'
2
+ require 'rack/test'
3
+ require 'grape/cancan'
4
+ require 'cancancan'
5
+
6
+ User = Class.new
7
+
8
+ class Ability
9
+ include CanCan::Ability
10
+
11
+ def initialize(user)
12
+ can :read, User
13
+ cannot :love, User
14
+ end
15
+ end
16
+
17
+ class API < Grape::API
18
+ authorize_routes!
19
+ helpers { define_method(:current_user) { User.new } }
20
+ get('/can') { can? :love, current_user }
21
+ get('/cannot') { cannot? :read, current_user }
22
+ get('/authorize_option', authorize: [:read, User])
23
+ get('/authorize_option_fail', authorize: [:love, User])
24
+ get('/authorize_explicit') { authorize! :read, current_user }
25
+ get('/authorize_explicit_fail') { authorize! :love, current_user }
26
+ end
27
+
28
+ class GrapeCancanTest < Minitest::Test
29
+ include Rack::Test::Methods
30
+
31
+ def app
32
+ API
33
+ end
34
+
35
+ def test_can
36
+ get '/can'
37
+ assert_equal 'false', last_response.body
38
+ end
39
+
40
+ def test_cannot
41
+ get '/cannot'
42
+ assert_equal 'false', last_response.body
43
+ end
44
+
45
+ def test_authorize_option
46
+ get '/authorize_option'
47
+ assert_equal 200, last_response.status
48
+ end
49
+
50
+ def test_authorize_option_failure
51
+ assert_raises CanCan::AccessDenied do
52
+ get '/authorize_option_fail'
53
+ end
54
+ end
55
+
56
+ def test_authorize_explicit
57
+ get '/authorize_explicit'
58
+ assert_equal 200, last_response.status
59
+ end
60
+
61
+ def test_authorize_explicit_failure
62
+ assert_raises CanCan::AccessDenied do
63
+ get '/authorize_explicit_fail'
64
+ end
65
+ end
66
+ end
metadata CHANGED
@@ -1,71 +1,99 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: grape-cancan
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ray Zane
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-06-03 00:00:00.000000000 Z
11
+ date: 2019-07-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: grape
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - '>='
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 0.6.0
19
+ version: '1.2'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - '>='
24
+ - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: 0.6.0
26
+ version: '1.2'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: cancancan
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - '>='
31
+ - - ">="
32
32
  - !ruby/object:Gem::Version
33
33
  version: '0'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - '>='
38
+ - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: bundler
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - ~>
45
+ - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '1.7'
47
+ version: '2.0'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - ~>
52
+ - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: '1.7'
54
+ version: '2.0'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: rake
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - ~>
59
+ - - "~>"
60
60
  - !ruby/object:Gem::Version
61
61
  version: '10.0'
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - ~>
66
+ - - "~>"
67
67
  - !ruby/object:Gem::Version
68
68
  version: '10.0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: minitest
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: 5.8.4
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: 5.8.4
83
+ - !ruby/object:Gem::Dependency
84
+ name: rack-test
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
69
97
  description: Authorize your Grape API with CanCan
70
98
  email:
71
99
  - raymondzane@gmail.com
@@ -73,7 +101,8 @@ executables: []
73
101
  extensions: []
74
102
  extra_rdoc_files: []
75
103
  files:
76
- - .gitignore
104
+ - ".gitignore"
105
+ - ".travis.yml"
77
106
  - Gemfile
78
107
  - LICENSE.txt
79
108
  - README.md
@@ -82,6 +111,7 @@ files:
82
111
  - lib/grape-cancan.rb
83
112
  - lib/grape/cancan.rb
84
113
  - lib/grape/cancan/version.rb
114
+ - test/grape/cancan_test.rb
85
115
  homepage: https://github.com/rzane/grape-cancan
86
116
  licenses:
87
117
  - MIT
@@ -92,18 +122,18 @@ require_paths:
92
122
  - lib
93
123
  required_ruby_version: !ruby/object:Gem::Requirement
94
124
  requirements:
95
- - - '>='
125
+ - - ">="
96
126
  - !ruby/object:Gem::Version
97
127
  version: '0'
98
128
  required_rubygems_version: !ruby/object:Gem::Requirement
99
129
  requirements:
100
- - - '>='
130
+ - - ">="
101
131
  - !ruby/object:Gem::Version
102
132
  version: '0'
103
133
  requirements: []
104
- rubyforge_project:
105
- rubygems_version: 2.2.2
134
+ rubygems_version: 3.0.3
106
135
  signing_key:
107
136
  specification_version: 4
108
137
  summary: Authorize your Grape API with CanCan
109
- test_files: []
138
+ test_files:
139
+ - test/grape/cancan_test.rb