role_up 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
data/.gemtest ADDED
File without changes
data/.gitignore ADDED
@@ -0,0 +1,16 @@
1
+ .rvmrc
2
+ *.log
3
+ **/*/log/*
4
+ pkg/*
5
+ *.gem
6
+ .bundle
7
+ .DS_Store
8
+ *.sw[o|a|p]
9
+ test/dummy/db/repos/*
10
+ test/dummy/db/*.sqlite3
11
+ doc
12
+ docs
13
+ .yardoc
14
+ test/dummy/tmp/**/*
15
+ test/tmp/**/*
16
+
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in regulate.gemspec
4
+ gemspec
data/Gemfile.lock ADDED
@@ -0,0 +1,23 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ role_up (0.1.0)
5
+ active_support (~> 3.0.0)
6
+ cancan (~> 1.6.5)
7
+
8
+ GEM
9
+ remote: http://rubygems.org/
10
+ specs:
11
+ active_support (3.0.0)
12
+ activesupport (= 3.0.0)
13
+ activesupport (3.0.0)
14
+ cancan (1.6.5)
15
+ minitest (2.2.2)
16
+
17
+ PLATFORMS
18
+ ruby
19
+
20
+ DEPENDENCIES
21
+ bundler (~> 1.0.0)
22
+ minitest (~> 2.2.2)
23
+ role_up!
data/LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2011 Quick Left, Inc.
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,73 @@
1
+ Role Up
2
+ ===========
3
+ Rails 3 engine that adds some real-deal lovin' to `CanCan` authorization.
4
+
5
+ ### Convention
6
+ Authorization definitions with `CanCan` quickly become verbose in complex
7
+ applications. By breaking them up per model and being able to depend on
8
+ a few common extras, we can drastically clean up our code. Let's look at
9
+ the following directory structure...
10
+
11
+ - app/
12
+ - abilities/
13
+ + widget_ability.rb
14
+ - controllers/
15
+ - etc...
16
+
17
+ As you can see, we've added a new folder to the `app/` directory in our
18
+ project. Here, we'll create an ability file for each of our models that
19
+ need it to define our authorization abilities.
20
+
21
+ ### Ability Files
22
+ Here's an example ability file...
23
+
24
+ # app/abilities/widget_ability.rb
25
+ class WidgetAbility < Ability
26
+
27
+ define_rules :widget do |user|
28
+ can :manage , Widget , :user_id => user.id
29
+ end
30
+
31
+ end
32
+
33
+ The `define_rules` method accepts a block and yields the current user.
34
+ In this block, the standard `CanCan` ability definitions methods apply. If
35
+ you have a set of standard authorization rules, you can reopen the
36
+ provided `Ability` class and define a `standard_rules` block. Check
37
+ it...
38
+
39
+ # app/abilities/ability.rb
40
+ class Ability
41
+
42
+ standard_rules do |user|
43
+ if user.admin?
44
+ can :manage , :all
45
+ end
46
+ end
47
+
48
+ end
49
+
50
+ Standard rules will get evaluated last, and therefore take highest
51
+ priority.
52
+
53
+ ### Model and Controller Helpers
54
+ The standard `CanCan` helpers apply.
55
+
56
+ ### Setup
57
+ You can configure the class that `RoleUp` will use to authorize with in
58
+ the gem's setup block. The default is `:user`. You can also pass class
59
+ constants or strings as opposed to a symbol e.g.
60
+
61
+ # app/initializers/role_up.rb
62
+ RoleUp.setup do |config|
63
+ config.authorization_class = :cool_user # => CoolUser
64
+ # or
65
+ config.authorization_class = CoolUser # => CoolUser
66
+ # or
67
+ config.authorization_class = "cool_user" # => CoolUser
68
+ # or
69
+ config.authorization_class = "my_namespace/cool_user" # => MyNamspace::CoolUser
70
+ # or
71
+ config.authorization_class = "MyNamespace::CoolUser" # => MyNamspace::CoolUser
72
+ end
73
+
data/Rakefile ADDED
@@ -0,0 +1,12 @@
1
+ require 'bundler'
2
+ require 'rake/testtask'
3
+
4
+ Bundler::GemHelper.install_tasks
5
+
6
+ desc 'Unit tests.'
7
+ Rake::TestTask.new(:test) do |t|
8
+ t.libs << 'test'
9
+ t.pattern = 'test/**/*_test.rb'
10
+ t.verbose = true
11
+ end
12
+ task :default => :test
data/lib/role_up.rb ADDED
@@ -0,0 +1,19 @@
1
+ require "active_support/core_ext/module/attribute_accessors"
2
+ require "cancan"
3
+
4
+ module RoleUp
5
+
6
+ # Lock 'n Load
7
+ autoload :Errors , 'role_up/errors'
8
+ require 'role_up/ability'
9
+
10
+ # The class we'll authorize against
11
+ mattr_accessor :authorization_class
12
+ @@authorization_class = :user
13
+
14
+ # Fancy setup block
15
+ def self.setup
16
+ yield self
17
+ end
18
+
19
+ end
@@ -0,0 +1,106 @@
1
+ # Requires
2
+ require "active_support/core_ext/class/attribute_accessors"
3
+ require "active_support/core_ext/string/inflections"
4
+ require "cancan/ability"
5
+
6
+ class ::Ability
7
+
8
+ # Attributes
9
+ attr_reader :authorization_instance
10
+
11
+ # Class Attributes
12
+ cattr_reader :ability_definitions
13
+ @@ability_definitions = {}
14
+
15
+ # Includes
16
+ include CanCan::Ability
17
+
18
+ def initialize( current_authorization_instance = nil , *resources )
19
+
20
+ # Load our authorization class
21
+ if current_authorization_instance
22
+ @authorization_instance = current_authorization_instance
23
+ else
24
+ @authorization_instance = get_new_authorization_instance
25
+ end
26
+
27
+ # Load rules
28
+ if resources.empty?
29
+ load_all_rules
30
+ else
31
+ load_rules_for! *resources
32
+ end
33
+
34
+ end
35
+
36
+ # Class Methods
37
+
38
+ def self.define_rules( &rule_set )
39
+ raise RoleUp::Errors::IncorrectAbilityClassDefinition unless self.to_s =~ /(\w+)Ability$/
40
+ resource = $1.underscore.to_sym
41
+ ability_definitions[ resource ] = rule_set
42
+ end
43
+
44
+ def self.standard_rules( &rule_set )
45
+ ability_definitions[ :__standard ] = rule_set
46
+ end
47
+
48
+ # Instance Methods
49
+
50
+ def add_standard_rules_to_resources_hash_if_defined( resources )
51
+ resources.delete :__standard # just get rid of it - we'll add it back if it's really there
52
+ resources << :__standard if standard_rules_defined?
53
+ resources
54
+ end
55
+
56
+ def constantize_authorization_class
57
+ begin
58
+ if RoleUp.authorization_class.is_a? Symbol
59
+ return RoleUp.authorization_class.to_s.camelize.constantize
60
+ elsif RoleUp.authorization_class.is_a? Class
61
+ return RoleUp.authorization_class
62
+ elsif RoleUp.authorization_class.is_a? String
63
+ return RoleUp.authorization_class.camelize.constantize
64
+ end
65
+ rescue
66
+ raise RoleUp::Errors::BadAuthorizationClass.new "Provided authorization class is malformed :: #{RoleUp.authorization_class}"
67
+ end
68
+ end
69
+
70
+ def get_new_authorization_instance
71
+ constantize_authorization_class.new
72
+ end
73
+
74
+ def load_all_rules
75
+ load_rules_for *self.class.ability_definitions.keys
76
+ end
77
+
78
+ def load_resource_rules( resource )
79
+ rules_block = self.class.ability_definitions[ resource ]
80
+ self.instance_exec( authorization_instance , &rules_block )
81
+ end
82
+
83
+ def load_resource_rules!( resource )
84
+ raise RoleUp::Errors::RulesNotDefinedError.new( "Rules not defined for #{resource}" ) unless rules_defined_for? resource
85
+ load_resource_rules resource
86
+ end
87
+
88
+ def load_rules_for( *resources )
89
+ add_standard_rules_to_resources_hash_if_defined resources
90
+ resources.each { |resource| load_resource_rules resource }
91
+ end
92
+
93
+ def load_rules_for!( *resources )
94
+ add_standard_rules_to_resources_hash_if_defined resources
95
+ resources.each { |resource| load_resource_rules! resource }
96
+ end
97
+
98
+ def rules_defined_for?( resource )
99
+ self.class.ability_definitions.include? resource
100
+ end
101
+
102
+ def standard_rules_defined?
103
+ rules_defined_for? :__standard
104
+ end
105
+
106
+ end
@@ -0,0 +1,7 @@
1
+ module RoleUp
2
+ module Errors
3
+ class BadAuthorizationClass < StandardError; end
4
+ class IncorrectAbilityClassDefinition < StandardError; end
5
+ class RulesNotDefinedError < StandardError; end
6
+ end
7
+ end
@@ -0,0 +1,5 @@
1
+ module RoleUp
2
+ # Our gem version
3
+ VERSION = "0.1.0"
4
+ end
5
+
data/role_up.gemspec ADDED
@@ -0,0 +1,29 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "role_up/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "role_up"
7
+ s.version = RoleUp::VERSION
8
+ s.platform = Gem::Platform::RUBY
9
+ s.authors = ["Ryan Cook"]
10
+ s.email = ["ryan@quickleft.com"]
11
+ s.homepage = "https://github.com/quickleft/role_up"
12
+ s.summary = "role_up-#{s.version}"
13
+ s.description = %q{Rails 3 engine that adds some real-deal lovin' to CanCan authorization.}
14
+
15
+ s.rubyforge_project = "role_up"
16
+
17
+ # Runtime Dependencies
18
+ s.add_dependency "active_support" , "~> 3.0.0"
19
+ s.add_dependency "cancan" , "~> 1.6.5"
20
+
21
+ # Development Dependencies
22
+ s.add_development_dependency "bundler" , "~> 1.0.0"
23
+ s.add_development_dependency "minitest" , "~> 2.2.2"
24
+
25
+ s.files = `git ls-files`.split("\n")
26
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
27
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
28
+ s.require_paths = ["lib"]
29
+ end
@@ -0,0 +1,65 @@
1
+ require "test_helper"
2
+
3
+ describe Ability do
4
+
5
+ describe "Class Level" do
6
+
7
+ it "should have a class var to hold our rule procs" do
8
+ Ability.class_variables.map { |var| var.to_sym }.must_include :@@ability_definitions
9
+ end
10
+
11
+ it "should respond to define_rules" do
12
+ Ability.must_respond_to :define_rules
13
+ end
14
+
15
+ it "should respond to standard_rules" do
16
+ Ability.must_respond_to :standard_rules
17
+ end
18
+
19
+ end
20
+
21
+ describe "Instance Level" do
22
+
23
+ before do
24
+ @ability = Ability.new( TestUser.new )
25
+ end
26
+
27
+ it "should respond to constantize_authorization_class" do
28
+ @ability.must_respond_to :constantize_authorization_class
29
+ end
30
+
31
+ it "should respond to get_new_authorization_instance" do
32
+ @ability.must_respond_to :get_new_authorization_instance
33
+ end
34
+
35
+ it "should respond to load_all_rules" do
36
+ @ability.must_respond_to :load_all_rules
37
+ end
38
+
39
+ it "should respond to load_resource_rules" do
40
+ @ability.must_respond_to :load_resource_rules
41
+ end
42
+
43
+ it "should respond to load_resource_rules!" do
44
+ @ability.must_respond_to :load_resource_rules!
45
+ end
46
+
47
+ it "should respond to load_rules_for" do
48
+ @ability.must_respond_to :load_rules_for
49
+ end
50
+
51
+ it "should respond to load_rules_for!" do
52
+ @ability.must_respond_to :load_rules_for!
53
+ end
54
+
55
+ it "should respond to rules_defined_for?" do
56
+ @ability.must_respond_to :rules_defined_for?
57
+ end
58
+
59
+ it "should respond to standard_rules_defined?" do
60
+ @ability.must_respond_to :standard_rules_defined?
61
+ end
62
+
63
+ end
64
+
65
+ end
@@ -0,0 +1,159 @@
1
+ require "test_helper"
2
+
3
+ class AbilityTest < MiniTest::Unit::TestCase
4
+
5
+ def setup
6
+ reset_ability_class
7
+ end
8
+
9
+ ## add_standard_rules_to_resources_hash_if_defined
10
+ #
11
+
12
+ def test_standard_rules_are_not_added_if_they_dont_exist
13
+ ability = Ability.new
14
+ resources = [ :test_widget ]
15
+ modified_resources_hash = ability.add_standard_rules_to_resources_hash_if_defined resources
16
+ refute_includes modified_resources_hash , :__standard
17
+ end
18
+
19
+ def test_can_determine_whether_standard_rules_exist_and_add_them_to_resources_hash
20
+ load_standard_rules
21
+ ability = Ability.new
22
+ resources = [ :test_widget ]
23
+ modified_resources_hash = ability.add_standard_rules_to_resources_hash_if_defined resources
24
+ assert_includes modified_resources_hash , :__standard
25
+ end
26
+
27
+ ## constantize_authorization_class
28
+ #
29
+
30
+ def test_can_constantize_authorization_class_with_symbol
31
+ RoleUp.setup do |config|
32
+ config.authorization_class = :test_user
33
+ end
34
+ ability = Ability.new
35
+ assert_equal TestUser , ability.constantize_authorization_class
36
+ end
37
+
38
+ def test_can_constantize_authorization_class_with_constant
39
+ RoleUp.setup do |config|
40
+ config.authorization_class = TestUser
41
+ end
42
+ ability = Ability.new
43
+ assert_equal TestUser , ability.constantize_authorization_class
44
+ end
45
+
46
+ def test_can_constantize_authorization_class_with_constant_when_nested_in_module
47
+ RoleUp.setup do |config|
48
+ config.authorization_class = MyModule::TestUser
49
+ end
50
+ ability = Ability.new
51
+ assert_equal MyModule::TestUser , ability.constantize_authorization_class
52
+ end
53
+
54
+ def test_can_constantize_authorization_class_with_underscored_string
55
+ RoleUp.setup do |config|
56
+ config.authorization_class = "test_user"
57
+ end
58
+ ability = Ability.new
59
+ assert_equal TestUser , ability.constantize_authorization_class
60
+ end
61
+
62
+ def test_can_constantize_authorization_class_with_classy_string
63
+ RoleUp.setup do |config|
64
+ config.authorization_class = "TestUser"
65
+ end
66
+ ability = Ability.new
67
+ assert_equal TestUser , ability.constantize_authorization_class
68
+ end
69
+
70
+ def test_can_constantize_authorization_class_with_underscored_string_when_nested_in_module
71
+ RoleUp.setup do |config|
72
+ config.authorization_class = "my_module/test_user"
73
+ end
74
+ ability = Ability.new
75
+ assert_equal MyModule::TestUser , ability.constantize_authorization_class
76
+ end
77
+
78
+ def test_can_constantize_authorization_class_with_classy_string_when_nested_in_module
79
+ RoleUp.setup do |config|
80
+ config.authorization_class = "MyModule::TestUser"
81
+ end
82
+ ability = Ability.new
83
+ assert_equal MyModule::TestUser , ability.constantize_authorization_class
84
+ end
85
+
86
+ def test_can_raise_bad_authorization_class_error_when_bad_authorization_class_specified
87
+ RoleUp.setup do |config|
88
+ config.authorization_class = :bad_authorization_class!
89
+ end
90
+ assert_raises RoleUp::Errors::BadAuthorizationClass do
91
+ ability = Ability.new
92
+ end
93
+ end
94
+
95
+ ## get_new_authorization_instance
96
+ #
97
+
98
+ def test_get_new_authorization_instance_returns_instance_of_authorization_class
99
+ reset_ability_class
100
+ assert_instance_of TestUser , Ability.new.get_new_authorization_instance
101
+ end
102
+
103
+ ## load_resource_rules
104
+ #
105
+
106
+ def test_can_load_resource_rules
107
+ ability = Ability.new
108
+ load_test_widget_2_rules
109
+ ability.load_resource_rules(:test_widget2)
110
+ assert ability.can?( :manage , TestWidget2 )
111
+ end
112
+
113
+ ## load_resource_rules!
114
+ #
115
+
116
+ def test_load_resource_rules_with_bad_resource_trows_error
117
+ ability = Ability.new
118
+ assert_raises RoleUp::Errors::RulesNotDefinedError do
119
+ ability.load_resource_rules! :bogus_resource
120
+ end
121
+ end
122
+
123
+ ## load_rules_for
124
+ #
125
+
126
+ def test_standard_rules_override_other_rules_when_all_are_loaded
127
+ load_standard_rules
128
+ ability = Ability.new
129
+ refute ability.can? :manage , TestWidget
130
+ end
131
+
132
+ ## load_rules_for!
133
+ #
134
+
135
+ def test_standard_rules_override_other_rules_when_resources_are_specified
136
+ load_standard_rules
137
+ ability = Ability.new( TestUser.new , :test_widget )
138
+ refute ability.can? :manage , TestWidget
139
+ end
140
+
141
+ ## rules_defined_for?
142
+ #
143
+
144
+ def test_able_to_check_whether_rules_are_defined_for_a_resource
145
+ ability = Ability.new
146
+ assert ability.rules_defined_for? :test_widget
147
+ end
148
+
149
+ ## standard_rules_defined?
150
+ #
151
+
152
+ def test_able_to_check_whether_standard_rules_are_defined
153
+ load_standard_rules
154
+ ability = Ability.new
155
+ assert ability.standard_rules_defined?
156
+ end
157
+
158
+ end
159
+
@@ -0,0 +1,18 @@
1
+ require "test_helper"
2
+
3
+ describe RoleUp do
4
+
5
+ it "must be a module" do
6
+ RoleUp.must_be_kind_of Module
7
+ end
8
+
9
+ it "should respond to authorization_class" do
10
+ RoleUp.must_respond_to :authorization_class
11
+ end
12
+
13
+ it "should respond to setup" do
14
+ RoleUp.must_respond_to :setup
15
+ end
16
+
17
+ end
18
+
@@ -0,0 +1,20 @@
1
+ require 'test_helper'
2
+
3
+ class RoleUpTest < MiniTest::Unit::TestCase
4
+
5
+ def test_that_ability_is_loaded
6
+ assert defined? Ability
7
+ end
8
+
9
+ def test_that_our_errors_are_loadable
10
+ assert defined? RoleUp::Errors
11
+ end
12
+
13
+ def test_that_role_up_yields_self_on_setup
14
+ RoleUp.setup do |config|
15
+ assert_equal RoleUp , config
16
+ end
17
+ end
18
+
19
+ end
20
+
@@ -0,0 +1,7 @@
1
+ class TestUser; end
2
+ class TestWidget; end
3
+ class TestWidget2; end
4
+ module MyModule
5
+ class TestUser; end
6
+ end
7
+
@@ -0,0 +1,38 @@
1
+ def load_standard_rules
2
+ eval <<-___
3
+ class Ability
4
+ standard_rules do |test_user|
5
+ cannot :manage , TestWidget
6
+ end
7
+ end
8
+ ___
9
+ end
10
+
11
+ def load_test_widget_rules
12
+ eval <<-___
13
+ class TestWidgetAbility < Ability
14
+ define_rules do |test_user|
15
+ can :manage , TestWidget
16
+ end
17
+ end
18
+ ___
19
+ end
20
+
21
+ def load_test_widget_2_rules
22
+ eval <<-___
23
+ class TestWidget2Ability < Ability
24
+ define_rules do |test_user|
25
+ can :manage , TestWidget2
26
+ end
27
+ end
28
+ ___
29
+ end
30
+
31
+ def reset_ability_class
32
+ RoleUp.setup do |config|
33
+ config.authorization_class = :test_user
34
+ end
35
+ Ability.send :class_variable_set , :@@ability_definitions , {}
36
+ load_test_widget_rules
37
+ end
38
+
@@ -0,0 +1,12 @@
1
+ require "rubygems"
2
+ require "bundler/setup"
3
+
4
+ # make sure we're using the minitest gem
5
+ gem "minitest"
6
+
7
+ require "role_up"
8
+ require "minitest/autorun"
9
+
10
+ # Load support files
11
+ Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each { |f| require f }
12
+
metadata ADDED
@@ -0,0 +1,122 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: role_up
3
+ version: !ruby/object:Gem::Version
4
+ prerelease:
5
+ version: 0.1.0
6
+ platform: ruby
7
+ authors:
8
+ - Ryan Cook
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+
13
+ date: 2011-06-02 00:00:00 Z
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: active_support
17
+ prerelease: false
18
+ requirement: &id001 !ruby/object:Gem::Requirement
19
+ none: false
20
+ requirements:
21
+ - - ~>
22
+ - !ruby/object:Gem::Version
23
+ version: 3.0.0
24
+ type: :runtime
25
+ version_requirements: *id001
26
+ - !ruby/object:Gem::Dependency
27
+ name: cancan
28
+ prerelease: false
29
+ requirement: &id002 !ruby/object:Gem::Requirement
30
+ none: false
31
+ requirements:
32
+ - - ~>
33
+ - !ruby/object:Gem::Version
34
+ version: 1.6.5
35
+ type: :runtime
36
+ version_requirements: *id002
37
+ - !ruby/object:Gem::Dependency
38
+ name: bundler
39
+ prerelease: false
40
+ requirement: &id003 !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ~>
44
+ - !ruby/object:Gem::Version
45
+ version: 1.0.0
46
+ type: :development
47
+ version_requirements: *id003
48
+ - !ruby/object:Gem::Dependency
49
+ name: minitest
50
+ prerelease: false
51
+ requirement: &id004 !ruby/object:Gem::Requirement
52
+ none: false
53
+ requirements:
54
+ - - ~>
55
+ - !ruby/object:Gem::Version
56
+ version: 2.2.2
57
+ type: :development
58
+ version_requirements: *id004
59
+ description: Rails 3 engine that adds some real-deal lovin' to CanCan authorization.
60
+ email:
61
+ - ryan@quickleft.com
62
+ executables: []
63
+
64
+ extensions: []
65
+
66
+ extra_rdoc_files: []
67
+
68
+ files:
69
+ - .gemtest
70
+ - .gitignore
71
+ - Gemfile
72
+ - Gemfile.lock
73
+ - LICENSE
74
+ - README.md
75
+ - Rakefile
76
+ - lib/role_up.rb
77
+ - lib/role_up/ability.rb
78
+ - lib/role_up/errors.rb
79
+ - lib/role_up/version.rb
80
+ - role_up.gemspec
81
+ - test/ability_spec_test.rb
82
+ - test/ability_test.rb
83
+ - test/role_up_spec_test.rb
84
+ - test/role_up_test.rb
85
+ - test/support/helper_classes.rb
86
+ - test/support/helper_methods.rb
87
+ - test/test_helper.rb
88
+ homepage: https://github.com/quickleft/role_up
89
+ licenses: []
90
+
91
+ post_install_message:
92
+ rdoc_options: []
93
+
94
+ require_paths:
95
+ - lib
96
+ required_ruby_version: !ruby/object:Gem::Requirement
97
+ none: false
98
+ requirements:
99
+ - - ">="
100
+ - !ruby/object:Gem::Version
101
+ version: "0"
102
+ required_rubygems_version: !ruby/object:Gem::Requirement
103
+ none: false
104
+ requirements:
105
+ - - ">="
106
+ - !ruby/object:Gem::Version
107
+ version: "0"
108
+ requirements: []
109
+
110
+ rubyforge_project: role_up
111
+ rubygems_version: 1.7.2
112
+ signing_key:
113
+ specification_version: 3
114
+ summary: role_up-0.1.0
115
+ test_files:
116
+ - test/ability_spec_test.rb
117
+ - test/ability_test.rb
118
+ - test/role_up_spec_test.rb
119
+ - test/role_up_test.rb
120
+ - test/support/helper_classes.rb
121
+ - test/support/helper_methods.rb
122
+ - test/test_helper.rb