draper 0.18.0 → 1.0.0
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.
- data/.gitignore +3 -0
- data/.travis.yml +11 -0
- data/.yardopts +1 -1
- data/CHANGELOG.md +161 -0
- data/CONTRIBUTING.md +11 -0
- data/Gemfile +20 -0
- data/LICENSE +7 -0
- data/README.md +324 -0
- data/Rakefile +52 -31
- data/draper.gemspec +11 -9
- data/lib/draper/automatic_delegation.rb +50 -0
- data/lib/draper/collection_decorator.rb +107 -0
- data/lib/draper/decoratable.rb +83 -0
- data/lib/draper/decorated_association.rb +74 -0
- data/lib/draper/decorator.rb +238 -0
- data/lib/draper/delegation.rb +13 -0
- data/lib/draper/finders.rb +37 -0
- data/lib/draper/helper_proxy.rb +17 -0
- data/lib/draper/lazy_helpers.rb +10 -6
- data/lib/draper/railtie.rb +27 -21
- data/lib/draper/tasks/test.rake +22 -0
- data/lib/draper/test/devise_helper.rb +34 -0
- data/lib/draper/test/minitest_integration.rb +2 -3
- data/lib/draper/test/rspec_integration.rb +3 -13
- data/lib/draper/test_case.rb +33 -0
- data/lib/draper/version.rb +1 -1
- data/lib/draper/view_context.rb +12 -17
- data/lib/draper/view_helpers.rb +37 -0
- data/lib/draper.rb +47 -8
- data/lib/generators/decorator/decorator_generator.rb +10 -2
- data/lib/generators/decorator/templates/decorator.rb +12 -27
- data/lib/generators/mini_test/decorator_generator.rb +20 -0
- data/lib/generators/mini_test/templates/decorator_spec.rb +4 -0
- data/lib/generators/mini_test/templates/decorator_test.rb +4 -0
- data/lib/generators/test_unit/templates/decorator_test.rb +1 -1
- data/spec/draper/collection_decorator_spec.rb +286 -0
- data/spec/draper/decoratable_spec.rb +192 -0
- data/spec/draper/decorated_association_spec.rb +142 -0
- data/spec/draper/decorator_spec.rb +624 -0
- data/spec/draper/finders_spec.rb +132 -0
- data/spec/draper/helper_proxy_spec.rb +12 -0
- data/spec/draper/view_helpers_spec.rb +41 -0
- data/spec/dummy/.rspec +2 -0
- data/spec/dummy/README.rdoc +261 -0
- data/spec/dummy/Rakefile +7 -0
- data/spec/dummy/app/controllers/application_controller.rb +4 -0
- data/spec/dummy/app/controllers/localized_urls.rb +5 -0
- data/spec/dummy/app/controllers/posts_controller.rb +11 -0
- data/spec/dummy/app/decorators/post_decorator.rb +32 -0
- data/spec/dummy/app/helpers/application_helper.rb +2 -0
- data/spec/dummy/app/mailers/application_mailer.rb +3 -0
- data/spec/dummy/app/mailers/post_mailer.rb +9 -0
- data/spec/dummy/app/models/post.rb +3 -0
- data/spec/dummy/app/views/layouts/application.html.erb +11 -0
- data/spec/dummy/app/views/post_mailer/decorated_email.html.erb +1 -0
- data/spec/dummy/app/views/posts/_post.html.erb +19 -0
- data/spec/dummy/app/views/posts/show.html.erb +1 -0
- data/spec/dummy/config/application.rb +64 -0
- data/spec/dummy/config/boot.rb +10 -0
- data/spec/dummy/config/database.yml +25 -0
- data/spec/dummy/config/environment.rb +5 -0
- data/spec/dummy/config/environments/development.rb +34 -0
- data/spec/dummy/config/environments/production.rb +55 -0
- data/spec/dummy/config/environments/test.rb +32 -0
- data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
- data/spec/dummy/config/initializers/inflections.rb +15 -0
- data/spec/dummy/config/initializers/mime_types.rb +5 -0
- data/spec/dummy/config/initializers/secret_token.rb +7 -0
- data/spec/dummy/config/initializers/session_store.rb +8 -0
- data/spec/dummy/config/locales/en.yml +5 -0
- data/spec/dummy/config/routes.rb +7 -0
- data/spec/dummy/config.ru +4 -0
- data/spec/dummy/db/migrate/20121019115657_create_posts.rb +8 -0
- data/spec/dummy/db/schema.rb +21 -0
- data/spec/dummy/db/seeds.rb +2 -0
- data/spec/dummy/lib/tasks/test.rake +10 -0
- data/spec/dummy/log/.gitkeep +0 -0
- data/spec/dummy/mini_test/mini_test_integration_test.rb +46 -0
- data/spec/dummy/public/404.html +26 -0
- data/spec/dummy/public/422.html +26 -0
- data/spec/dummy/public/500.html +25 -0
- data/spec/dummy/public/favicon.ico +0 -0
- data/spec/dummy/script/rails +6 -0
- data/spec/dummy/spec/decorators/post_decorator_spec.rb +26 -0
- data/spec/dummy/spec/decorators/rspec_integration_spec.rb +19 -0
- data/spec/dummy/spec/mailers/post_mailer_spec.rb +29 -0
- data/spec/dummy/spec/models/post_spec.rb +14 -0
- data/spec/dummy/spec/spec_helper.rb +8 -0
- data/spec/generators/decorator/decorator_generator_spec.rb +47 -7
- data/spec/integration/integration_spec.rb +33 -0
- data/{performance → spec/performance}/decorators.rb +2 -4
- data/spec/spec_helper.rb +20 -45
- data/spec/support/action_controller.rb +12 -0
- data/spec/support/active_model.rb +7 -0
- data/spec/support/active_record.rb +9 -0
- data/spec/support/{samples → decorators}/decorator_with_application_helper.rb +1 -1
- data/spec/support/decorators/namespaced_product_decorator.rb +5 -0
- data/spec/support/decorators/non_active_model_product_decorator.rb +2 -0
- data/spec/support/decorators/product_decorator.rb +23 -0
- data/spec/support/{samples → decorators}/products_decorator.rb +1 -1
- data/spec/support/decorators/some_thing_decorator.rb +2 -0
- data/spec/support/{samples → decorators}/specific_product_decorator.rb +0 -2
- data/spec/support/dummy_app.rb +85 -0
- data/spec/support/matchers/have_text.rb +50 -0
- data/spec/support/{samples → models}/namespaced_product.rb +1 -3
- data/spec/support/{samples → models}/non_active_model_product.rb +1 -0
- data/spec/support/{samples → models}/product.rb +17 -2
- data/spec/support/models/some_thing.rb +5 -0
- data/spec/support/models/uninferrable_decorator_model.rb +3 -0
- metadata +241 -87
- data/CHANGELOG.markdown +0 -57
- data/Readme.markdown +0 -387
- data/lib/draper/active_model_support.rb +0 -27
- data/lib/draper/base.rb +0 -312
- data/lib/draper/decorated_enumerable_proxy.rb +0 -90
- data/lib/draper/model_support.rb +0 -25
- data/lib/draper/rspec_integration.rb +0 -2
- data/lib/draper/system.rb +0 -18
- data/spec/draper/base_spec.rb +0 -873
- data/spec/draper/decorated_enumerable_proxy_spec.rb +0 -45
- data/spec/draper/model_support_spec.rb +0 -48
- data/spec/minitest-rails/spec_type_spec.rb +0 -63
- data/spec/support/samples/active_record.rb +0 -17
- data/spec/support/samples/decorator.rb +0 -5
- data/spec/support/samples/decorator_with_allows.rb +0 -3
- data/spec/support/samples/decorator_with_denies.rb +0 -3
- data/spec/support/samples/decorator_with_denies_all.rb +0 -3
- data/spec/support/samples/decorator_with_multiple_allows.rb +0 -4
- data/spec/support/samples/decorator_with_special_methods.rb +0 -13
- data/spec/support/samples/enumerable_proxy.rb +0 -3
- data/spec/support/samples/namespaced_product_decorator.rb +0 -7
- data/spec/support/samples/product_decorator.rb +0 -7
- data/spec/support/samples/sequel_product.rb +0 -13
- data/spec/support/samples/some_thing.rb +0 -2
- data/spec/support/samples/some_thing_decorator.rb +0 -3
- /data/{performance → spec/performance}/active_record.rb +0 -0
- /data/{performance/bechmark.rb → spec/performance/benchmark.rb} +0 -0
- /data/{performance → spec/performance}/models.rb +0 -0
- /data/spec/support/{samples → decorators}/widget_decorator.rb +0 -0
- /data/spec/support/{samples → models}/widget.rb +0 -0
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
require 'spec_helper'
|
|
2
|
-
|
|
3
|
-
describe Draper::DecoratedEnumerableProxy do
|
|
4
|
-
before(:each){ ApplicationController.new.view_context }
|
|
5
|
-
subject{ ProductsDecorator.new(source, ProductDecorator) }
|
|
6
|
-
let(:source){ Product.new }
|
|
7
|
-
let(:non_active_model_source){ NonActiveModelProduct.new }
|
|
8
|
-
|
|
9
|
-
context(".helpers") do
|
|
10
|
-
it "have a valid view_context" do
|
|
11
|
-
subject.helpers.should be
|
|
12
|
-
end
|
|
13
|
-
|
|
14
|
-
it "is aliased to .h" do
|
|
15
|
-
subject.h.should == subject.helpers
|
|
16
|
-
end
|
|
17
|
-
|
|
18
|
-
it "build a new view context" do
|
|
19
|
-
Thread.current[:current_view_context] = nil
|
|
20
|
-
subject.helpers.should be
|
|
21
|
-
end
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
context(".decorates") do
|
|
25
|
-
it "sets the model for the decorated" do
|
|
26
|
-
EnumerableProxy.new([source], ProductDecorator).first.model.should == source
|
|
27
|
-
end
|
|
28
|
-
|
|
29
|
-
it "decorates an empty array with the class" do
|
|
30
|
-
EnumerableProxy.decorates([], class: ProductDecorator).should be
|
|
31
|
-
end
|
|
32
|
-
|
|
33
|
-
it "discerns collection items decorator by the name of the decorator" do
|
|
34
|
-
ProductsDecorator.decorates([]).should be
|
|
35
|
-
end
|
|
36
|
-
|
|
37
|
-
it "methods in decorated empty array should work" do
|
|
38
|
-
ProductsDecorator.decorates([]).some_method.should == "some method works"
|
|
39
|
-
end
|
|
40
|
-
|
|
41
|
-
it "raises when decorates an empty array without the klass" do
|
|
42
|
-
lambda{EnumerableProxy.decorates([])}.should raise_error
|
|
43
|
-
end
|
|
44
|
-
end
|
|
45
|
-
end
|
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
require 'spec_helper'
|
|
2
|
-
|
|
3
|
-
describe Draper::ModelSupport do
|
|
4
|
-
subject { Product.new }
|
|
5
|
-
|
|
6
|
-
describe '#decorator' do
|
|
7
|
-
its(:decorator) { should be_kind_of(ProductDecorator) }
|
|
8
|
-
its(:decorator) { should be(subject.decorator) }
|
|
9
|
-
|
|
10
|
-
it 'have abillity to pass block' do
|
|
11
|
-
a = Product.new.decorator { |d| d.awesome_title }
|
|
12
|
-
a.should eql "Awesome Title"
|
|
13
|
-
end
|
|
14
|
-
|
|
15
|
-
it 'is aliased to .decorate' do
|
|
16
|
-
subject.decorator.model.should == subject.decorate.model
|
|
17
|
-
end
|
|
18
|
-
end
|
|
19
|
-
|
|
20
|
-
describe Draper::ModelSupport::ClassMethods do
|
|
21
|
-
shared_examples_for "a call to Draper::ModelSupport::ClassMethods#decorate" do
|
|
22
|
-
subject { klass.limit }
|
|
23
|
-
|
|
24
|
-
its(:decorate) { should be_kind_of(Draper::DecoratedEnumerableProxy) }
|
|
25
|
-
|
|
26
|
-
it "decorate the collection" do
|
|
27
|
-
subject.decorate.size.should == 1
|
|
28
|
-
subject.decorate.to_ary[0].model.should be_a(klass)
|
|
29
|
-
end
|
|
30
|
-
|
|
31
|
-
it "return a new instance each time it is called" do
|
|
32
|
-
subject.decorate.should_not == subject.decorate
|
|
33
|
-
end
|
|
34
|
-
end
|
|
35
|
-
|
|
36
|
-
describe '#decorate - decorate collections of AR objects' do
|
|
37
|
-
let(:klass) { Product }
|
|
38
|
-
|
|
39
|
-
it_should_behave_like "a call to Draper::ModelSupport::ClassMethods#decorate"
|
|
40
|
-
end
|
|
41
|
-
|
|
42
|
-
describe '#decorate - decorate collections of namespaced AR objects' do
|
|
43
|
-
let(:klass) { Namespace::Product }
|
|
44
|
-
|
|
45
|
-
it_should_behave_like "a call to Draper::ModelSupport::ClassMethods#decorate"
|
|
46
|
-
end
|
|
47
|
-
end
|
|
48
|
-
end
|
|
@@ -1,63 +0,0 @@
|
|
|
1
|
-
require 'spec_helper'
|
|
2
|
-
require 'minitest/rails/active_support'
|
|
3
|
-
require 'draper/test/minitest_integration'
|
|
4
|
-
|
|
5
|
-
describe "minitest-rails spec_type Lookup Integration" do
|
|
6
|
-
context "ProductDecorator" do
|
|
7
|
-
it "resolves constants" do
|
|
8
|
-
klass = MiniTest::Spec.spec_type(ProductDecorator)
|
|
9
|
-
klass.should == MiniTest::Rails::ActiveSupport::TestCase
|
|
10
|
-
end
|
|
11
|
-
|
|
12
|
-
it "resolves strings" do
|
|
13
|
-
klass = MiniTest::Spec.spec_type("ProductDecorator")
|
|
14
|
-
klass.should == MiniTest::Rails::ActiveSupport::TestCase
|
|
15
|
-
end
|
|
16
|
-
end
|
|
17
|
-
|
|
18
|
-
context "WidgetDecorator" do
|
|
19
|
-
it "resolves constants" do
|
|
20
|
-
klass = MiniTest::Spec.spec_type(WidgetDecorator)
|
|
21
|
-
klass.should == MiniTest::Rails::ActiveSupport::TestCase
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
it "resolves strings" do
|
|
25
|
-
klass = MiniTest::Spec.spec_type("WidgetDecorator")
|
|
26
|
-
klass.should == MiniTest::Rails::ActiveSupport::TestCase
|
|
27
|
-
end
|
|
28
|
-
end
|
|
29
|
-
|
|
30
|
-
context "decorator strings" do
|
|
31
|
-
it "resolves DoesNotExistDecorator" do
|
|
32
|
-
klass = MiniTest::Spec.spec_type("DoesNotExistDecorator")
|
|
33
|
-
klass.should == MiniTest::Rails::ActiveSupport::TestCase
|
|
34
|
-
end
|
|
35
|
-
|
|
36
|
-
it "resolves DoesNotExistDecoratorTest" do
|
|
37
|
-
klass = MiniTest::Spec.spec_type("DoesNotExistDecoratorTest")
|
|
38
|
-
klass.should == MiniTest::Rails::ActiveSupport::TestCase
|
|
39
|
-
end
|
|
40
|
-
|
|
41
|
-
it "resolves Does Not Exist Decorator" do
|
|
42
|
-
klass = MiniTest::Spec.spec_type("Does Not Exist Decorator")
|
|
43
|
-
klass.should == MiniTest::Rails::ActiveSupport::TestCase
|
|
44
|
-
end
|
|
45
|
-
|
|
46
|
-
it "resolves Does Not Exist Decorator Test" do
|
|
47
|
-
klass = MiniTest::Spec.spec_type("Does Not Exist Decorator Test")
|
|
48
|
-
klass.should == MiniTest::Rails::ActiveSupport::TestCase
|
|
49
|
-
end
|
|
50
|
-
end
|
|
51
|
-
|
|
52
|
-
context "non-decorators" do
|
|
53
|
-
it "doesn't resolve constants" do
|
|
54
|
-
klass = MiniTest::Spec.spec_type(Draper::HelperSupport)
|
|
55
|
-
klass.should == MiniTest::Spec
|
|
56
|
-
end
|
|
57
|
-
|
|
58
|
-
it "doesn't resolve strings" do
|
|
59
|
-
klass = MiniTest::Spec.spec_type("Nothing to see here...")
|
|
60
|
-
klass.should == MiniTest::Spec
|
|
61
|
-
end
|
|
62
|
-
end
|
|
63
|
-
end
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
module ActiveRecord
|
|
2
|
-
class Base
|
|
3
|
-
include ActiveModel::Validations
|
|
4
|
-
include ActiveModel::Conversion
|
|
5
|
-
|
|
6
|
-
attr_reader :errors, :to_model
|
|
7
|
-
|
|
8
|
-
def initialize
|
|
9
|
-
@errors = ActiveModel::Errors.new(self)
|
|
10
|
-
end
|
|
11
|
-
|
|
12
|
-
def self.limit
|
|
13
|
-
self
|
|
14
|
-
end
|
|
15
|
-
|
|
16
|
-
end
|
|
17
|
-
end
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|