diff --git a/Gemfile b/Gemfile index 78cdd51..d33703d 100644 --- a/Gemfile +++ b/Gemfile @@ -4,8 +4,6 @@ case ENV["MODEL_ADAPTER"] when nil, "active_record" gem "sqlite3" gem "activerecord", '~> 3.0.9', :require => "active_record" - gem "with_model", '~> 0.1.5' - gem "meta_where" when "data_mapper" gem "dm-core", "~> 1.0.2" gem "dm-sqlite-adapter", "~> 1.0.2" diff --git a/spec/cancan/controller_resource_spec.rb b/spec/cancan/controller_resource_spec.rb index 24fca28..3ae03d8 100644 --- a/spec/cancan/controller_resource_spec.rb +++ b/spec/cancan/controller_resource_spec.rb @@ -2,6 +2,8 @@ require "spec_helper" describe CanCan::ControllerResource do before(:each) do + Project.delete_all + Category.delete_all @params = HashWithIndifferentAccess.new(:controller => "projects") @controller_class = Class.new @controller = @controller_class.new @@ -70,6 +72,9 @@ describe CanCan::ControllerResource do end it "does not build a collection when on index action when class does not respond to accessible_by and not mark ability as fully authorized" do + class CustomModel + end + @params[:controller] = "custom_models" @params[:action] = "index" CanCan::ControllerResource.new(@controller, :load => true).process @controller.instance_variable_get(:@project).should be_nil diff --git a/spec/cancan/model_adapters/active_record_adapter_spec.rb b/spec/cancan/model_adapters/active_record_adapter_spec.rb index 0156dbf..4534b87 100644 --- a/spec/cancan/model_adapters/active_record_adapter_spec.rb +++ b/spec/cancan/model_adapters/active_record_adapter_spec.rb @@ -1,42 +1,7 @@ if ENV["MODEL_ADAPTER"].nil? || ENV["MODEL_ADAPTER"] == "active_record" require "spec_helper" - ActiveRecord::Base.establish_connection(:adapter => "sqlite3", :database => ":memory:") - describe CanCan::ModelAdapters::ActiveRecordAdapter do - with_model :category do - table do |t| - t.boolean "visible" - end - model do - has_many :articles - end - end - - with_model :article do - table do |t| - t.string "name" - t.boolean "published" - t.boolean "secret" - t.integer "priority" - t.integer "category_id" - end - model do - belongs_to :category - has_many :comments - end - end - - with_model :comment do - table do |t| - t.boolean "spam" - t.integer "article_id" - end - model do - belongs_to :article - end - end - before(:each) do Article.delete_all Comment.delete_all @@ -229,6 +194,7 @@ if ENV["MODEL_ADAPTER"].nil? || ENV["MODEL_ADAPTER"] == "active_record" end it "restricts articles given a MetaWhere condition" do + pending @ability.can :read, :articles, :priority.lt => 2 article1 = Article.create!(:priority => 1) article2 = Article.create!(:priority => 3) @@ -238,6 +204,7 @@ if ENV["MODEL_ADAPTER"].nil? || ENV["MODEL_ADAPTER"] == "active_record" end it "matches any MetaWhere condition" do + pending adapter = CanCan::ModelAdapters::ActiveRecordAdapter article1 = Article.new(:priority => 1, :name => "Hello World") adapter.matches_condition?(article1, :priority.eq, 1).should be_true diff --git a/spec/fixtures/active_record.rb b/spec/fixtures/active_record.rb new file mode 100644 index 0000000..f0ad796 --- /dev/null +++ b/spec/fixtures/active_record.rb @@ -0,0 +1,37 @@ +ActiveRecord::Base.establish_connection(:adapter => "sqlite3", :database => ":memory:") + +class Category < ActiveRecord::Base + connection.create_table(table_name) do |t| + t.boolean :visible + end + has_many :articles + has_many :projects +end + +class Project < ActiveRecord::Base + connection.create_table(table_name) do |t| + t.integer :category_id + t.string :name + end + belongs_to :category +end + +class Article < ActiveRecord::Base + connection.create_table(table_name) do |t| + t.integer :category_id + t.string :name + t.boolean :published + t.boolean :secret + t.integer :priority + end + belongs_to :category + has_many :comments +end + +class Comment < ActiveRecord::Base + connection.create_table(table_name) do |t| + t.integer :article_id + t.boolean :spam + end + belongs_to :article +end diff --git a/spec/fixtures/data_mapper.rb b/spec/fixtures/data_mapper.rb new file mode 100644 index 0000000..e69de29 diff --git a/spec/fixtures/mongoid.rb b/spec/fixtures/mongoid.rb new file mode 100644 index 0000000..e69de29 diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index 834b127..39924aa 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -3,21 +3,16 @@ require 'bundler/setup' Bundler.require(:default) -require 'supermodel' # shouldn't Bundler do this already? require 'active_support/all' require 'matchers' require 'cancan/matchers' +require File.expand_path('../fixtures/active_record', __FILE__) + RSpec.configure do |config| config.treat_symbols_as_metadata_keys_with_true_values = true config.filter_run :focus => true config.run_all_when_everything_filtered = true - - config.before(:each) do - Project.delete_all - Category.delete_all - end - config.extend WithModel end class Ability @@ -26,20 +21,3 @@ class Ability def initialize(user) end end - -class Category < SuperModel::Base - has_many :projects -end - -class Project < SuperModel::Base - belongs_to :category - attr_accessor :category # why doesn't SuperModel do this automatically? - - def self.respond_to?(method, include_private = false) - if method.to_s == "find_by_name!" # hack to simulate ActiveRecord - true - else - super - end - end -end