canard 0.3.7 → 0.4.0.pre

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,9 @@
1
+ language: ruby
2
+ rvm:
3
+ - ree
4
+ - 1.8.7
5
+ - 1.9.3
6
+ - jruby-18mode # JRuby in 1.8 mode
7
+ - jruby-19mode # JRuby in 1.9 mode
8
+ - rbx-18mode
9
+ - rbx-19mode
data/Gemfile CHANGED
@@ -6,3 +6,9 @@ gemspec
6
6
  group :test do
7
7
  gem 'rake'
8
8
  end
9
+
10
+ # for CRuby, Rubinius, including Windows and RubyInstaller
11
+ gem "sqlite3", :platform => [:ruby, :mswin, :mingw], :group => [:development, :test]
12
+
13
+ # for JRuby
14
+ gem 'activerecord-jdbcsqlite3-adapter', :platform => [:jruby], :group => [:development, :test]
data/TODO CHANGED
@@ -1,10 +1,6 @@
1
1
  0.4.0
2
- * Make framework agnostic.
3
2
  * Split the test suite so Rails is only required for Rails integration. http://blog.railsware.com/2012/01/07/testing-gem-integration-with-multiple-ruby-frameworks/
4
3
  * Test the railtie (currently implicity tested in dummy app).
5
- * Add upgrade generator to move the now deprecated definitions to the new syntax.
6
- * Remove old definition syntax and therefore deprecations.
7
- * Remove ActiveSupport runtime dependency (which is just used for deprecation warnings).
8
4
  0.5.0
9
5
  * Expand the generated tests to produce all the standard abilities: index,show,read,new,create,edit,update,destroy.
10
6
  * Test the generators.
@@ -5,6 +5,7 @@ require "canard/version"
5
5
  Gem::Specification.new do |s|
6
6
  s.name = "canard"
7
7
  s.version = Canard::VERSION
8
+ s.date = `git log -1 --format="%cd" --date=short lib/canard/version.rb`
8
9
  s.authors = ["James McCarthy"]
9
10
  s.email = ["james2mccarthy@gmail.com"]
10
11
  s.homepage = "https://github.com/james2m/canard"
@@ -19,9 +20,7 @@ Gem::Specification.new do |s|
19
20
  s.require_paths = ["lib"]
20
21
 
21
22
  s.add_development_dependency "minitest", "~> 2"
22
- s.add_development_dependency "sqlite3"
23
23
  s.add_development_dependency "rails", "~> 3.2.3"
24
- s.add_runtime_dependency 'activesupport'
25
24
  s.add_runtime_dependency "cancan"
26
25
  s.add_runtime_dependency "role_model"
27
26
  end
@@ -30,34 +30,40 @@ class Ability
30
30
  attr_reader :user
31
31
 
32
32
  def initialize(object=nil)
33
-
33
+
34
34
  # If object has a user attribute set the user from it otherwise assume
35
35
  # this is the user.
36
36
  @user = object.respond_to?(:user) ? object.user : object
37
-
37
+
38
38
  if @user
39
39
  # Add the base user abilities.
40
- user_class_name = @user.class.name.to_s
41
- append_abilities user_class_name.underscore.to_sym unless user_class_name.length == 0
40
+ user_class_name = String(@user.class.name)
41
+ append_abilities ability_key(user_class_name) unless user_class_name.empty?
42
42
  else
43
43
  # If user not set then lets create a guest
44
44
  @user = Object.new
45
45
  append_abilities :guest
46
46
  end
47
-
47
+
48
48
  # If user has roles get those abilities
49
49
  if @user.respond_to?(:roles)
50
50
  # Add roles on top of the base user abilities
51
51
  @user.roles.each { |role| append_abilities(role) }
52
52
  end
53
-
53
+
54
54
  end
55
-
55
+
56
56
  private
57
-
58
- def append_abilities(role)
57
+
58
+ def append_abilities(key)
59
59
  ability_definitions = Canard.ability_definitions
60
- instance_eval(&ability_definitions[role]) if ability_definitions.has_key?(role)
60
+ instance_eval(&ability_definitions[key]) if ability_definitions.has_key?(key)
61
+ end
62
+
63
+ def ability_key(class_name)
64
+ class_name.gsub!('::', '')
65
+ class_name.gsub!(/(.)([A-Z])/,'\1_\2')
66
+ class_name.downcase!.to_sym
61
67
  end
62
68
 
63
69
  end
@@ -1,40 +1,16 @@
1
1
  module Canard
2
2
 
3
3
  class << self
4
- # A string specifying the location that should be searched for ability
5
- # definitions. By default, Canard will attempt to load abilities from
6
- # Rails.root + /abilities/.
7
- attr_writer :abilities_path
8
-
9
- def abilities_path
10
- @abilities_path ||= 'abilities'
11
- end
12
-
13
4
  def ability_definitions
14
5
  Abilities.definitions
15
6
  end
16
-
17
- def abilities_for(role, &block)
18
- ::ActiveSupport::Deprecation.warn("abilities_for is deprecated and will be removed from Canard 0.4.0. Use Canard::Abilities.for and move the definitions to app/abilities.")
19
- ability_definitions[role] = block
20
- end
21
-
22
7
  end
23
8
 
24
9
  def self.load_paths
25
10
  Abilities.definition_paths.map { |path| File.expand_path(path) }
26
11
  end
27
12
 
28
- # TODO remove at version 0.4.0
29
13
  def self.find_abilities #:nodoc:
30
- absolute_abilities_path = File.expand_path(abilities_path)
31
-
32
- if File.directory? absolute_abilities_path
33
- Dir[File.join(absolute_abilities_path, '**', '*.rb')].sort.each do |file|
34
- self.class_eval File.read(file)
35
- end
36
- end
37
-
38
14
  load_paths.each do |path|
39
15
  Dir[File.join(path, '**', '*.rb')].sort.each do |file|
40
16
  load file
@@ -42,5 +18,5 @@ module Canard
42
18
  end
43
19
 
44
20
  end
45
-
21
+
46
22
  end
@@ -3,7 +3,7 @@ require 'rails'
3
3
 
4
4
  module Canard
5
5
  class Railtie < Rails::Railtie
6
-
6
+
7
7
  initializer "carard.no_eager_loading", :before => 'before_eager_loading' do |app|
8
8
  ActiveSupport::Dependencies.autoload_paths.reject!{ |path| Canard.load_paths.include?(path) }
9
9
  # Don't eagerload our configs, we'll deal with them ourselves
@@ -19,7 +19,7 @@ module Canard
19
19
  Canard.find_abilities
20
20
  end
21
21
  end
22
-
22
+
23
23
  initializer "canard.abilities_reloading", :after => "action_dispatch.configure" do |app|
24
24
  if ActionDispatch::Reloader.respond_to?(:to_prepare)
25
25
  ActionDispatch::Reloader.to_prepare { Canard.find_abilities }
@@ -27,6 +27,9 @@ module Canard
27
27
  ActionDispatch::Reloader.before { Canard.find_abilities }
28
28
  end
29
29
  end
30
-
30
+
31
+ rake_tasks do
32
+ load File.expand_path('../../tasks/canard.rake', __FILE__)
33
+ end
31
34
  end
32
35
  end
@@ -1,3 +1,3 @@
1
1
  module Canard
2
- VERSION = "0.3.7"
2
+ VERSION = "0.4.0.pre"
3
3
  end
@@ -0,0 +1,23 @@
1
+ namespace :canard do
2
+ desc 'Upgrades deprecated ability definition syntax and moves the files from abilities to app/abilities'
3
+ task :upgrade => :environment do
4
+ require 'rake/clean'
5
+ source_path = 'abilities'
6
+ destination_path = Canard::Abilities.definition_paths.first
7
+
8
+ Dir.mkdir(destination_path) unless Dir.exists?(destination_path)
9
+
10
+ if Dir.exists?(source_path)
11
+ Dir[File.join(source_path, '*.rb')].each do |input_file|
12
+ input = File.read(input_file)
13
+ output = input.gsub(/abilities_for/, 'Canard::Abilities.for')
14
+ output_file = File.expand_path(File.basename(input_file), destination_path)
15
+ File.write(output_file, output)
16
+ File.delete(input_file)
17
+ end
18
+ Dir.delete(source_path)
19
+ else
20
+ end
21
+
22
+ end
23
+ end
@@ -0,0 +1,5 @@
1
+ Canard::Abilities.for(:administrator) do
2
+
3
+ can :manage, [Activity, User]
4
+
5
+ end
@@ -1,46 +1,46 @@
1
1
  require 'test_helper'
2
2
 
3
3
  describe Ability do
4
-
4
+
5
5
  before do
6
6
  Canard::Abilities.default_path = File.expand_path('../../dummy/app/abilities', __FILE__)
7
7
  # reload abilities because the reloader will have removed them after the railtie ran
8
8
  Canard.find_abilities
9
9
  end
10
-
10
+
11
11
  describe "new" do
12
-
12
+
13
13
  describe "with a user" do
14
-
14
+
15
15
  let(:user) { User.new }
16
16
  subject { Ability.new(user) }
17
-
17
+
18
18
  it "assign the user to Ability#user" do
19
19
  subject.user.must_equal user
20
20
  end
21
21
 
22
22
  end
23
-
23
+
24
24
  describe "with a model that references a user" do
25
-
25
+
26
26
  let(:user) { User.create }
27
27
  let(:member) { Member.new(:user => user) }
28
-
28
+
29
29
  subject { Ability.new(member) }
30
-
30
+
31
31
  it "assign the user to Ability#user" do
32
32
  subject.user.must_equal user
33
33
  end
34
34
 
35
35
  end
36
-
36
+
37
37
  describe "with a user that has author role" do
38
-
38
+
39
39
  let(:user) { User.create(:roles => [:author]) }
40
40
  let(:member) { Member.create(:user => user) }
41
41
  let(:other_member) { Member.new(:user => User.create) }
42
42
  subject { Ability.new(user) }
43
-
43
+
44
44
  it "has all the abilities of the base class" do
45
45
  subject.can?(:edit, member).must_equal true
46
46
  subject.can?(:update, member).must_equal true
@@ -48,7 +48,7 @@ describe Ability do
48
48
  subject.can?(:edit, other_member).wont_equal true
49
49
  subject.can?(:update, other_member).wont_equal true
50
50
  end
51
-
51
+
52
52
  it "has all the abilities of an author" do
53
53
  subject.can?(:new, Post).must_equal true
54
54
  subject.can?(:create, Post).must_equal true
@@ -57,21 +57,21 @@ describe Ability do
57
57
  subject.can?(:show, Post).must_equal true
58
58
  subject.can?(:index, Post).must_equal true
59
59
  end
60
-
60
+
61
61
  it "has no admin abilities" do
62
62
  subject.cannot?(:destroy, Post).must_equal true
63
63
  end
64
-
64
+
65
65
  end
66
66
 
67
67
  describe "with a user that has admin and author roles" do
68
-
68
+
69
69
  let(:user) { User.create(:roles => [:author, :admin]) }
70
70
  let(:member) { Member.create(:user => user) }
71
71
  let(:other_user) { User.create }
72
72
  let(:other_member) { Member.new(:user => other_user) }
73
73
  subject { Ability.new(user) }
74
-
74
+
75
75
  it "has all the abilities of the base class" do
76
76
  subject.can?(:edit, member).must_equal true
77
77
  subject.can?(:update, member).must_equal true
@@ -79,39 +79,39 @@ describe Ability do
79
79
  subject.cannot?(:edit, other_member).must_equal true
80
80
  subject.cannot?(:update, other_member).must_equal true
81
81
  end
82
-
82
+
83
83
  it "has all the abilities of an author" do
84
84
  subject.can?(:new, Post).must_equal true
85
85
  end
86
-
86
+
87
87
  it "has the abilities of an admin" do
88
88
  subject.can?(:manage, Post).must_equal true
89
89
  subject.can?(:manage, other_user).must_equal true
90
90
  subject.can?(:destroy, other_user).must_equal true
91
91
  subject.cannot?(:destroy, user).must_equal true
92
92
  end
93
-
93
+
94
94
  end
95
-
95
+
96
96
  describe "with no user" do
97
-
97
+
98
98
  subject { Ability.new }
99
-
99
+
100
100
  it "applies the guest abilities" do
101
101
  subject.can?(:index, Post)
102
102
  subject.can?(:show, Post)
103
-
103
+
104
104
  subject.cannot?(:create, Post)
105
105
  subject.cannot?(:update, Post)
106
106
  subject.cannot?(:destroy, Post)
107
-
107
+
108
108
  subject.cannot?(:show, User)
109
109
  subject.cannot?(:show, Member)
110
110
  end
111
111
  end
112
-
112
+
113
113
  describe "with an instance of an anonymous class that has author role" do
114
-
114
+
115
115
  let(:klass) do
116
116
  Class.new do
117
117
  extend Canard::UserModel
@@ -123,16 +123,16 @@ describe Ability do
123
123
  let(:instance) { klass.new(:author) }
124
124
 
125
125
  describe "for base class abilities" do
126
-
126
+
127
127
  it "does nothing" do
128
128
  proc { Ability.new(instance) }.must_be_silent
129
129
  end
130
130
  end
131
-
131
+
132
132
  describe "for assigned roles" do
133
-
133
+
134
134
  subject { Ability.new(instance) }
135
-
135
+
136
136
  it "has all the abilities of an author" do
137
137
  subject.can?(:new, Post).must_equal true
138
138
  subject.can?(:create, Post).must_equal true
@@ -141,13 +141,29 @@ describe Ability do
141
141
  subject.can?(:show, Post).must_equal true
142
142
  subject.can?(:index, Post).must_equal true
143
143
  end
144
-
144
+
145
145
  it "has no admin abilities" do
146
146
  subject.cannot?(:destroy, Post).must_equal true
147
147
  end
148
148
  end
149
-
149
+
150
+ end
151
+ end
152
+
153
+ describe "ability_key" do
154
+
155
+ it "returns a snake case version of the string" do
156
+ class_name = 'CamelCaseString'
157
+ key = :camel_case_string
158
+
159
+ Ability.new.send(:ability_key, class_name).must_equal key
160
+ end
161
+
162
+ it "prepends namespaces to the class name" do
163
+ class_name = 'Namespace::CamelCaseString'
164
+ key = :namespace_camel_case_string
165
+
166
+ Ability.new.send(:ability_key, class_name).must_equal key
150
167
  end
151
168
  end
152
-
153
169
  end
@@ -2,26 +2,17 @@ require 'test_helper'
2
2
  require 'canard'
3
3
 
4
4
  describe Canard do
5
-
6
- describe "abilities_path" do
7
-
8
- it "should be mutable" do
9
- Canard.abilities_path = 'app/abilities'
10
- Canard.abilities_path.must_equal 'app/abilities'
11
- end
12
5
 
13
- end
14
-
15
6
  describe "ability_definitions" do
16
-
7
+
17
8
  it "should be an accessor" do
18
9
  Canard.must_respond_to(:ability_definitions)
19
10
  end
20
-
11
+
21
12
  it "should be a hash" do
22
13
  Canard.ability_definitions.must_be_instance_of Hash
23
14
  end
24
-
25
- end
26
-
15
+
16
+ end
17
+
27
18
  end
@@ -1,50 +1,43 @@
1
1
  require 'test_helper'
2
- require 'active_support/testing/deprecation'
3
2
 
4
3
  describe Canard do
5
-
6
- include ActiveSupport::Testing::Deprecation
7
-
8
- before do
9
- # Stop the deprecation warnings coming to stderr for these tests.
10
- ActiveSupport::Deprecation.behavior = :notify
11
-
12
- Canard::Abilities.default_path = File.expand_path('../../dummy/app/abilities', __FILE__)
13
- Canard.abilities_path = File.expand_path('../abilities', __FILE__)
14
- end
15
-
4
+
16
5
  describe "find_abilities" do
17
-
6
+
7
+ before do
8
+ Canard::Abilities.default_path = File.expand_path('../../dummy/app/abilities', __FILE__)
9
+ end
10
+
18
11
  it "loads the abilities into ability_definitions" do
19
12
  Canard.find_abilities
20
13
 
21
14
  Canard.ability_definitions.keys.must_include :admin
22
15
  end
23
-
24
- it "finds the abilities with the new syntax" do
16
+
17
+ it "finds abilities in the default path" do
18
+ Canard.find_abilities
19
+
20
+ Canard.ability_definitions.keys.must_include :author
21
+ Canard.ability_definitions.keys.wont_include :administrator
22
+ end
23
+
24
+ it "finds abilities in additional paths" do
25
+ Canard::Abilities.definition_paths << File.expand_path('../../abilities', __FILE__)
25
26
  Canard.find_abilities
26
-
27
+
27
28
  Canard.ability_definitions.keys.must_include :author
29
+ Canard.ability_definitions.keys.must_include :administrator
28
30
  end
29
-
31
+
30
32
  it "reloads existing abilities" do
31
33
  Canard.find_abilities
32
34
  Canard::Abilities.send(:instance_variable_set, '@definitions', {})
33
35
  Canard.find_abilities
34
-
36
+
35
37
  Canard.ability_definitions.keys.must_include :author
36
38
  Canard.ability_definitions.keys.must_include :admin
37
39
  end
38
-
39
- end
40
-
41
- describe "abilities_for" do
42
-
43
- it "raises a deprecation warning" do
44
- assert_deprecated do
45
- Canard.abilities_for(:this) { return 'that' }
46
- end
47
- end
48
-
40
+
49
41
  end
42
+
50
43
  end
metadata CHANGED
@@ -1,119 +1,90 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: canard
3
- version: !ruby/object:Gem::Version
4
- hash: 29
5
- prerelease:
6
- segments:
7
- - 0
8
- - 3
9
- - 7
10
- version: 0.3.7
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.4.0.pre
5
+ prerelease: 6
11
6
  platform: ruby
12
- authors:
7
+ authors:
13
8
  - James McCarthy
14
9
  autorequire:
15
10
  bindir: bin
16
11
  cert_chain: []
17
-
18
- date: 2012-06-23 00:00:00 Z
19
- dependencies:
20
- - !ruby/object:Gem::Dependency
12
+ date: 2012-08-02 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
21
15
  name: minitest
22
- prerelease: false
23
- requirement: &id001 !ruby/object:Gem::Requirement
16
+ requirement: !ruby/object:Gem::Requirement
24
17
  none: false
25
- requirements:
18
+ requirements:
26
19
  - - ~>
27
- - !ruby/object:Gem::Version
28
- hash: 7
29
- segments:
30
- - 2
31
- version: "2"
20
+ - !ruby/object:Gem::Version
21
+ version: '2'
32
22
  type: :development
33
- version_requirements: *id001
34
- - !ruby/object:Gem::Dependency
35
- name: sqlite3
36
23
  prerelease: false
37
- requirement: &id002 !ruby/object:Gem::Requirement
24
+ version_requirements: !ruby/object:Gem::Requirement
38
25
  none: false
39
- requirements:
40
- - - ">="
41
- - !ruby/object:Gem::Version
42
- hash: 3
43
- segments:
44
- - 0
45
- version: "0"
46
- type: :development
47
- version_requirements: *id002
48
- - !ruby/object:Gem::Dependency
26
+ requirements:
27
+ - - ~>
28
+ - !ruby/object:Gem::Version
29
+ version: '2'
30
+ - !ruby/object:Gem::Dependency
49
31
  name: rails
50
- prerelease: false
51
- requirement: &id003 !ruby/object:Gem::Requirement
32
+ requirement: !ruby/object:Gem::Requirement
52
33
  none: false
53
- requirements:
34
+ requirements:
54
35
  - - ~>
55
- - !ruby/object:Gem::Version
56
- hash: 9
57
- segments:
58
- - 3
59
- - 2
60
- - 3
36
+ - !ruby/object:Gem::Version
61
37
  version: 3.2.3
62
38
  type: :development
63
- version_requirements: *id003
64
- - !ruby/object:Gem::Dependency
65
- name: activesupport
66
39
  prerelease: false
67
- requirement: &id004 !ruby/object:Gem::Requirement
40
+ version_requirements: !ruby/object:Gem::Requirement
68
41
  none: false
69
- requirements:
70
- - - ">="
71
- - !ruby/object:Gem::Version
72
- hash: 3
73
- segments:
74
- - 0
75
- version: "0"
76
- type: :runtime
77
- version_requirements: *id004
78
- - !ruby/object:Gem::Dependency
42
+ requirements:
43
+ - - ~>
44
+ - !ruby/object:Gem::Version
45
+ version: 3.2.3
46
+ - !ruby/object:Gem::Dependency
79
47
  name: cancan
80
- prerelease: false
81
- requirement: &id005 !ruby/object:Gem::Requirement
48
+ requirement: !ruby/object:Gem::Requirement
82
49
  none: false
83
- requirements:
84
- - - ">="
85
- - !ruby/object:Gem::Version
86
- hash: 3
87
- segments:
88
- - 0
89
- version: "0"
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
90
54
  type: :runtime
91
- version_requirements: *id005
92
- - !ruby/object:Gem::Dependency
93
- name: role_model
94
55
  prerelease: false
95
- requirement: &id006 !ruby/object:Gem::Requirement
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ - !ruby/object:Gem::Dependency
63
+ name: role_model
64
+ requirement: !ruby/object:Gem::Requirement
96
65
  none: false
97
- requirements:
98
- - - ">="
99
- - !ruby/object:Gem::Version
100
- hash: 3
101
- segments:
102
- - 0
103
- version: "0"
66
+ requirements:
67
+ - - ! '>='
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
104
70
  type: :runtime
105
- version_requirements: *id006
106
- description: Wraps CanCan and RoleModel up to make role based authorisation really easy in Rails 3.x.
107
- email:
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
77
+ version: '0'
78
+ description: Wraps CanCan and RoleModel up to make role based authorisation really
79
+ easy in Rails 3.x.
80
+ email:
108
81
  - james2mccarthy@gmail.com
109
82
  executables: []
110
-
111
83
  extensions: []
112
-
113
84
  extra_rdoc_files: []
114
-
115
- files:
85
+ files:
116
86
  - .gitignore
87
+ - .travis.yml
117
88
  - Gemfile
118
89
  - MIT-LICENSE
119
90
  - README.rdoc
@@ -134,7 +105,8 @@ files:
134
105
  - lib/generators/canard/ability/templates/abilities.rb.erb
135
106
  - lib/generators/rspec/ability/ability_generator.rb
136
107
  - lib/generators/rspec/ability/templates/abilities_spec.rb.erb
137
- - test/abilities/admins.rb
108
+ - lib/tasks/canard.rake
109
+ - test/abilities/administrators.rb
138
110
  - test/canard/abilities_test.rb
139
111
  - test/canard/ability_test.rb
140
112
  - test/canard/adapters/active_record_test.rb
@@ -175,39 +147,30 @@ files:
175
147
  - test/test_helper.rb
176
148
  homepage: https://github.com/james2m/canard
177
149
  licenses: []
178
-
179
150
  post_install_message:
180
151
  rdoc_options: []
181
-
182
- require_paths:
152
+ require_paths:
183
153
  - lib
184
- required_ruby_version: !ruby/object:Gem::Requirement
154
+ required_ruby_version: !ruby/object:Gem::Requirement
185
155
  none: false
186
- requirements:
187
- - - ">="
188
- - !ruby/object:Gem::Version
189
- hash: 3
190
- segments:
191
- - 0
192
- version: "0"
193
- required_rubygems_version: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - ! '>='
158
+ - !ruby/object:Gem::Version
159
+ version: '0'
160
+ required_rubygems_version: !ruby/object:Gem::Requirement
194
161
  none: false
195
- requirements:
196
- - - ">="
197
- - !ruby/object:Gem::Version
198
- hash: 3
199
- segments:
200
- - 0
201
- version: "0"
162
+ requirements:
163
+ - - ! '>'
164
+ - !ruby/object:Gem::Version
165
+ version: 1.3.1
202
166
  requirements: []
203
-
204
167
  rubyforge_project: canard
205
168
  rubygems_version: 1.8.24
206
169
  signing_key:
207
170
  specification_version: 3
208
171
  summary: Adds role based authorisation to Rails by combining RoleModel and CanCan.
209
- test_files:
210
- - test/abilities/admins.rb
172
+ test_files:
173
+ - test/abilities/administrators.rb
211
174
  - test/canard/abilities_test.rb
212
175
  - test/canard/ability_test.rb
213
176
  - test/canard/adapters/active_record_test.rb
@@ -1,5 +0,0 @@
1
- abilities_for(:admin) do
2
-
3
- can :manage, [Activity, User]
4
-
5
- end