action_presenter 1.0.2 → 1.1

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.
@@ -10,3 +10,8 @@
10
10
 
11
11
  * add rails generators
12
12
  * allow to change timestamps format
13
+
14
+ ## Version 1.1
15
+
16
+ * fix `present` helper to return presenter instance if no block is given (test braking change - release new minor version)
17
+ * RSpec inspired way to define short and consise methods
data/README.md CHANGED
@@ -71,8 +71,7 @@ All that without any change in any model or controller
71
71
 
72
72
  There're some default presenter methods. They're generated if object respond to those methods
73
73
 
74
- * `created_at` - localized date of create
75
- * `updated_at` - localized date of last update
74
+ ### `created_at` and `updated_at`
76
75
 
77
76
  ```haml
78
77
  - present @article do |p|
@@ -88,6 +87,29 @@ It's also possible to change timestamps format
88
87
  = p.updated_at :long
89
88
  ```
90
89
 
90
+ ## Utilities
91
+
92
+ ### Let
93
+
94
+ There's RSpec inspired way to define methods
95
+
96
+ ```ruby
97
+ class ArticlePresenter < ActionPresenter::Base
98
+ presents :article
99
+
100
+ let(:link_to_title) { link_to_unless_current article.title, article_path(article) }
101
+
102
+ let(:render_article) do
103
+ html = ''.html_safe
104
+
105
+ html += content_tag :h1, article.title
106
+ html += content_tag :p, article.content
107
+
108
+ html
109
+ end
110
+ end
111
+ ```
112
+
91
113
  ## Testing
92
114
 
93
115
  ### RSpec
@@ -10,6 +10,9 @@ require 'action_presenter/version'
10
10
  ## Default fields
11
11
  require 'action_presenter/defaults/timestamps'
12
12
 
13
+ ## Utilities
14
+ require 'action_presenter/utilities/let'
15
+
13
16
  ## Base presenter class and view helpers
14
17
  require 'action_presenter/base'
15
18
  require 'action_presenter/view_helper'
@@ -2,6 +2,8 @@ module ActionPresenter
2
2
  class Base
3
3
  include Defaults::Timestamps
4
4
 
5
+ include Utilities::Let
6
+
5
7
  def initialize(object, template)
6
8
  @object, @template = object, template
7
9
  end
@@ -0,0 +1,16 @@
1
+ module ActionPresenter
2
+ module Utilities
3
+ module Let
4
+ extend ActiveSupport::Concern
5
+
6
+ module ClassMethods
7
+
8
+ private
9
+
10
+ def let(name, &block)
11
+ define_method name, block
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
@@ -1,3 +1,3 @@
1
1
  module ActionPresenter
2
- VERSION = "1.0.2"
2
+ VERSION = "1.1"
3
3
  end
@@ -7,7 +7,10 @@ module ActionPresenter
7
7
  end
8
8
 
9
9
  def present(object, klass = "#{object.class}Presenter".constantize)
10
- yield klass.new(object, view_context) if block_given?
10
+ presenter = klass.new(object, view_context)
11
+
12
+ return yield presenter if block_given?
13
+ presenter
11
14
  end
12
15
  end
13
16
  end
@@ -0,0 +1,20 @@
1
+ require 'spec_helper'
2
+ require 'support/dummy_presenter'
3
+
4
+
5
+ describe ActionPresenter::Utilities::Let do
6
+ let(:presenter) { DummyPresenter }
7
+
8
+ it 'should create new method' do
9
+ presenter.should_receive :define_method do |name, block|
10
+ name.should == :created_with_let
11
+
12
+ block.should be_instance_of Proc
13
+ block.call.should == 'I can create methods!!!'
14
+ end
15
+
16
+ presenter.class_eval do
17
+ let(:created_with_let) { 'I can create methods!!!' }
18
+ end
19
+ end
20
+ end
@@ -8,17 +8,17 @@ describe ActionPresenter::ViewHelper do
8
8
 
9
9
  it 'should call default presenter if presenter class is not given' do
10
10
  helper.present('foobar') do |p|
11
- p.foobar
12
- end.should == 'foo'
11
+ p.should be_instance_of StringPresenter
12
+ end
13
13
  end
14
14
 
15
15
  it 'should call given presenter class' do
16
16
  helper.present('foobar', FoobarPresenter) do |p|
17
- p.foobar
18
- end.should == 'bar'
17
+ p.should be_instance_of FoobarPresenter
18
+ end
19
19
  end
20
20
 
21
- it 'should return nil if no block is given' do
22
- helper.present('foobar').should be_nil
21
+ it 'should return presenter instance if no block is given' do
22
+ helper.present('foobar').should be_instance_of StringPresenter
23
23
  end
24
24
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: action_presenter
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.2
4
+ version: '1.1'
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-02-18 00:00:00.000000000 Z
12
+ date: 2012-02-27 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: actionpack
16
- requirement: &70165903634720 !ruby/object:Gem::Requirement
16
+ requirement: &70356359315720 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '0'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70165903634720
24
+ version_requirements: *70356359315720
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: named_accessors
27
- requirement: &70165903634300 !ruby/object:Gem::Requirement
27
+ requirement: &70356359300080 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: '0'
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *70165903634300
35
+ version_requirements: *70356359300080
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: rake
38
- requirement: &70165903633780 !ruby/object:Gem::Requirement
38
+ requirement: &70356359299600 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ! '>='
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: '0'
44
44
  type: :development
45
45
  prerelease: false
46
- version_requirements: *70165903633780
46
+ version_requirements: *70356359299600
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: rspec
49
- requirement: &70165903633320 !ruby/object:Gem::Requirement
49
+ requirement: &70356359299140 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ! '>='
@@ -54,7 +54,7 @@ dependencies:
54
54
  version: '0'
55
55
  type: :development
56
56
  prerelease: false
57
- version_requirements: *70165903633320
57
+ version_requirements: *70356359299140
58
58
  description: Missing link between models and views. Use presenter pattern in Rails
59
59
  application without changing controllers.
60
60
  email:
@@ -74,11 +74,13 @@ files:
74
74
  - lib/action_presenter/base.rb
75
75
  - lib/action_presenter/defaults/timestamps.rb
76
76
  - lib/action_presenter/railtie.rb
77
+ - lib/action_presenter/utilities/let.rb
77
78
  - lib/action_presenter/version.rb
78
79
  - lib/action_presenter/view_helper.rb
79
80
  - lib/generators/action_presenter/install/install_generator.rb
80
81
  - spec/action_presenter/base_spec.rb
81
82
  - spec/action_presenter/defaults/timestamps_spec.rb
83
+ - spec/action_presenter/utilities/let_spec.rb
82
84
  - spec/action_presenter/view_helper_spec.rb
83
85
  - spec/spec_helper.rb
84
86
  - spec/support/dummy_action_controller.rb
@@ -98,7 +100,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
98
100
  version: '0'
99
101
  segments:
100
102
  - 0
101
- hash: -4165987321406038830
103
+ hash: 3423536328799258601
102
104
  required_rubygems_version: !ruby/object:Gem::Requirement
103
105
  none: false
104
106
  requirements:
@@ -107,7 +109,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
107
109
  version: '0'
108
110
  segments:
109
111
  - 0
110
- hash: -4165987321406038830
112
+ hash: 3423536328799258601
111
113
  requirements: []
112
114
  rubyforge_project: action_presenter
113
115
  rubygems_version: 1.8.16
@@ -118,6 +120,7 @@ summary: Missing link between models and views. Use presenter pattern in Rails a
118
120
  test_files:
119
121
  - spec/action_presenter/base_spec.rb
120
122
  - spec/action_presenter/defaults/timestamps_spec.rb
123
+ - spec/action_presenter/utilities/let_spec.rb
121
124
  - spec/action_presenter/view_helper_spec.rb
122
125
  - spec/spec_helper.rb
123
126
  - spec/support/dummy_action_controller.rb