draper 0.18.0 → 1.0.0.beta1

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.
Files changed (123) hide show
  1. data/.gitignore +3 -0
  2. data/.travis.yml +5 -0
  3. data/CHANGELOG.markdown +8 -0
  4. data/Gemfile +4 -0
  5. data/Rakefile +50 -31
  6. data/Readme.markdown +42 -48
  7. data/draper.gemspec +2 -1
  8. data/lib/draper.rb +42 -7
  9. data/lib/draper/collection_decorator.rb +88 -0
  10. data/lib/draper/decoratable.rb +44 -0
  11. data/lib/draper/decorated_association.rb +55 -0
  12. data/lib/draper/decorator.rb +208 -0
  13. data/lib/draper/finders.rb +44 -0
  14. data/lib/draper/helper_proxy.rb +16 -0
  15. data/lib/draper/railtie.rb +17 -21
  16. data/lib/draper/security.rb +48 -0
  17. data/lib/draper/tasks/tu.rake +5 -0
  18. data/lib/draper/test/minitest_integration.rb +1 -1
  19. data/lib/draper/test/test_unit_integration.rb +9 -0
  20. data/lib/draper/version.rb +1 -1
  21. data/lib/draper/view_context.rb +6 -13
  22. data/lib/draper/view_helpers.rb +36 -0
  23. data/lib/generators/decorator/decorator_generator.rb +1 -1
  24. data/lib/generators/decorator/templates/decorator.rb +0 -1
  25. data/spec/draper/collection_decorator_spec.rb +240 -0
  26. data/spec/draper/decoratable_spec.rb +164 -0
  27. data/spec/draper/decorated_association_spec.rb +130 -0
  28. data/spec/draper/decorator_spec.rb +497 -0
  29. data/spec/draper/finders_spec.rb +156 -0
  30. data/spec/draper/helper_proxy_spec.rb +12 -0
  31. data/spec/draper/security_spec.rb +158 -0
  32. data/spec/draper/view_helpers_spec.rb +41 -0
  33. data/spec/dummy/.rspec +2 -0
  34. data/spec/dummy/README.rdoc +261 -0
  35. data/spec/dummy/Rakefile +7 -0
  36. data/spec/dummy/app/controllers/application_controller.rb +4 -0
  37. data/spec/dummy/app/controllers/localized_urls.rb +5 -0
  38. data/spec/dummy/app/controllers/posts_controller.rb +17 -0
  39. data/spec/dummy/app/decorators/post_decorator.rb +25 -0
  40. data/spec/dummy/app/helpers/application_helper.rb +2 -0
  41. data/spec/dummy/app/mailers/application_mailer.rb +3 -0
  42. data/spec/dummy/app/mailers/post_mailer.rb +9 -0
  43. data/spec/dummy/app/models/post.rb +3 -0
  44. data/spec/dummy/app/views/layouts/application.html.erb +11 -0
  45. data/spec/dummy/app/views/post_mailer/decorated_email.html.erb +1 -0
  46. data/spec/dummy/app/views/posts/_post.html.erb +19 -0
  47. data/spec/dummy/app/views/posts/show.html.erb +1 -0
  48. data/spec/dummy/config.ru +4 -0
  49. data/spec/dummy/config/application.rb +64 -0
  50. data/spec/dummy/config/boot.rb +10 -0
  51. data/spec/dummy/config/database.yml +25 -0
  52. data/spec/dummy/config/environment.rb +5 -0
  53. data/spec/dummy/config/environments/development.rb +34 -0
  54. data/spec/dummy/config/environments/production.rb +55 -0
  55. data/spec/dummy/config/environments/test.rb +32 -0
  56. data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
  57. data/spec/dummy/config/initializers/inflections.rb +15 -0
  58. data/spec/dummy/config/initializers/mime_types.rb +5 -0
  59. data/spec/dummy/config/initializers/secret_token.rb +7 -0
  60. data/spec/dummy/config/initializers/session_store.rb +8 -0
  61. data/spec/dummy/config/initializers/wrap_parameters.rb +14 -0
  62. data/spec/dummy/config/locales/en.yml +5 -0
  63. data/spec/dummy/config/routes.rb +7 -0
  64. data/spec/dummy/db/migrate/20121019115657_create_posts.rb +8 -0
  65. data/spec/dummy/db/schema.rb +21 -0
  66. data/spec/dummy/db/seeds.rb +2 -0
  67. data/spec/dummy/lib/tasks/spec.rake +5 -0
  68. data/spec/dummy/public/404.html +26 -0
  69. data/spec/dummy/public/422.html +26 -0
  70. data/spec/dummy/public/500.html +25 -0
  71. data/spec/dummy/public/favicon.ico +0 -0
  72. data/spec/dummy/script/rails +6 -0
  73. data/spec/dummy/spec/decorators/post_decorator_spec.rb +23 -0
  74. data/spec/dummy/spec/mailers/post_mailer_spec.rb +29 -0
  75. data/spec/dummy/spec/spec_helper.rb +9 -0
  76. data/spec/generators/decorator/decorator_generator_spec.rb +3 -4
  77. data/spec/integration/integration_spec.rb +33 -0
  78. data/{performance → spec/performance}/active_record.rb +0 -0
  79. data/{performance/bechmark.rb → spec/performance/benchmark.rb} +0 -0
  80. data/{performance → spec/performance}/decorators.rb +2 -4
  81. data/{performance → spec/performance}/models.rb +0 -0
  82. data/spec/spec_helper.rb +20 -41
  83. data/spec/support/action_controller.rb +12 -0
  84. data/spec/support/active_model.rb +7 -0
  85. data/spec/support/{samples/active_record.rb → active_record.rb} +5 -0
  86. data/spec/support/{samples → decorators}/decorator_with_application_helper.rb +1 -1
  87. data/spec/support/decorators/namespaced_product_decorator.rb +5 -0
  88. data/spec/support/decorators/non_active_model_product_decorator.rb +2 -0
  89. data/spec/support/decorators/product_decorator.rb +19 -0
  90. data/spec/support/{samples → decorators}/products_decorator.rb +1 -1
  91. data/spec/support/decorators/some_thing_decorator.rb +2 -0
  92. data/spec/support/{samples → decorators}/specific_product_decorator.rb +0 -2
  93. data/spec/support/{samples → decorators}/widget_decorator.rb +0 -0
  94. data/spec/support/dummy_app.rb +84 -0
  95. data/spec/support/matchers/have_text.rb +50 -0
  96. data/spec/support/{samples → models}/namespaced_product.rb +1 -3
  97. data/spec/support/{samples → models}/non_active_model_product.rb +1 -0
  98. data/spec/support/{samples → models}/product.rb +13 -2
  99. data/spec/support/models/some_thing.rb +5 -0
  100. data/spec/support/models/uninferrable_decorator_model.rb +3 -0
  101. data/spec/support/{samples → models}/widget.rb +0 -0
  102. metadata +185 -68
  103. data/lib/draper/active_model_support.rb +0 -27
  104. data/lib/draper/base.rb +0 -312
  105. data/lib/draper/decorated_enumerable_proxy.rb +0 -90
  106. data/lib/draper/model_support.rb +0 -25
  107. data/lib/draper/rspec_integration.rb +0 -2
  108. data/lib/draper/system.rb +0 -18
  109. data/spec/draper/base_spec.rb +0 -873
  110. data/spec/draper/decorated_enumerable_proxy_spec.rb +0 -45
  111. data/spec/draper/model_support_spec.rb +0 -48
  112. data/spec/support/samples/decorator.rb +0 -5
  113. data/spec/support/samples/decorator_with_allows.rb +0 -3
  114. data/spec/support/samples/decorator_with_denies.rb +0 -3
  115. data/spec/support/samples/decorator_with_denies_all.rb +0 -3
  116. data/spec/support/samples/decorator_with_multiple_allows.rb +0 -4
  117. data/spec/support/samples/decorator_with_special_methods.rb +0 -13
  118. data/spec/support/samples/enumerable_proxy.rb +0 -3
  119. data/spec/support/samples/namespaced_product_decorator.rb +0 -7
  120. data/spec/support/samples/product_decorator.rb +0 -7
  121. data/spec/support/samples/sequel_product.rb +0 -13
  122. data/spec/support/samples/some_thing.rb +0 -2
  123. data/spec/support/samples/some_thing_decorator.rb +0 -3
@@ -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,5 +0,0 @@
1
- class Decorator < Draper::Base
2
- def self.own_class_method
3
- "own class method"
4
- end
5
- end
@@ -1,3 +0,0 @@
1
- class DecoratorWithAllows < Draper::Base
2
- allows :goodnight_moon
3
- end
@@ -1,3 +0,0 @@
1
- class DecoratorWithDenies < Draper::Base
2
- denies :goodnight_moon, :title
3
- end
@@ -1,3 +0,0 @@
1
- class DecoratorWithDeniesAll < Draper::Base
2
- denies_all
3
- end
@@ -1,4 +0,0 @@
1
- class DecoratorWithMultipleAllows < Draper::Base
2
- allows :goodnight_moon
3
- allows :hello_world
4
- end
@@ -1,13 +0,0 @@
1
- class DecoratorWithSpecialMethods < Draper::Base
2
- def to_param
3
- "foo"
4
- end
5
-
6
- def id
7
- 1337
8
- end
9
-
10
- def errors
11
- ["omg errors!"]
12
- end
13
- end
@@ -1,3 +0,0 @@
1
- class EnumerableProxy < Draper::DecoratedEnumerableProxy
2
-
3
- end
@@ -1,7 +0,0 @@
1
- require './spec/support/samples/namespaced_product'
2
-
3
- module Namespace
4
- class ProductDecorator < Draper::Base
5
- decorates :product, :class => Namespace::Product
6
- end
7
- end
@@ -1,7 +0,0 @@
1
- class ProductDecorator < Draper::Base
2
- decorates :product
3
-
4
- def awesome_title
5
- "Awesome Title"
6
- end
7
- end
@@ -1,13 +0,0 @@
1
- module Sequel
2
- class Model
3
- def each
4
- end
5
- end
6
- end
7
-
8
- class SequelProduct < Sequel::Model
9
- def some_attribute
10
- "hello"
11
- end
12
- end
13
-
@@ -1,2 +0,0 @@
1
- class SomeThing < Product
2
- end
@@ -1,3 +0,0 @@
1
- class SomeThingDecorator < Draper::Base
2
- decorates :some_thing
3
- end