draper 0.11.1 → 0.12.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.
Files changed (49) hide show
  1. data/CHANGELOG.txt +23 -0
  2. data/Gemfile +4 -0
  3. data/Readme.markdown +32 -8
  4. data/draper.gemspec +1 -0
  5. data/lib/draper.rb +1 -0
  6. data/lib/draper/active_model_support.rb +24 -0
  7. data/lib/draper/base.rb +30 -22
  8. data/lib/draper/decorated_enumerable_proxy.rb +12 -9
  9. data/lib/draper/helper_support.rb +1 -1
  10. data/lib/draper/lazy_helpers.rb +1 -1
  11. data/lib/draper/model_support.rb +2 -4
  12. data/lib/draper/railtie.rb +31 -0
  13. data/lib/draper/rspec_integration.rb +22 -11
  14. data/lib/draper/system.rb +9 -0
  15. data/lib/draper/version.rb +1 -1
  16. data/lib/generators/decorator/decorator_generator.rb +28 -0
  17. data/lib/generators/{draper/decorator → decorator}/templates/decorator.rb +5 -3
  18. data/lib/generators/resource_override.rb +12 -0
  19. data/lib/generators/rspec/decorator_generator.rb +9 -0
  20. data/lib/generators/rspec/templates/decorator_spec.rb +4 -0
  21. data/lib/generators/test_unit/decorator_generator.rb +9 -0
  22. data/lib/generators/test_unit/templates/decorator_test.rb +7 -0
  23. data/performance/active_record.rb +1 -1
  24. data/performance/models.rb +1 -1
  25. data/spec/draper/base_spec.rb +74 -15
  26. data/spec/draper/helper_support_spec.rb +4 -4
  27. data/spec/draper/model_support_spec.rb +1 -1
  28. data/spec/draper/view_context_spec.rb +2 -7
  29. data/spec/generators/decorator/decorator_generator_spec.rb +52 -0
  30. data/spec/spec_helper.rb +21 -17
  31. data/spec/support/samples/active_model.rb +9 -0
  32. data/spec/support/samples/active_record.rb +8 -0
  33. data/spec/support/samples/application_helper.rb +1 -1
  34. data/spec/support/samples/decorator.rb +1 -1
  35. data/spec/support/samples/decorator_with_allows.rb +1 -1
  36. data/spec/support/samples/non_active_model_product.rb +2 -0
  37. data/spec/support/samples/specific_product_decorator.rb +1 -1
  38. metadata +30 -18
  39. data/lib/generators/draper/decorator/USAGE +0 -7
  40. data/lib/generators/draper/decorator/decorator_generator.rb +0 -43
  41. data/lib/generators/draper/decorator/templates/decorator_spec.rb +0 -5
  42. data/lib/generators/draper/decorator/templates/decorator_test.rb +0 -12
  43. data/lib/generators/draper/install/install_generator.rb +0 -39
  44. data/lib/generators/draper/install/templates/application_decorator.rb +0 -28
  45. data/lib/generators/draper/install/templates/application_decorator_spec.rb +0 -4
  46. data/lib/generators/draper/install/templates/application_decorator_test.rb +0 -11
  47. data/lib/generators/rails/decorator_generator.rb +0 -15
  48. data/spec/generators/draper/decorator/decorator_generator_spec.rb +0 -102
  49. data/spec/generators/draper/install/install_generator_spec.rb +0 -46
@@ -2,4 +2,4 @@ module ApplicationHelper
2
2
  def hello_world
3
3
  "Hello, World!"
4
4
  end
5
- end
5
+ end
@@ -2,4 +2,4 @@ class Decorator < Draper::Base
2
2
  def self.own_class_method
3
3
  "own class method"
4
4
  end
5
- end
5
+ end
@@ -1,3 +1,3 @@
1
1
  class DecoratorWithAllows < Draper::Base
2
2
  allows :goodnight_moon
3
- end
3
+ end
@@ -0,0 +1,2 @@
1
+ class NonActiveModelProduct
2
+ end
@@ -1,4 +1,4 @@
1
1
  require './spec/support/samples/product_decorator'
2
2
 
3
3
  class SpecificProductDecorator < ProductDecorator
4
- end
4
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: draper
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.11.1
4
+ version: 0.12.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -10,11 +10,11 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2012-03-14 00:00:00.000000000 Z
13
+ date: 2012-05-09 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: activesupport
17
- requirement: &70289233390860 !ruby/object:Gem::Requirement
17
+ requirement: &70309298925200 !ruby/object:Gem::Requirement
18
18
  none: false
19
19
  requirements:
20
20
  - - ! '>='
@@ -22,7 +22,18 @@ dependencies:
22
22
  version: 2.3.10
23
23
  type: :runtime
24
24
  prerelease: false
25
- version_requirements: *70289233390860
25
+ version_requirements: *70309298925200
26
+ - !ruby/object:Gem::Dependency
27
+ name: redcarpet
28
+ requirement: &70309298924340 !ruby/object:Gem::Requirement
29
+ none: false
30
+ requirements:
31
+ - - ! '>='
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: *70309298924340
26
37
  description: Draper implements a decorator or presenter pattern for Rails applications.
27
38
  email:
28
39
  - jeff@casimircreative.com
@@ -35,6 +46,7 @@ files:
35
46
  - .rspec
36
47
  - .travis.yml
37
48
  - .yardopts
49
+ - CHANGELOG.txt
38
50
  - Gemfile
39
51
  - Guardfile
40
52
  - Rakefile
@@ -62,6 +74,7 @@ files:
62
74
  - doc/top-level-namespace.html
63
75
  - draper.gemspec
64
76
  - lib/draper.rb
77
+ - lib/draper/active_model_support.rb
65
78
  - lib/draper/base.rb
66
79
  - lib/draper/decorated_enumerable_proxy.rb
67
80
  - lib/draper/helper_support.rb
@@ -72,16 +85,13 @@ files:
72
85
  - lib/draper/system.rb
73
86
  - lib/draper/version.rb
74
87
  - lib/draper/view_context.rb
75
- - lib/generators/draper/decorator/USAGE
76
- - lib/generators/draper/decorator/decorator_generator.rb
77
- - lib/generators/draper/decorator/templates/decorator.rb
78
- - lib/generators/draper/decorator/templates/decorator_spec.rb
79
- - lib/generators/draper/decorator/templates/decorator_test.rb
80
- - lib/generators/draper/install/install_generator.rb
81
- - lib/generators/draper/install/templates/application_decorator.rb
82
- - lib/generators/draper/install/templates/application_decorator_spec.rb
83
- - lib/generators/draper/install/templates/application_decorator_test.rb
84
- - lib/generators/rails/decorator_generator.rb
88
+ - lib/generators/decorator/decorator_generator.rb
89
+ - lib/generators/decorator/templates/decorator.rb
90
+ - lib/generators/resource_override.rb
91
+ - lib/generators/rspec/decorator_generator.rb
92
+ - lib/generators/rspec/templates/decorator_spec.rb
93
+ - lib/generators/test_unit/decorator_generator.rb
94
+ - lib/generators/test_unit/templates/decorator_test.rb
85
95
  - performance/active_record.rb
86
96
  - performance/bechmark.rb
87
97
  - performance/decorators.rb
@@ -90,9 +100,9 @@ files:
90
100
  - spec/draper/helper_support_spec.rb
91
101
  - spec/draper/model_support_spec.rb
92
102
  - spec/draper/view_context_spec.rb
93
- - spec/generators/draper/decorator/decorator_generator_spec.rb
94
- - spec/generators/draper/install/install_generator_spec.rb
103
+ - spec/generators/decorator/decorator_generator_spec.rb
95
104
  - spec/spec_helper.rb
105
+ - spec/support/samples/active_model.rb
96
106
  - spec/support/samples/active_record.rb
97
107
  - spec/support/samples/application_controller.rb
98
108
  - spec/support/samples/application_helper.rb
@@ -103,6 +113,7 @@ files:
103
113
  - spec/support/samples/decorator_with_multiple_allows.rb
104
114
  - spec/support/samples/namespaced_product.rb
105
115
  - spec/support/samples/namespaced_product_decorator.rb
116
+ - spec/support/samples/non_active_model_product.rb
106
117
  - spec/support/samples/product.rb
107
118
  - spec/support/samples/product_decorator.rb
108
119
  - spec/support/samples/some_thing.rb
@@ -139,9 +150,9 @@ test_files:
139
150
  - spec/draper/helper_support_spec.rb
140
151
  - spec/draper/model_support_spec.rb
141
152
  - spec/draper/view_context_spec.rb
142
- - spec/generators/draper/decorator/decorator_generator_spec.rb
143
- - spec/generators/draper/install/install_generator_spec.rb
153
+ - spec/generators/decorator/decorator_generator_spec.rb
144
154
  - spec/spec_helper.rb
155
+ - spec/support/samples/active_model.rb
145
156
  - spec/support/samples/active_record.rb
146
157
  - spec/support/samples/application_controller.rb
147
158
  - spec/support/samples/application_helper.rb
@@ -152,6 +163,7 @@ test_files:
152
163
  - spec/support/samples/decorator_with_multiple_allows.rb
153
164
  - spec/support/samples/namespaced_product.rb
154
165
  - spec/support/samples/namespaced_product_decorator.rb
166
+ - spec/support/samples/non_active_model_product.rb
155
167
  - spec/support/samples/product.rb
156
168
  - spec/support/samples/product_decorator.rb
157
169
  - spec/support/samples/some_thing.rb
@@ -1,7 +0,0 @@
1
- Description:
2
- The draper:decorator generator creates a decorator model in /app/decorators.
3
-
4
- Examples:
5
- rails generate draper:decorator Article
6
-
7
- file: app/decorators/article_decorator.rb
@@ -1,43 +0,0 @@
1
- module Draper
2
- class DecoratorGenerator < Rails::Generators::Base
3
- desc <<-DESC
4
- Description:
5
- Generate a decorator for the given model.
6
- Example: rails g draper:decorator Article
7
- generates: "app/decorators/article_decorator"
8
- "spec/decorators/article_decorator_spec"
9
- DESC
10
-
11
- argument :resource_name, :type => :string
12
- class_option "test-framework", :type => :string, :default => "rspec", :aliases => "-t", :desc => "Test framework to be invoked"
13
-
14
- source_root File.expand_path('../templates', __FILE__)
15
-
16
- DECORATORS_ROOT = 'app/decorators/'
17
-
18
- def build_model_decorator
19
- template 'decorator.rb', "#{DECORATORS_ROOT}#{resource_name.singularize}_decorator.rb"
20
- end
21
-
22
- def build_decorator_tests
23
- case options["test-framework"]
24
- when "rspec"
25
- build_decorator_spec
26
- when "test_unit"
27
- build_decorator_test
28
- end
29
- end
30
-
31
- private
32
- def build_decorator_spec
33
- empty_directory 'spec/decorators'
34
- template 'decorator_spec.rb', File.join('spec/decorators', "#{resource_name.singularize}_decorator_spec.rb")
35
- end
36
-
37
- def build_decorator_test
38
- empty_directory 'test/decorators/'
39
- template 'decorator_test.rb', File.join('test/decorators', "#{resource_name.singularize}_decorator_test.rb")
40
- end
41
-
42
- end
43
- end
@@ -1,5 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe <%= resource_name.singularize.camelize %>Decorator do
4
- before { ApplicationController.new.set_current_view_context }
5
- end
@@ -1,12 +0,0 @@
1
- require 'test_helper'
2
-
3
- class <%= resource_name.singularize.camelize %>DecoratorTest < ActiveSupport::TestCase
4
- def setup
5
- ApplicationController.new.set_current_view_context
6
- end
7
-
8
- # test "the truth" do
9
- # assert true
10
- # end
11
- end
12
-
@@ -1,39 +0,0 @@
1
- module Draper
2
- class InstallGenerator < Rails::Generators::Base
3
-
4
- desc <<-DESC
5
- Description:
6
- Generate application and spec decorators in your application.
7
- DESC
8
-
9
- class_option "test-framework", :type => :string, :default => "rspec", :aliases => "-t", :desc => "Test framework to be invoked"
10
-
11
- source_root File.expand_path('../templates', __FILE__)
12
-
13
- def build_application_decorator
14
- empty_directory 'app/decorators'
15
- template 'application_decorator.rb', File.join('app/decorators', 'application_decorator.rb')
16
- end
17
-
18
- def build_decorator_tests
19
- case options["test-framework"]
20
- when "rspec"
21
- build_application_decorator_spec
22
- when "test_unit"
23
- build_application_decorator_test
24
- end
25
- end
26
-
27
- private
28
- def build_application_decorator_spec
29
- empty_directory 'spec/decorators'
30
- template 'application_decorator_spec.rb', File.join('spec/decorators', 'application_decorator_spec.rb')
31
- end
32
-
33
- def build_application_decorator_test
34
- empty_directory 'test/decorators/'
35
- template 'application_decorator_test.rb', File.join('test/decorators', 'application_decorator_test.rb')
36
- end
37
-
38
- end
39
- end
@@ -1,28 +0,0 @@
1
- class ApplicationDecorator < Draper::Base
2
- # Lazy Helpers
3
- # PRO: Call Rails helpers without the h. proxy
4
- # ex: number_to_currency(model.price)
5
- # CON: Add a bazillion methods into your decorator's namespace
6
- # and probably sacrifice performance/memory
7
- #
8
- # Enable them by uncommenting this line:
9
- # lazy_helpers
10
-
11
- # Shared Decorations
12
- # Consider defining shared methods common to all your models.
13
- #
14
- # Example: standardize the formatting of timestamps
15
- #
16
- # def formatted_timestamp(time)
17
- # h.content_tag :span, time.strftime("%a %m/%d/%y"),
18
- # :class => 'timestamp'
19
- # end
20
- #
21
- # def created_at
22
- # formatted_timestamp(model.created_at)
23
- # end
24
- #
25
- # def updated_at
26
- # formatted_timestamp(model.updated_at)
27
- # end
28
- end
@@ -1,4 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe ApplicationDecorator do
4
- end
@@ -1,11 +0,0 @@
1
- require 'test_helper'
2
-
3
- class ApplicationDecoratorTest < ActiveSupport::TestCase
4
- def setup
5
- ApplicationController.new.set_current_view_context
6
- end
7
-
8
- # test "the truth" do
9
- # assert true
10
- # end
11
- end
@@ -1,15 +0,0 @@
1
- require File.expand_path('../../draper/decorator/decorator_generator.rb', __FILE__)
2
- class Rails::DecoratorGenerator < Draper::DecoratorGenerator
3
-
4
- source_root File.expand_path('../../draper/decorator/templates', __FILE__)
5
-
6
- class_option :invoke_after_finished, :type => :string, :description => "Generator to invoke when finished"
7
-
8
- def build_model_and_application_decorators
9
- super
10
- if self.options[:invoke_after_finished]
11
- Rails::Generators.invoke(self.options[:invoke_after_finished], [@name, @_initializer.first[1..-1]])
12
- end
13
- end
14
-
15
- end
@@ -1,102 +0,0 @@
1
- require 'spec_helper'
2
-
3
- # Generators are not automatically loaded by Rails
4
- require 'generators/draper/decorator/decorator_generator'
5
-
6
- describe Draper::DecoratorGenerator do
7
- # Tell the generator where to put its output (what it thinks of as Rails.root)
8
- destination File.expand_path("../../../../../tmp", __FILE__)
9
-
10
- before { prepare_destination }
11
-
12
- context 'decorator context' do
13
- before { run_generator ["product"] }
14
-
15
- describe 'app/decorators/product_decorator.rb' do
16
- subject { file('app/decorators/product_decorator.rb') }
17
- it { should exist }
18
- it { should contain "class ProductDecorator < ApplicationDecorator" }
19
- end
20
- end
21
-
22
- context 'default test framework' do
23
- before { run_generator ["product"] }
24
-
25
- describe 'spec/decorators/product_decorator_spec.rb' do
26
- subject { file('spec/decorators/product_decorator_spec.rb') }
27
- it { should exist }
28
- it { should contain "describe ProductDecorator" }
29
- end
30
- end
31
-
32
- context 'using rspec' do
33
- before { run_generator ["product", "-t=rspec"] }
34
-
35
- describe 'spec/decorators/product_decorator_spec.rb' do
36
- subject { file('spec/decorators/product_decorator_spec.rb') }
37
- it { should exist }
38
- it { should contain "describe ProductDecorator" }
39
- end
40
- end
41
-
42
- context 'using rspec' do
43
- before { run_generator ["product", "-t=test_unit"] }
44
-
45
- describe 'test/decorators/product_decorator_test.rb' do
46
- subject { file('test/decorators/product_decorator_test.rb') }
47
- it { should exist }
48
- it { should contain "class ProductDecoratorTest < ActiveSupport::TestCase" }
49
- end
50
- end
51
- end
52
-
53
-
54
- =begin
55
- describe 'no arguments' do
56
- before { run_generator %w(products) }
57
-
58
- describe 'app/decorators/products_decorator.rb' do
59
- subject { file('app/decorators/products_decorator.rb') }
60
- it { should exist }
61
- it { should contain "class ProductsDecorator < ApplicationDecorator" }
62
- end
63
- end
64
-
65
-
66
- context 'simple' do
67
- before { run_generator %w(products) }
68
-
69
- describe 'app/decorators/products_decorator.rb' do
70
- subject { file('app/decorators/products_decorator.rb') }
71
- it { should exist }
72
- it { should contain "class ProductsDecorator < ApplicationDecorator" }
73
- end
74
- end
75
-
76
-
77
-
78
-
79
-
80
- context 'using rspec' do
81
-
82
- describe 'app/decorators/products_decorator.rb' do
83
- subject { file('app/decorators/products_decorator.rb') }
84
- it { should exist }
85
- it { should contain "class ProductsDecorator < ApplicationDecorator" }
86
- end
87
-
88
- shared_examples_for "ApplicationDecoratorGenerator" do
89
- describe 'app/decorators/application_decorator.rb' do
90
- subject { file('app/decorators/application_decorator.rb') }
91
- it { should exist }
92
- it { should contain "class ApplicationDecorator < Draper::Base" }
93
- end
94
- end
95
-
96
- describe 'spec/decorators/application_decorator_spec.rb' do
97
- subject { file('spec/decorators/application_decorator_spec.rb') }
98
- it { should exist }
99
- it { should contain "describe ApplicationDecorator do" }
100
- end
101
- end
102
- =end
@@ -1,46 +0,0 @@
1
- require 'spec_helper'
2
-
3
- # Generators are not automatically loaded by Rails
4
- require 'generators/draper/install/install_generator'
5
-
6
- describe Draper::InstallGenerator do
7
- # Tell the generator where to put its output (what it thinks of as Rails.root)
8
- destination File.expand_path("../../../../../tmp", __FILE__)
9
-
10
- before { prepare_destination }
11
-
12
- context 'using rspec' do
13
- before { run_generator }
14
-
15
- shared_examples_for "ApplicationDecoratorGenerator" do
16
- describe 'app/decorators/application_decorator.rb' do
17
- subject { file('app/decorators/application_decorator.rb') }
18
- it { should exist }
19
- it { should contain "class ApplicationDecorator < Draper::Base" }
20
- end
21
- end
22
-
23
- describe 'spec/decorators/application_decorator_spec.rb' do
24
- subject { file('spec/decorators/application_decorator_spec.rb') }
25
- it { should exist }
26
- it { should contain "describe ApplicationDecorator do" }
27
- end
28
- end
29
-
30
- context "using test_unit" do
31
- before { run_generator ["", "-t=test_unit"] }
32
-
33
- it_should_behave_like "ApplicationDecoratorGenerator"
34
-
35
- describe 'spec/decorators/application_decorator_spec.rb' do
36
- subject { file('spec/decorators/application_decorator_spec.rb') }
37
- it { should_not exist }
38
- end
39
-
40
- describe 'spec/decorators/application_decorator_test.rb' do
41
- subject { file('test/decorators/application_decorator_test.rb') }
42
- it { should exist }
43
- end
44
- end
45
-
46
- end