draper 0.18.0 → 1.0.0.beta1

Sign up to get free protection for your applications and to get access to all the features.
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