grape-cancan 0.0.2 → 0.0.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
- 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