meta_presenter 0.1.5 → 0.1.6

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: 85ad2a5319203c66fddcad35088e1fafbed032ba0268d47dc7a5450935c5f7f9
4
- data.tar.gz: fe1f7357f559f3246b972214e02c2084f3ab943c0ecc0db60ffdc34d1c882bb0
3
+ metadata.gz: 2520562652ee736cdd7cca496683fb093e0b8f6ef5935429504b819feb61991f
4
+ data.tar.gz: ab969767427ce4242ba5f70b144e277522d81c857b9393596dec839482c2aae9
5
5
  SHA512:
6
- metadata.gz: 9365877877a78521bd8540624d6eb75e19375854cc4b295c1555c5d0c95504022242a1eb58dd9b6ce257c36660a83d89b70116c978cff3606763e4da8f0ebc00
7
- data.tar.gz: 18382a4cfb689d8d605fec617528f3e5b11dca72ad42cf27f8fc29d047ec43614207a90350c440a0d8795006ece10d418b4e27f0acc201437b071065cae12367
6
+ metadata.gz: effeb19171c360f4bb06dcbef0779d60ef321c068a26544a941c33907b4875e5277eceb15dca065608ac4124aeafe00542dd1836ee6b10f3a22cfcb5c07a0d8d
7
+ data.tar.gz: b4c3959db506ec00f8579e791dd0bf0f76d2955837f2524a256941bc4d2cd6422ca8338464f71a251f21e6f955518047970e9ea57d4cda10451faf16b046df52
data/.travis.yml CHANGED
@@ -11,14 +11,14 @@ rvm:
11
11
  - 2.4.0
12
12
  - 2.5.0
13
13
  gemfile:
14
- - gemfiles/actionpack4.gemfile
15
- - gemfiles/actionpack5.gemfile
14
+ - gemfiles/rails4.gemfile
15
+ - gemfiles/rails5.gemfile
16
16
  matrix:
17
17
  exclude:
18
18
  - rvm: 2.1.0
19
- gemfile: gemfiles/actionpack5.gemfile
19
+ gemfile: gemfiles/rails5.gemfile
20
20
  - rvm: 2.2.0
21
- gemfile: gemfiles/actionpack5.gemfile
21
+ gemfile: gemfiles/rails5.gemfile
22
22
  script: bundle exec rspec
23
23
  before_install:
24
24
  - gem install bundler -v '< 2'
data/Appraisals CHANGED
@@ -3,15 +3,18 @@
3
3
  # gem "actionpack", "3.0.0"
4
4
  #end
5
5
 
6
- appraise "actionpack4" do
6
+ appraise "rails4" do
7
7
  gem "actionpack", "4.0.0"
8
+ gem "actionmailer", "4.0.0"
8
9
  end
9
10
 
10
- appraise "actionpack5" do
11
+ appraise "rails5" do
11
12
  gem "actionpack", "5.0.0"
13
+ gem "actionmailer", "5.0.0"
12
14
  end
13
15
 
14
16
  # TODO: uncomment this once Rails 6 is released on April 30, 2019
15
- # appraise "actionpack6" do
17
+ # appraise "rails6" do
16
18
  # gem "actionpack", "6.0.0"
19
+ # gem "actionmailer", "6.0.0"
17
20
  # end
data/Gemfile.lock CHANGED
@@ -2,11 +2,18 @@ PATH
2
2
  remote: .
3
3
  specs:
4
4
  meta_presenter (0.1.5)
5
- actionpack (>= 3.0)
5
+ actionmailer (>= 4.0)
6
+ actionpack (>= 4.0)
6
7
 
7
8
  GEM
8
9
  remote: https://rubygems.org/
9
10
  specs:
11
+ actionmailer (5.2.2)
12
+ actionpack (= 5.2.2)
13
+ actionview (= 5.2.2)
14
+ activejob (= 5.2.2)
15
+ mail (~> 2.5, >= 2.5.4)
16
+ rails-dom-testing (~> 2.0)
10
17
  actionpack (5.2.2)
11
18
  actionview (= 5.2.2)
12
19
  activesupport (= 5.2.2)
@@ -20,6 +27,9 @@ GEM
20
27
  erubi (~> 1.4)
21
28
  rails-dom-testing (~> 2.0)
22
29
  rails-html-sanitizer (~> 1.0, >= 1.0.3)
30
+ activejob (5.2.2)
31
+ activesupport (= 5.2.2)
32
+ globalid (>= 0.3.6)
23
33
  activesupport (5.2.2)
24
34
  concurrent-ruby (~> 1.0, >= 1.0.2)
25
35
  i18n (>= 0.7, < 2)
@@ -42,13 +52,18 @@ GEM
42
52
  diff-lcs (1.3)
43
53
  docile (1.3.1)
44
54
  erubi (1.8.0)
55
+ globalid (0.4.2)
56
+ activesupport (>= 4.2.0)
45
57
  i18n (1.5.2)
46
58
  concurrent-ruby (~> 1.0)
47
59
  json (2.1.0)
48
60
  loofah (2.2.3)
49
61
  crass (~> 1.0.2)
50
62
  nokogiri (>= 1.5.9)
63
+ mail (2.7.1)
64
+ mini_mime (>= 0.1.1)
51
65
  method_source (0.9.2)
66
+ mini_mime (1.0.1)
52
67
  mini_portile2 (2.4.0)
53
68
  minitest (5.11.3)
54
69
  nokogiri (1.10.1)
data/README.md CHANGED
@@ -203,8 +203,10 @@ MetaPresenter supports Ruby >= 2.1 and ActionPack >= 4.0. If you'd like to help
203
203
  ## Specs
204
204
  To run the specs for the currently running Ruby version, run `bundle install` and then `bundle exec rspec`. To run specs for every supported version of ActionPack, run `bundle exec appraisal install` and then `bundle exec appraisal rspec`.
205
205
 
206
+ ## Gem release
207
+ Make sure the specs pass, bump the version number in meta_presenter.gemspec, build the gem with `gem build meta_presenter.gemspec`. Then commit changes and tag the commit with the current release number with `git tag -a "vVersionNumberHere" -m "vVersionNumberHere"`. Push the commit with `git push`, then push the tags with `git push origin --tags`. Finally, push the gem with `gem push meta_presenter-version-number-here.gem`.
208
+
206
209
  ## TODO
207
- * tests for ActionMailer support
208
210
  * optional `rake meta_presenter:install` that generates the scaffolding for you. Or, you can manually create the files you want.
209
211
  * add support for layout-level presenters
210
212
  * add Rails 6 support once it comes out (hopefully just have to add a gemfiles/actionpack6.gemfile and it will run with the Appraisal suite)
@@ -0,0 +1,16 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "actionpack", "4.0.0"
6
+ gem "actionmailer", "4.0.0"
7
+
8
+ group :development, :test do
9
+ gem "pry"
10
+ gem "rspec"
11
+ gem "builder"
12
+ gem "rb-readline"
13
+ gem "coveralls"
14
+ end
15
+
16
+ gemspec path: "../"
@@ -0,0 +1,16 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "actionpack", "5.0.0"
6
+ gem "actionmailer", "5.0.0"
7
+
8
+ group :development, :test do
9
+ gem "pry"
10
+ gem "rspec"
11
+ gem "builder"
12
+ gem "rb-readline"
13
+ gem "coveralls"
14
+ end
15
+
16
+ gemspec path: "../"
@@ -31,10 +31,10 @@ module MetaPresenter
31
31
  end
32
32
  end
33
33
 
34
- class NoPresenterClassDefinedError < NameError
34
+ class InvalidControllerError < NameError
35
35
  # Create a new error
36
- def initialize(controller, action_name)
37
- super("No presenter defined for #{controller.class.to_s}##{action_name}")
36
+ def initialize(controller)
37
+ super("You tried to present a #{controller.class.name} class, but only a Rails controller or mailer can be presented")
38
38
  end
39
39
  end
40
40
 
@@ -49,10 +49,6 @@ module MetaPresenter
49
49
  break if !klass.nil?
50
50
  end
51
51
 
52
- if klass.nil?
53
- raise NoPresenterClassDefinedError.new(controller, action_name)
54
- end
55
-
56
52
  klass
57
53
  end
58
54
 
@@ -63,7 +59,13 @@ module MetaPresenter
63
59
  private
64
60
  def all_ancestors
65
61
  controller.class.ancestors.select do |ancestor|
66
- ancestor <= ActionController::Base
62
+ if controller.class <= ActionController::Base
63
+ ancestor <= ActionController::Base
64
+ elsif controller.class <= ActionMailer::Base
65
+ ancestor <= ActionMailer::Base
66
+ else
67
+ raise InvalidControllerError.new(controller)
68
+ end
67
69
  end
68
70
  end
69
71
 
@@ -1,5 +1,6 @@
1
1
  require 'meta_presenter/builder'
2
2
  require 'active_support/concern'
3
+ require 'active_support/rescuable'
3
4
 
4
5
  module MetaPresenter
5
6
  # Including this module in your controller will give
@@ -34,7 +35,9 @@ module MetaPresenter
34
35
  @presenter ||= begin
35
36
  controller = self
36
37
  klass = MetaPresenter::Builder.new(controller, action_name).presenter_class
37
- raise PresenterClassNotFoundError.new(controller, action_name) if klass == :undefined_presenter_class
38
+ if klass.nil?
39
+ raise PresenterClassNotFoundError.new(controller, action_name)
40
+ end
38
41
  klass.new(controller)
39
42
  end
40
43
  end
@@ -2,7 +2,7 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = 'meta_presenter'
5
- s.version = '0.1.5'
5
+ s.version = '0.1.6'
6
6
  s.platform = Gem::Platform::RUBY
7
7
  s.authors = ['szTheory']
8
8
  s.description = %q{Presenter pattern in your Rails controllers and actions}
@@ -19,7 +19,8 @@ Gem::Specification.new do |s|
19
19
 
20
20
  s.required_ruby_version = '>= 2.1.0'
21
21
 
22
- s.add_dependency 'actionpack', '>= 3.0'
22
+ s.add_dependency 'actionpack', '>= 4.0'
23
+ s.add_dependency 'actionmailer', '>= 4.0'
23
24
 
24
25
  s.add_development_dependency 'rspec'
25
26
  s.add_development_dependency 'bundler'
@@ -1,8 +1,9 @@
1
1
  require 'spec_helper'
2
+ # require 'ostruct'
2
3
 
3
4
  describe MetaPresenter::Builder do
4
5
  let(:controller_class) { ApplicationController }
5
- let(:controller) { controller_class.new }
6
+ let(:controller) { controller_class.send(:new) }
6
7
  let(:action_name) { 'logs' }
7
8
  let(:object) { described_class.new(controller, action_name) }
8
9
 
@@ -44,6 +45,27 @@ describe MetaPresenter::Builder do
44
45
  end
45
46
  end
46
47
 
48
+ context "neither a controller nor a mailer" do
49
+ let(:controller_class) { OpenStruct }
50
+
51
+ before do
52
+ expect(controller_class < ActionController::Base).to_not be true
53
+ expect(controller_class < ActionMailer::Base).to_not be true
54
+ end
55
+
56
+ it { expect { subject }.to raise_error(MetaPresenter::Builder::InvalidControllerError) }
57
+ end
58
+
59
+ context "mailer" do
60
+ let(:controller_class) { ApplicationMailer }
61
+
62
+ before do
63
+ expect(controller_class < ActionMailer::Base).to be true
64
+ end
65
+
66
+ it { is_expected.to be Mailers::ApplicationPresenter }
67
+ end
68
+
47
69
  context "subclass of ApplicationController" do
48
70
  let(:controller_class) { PagesController }
49
71
 
@@ -0,0 +1,5 @@
1
+ require 'action_mailer'
2
+
3
+ class ApplicationMailer < ActionMailer::Base
4
+ include MetaPresenter::Helpers
5
+ end
@@ -0,0 +1,4 @@
1
+ module Mailers
2
+ class ApplicationPresenter < MetaPresenter::Base
3
+ end
4
+ 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.5
4
+ version: 0.1.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - szTheory
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-01-15 00:00:00.000000000 Z
11
+ date: 2019-01-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: actionpack
@@ -16,14 +16,28 @@ dependencies:
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: '3.0'
19
+ version: '4.0'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: '3.0'
26
+ version: '4.0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: actionmailer
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '4.0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '4.0'
27
41
  - !ruby/object:Gem::Dependency
28
42
  name: rspec
29
43
  requirement: !ruby/object:Gem::Requirement
@@ -139,6 +153,8 @@ files:
139
153
  - gemfiles/.bundle/config
140
154
  - gemfiles/actionpack4.gemfile
141
155
  - gemfiles/actionpack5.gemfile
156
+ - gemfiles/rails4.gemfile
157
+ - gemfiles/rails5.gemfile
142
158
  - lib/meta_presenter.rb
143
159
  - lib/meta_presenter/base.rb
144
160
  - lib/meta_presenter/base/delegate_all_to.rb
@@ -154,9 +170,11 @@ files:
154
170
  - spec/support/app/controllers/application_controller.rb
155
171
  - spec/support/app/controllers/pages_controller.rb
156
172
  - spec/support/app/controllers/without_presenter_controller.rb
173
+ - spec/support/app/mailers/application_mailer.rb
157
174
  - spec/support/app/presenters/admin/dashboard/inbox_presenter.rb
158
175
  - spec/support/app/presenters/admin/dashboard_presenter.rb
159
176
  - spec/support/app/presenters/application_presenter.rb
177
+ - spec/support/app/presenters/mailers/application_presenter.rb
160
178
  - spec/support/app/presenters/pages/logs_presenter.rb
161
179
  - spec/support/app/presenters/pages/only_file_exists_presenter.rb
162
180
  - spec/support/app/presenters/pages_presenter.rb
@@ -198,9 +216,11 @@ test_files:
198
216
  - spec/support/app/controllers/application_controller.rb
199
217
  - spec/support/app/controllers/pages_controller.rb
200
218
  - spec/support/app/controllers/without_presenter_controller.rb
219
+ - spec/support/app/mailers/application_mailer.rb
201
220
  - spec/support/app/presenters/admin/dashboard/inbox_presenter.rb
202
221
  - spec/support/app/presenters/admin/dashboard_presenter.rb
203
222
  - spec/support/app/presenters/application_presenter.rb
223
+ - spec/support/app/presenters/mailers/application_presenter.rb
204
224
  - spec/support/app/presenters/pages/logs_presenter.rb
205
225
  - spec/support/app/presenters/pages/only_file_exists_presenter.rb
206
226
  - spec/support/app/presenters/pages_presenter.rb