meta_presenter 0.1.2 → 0.1.3

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: eee3276e576c1200170aa138a0ae0f268f5e1f493c4f438fcbf718cd618ca566
4
- data.tar.gz: d266e84619d51137569f4fd93da00a4981d8efc62d8593cdd9fbca5aa2192a2d
3
+ metadata.gz: a6f42b2b3dce01fdf2f0acb8588fe6377af542ac0b28ecf2a40d76b951a4f8cf
4
+ data.tar.gz: 9dc1717fe89a41bf9d99c1095d88117255dffa34a9485ed0ebd4742466005361
5
5
  SHA512:
6
- metadata.gz: fe3f40333c7deacc1001faa760db23800102f68a3d4f1baf3b3289942fa5fe0900df225645b4c95e5b25d636d86367b69efecf1432261c9c3a2d6204d1fa6646
7
- data.tar.gz: c3a7743081fe37d99d0057cd7ce1fa65fc3532950fa0aea9869361beaa518bc0c8ca15664788ba91bb980ef4cb4a1c3fb4e4a8a3de1df19ce155fe3a3725d9a0
6
+ metadata.gz: 789b9c804d600a9a715851e9fd77345acb7f11ba930c6e09c05d729b743792b6ceabba74b6dd28e6756eda7ef39dfa089f4b9d1ae261ac32398fde54da967b99
7
+ data.tar.gz: 45401a3342a6e079605a863c9ce0f505182834263fbee7233cf94c72055774b619b78e4e14b91383406a3d5c324ec082c14e7c3b5566bc5a6ce183c253837316
data/.gitignore CHANGED
@@ -47,4 +47,8 @@ build-iPhoneSimulator/
47
47
  .ruby-gemset
48
48
 
49
49
  # unless supporting rvm < 1.11.0 or doing something fancy, ignore this:
50
- .rvmrc
50
+ .rvmrc
51
+
52
+ # appraisal
53
+ # https://github.com/thoughtbot/appraisal
54
+ gemfiles/*.gemfile.lock
data/.travis.yml CHANGED
@@ -10,4 +10,13 @@ rvm:
10
10
  - 2.3.0
11
11
  - 2.4.0
12
12
  - 2.5.0
13
+ gemfile:
14
+ - gemfiles/actionpack4.gemfile
15
+ - gemfiles/actionpack5.gemfile
16
+ matrix:
17
+ exclude:
18
+ - rvm: 2.1.0
19
+ gemfile: gemfiles/actionpack5.gemfile
20
+ - rvm: 2.2.0
21
+ gemfile: gemfiles/actionpack5.gemfile
13
22
  script: bundle exec rspec
data/Appraisals ADDED
@@ -0,0 +1,12 @@
1
+ # TODO: get actionpack 3 building!
2
+ #appraise "actionpack3" do
3
+ # gem "actionpack", "3.0.0"
4
+ #end
5
+
6
+ appraise "actionpack4" do
7
+ gem "actionpack", "4.0.0"
8
+ end
9
+
10
+ appraise "actionpack5" do
11
+ gem "actionpack", "5.0.0"
12
+ end
data/Gemfile CHANGED
@@ -1,4 +1,14 @@
1
1
  source 'https://rubygems.org'
2
2
 
3
- # Specify your gem's dependencies in meta_presenter.gemspec
4
3
  gemspec
4
+
5
+ gem 'pry'
6
+
7
+ # Hinting at development dependencies
8
+ # Prevents bundler from taking a long-time to resolve
9
+ group :development, :test do
10
+ gem 'rspec'
11
+ gem 'builder'
12
+ gem 'rb-readline'
13
+ gem 'coveralls'
14
+ end
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- meta_presenter (0.1.2)
4
+ meta_presenter (0.1.3)
5
5
  actionpack (>= 3.0)
6
6
 
7
7
  GEM
@@ -25,6 +25,10 @@ GEM
25
25
  i18n (>= 0.7, < 2)
26
26
  minitest (~> 5.1)
27
27
  tzinfo (~> 1.1)
28
+ appraisal (2.2.0)
29
+ bundler
30
+ rake
31
+ thor (>= 0.14.0)
28
32
  builder (3.2.3)
29
33
  coderay (1.1.2)
30
34
  concurrent-ruby (1.1.3)
@@ -92,6 +96,8 @@ PLATFORMS
92
96
  ruby
93
97
 
94
98
  DEPENDENCIES
99
+ appraisal
100
+ builder
95
101
  bundler
96
102
  coveralls
97
103
  meta_presenter!
data/README.md CHANGED
@@ -20,8 +20,6 @@ Or install it yourself as:
20
20
 
21
21
  $ gem install meta_presenter
22
22
 
23
- TODO: add an optional task that generates the scaffolding for you. Or, you can manually create the files you want.
24
-
25
23
  Include MetaPresenter::Helpers in your controller or mailer:
26
24
 
27
25
  class ApplicationController < ActionController::Base
@@ -32,6 +30,10 @@ Include MetaPresenter::Helpers in your controller or mailer:
32
30
  include MetaPresenter::Base
33
31
  end
34
32
 
33
+ ## Requirements
34
+
35
+ MetaPresenter supports Ruby >= 2.1 and ActionPack >= 4.0. If you'd like to help adding support for older versions please submit a pull request with passing specs.
36
+
35
37
  ## Example
36
38
 
37
39
  Say you have a PagesController with an action for home and logs. Underneath `app/presenters` you can add a class for each action. In this example we'll also create an application and base presenter we'll inherit from to re-use code in the per-action presenters.
@@ -148,8 +150,10 @@ If you want to customize the `presenter` method you can specify a shorthand by a
148
150
 
149
151
  ## TODO
150
152
 
151
- * add support by lower Ruby versions by replacing yield_self with equivalent compatible code
153
+ * add support for actionsupport3, will require enabling it in the Appraisal file and then fixing any bugs in the build
152
154
  * tests for ActionMailer support
155
+ * add an optional task that generates the scaffolding for you. Or, you can manually create the files you want
156
+ * add support for layouts
153
157
 
154
158
  ## Contributing
155
159
 
data/Rakefile ADDED
@@ -0,0 +1,5 @@
1
+ if !ENV["APPRAISAL_INITIALIZED"] && !ENV["TRAVIS"]
2
+ # appraisal is a ruby gem that lets us test our code
3
+ # against multiple dependency sets (gemfiles)
4
+ task :default => :appraisal
5
+ end
@@ -0,0 +1,2 @@
1
+ ---
2
+ BUNDLE_RETRY: "1"
@@ -0,0 +1,15 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "pry"
6
+ gem "actionpack", "4.0.0"
7
+
8
+ group :development, :test do
9
+ gem "rspec"
10
+ gem "builder"
11
+ gem "rb-readline"
12
+ gem "coveralls"
13
+ end
14
+
15
+ gemspec path: "../"
@@ -0,0 +1,15 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "pry"
6
+ gem "actionpack", "5.0.0"
7
+
8
+ group :development, :test do
9
+ gem "rspec"
10
+ gem "builder"
11
+ gem "rb-readline"
12
+ gem "coveralls"
13
+ end
14
+
15
+ gemspec path: "../"
@@ -61,20 +61,18 @@ module MetaPresenter
61
61
  end
62
62
 
63
63
  def ancestors
64
- all_ancestors.yield_self do |list|
65
- # Different ancestors depending on whether
66
- # we're dealing with a mailer or a controller
67
- if list.map(&:to_s).include?("ActionMailer::Base")
68
- mailer_ancestors
69
- else
70
- controller_ancestors
71
- end
72
- end.yield_self do |list|
73
- # add a presenter class for our current action
74
- # to the front of the list
75
- presenter_class_name_for_current_action = "#{list.first}::#{action_name.camelcase}"
76
- list.unshift(presenter_class_name_for_current_action)
64
+ # Different ancestors depending on whether
65
+ # we're dealing with a mailer or a controller
66
+ list = if all_ancestors.map(&:to_s).include?("ActionMailer::Base")
67
+ mailer_ancestors
68
+ else
69
+ controller_ancestors
77
70
  end
71
+
72
+ # add a presenter class for our current action
73
+ # to the front of the list
74
+ presenter_class_name_for_current_action = "#{list.first}::#{action_name.camelcase}"
75
+ list.unshift(presenter_class_name_for_current_action)
78
76
  end
79
77
 
80
78
  # The list of ancestors is very long.
@@ -14,10 +14,9 @@ module MetaPresenter
14
14
  # Initialize presenter with the current controller
15
15
  def presenter
16
16
  @presenter ||= begin
17
- yield_self do |controller|
18
- klass = MetaPresenter::Builder.new(controller, action_name).presenter_class
19
- klass.new(controller)
20
- end
17
+ controller = self
18
+ klass = MetaPresenter::Builder.new(controller, action_name).presenter_class
19
+ klass.new(controller)
21
20
  end
22
21
  end
23
22
  end
@@ -1,28 +1,31 @@
1
- # coding: utf-8
2
1
 
3
- Gem::Specification.new do |spec|
4
- spec.name = 'meta_presenter'
5
- spec.version = '0.1.2'
6
- spec.authors = ['szTheory']
7
- spec.description = %q{Presenter pattern in your Rails controllers and actions}
8
- spec.summary = %q{MetaPresenter is a Ruby gem that gives you access to the powerful presenter pattern in your Rails controllers. For each controller/action pair you get a presenter class in `app/presenters` that you can use in your views with with `presenter.method_name`. This helps you decompose your helper logic into small, tight, classes that are easily testable. There's even a DSL for method delegation on objects to reduce boilerplate.}
9
- spec.homepage = 'https://github.com/szTheory/meta_presenter'
10
- spec.license = 'MIT'
11
- spec.metadata = {
2
+
3
+ Gem::Specification.new do |s|
4
+ s.name = 'meta_presenter'
5
+ s.version = '0.1.3'
6
+ s.platform = Gem::Platform::RUBY
7
+ s.authors = ['szTheory']
8
+ s.description = %q{Presenter pattern in your Rails controllers and actions}
9
+ s.summary = %q{MetaPresenter is a Ruby gem that gives you access to the powerful presenter pattern in your Rails controllers. For each controller/action pair you get a presenter class in `app/presenters` that you can use in your views with with `presenter.method_name`. This helps you decompose your helper logic into small, tight, classes that are easily testable. There's even a DSL for method delegation on objects to reduce boilerplate.}
10
+ s.homepage = 'https://github.com/szTheory/meta_presenter'
11
+ s.license = 'MIT'
12
+ s.metadata = {
12
13
  "source_code_uri" => "https://github.com/szTheory/meta_presenter",
13
14
  }
14
15
 
15
- spec.files = `git ls-files`.split($/)
16
- spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
17
- spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
18
- spec.require_paths = ['lib']
16
+ s.files = `git ls-files`.split($/)
17
+ s.test_files = s.files.grep(%r{^(test|spec)/})
18
+ s.require_paths = ['lib']
19
+
20
+ s.required_ruby_version = '>= 2.1.0'
19
21
 
20
- spec.add_runtime_dependency 'actionpack', '>= 3.0'
22
+ s.add_dependency 'actionpack', '>= 3.0'
21
23
 
22
- spec.add_development_dependency 'rspec'
23
- spec.add_development_dependency 'bundler'
24
- spec.add_development_dependency 'rake'
25
- spec.add_development_dependency 'rb-readline'
26
- spec.add_development_dependency 'pry'
27
- spec.add_development_dependency 'coveralls'
24
+ s.add_development_dependency 'rspec'
25
+ s.add_development_dependency 'bundler'
26
+ s.add_development_dependency 'rake'
27
+ s.add_development_dependency 'rb-readline'
28
+ s.add_development_dependency 'pry'
29
+ s.add_development_dependency 'coveralls'
30
+ s.add_development_dependency 'appraisal'
28
31
  end
@@ -32,13 +32,17 @@ describe MetaPresenter::Builder do
32
32
 
33
33
  context "subclass of ApplicationController" do
34
34
  let(:controller_class) { PagesController }
35
- let(:action_name) { "logs" }
36
35
 
37
- it { is_expected.to be Pages::LogsPresenter }
36
+ context "action with a presenter class defined" do
37
+ let(:action_name) { "logs" }
38
+ before { expect(Object).to_not be_const_defined('LogsPresenter') }
39
+
40
+ it { is_expected.to be Pages::LogsPresenter }
41
+ end
38
42
 
39
43
  context "action without a presenter class defined" do
40
- # Good luck finding that FairyPresenter, doesn't exist!
41
44
  let(:action_name) { "fairy" }
45
+ before { expect(Object).to_not be_const_defined('FairyPresenter') }
42
46
 
43
47
  it "defers to the parent presenter" do
44
48
  expect(subject).to be PagesPresenter
@@ -6,7 +6,7 @@ describe MetaPresenter::Helpers do
6
6
  let(:action_name) { 'logs' }
7
7
 
8
8
  describe '#presenter' do
9
- subject { controller.helpers.presenter }
9
+ subject { controller.view_context.presenter }
10
10
 
11
11
  before do
12
12
  allow(controller).to receive(:action_name).and_return(action_name)
@@ -1,4 +1,2 @@
1
- # require 'application_controller'
2
-
3
1
  class PagesController < ApplicationController
4
2
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: meta_presenter
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.1.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - szTheory
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-11-23 00:00:00.000000000 Z
11
+ date: 2018-11-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: actionpack
@@ -108,6 +108,20 @@ dependencies:
108
108
  - - ">="
109
109
  - !ruby/object:Gem::Version
110
110
  version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: appraisal
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
111
125
  description: Presenter pattern in your Rails controllers and actions
112
126
  email:
113
127
  executables: []
@@ -116,10 +130,15 @@ extra_rdoc_files: []
116
130
  files:
117
131
  - ".gitignore"
118
132
  - ".travis.yml"
133
+ - Appraisals
119
134
  - Gemfile
120
135
  - Gemfile.lock
121
136
  - LICENSE.txt
122
137
  - README.md
138
+ - Rakefile
139
+ - gemfiles/.bundle/config
140
+ - gemfiles/actionpack4.gemfile
141
+ - gemfiles/actionpack5.gemfile
123
142
  - lib/meta_presenter.rb
124
143
  - lib/meta_presenter/base.rb
125
144
  - lib/meta_presenter/base/delegate_all_to.rb
@@ -152,7 +171,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
152
171
  requirements:
153
172
  - - ">="
154
173
  - !ruby/object:Gem::Version
155
- version: '0'
174
+ version: 2.1.0
156
175
  required_rubygems_version: !ruby/object:Gem::Requirement
157
176
  requirements:
158
177
  - - ">="