action_presenter 1.0.1 → 1.0.2

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.
@@ -4,4 +4,9 @@
4
4
 
5
5
  ## Version 1.0.1
6
6
 
7
- * add default presenter methods for `created_at` and `updated_at`
7
+ * add default presenter methods for `created_at` and `updated_at`
8
+
9
+ ## Version 1.0.2
10
+
11
+ * add rails generators
12
+ * allow to change timestamps format
data/README.md CHANGED
@@ -7,14 +7,22 @@ Use presenter pattern in Rails application without changing controllers.
7
7
 
8
8
  ## Installation
9
9
 
10
+ **Add `action_presenter` to Gemfile**
11
+
10
12
  ```ruby
11
13
  gem 'action_presenter'
14
+ # or
15
+ gem 'action_presenter', git: 'git@github.com:zlw/action_presenter.git'
12
16
  ```
13
17
 
14
- or
18
+ **and than install**
15
19
 
16
- ```ruby
17
- gem 'action_presenter', git: 'git@github.com:zlw/action_presenter.git'
20
+ ```bash
21
+ # for RSpec
22
+ rails generate action_presenter:intall -t rspec
23
+
24
+ # for Test::Unit
25
+ rails generate action_presenter:install -t test_unit
18
26
  ```
19
27
 
20
28
  Gem was tested under Ruby 1.9.2 and 1.9.3, Rails 3.2.1
@@ -72,6 +80,48 @@ There're some default presenter methods. They're generated if object respond to
72
80
  = p.updated_at #=> "February 17, 2012 13:27"
73
81
  ```
74
82
 
83
+ It's also possible to change timestamps format
84
+
85
+ ```haml
86
+ - present @article do |p|
87
+ = p.created_at :short
88
+ = p.updated_at :long
89
+ ```
90
+
91
+ ## Testing
92
+
93
+ ### RSpec
94
+
95
+ ```ruby
96
+ require 'spec_helper'
97
+
98
+ describe ArticlePresenter do
99
+ include ActionView::TestCase::Behavior
100
+
101
+ let(:article) { mock_model(Article) }
102
+ let(:presenter) { ArticlePresenter.new(article, view) }
103
+ end
104
+ ```
105
+
106
+ You can change RSpec configuration to include `ActionView::TestCase::Behavior` in all specs in `/spec/presenters` folder
107
+
108
+ ```ruby
109
+ RSpec.configure do |config|
110
+ # a lot of code here ...
111
+
112
+ config.include ActionView::TestCase::Behavior, example_group: { file_path: %r{spec/presenters} }
113
+ end
114
+ ```
115
+
116
+ ### Test::Unit
117
+
118
+ ```ruby
119
+ require 'test_helper'
120
+
121
+ class TestArticlePresenter < ActionView::TestCase
122
+ end
123
+ ```
124
+
75
125
  ## Maintainers
76
126
 
77
127
  * Krzysztof Zalewski (https://github.com/zlw, http://kzalewski.blogspot.com)
@@ -18,7 +18,5 @@ require 'action_presenter/view_helper'
18
18
  require 'action_presenter/railtie' if defined? Rails
19
19
 
20
20
 
21
-
22
-
23
21
  module ActionPresenter
24
22
  end
@@ -1,18 +1,18 @@
1
1
  module ActionPresenter
2
2
  module Defaults
3
3
  module Timestamps
4
- def created_at
5
- localize_time :created_at
4
+ def created_at(format = :default)
5
+ localize_time :created_at, format
6
6
  end
7
7
 
8
- def updated_at
9
- localize_time :updated_at
8
+ def updated_at(format = :default)
9
+ localize_time :updated_at, format
10
10
  end
11
11
 
12
12
  private
13
13
 
14
- def localize_time(time)
15
- I18n.l(object.try(time)) if object.respond_to?(time)
14
+ def localize_time(time, format)
15
+ I18n.l(object.try(time), format: format) if object.respond_to?(time)
16
16
  end
17
17
  end
18
18
  end
@@ -1,3 +1,3 @@
1
1
  module ActionPresenter
2
- VERSION = "1.0.1"
2
+ VERSION = "1.0.2"
3
3
  end
@@ -0,0 +1,21 @@
1
+ module ActionPresenter
2
+ class InstallGenerator < Rails::Generators::Base
3
+ desc <<-DESC
4
+ Description:
5
+ Generate application and test/spec presenter folders
6
+ DESC
7
+
8
+ class_option 'test-framework', type: :string, default: :rspec, aliases: '-t', desc: 'Test framework (RSpec or Test::Unit)'
9
+
10
+ def build_presenters_folder
11
+ empty_directory 'app/presenters'
12
+
13
+ case options['test-framework']
14
+ when 'rspec'
15
+ empty_directory 'spec/presenters'
16
+ when 'test_unit'
17
+ empty_directory 'test/unit/presenters'
18
+ end
19
+ end
20
+ end
21
+ end
@@ -5,41 +5,55 @@ require 'support/dummy_action_controller'
5
5
  describe ActionPresenter::Defaults::Timestamps do
6
6
  include ActionControllerHelper
7
7
 
8
- let(:time) { Time.now }
8
+ let(:time_now) { Time.now }
9
+ let(:time) { 'Fri, 17 Feb 2012 01:46:08 +0100' }
9
10
 
10
- let(:object) { mock(Object, created_at: time, updated_at: time) }
11
+ let(:object) { mock(Object, created_at: time_now, updated_at: time_now) }
11
12
  let(:template) { mock(Object) }
12
13
 
13
14
  let(:klass) { DummyPresenter.new(object, template) }
14
15
 
15
16
  it 'should return localized #created_at' do
16
- I18n.should_receive(:l).and_return("Fri, 17 Feb 2012 01:46:08 +0100")
17
- klass.created_at.should == "Fri, 17 Feb 2012 01:46:08 +0100"
17
+ I18n.should_receive(:l).and_return time
18
+ klass.created_at.should == time
18
19
  end
19
20
 
20
21
  it 'should return localized #updated_at' do
21
- I18n.should_receive(:l).and_return("Fri, 17 Feb 2012 01:46:08 +0100")
22
- klass.updated_at.should == "Fri, 17 Feb 2012 01:46:08 +0100"
22
+ I18n.should_receive(:l).and_return time
23
+ klass.updated_at.should == time
23
24
  end
24
25
 
25
26
  context 'in view context' do
26
27
  let(:object) { 'foobar' }
27
- before { I18n.should_receive(:l).and_return 'Fri, 17 Feb 2012 01:46:08 +0100' }
28
+ before { I18n.should_receive(:l).and_return time }
28
29
 
29
30
  it 'should return #created_at' do
30
- object.should_receive(:created_at).and_return '2012-02-17 01:46:08 +0100'
31
+ object.should_receive(:created_at).and_return time
31
32
 
32
33
  helper.present(object) do |p|
33
34
  p.created_at
34
- end.should == 'Fri, 17 Feb 2012 01:46:08 +0100'
35
+ end.should == time
35
36
  end
36
37
 
37
38
  it 'should return #updated_at' do
38
- object.should_receive(:updated_at).and_return '2012-02-17 01:46:08 +0100'
39
+ object.should_receive(:updated_at).and_return time
39
40
 
40
41
  helper.present(object) do |p|
41
42
  p.updated_at
42
- end.should == 'Fri, 17 Feb 2012 01:46:08 +0100'
43
+ end.should == time
43
44
  end
44
45
  end
46
+
47
+ context "#format" do
48
+ it 'should return short localized date' do
49
+ I18n.should_receive(:l).with(time_now, {format: :short}).and_return time
50
+ klass.created_at(:short).should == time
51
+ end
52
+
53
+ it 'should return long localized date' do
54
+ I18n.should_receive(:l).with(time_now, {format: :long}).and_return time
55
+ klass.created_at(:long).should == time
56
+ end
57
+
58
+ end
45
59
  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.1
4
+ version: 1.0.2
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-17 00:00:00.000000000 Z
12
+ date: 2012-02-18 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: actionpack
16
- requirement: &70145687806220 !ruby/object:Gem::Requirement
16
+ requirement: &70165903634720 !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: *70145687806220
24
+ version_requirements: *70165903634720
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: named_accessors
27
- requirement: &70145687805800 !ruby/object:Gem::Requirement
27
+ requirement: &70165903634300 !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: *70145687805800
35
+ version_requirements: *70165903634300
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: rake
38
- requirement: &70145687805380 !ruby/object:Gem::Requirement
38
+ requirement: &70165903633780 !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: *70145687805380
46
+ version_requirements: *70165903633780
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: rspec
49
- requirement: &70145687804920 !ruby/object:Gem::Requirement
49
+ requirement: &70165903633320 !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: *70145687804920
57
+ version_requirements: *70165903633320
58
58
  description: Missing link between models and views. Use presenter pattern in Rails
59
59
  application without changing controllers.
60
60
  email:
@@ -76,6 +76,7 @@ files:
76
76
  - lib/action_presenter/railtie.rb
77
77
  - lib/action_presenter/version.rb
78
78
  - lib/action_presenter/view_helper.rb
79
+ - lib/generators/action_presenter/install/install_generator.rb
79
80
  - spec/action_presenter/base_spec.rb
80
81
  - spec/action_presenter/defaults/timestamps_spec.rb
81
82
  - spec/action_presenter/view_helper_spec.rb
@@ -97,7 +98,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
97
98
  version: '0'
98
99
  segments:
99
100
  - 0
100
- hash: -2937985063345046777
101
+ hash: -4165987321406038830
101
102
  required_rubygems_version: !ruby/object:Gem::Requirement
102
103
  none: false
103
104
  requirements:
@@ -106,10 +107,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
106
107
  version: '0'
107
108
  segments:
108
109
  - 0
109
- hash: -2937985063345046777
110
+ hash: -4165987321406038830
110
111
  requirements: []
111
112
  rubyforge_project: action_presenter
112
- rubygems_version: 1.8.15
113
+ rubygems_version: 1.8.16
113
114
  signing_key:
114
115
  specification_version: 3
115
116
  summary: Missing link between models and views. Use presenter pattern in Rails application