From 645897f3e618621aad1bfab81a14f723e27c08ef Mon Sep 17 00:00:00 2001 From: Wellington Cordeiro Date: Fri, 6 Jun 2014 21:09:03 +0000 Subject: [PATCH] Began merging all the pull requests from the main Rolify repo. --- .travis.yml | 16 ++++----- gemfiles/Gemfile.rails-3.2 | 13 ++++--- gemfiles/Gemfile.rails-4.0 | 12 +++---- gemfiles/Gemfile.rails-4.1 | 36 +++++++++++++++++++ .../active_record/rolify_generator.rb | 4 +-- lib/rolify/role.rb | 8 +++-- .../shared_examples_for_roles.rb | 9 +++-- 7 files changed, 68 insertions(+), 30 deletions(-) create mode 100644 gemfiles/Gemfile.rails-4.1 diff --git a/.travis.yml b/.travis.yml index 79b13bfc..54d5e77d 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,13 +1,14 @@ rvm: - 1.9.3 - - 2.0.0 - - 2.1.0 - - rbx + - 2.0.0 + - 2.1.1 + - rbx-2 - jruby-19mode gemfile: - gemfiles/Gemfile.rails-3.2 - gemfiles/Gemfile.rails-4.0 + - gemfiles/Gemfile.rails-4.1 env: - ADAPTER=active_record @@ -16,10 +17,7 @@ env: services: mongodb matrix: + fast_finish: true exclude: - - rvm: rbx - gemfile: gemfiles/Gemfile.rails-3.2 - env: ADAPTER=mongoid - - rvm: rbx - gemfile: gemfiles/Gemfile.rails-4.0 - env: ADAPTER=mongoid \ No newline at end of file + - rvm: 1.9.3 + gemfile: gemfiles/Gemfile.rails-4.1 \ No newline at end of file diff --git a/gemfiles/Gemfile.rails-3.2 b/gemfiles/Gemfile.rails-3.2 index 19e027cf..09a7a4b2 100644 --- a/gemfiles/Gemfile.rails-3.2 +++ b/gemfiles/Gemfile.rails-3.2 @@ -1,20 +1,19 @@ source "https://rubygems.org" platforms :rbx do - gem 'racc' - gem 'rubysl', '~> 2.0' gem 'psych' - gem 'json' gem 'rubinius-coverage', '~> 2.0' - gem 'rubysl-test-unit' end group :test do + gem 'railties', '~> 3.2', '< 4.0' case ENV["ADAPTER"] when nil, "active_record" gem "activerecord-jdbcsqlite3-adapter", ">= 1.3.0.rc", :platform => "jruby" - gem "sqlite3", :platform => "ruby" - gem "activerecord", ">= 3.2.0", :require => "active_record" + #Fix sqlite3 version for rbx until rubinus is updated + #https://github.com/travis-ci/travis-ci/issues/2006 + gem "sqlite3", "1.3.8", :platform => "ruby" + gem "activerecord", "~> 3.2.0", :require => "active_record" when "mongoid" gem "mongoid", ">= 3.1" gem "bson_ext", :platform => "ruby" @@ -25,4 +24,4 @@ group :test do gem 'coveralls', :require => false end -gemspec :path => '../' +gemspec :path => '../' \ No newline at end of file diff --git a/gemfiles/Gemfile.rails-4.0 b/gemfiles/Gemfile.rails-4.0 index 13cf23d3..d554e0f0 100644 --- a/gemfiles/Gemfile.rails-4.0 +++ b/gemfiles/Gemfile.rails-4.0 @@ -1,16 +1,12 @@ source "https://rubygems.org" platforms :rbx do - gem 'racc' - gem 'rubysl', '~> 2.0' gem 'psych' - gem 'json' gem 'rubinius-coverage', '~> 2.0' - gem 'rubysl-test-unit' end group :test do - gem "rails", "~> 4.0.1" + gem "railties", "~> 4.0.1", '< 4.1' gem "ammeter" gem "rake" gem "rspec" @@ -24,11 +20,13 @@ group :test do when nil, "active_record" gem "activerecord", "~> 4.0.1", :require => "active_record" gem "activerecord-jdbcsqlite3-adapter", "~> 1.3.5", :platform => "jruby" - gem "sqlite3", :platform => "ruby" + #Fix sqlite3 version for rbx until rubinus is updated + #https://github.com/travis-ci/travis-ci/issues/2006 + gem "sqlite3", "1.3.8", :platform => "ruby" when "mongoid" gem "mongoid", github: 'mongoid/mongoid' gem "bson_ext", :platform => "ruby" else raise "Unknown model adapter: #{ENV["ADAPTER"]}" end -end +end \ No newline at end of file diff --git a/gemfiles/Gemfile.rails-4.1 b/gemfiles/Gemfile.rails-4.1 new file mode 100644 index 00000000..08d64cc4 --- /dev/null +++ b/gemfiles/Gemfile.rails-4.1 @@ -0,0 +1,36 @@ +source "https://rubygems.org" + +platforms :rbx do + gem 'psych' + gem 'rubinius-coverage', '~> 2.0' +end + +group :test do + gem 'rails', github: 'rails/rails', branch: '4-1-stable' + # There is currently an active record bug in Rails 4.1.0, this is a workaround until 4.1.1 is released + # See https://github.com/rails/rails/issues/13648 + # Without this patch, Resource.with_role(:role, User.first).count throws an SQL syntax exception + #gem "railties", "~> 4.1.0" + gem "ammeter" + gem "rake" + gem "rspec" + gem "rspec-rails" + gem "fuubar" + gem "bundler" + + gem 'coveralls', :require => false + + case ENV["ADAPTER"] + when nil, "active_record" + gem "activerecord", "~> 4.1.0", :require => "active_record" + gem "activerecord-jdbcsqlite3-adapter", "~> 1.3.5", :platform => "jruby" + #Fix sqlite3 version for rbx until rubinus is updated + #https://github.com/travis-ci/travis-ci/issues/2006 + gem "sqlite3", "1.3.8", :platform => "ruby" + when "mongoid" + gem "mongoid", github: 'mongoid/mongoid' + gem "bson_ext", :platform => "ruby" + else + raise "Unknown model adapter: #{ENV["ADAPTER"]}" + end +end \ No newline at end of file diff --git a/lib/generators/active_record/rolify_generator.rb b/lib/generators/active_record/rolify_generator.rb index 8dfd6ea3..a6015b77 100644 --- a/lib/generators/active_record/rolify_generator.rb +++ b/lib/generators/active_record/rolify_generator.rb @@ -17,7 +17,7 @@ def inject_role_class end def copy_rolify_migration - migration_template "migration.rb", "db/migrate/rolify_create_#{table_name}" + migration_template "migration.rb", "db/migrate/rolify_create_#{table_name}.rb" end def join_table @@ -47,4 +47,4 @@ def model_content end end end -end \ No newline at end of file +end diff --git a/lib/rolify/role.rb b/lib/rolify/role.rb index 795484f5..912b281e 100644 --- a/lib/rolify/role.rb +++ b/lib/rolify/role.rb @@ -9,8 +9,8 @@ def self.included(base) end def add_role(role_name, resource = nil) - role = self.class.adapter.find_or_create_by(role_name.to_s, - (resource.is_a?(Class) ? resource.to_s : resource.class.name if resource), + role = self.class.adapter.find_or_create_by(role_name.to_s, + (resource.is_a?(Class) ? resource.to_s : resource.class.name if resource), (resource.id if resource && !resource.is_a?(Class))) if !roles.include?(role) @@ -24,7 +24,9 @@ def add_role(role_name, resource = nil) def has_role?(role_name, resource = nil) if new_record? - self.roles.detect { |r| r.name == role_name.to_s && (r.resource == resource || resource.nil?) }.present? + self.roles.detect { |r| r.name == role_name.to_s && ((resource == :any) || + (r.resource.nil? && (r.resource_type.nil? || (r.resource_type == resource.class.to_s))) || + (r.resource == resource))}.present? else self.class.adapter.where(self.roles, :name => role_name, :resource => resource).size > 0 end diff --git a/spec/rolify/shared_examples/shared_examples_for_roles.rb b/spec/rolify/shared_examples/shared_examples_for_roles.rb index 41f0d307..0cdd48f6 100644 --- a/spec/rolify/shared_examples/shared_examples_for_roles.rb +++ b/spec/rolify/shared_examples/shared_examples_for_roles.rb @@ -90,9 +90,14 @@ end subject { user } - + it { should have_role :admin } - it { should have_role :moderator, Forum.first } + it { should have_role :admin, Forum } + it { should have_role :admin, :any } + it { should have_role :moderator, Forum.first } + it { should have_role :moderator, :any } + it { should_not have_role :moderator } + it { should_not have_role :moderator, Forum } it { subject.has_any_role?(:admin).should be_true } end