draper 0.17.0 → 1.0.0.beta2

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 (154) hide show
  1. data/.gitignore +3 -0
  2. data/.travis.yml +5 -0
  3. data/CHANGELOG.markdown +49 -0
  4. data/Gemfile +4 -0
  5. data/Rakefile +50 -31
  6. data/Readme.markdown +63 -92
  7. data/draper.gemspec +6 -4
  8. data/lib/draper/collection_decorator.rb +88 -0
  9. data/lib/draper/decoratable.rb +44 -0
  10. data/lib/draper/decorated_association.rb +55 -0
  11. data/lib/draper/decorator.rb +260 -0
  12. data/lib/draper/finders.rb +34 -0
  13. data/lib/draper/helper_proxy.rb +16 -0
  14. data/lib/draper/railtie.rb +17 -21
  15. data/lib/draper/security.rb +48 -0
  16. data/lib/draper/tasks/tu.rake +5 -0
  17. data/lib/draper/test/minitest_integration.rb +5 -24
  18. data/lib/draper/test/rspec_integration.rb +0 -6
  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 +24 -6
  22. data/lib/draper/view_helpers.rb +36 -0
  23. data/lib/draper.rb +48 -7
  24. data/lib/generators/decorator/decorator_generator.rb +1 -1
  25. data/lib/generators/decorator/templates/decorator.rb +0 -1
  26. data/lib/generators/rspec/decorator_generator.rb +1 -1
  27. data/lib/generators/test_unit/decorator_generator.rb +1 -1
  28. data/lib/generators/test_unit/templates/decorator_test.rb +0 -3
  29. data/spec/draper/collection_decorator_spec.rb +240 -0
  30. data/spec/draper/decoratable_spec.rb +164 -0
  31. data/spec/draper/decorated_association_spec.rb +130 -0
  32. data/spec/draper/decorator_spec.rb +622 -0
  33. data/spec/draper/finders_spec.rb +145 -0
  34. data/spec/draper/helper_proxy_spec.rb +12 -0
  35. data/spec/draper/security_spec.rb +158 -0
  36. data/spec/draper/view_helpers_spec.rb +41 -0
  37. data/spec/dummy/.rspec +2 -0
  38. data/spec/dummy/README.rdoc +261 -0
  39. data/spec/dummy/Rakefile +7 -0
  40. data/spec/dummy/app/controllers/application_controller.rb +4 -0
  41. data/spec/dummy/app/controllers/localized_urls.rb +5 -0
  42. data/spec/dummy/app/controllers/posts_controller.rb +17 -0
  43. data/spec/dummy/app/decorators/post_decorator.rb +29 -0
  44. data/spec/dummy/app/helpers/application_helper.rb +2 -0
  45. data/spec/dummy/app/mailers/application_mailer.rb +3 -0
  46. data/spec/dummy/app/mailers/post_mailer.rb +9 -0
  47. data/spec/dummy/app/models/post.rb +3 -0
  48. data/spec/dummy/app/views/layouts/application.html.erb +11 -0
  49. data/spec/dummy/app/views/post_mailer/decorated_email.html.erb +1 -0
  50. data/spec/dummy/app/views/posts/_post.html.erb +19 -0
  51. data/spec/dummy/app/views/posts/show.html.erb +1 -0
  52. data/spec/dummy/config/application.rb +64 -0
  53. data/spec/dummy/config/boot.rb +10 -0
  54. data/spec/dummy/config/database.yml +25 -0
  55. data/spec/dummy/config/environment.rb +5 -0
  56. data/spec/dummy/config/environments/development.rb +34 -0
  57. data/spec/dummy/config/environments/production.rb +55 -0
  58. data/spec/dummy/config/environments/test.rb +32 -0
  59. data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
  60. data/spec/dummy/config/initializers/inflections.rb +15 -0
  61. data/spec/dummy/config/initializers/mime_types.rb +5 -0
  62. data/spec/dummy/config/initializers/secret_token.rb +7 -0
  63. data/spec/dummy/config/initializers/session_store.rb +8 -0
  64. data/spec/dummy/config/initializers/wrap_parameters.rb +14 -0
  65. data/spec/dummy/config/locales/en.yml +5 -0
  66. data/spec/dummy/config/routes.rb +7 -0
  67. data/spec/dummy/config.ru +4 -0
  68. data/spec/dummy/db/migrate/20121019115657_create_posts.rb +8 -0
  69. data/spec/dummy/db/schema.rb +21 -0
  70. data/spec/dummy/db/seeds.rb +2 -0
  71. data/spec/dummy/lib/tasks/spec.rake +5 -0
  72. data/spec/dummy/log/.gitkeep +0 -0
  73. data/spec/dummy/public/404.html +26 -0
  74. data/spec/dummy/public/422.html +26 -0
  75. data/spec/dummy/public/500.html +25 -0
  76. data/spec/dummy/public/favicon.ico +0 -0
  77. data/spec/dummy/script/rails +6 -0
  78. data/spec/dummy/spec/decorators/post_decorator_spec.rb +26 -0
  79. data/spec/dummy/spec/mailers/post_mailer_spec.rb +29 -0
  80. data/spec/dummy/spec/spec_helper.rb +9 -0
  81. data/spec/generators/decorator/decorator_generator_spec.rb +25 -6
  82. data/spec/integration/integration_spec.rb +33 -0
  83. data/spec/minitest-rails/spec_type_spec.rb +63 -0
  84. data/{performance → spec/performance}/decorators.rb +2 -4
  85. data/spec/spec_helper.rb +23 -26
  86. data/spec/support/action_controller.rb +12 -0
  87. data/spec/support/active_model.rb +7 -0
  88. data/spec/support/{samples/active_record.rb → active_record.rb} +5 -0
  89. data/spec/support/{samples → decorators}/decorator_with_application_helper.rb +1 -1
  90. data/spec/support/decorators/namespaced_product_decorator.rb +5 -0
  91. data/spec/support/decorators/non_active_model_product_decorator.rb +2 -0
  92. data/spec/support/decorators/product_decorator.rb +23 -0
  93. data/spec/support/decorators/products_decorator.rb +10 -0
  94. data/spec/support/decorators/some_thing_decorator.rb +2 -0
  95. data/spec/support/{samples → decorators}/specific_product_decorator.rb +0 -2
  96. data/spec/support/dummy_app.rb +84 -0
  97. data/spec/support/matchers/have_text.rb +50 -0
  98. data/spec/support/{samples → models}/namespaced_product.rb +1 -3
  99. data/spec/support/{samples → models}/non_active_model_product.rb +1 -0
  100. data/spec/support/{samples → models}/product.rb +17 -2
  101. data/spec/support/models/some_thing.rb +5 -0
  102. data/spec/support/models/uninferrable_decorator_model.rb +3 -0
  103. metadata +211 -102
  104. data/doc/ApplicationDecorator.html +0 -147
  105. data/doc/Draper/AllHelpers.html +0 -256
  106. data/doc/Draper/Base.html +0 -1222
  107. data/doc/Draper/DecoratorGenerator.html +0 -216
  108. data/doc/Draper/LazyHelpers.html +0 -174
  109. data/doc/Draper/ModelSupport.html +0 -164
  110. data/doc/Draper/System.html +0 -179
  111. data/doc/Draper.html +0 -123
  112. data/doc/_index.html +0 -172
  113. data/doc/class_list.html +0 -47
  114. data/doc/css/common.css +0 -1
  115. data/doc/css/full_list.css +0 -53
  116. data/doc/css/style.css +0 -320
  117. data/doc/file_list.html +0 -46
  118. data/doc/frames.html +0 -13
  119. data/doc/index.html +0 -172
  120. data/doc/js/app.js +0 -205
  121. data/doc/js/full_list.js +0 -150
  122. data/doc/js/jquery.js +0 -16
  123. data/doc/method_list.html +0 -174
  124. data/doc/top-level-namespace.html +0 -103
  125. data/lib/draper/active_model_support.rb +0 -27
  126. data/lib/draper/base.rb +0 -312
  127. data/lib/draper/decorated_enumerable_proxy.rb +0 -57
  128. data/lib/draper/model_support.rb +0 -17
  129. data/lib/draper/rspec_integration.rb +0 -2
  130. data/lib/draper/system.rb +0 -10
  131. data/lib/draper/test/view_context.rb +0 -12
  132. data/spec/draper/base_spec.rb +0 -863
  133. data/spec/draper/helper_support_spec.rb +0 -18
  134. data/spec/draper/model_support_spec.rb +0 -48
  135. data/spec/draper/view_context_spec.rb +0 -30
  136. data/spec/support/samples/active_model.rb +0 -9
  137. data/spec/support/samples/application_controller.rb +0 -42
  138. data/spec/support/samples/application_helper.rb +0 -8
  139. data/spec/support/samples/decorator.rb +0 -5
  140. data/spec/support/samples/decorator_with_allows.rb +0 -3
  141. data/spec/support/samples/decorator_with_denies.rb +0 -3
  142. data/spec/support/samples/decorator_with_denies_all.rb +0 -3
  143. data/spec/support/samples/decorator_with_multiple_allows.rb +0 -4
  144. data/spec/support/samples/decorator_with_special_methods.rb +0 -13
  145. data/spec/support/samples/namespaced_product_decorator.rb +0 -7
  146. data/spec/support/samples/product_decorator.rb +0 -7
  147. data/spec/support/samples/sequel_product.rb +0 -13
  148. data/spec/support/samples/some_thing.rb +0 -2
  149. data/spec/support/samples/some_thing_decorator.rb +0 -3
  150. /data/{performance → spec/performance}/active_record.rb +0 -0
  151. /data/{performance/bechmark.rb → spec/performance/benchmark.rb} +0 -0
  152. /data/{performance → spec/performance}/models.rb +0 -0
  153. /data/spec/support/{samples → decorators}/widget_decorator.rb +0 -0
  154. /data/spec/support/{samples → models}/widget.rb +0 -0
@@ -1,18 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Draper::HelperSupport do
4
- let(:product){ Product.new }
5
-
6
- context '#decorate' do
7
- it 'renders a block' do
8
- output = ApplicationController.decorate(product){|p| p.model.object_id }
9
- output.should == product.object_id
10
- end
11
-
12
- it 'uses #capture so Rails only renders the content once' do
13
- ApplicationController.decorate(product){|p| p.model.object_id }
14
- ApplicationController.capture_triggered.should be
15
- end
16
- end
17
-
18
- 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,30 +0,0 @@
1
- require 'spec_helper'
2
- require 'draper/test/view_context'
3
-
4
- describe Draper::ViewContext do
5
- before(:each) do
6
- Thread.current[:current_view_context] = nil
7
- end
8
-
9
- let(:app_controller) { ApplicationController }
10
- let(:app_controller_instance) { app_controller.new }
11
-
12
- it "provides a method to create a view context while testing" do
13
- Draper::ViewContext.should respond_to(:infect!)
14
- end
15
-
16
- it "copies the controller's view context to draper" do
17
- ctx = app_controller_instance.view_context
18
- Draper::ViewContext.current.should == ctx
19
- end
20
-
21
- describe "view_context priming" do
22
- let(:app_controller_instance) { double(ApplicationController, :view_context => view_context) }
23
- let(:view_context) { double("ApplicationController#view_context") }
24
-
25
- it "primes the view_context when nil" do
26
- app_controller.should_receive(:new).and_return(app_controller_instance)
27
- Draper::ViewContext.current.should == view_context
28
- end
29
- end
30
- end
@@ -1,9 +0,0 @@
1
- module ActiveModel
2
- module Conversion; end
3
- module Validations; end
4
-
5
- class Errors
6
- def initialize(params = nil)
7
- end
8
- end
9
- end
@@ -1,42 +0,0 @@
1
- require './spec/support/samples/application_helper'
2
-
3
- module ActionController
4
- class AbstractController
5
- def view_context
6
- @view_context ||= ApplicationController
7
- end
8
-
9
- def view_context=(input)
10
- @view_context = input
11
- end
12
- end
13
- class Base < AbstractController
14
- @@before_filters = []
15
- def self.before_filters
16
- @@before_filters
17
- end
18
- def self.before_filter(name)
19
- @@before_filters << name
20
- end
21
- end
22
- end
23
-
24
- class ApplicationController < ActionController::Base
25
- extend ActionView::Helpers
26
- extend ActionView::Helpers::TagHelper
27
- extend ActionView::Helpers::UrlHelper
28
- extend ApplicationHelper
29
-
30
- def self.hello
31
- "Hello!"
32
- end
33
-
34
- def self.capture(&block)
35
- @@capture = true
36
- block.call
37
- end
38
-
39
- def self.capture_triggered
40
- @@capture ||= false
41
- end
42
- end
@@ -1,8 +0,0 @@
1
- require 'active_support/core_ext/string/output_safety.rb'
2
- module ApplicationHelper
3
- include ERB::Util
4
-
5
- def hello_world
6
- "Hello, World!"
7
- end
8
- 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,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
File without changes
File without changes
File without changes