meta_presenter 0.1.3 → 0.1.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a6f42b2b3dce01fdf2f0acb8588fe6377af542ac0b28ecf2a40d76b951a4f8cf
4
- data.tar.gz: 9dc1717fe89a41bf9d99c1095d88117255dffa34a9485ed0ebd4742466005361
3
+ metadata.gz: f337e9c7d7719689f5bf9f34215265b34eb197dd1dde628c1d227812db8461bc
4
+ data.tar.gz: a0c2c339a4b9afa58085b50d815054aa935a4369a5477fbb7eaaf0fbc1028310
5
5
  SHA512:
6
- metadata.gz: 789b9c804d600a9a715851e9fd77345acb7f11ba930c6e09c05d729b743792b6ceabba74b6dd28e6756eda7ef39dfa089f4b9d1ae261ac32398fde54da967b99
7
- data.tar.gz: 45401a3342a6e079605a863c9ce0f505182834263fbee7233cf94c72055774b619b78e4e14b91383406a3d5c324ec082c14e7c3b5566bc5a6ce183c253837316
6
+ metadata.gz: ec286fb53acbae17137ca1cb6b84f7d9a64faab49b4e2b355ba19a8df41400fe1fb90b0bbb681038adedba4aca01a8033ecfd9af4376abedba6ca0521abc58dd
7
+ data.tar.gz: 11f1d08524cde6ed6c5cbfaf336f5d54bb99786e0cdb28263fc372d539faf84ee57a23bdc3252347fa3d71d82a4c63122adc2297295a03948aee31d20f17d365
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- meta_presenter (0.1.3)
4
+ meta_presenter (0.1.4)
5
5
  actionpack (>= 3.0)
6
6
 
7
7
  GEM
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- [![Gem Version](https://badge.fury.io/rb/meta_presenter.svg)](https://badge.fury.io/rb/meta_presenter) [![Build Status](https://travis-ci.org/szTheory/meta_presenter.svg?branch=master)](https://travis-ci.org/szTheory/meta_presenter) [![Coverage Status](https://coveralls.io/repos/github/szTheory/meta_presenter/badge.svg?branch=master)](https://coveralls.io/github/szTheory/meta_presenter?branch=master) [![Inline docs](http://inch-ci.org/github/szTheory/meta_presenter.svg?branch=master)](http://inch-ci.org/github/szTheory/meta_presenter) [![MIT License](https://img.shields.io/github/license/mashape/apistatus.svg)](https://github.com/szTheory/meta_presenter/blob/master/LICENSE.txt) [![Gem](https://img.shields.io/gem/dt/meta_presenter.svg)](https://rubygems.org/gems/meta_presenter) [![GitHub stars](https://img.shields.io/github/stars/szTheory/meta_presenter.svg?label=Stars&style=social)](https://github.com/szTheory/meta_presenter)
1
+ [![Gem Version](https://badge.fury.io/rb/meta_presenter.svg)](https://badge.fury.io/rb/meta_presenter) [![Build Status](https://travis-ci.org/szTheory/meta_presenter.svg?branch=master)](https://travis-ci.org/szTheory/meta_presenter) [![Coverage Status](https://coveralls.io/repos/github/szTheory/meta_presenter/badge.svg?branch=master)](https://coveralls.io/github/szTheory/meta_presenter?branch=master) [![Inline docs](http://inch-ci.org/github/szTheory/meta_presenter.svg?branch=master)](http://inch-ci.org/github/szTheory/meta_presenter) [![Maintainability](https://api.codeclimate.com/v1/badges/8698d68a87ec1a9bfacd/maintainability)](https://codeclimate.com/github/szTheory/meta_presenter/maintainability) [![MIT License](https://img.shields.io/github/license/mashape/apistatus.svg)](https://github.com/szTheory/meta_presenter/blob/master/LICENSE.txt) [![Gem](https://img.shields.io/gem/dt/meta_presenter.svg)](https://rubygems.org/gems/meta_presenter) [![GitHub stars](https://img.shields.io/github/stars/szTheory/meta_presenter.svg?label=Stars&style=social)](https://github.com/szTheory/meta_presenter)
2
2
 
3
3
  # MetaPresenter
4
4
 
@@ -1,5 +1,12 @@
1
1
  require 'meta_presenter/helpers'
2
2
  require 'meta_presenter/base'
3
3
 
4
+ # MetaPresenter is a Ruby gem that gives you access to the
5
+ # powerful presenter pattern in your Rails controllers. For each
6
+ # controller/action pair you get a presenter class in `app/presenters`
7
+ # that you can use in your views with with `presenter.method_name`.
8
+ # This helps you decompose your helper logic into tight, easily
9
+ # testable classes. There's even a DSL for method delegation
10
+ # on objects to reduce boilerplate.
4
11
  module MetaPresenter
5
12
  end
@@ -1,24 +1,26 @@
1
1
  require_relative 'base/delegate_all_to.rb'
2
2
  require_relative 'base/delegate_to_controller.rb'
3
3
 
4
- # Base presenter class. Inherit from this it in order
5
- # to get a presenter you can use in your views
6
- #
7
- # # app/presenters/application_presenter.rb
8
- # class ApplicationPresenter < MetaPresenter::Base
9
- # def message
10
- # "Hello"
11
- # end
12
- # end
13
- #
14
4
  module MetaPresenter
5
+
6
+ # Base presenter class. Inherit from this it in order
7
+ # to get a presenter you can use in your views
8
+ #
9
+ # # app/presenters/application_presenter.rb
10
+ # class ApplicationPresenter < MetaPresenter::Base
11
+ # def message
12
+ # "Hello"
13
+ # end
14
+ # end
15
15
  class Base
16
16
  include DelegateToController
17
17
  # Comes last so `delegate_all_to` takes priority
18
18
  # over default controller actions
19
19
  include DelegateAllTo
20
20
 
21
+ # Displayed in errors involving the presenter
21
22
  def inspect
23
+ # Concise to not dump too much information on the dev
22
24
  "#<#{self.class.name}>"
23
25
  end
24
26
  end
@@ -3,15 +3,26 @@ require 'active_support/core_ext/class/attribute'
3
3
 
4
4
  module MetaPresenter
5
5
  class Base
6
+ # Give the presenter the ability to delegate methods to an object
6
7
  module DelegateAllTo
8
+
7
9
  extend ActiveSupport::Concern
8
10
  included do
11
+ # Name of an object that when specified will delegate to
12
+ # all incoming methods send to the presenter that
13
+ # we not already handled by the presenter otherwise
14
+ # (such as explicitly defining the method)
9
15
  class_attribute :delegate_all_to
10
- attr_accessor :delegating
16
+
11
17
  include InstanceMethods
12
18
  end
13
19
 
14
- module InstanceMethods
20
+ module InstanceMethods # :nodoc:
21
+
22
+ # Check to see whether a method has been either
23
+ # defined by or is delegated by this presenter
24
+ #
25
+ # @param *args method name and the other arguments
15
26
  def respond_to_missing?(*args)
16
27
  method_name = args.first
17
28
  delegate_all_responds_to?(method_name) || super
@@ -37,15 +48,15 @@ module MetaPresenter
37
48
  # Temporarily set a flag that we are delegating
38
49
  # to an underlying method. this allows us
39
50
  # to chain additional methods calls onto the end
40
- delegating = true
51
+ @delegating = true
41
52
  send(self.class.delegate_all_to)
42
53
  ensure
43
54
  # Cleanup the flag afterwards to close the door behind us
44
- delegating = false
55
+ @delegating = false
45
56
  end
46
57
 
47
58
  def delegating_all_to?
48
- delegating == true
59
+ @delegating == true
49
60
  end
50
61
 
51
62
  def delegate_all_to?
@@ -2,20 +2,34 @@ require 'active_support/concern'
2
2
 
3
3
  module MetaPresenter
4
4
  class Base
5
+ # Give the presenter the ability to delegate methods to
6
+ # a controller (ActionController::Base or ActionMailer::Base)
5
7
  module DelegateToController
8
+
9
+ # Presenters delegate to private controller methods by default
6
10
  INCLUDE_PRIVATE_METHODS = true
7
11
 
8
12
  extend ActiveSupport::Concern
9
13
  included do
14
+ # Controller that this presenter will delegate methods to
10
15
  attr_reader :controller
16
+
11
17
  include InstanceMethods
12
18
  end
13
19
 
14
- module InstanceMethods
20
+ module InstanceMethods # :nodoc:
21
+
22
+ # Creates a new presenter
23
+ #
24
+ # @param [ActionController::Base, ActionMailer::Base] controller Controller that this presenter will delegate methods to
15
25
  def initialize(controller)
16
26
  @controller = controller
17
27
  end
18
28
 
29
+ # Check to see whether a method has been either
30
+ # defined by or is delegated by this presenter
31
+ #
32
+ # @param *args method name and the other arguments
19
33
  def respond_to_missing?(*args)
20
34
  method_name = args.first
21
35
  delegates_controller_method? || super
@@ -1,21 +1,37 @@
1
1
  require 'active_support/core_ext/object/try'
2
2
 
3
3
  module MetaPresenter
4
+
5
+ # Builds a presenter class for a controller and method
4
6
  class Builder
5
- attr_reader :controller, :action_name
7
+
8
+ # Controller that this presenter will delegate methods to
9
+ attr_reader :controller
10
+
11
+ # Name of the controller's action to hook the presenter up to
12
+ attr_reader :action_name
13
+
14
+ # Creates a new Builder
15
+ #
16
+ # @param [ActionController::Base, ActionMailer::Base] controller Controller that this presenter will delegate methods to
17
+ # @param [String] action_name Name of the controller's action to hook the presenter up to
6
18
  def initialize(controller, action_name)
7
19
  @controller = controller
8
20
  @action_name = action_name
9
21
  end
10
22
 
11
- # If the file exists, but the class isn't defined then something
12
- # has gone wrong that the dev really should know about!
23
+ # Error for there's no presenter class defined but a file for it exists
13
24
  class FileExistsButPresenterNotDefinedError < NameError
25
+ # Create a new error
26
+ #
27
+ # @param [String] presenter_class_name Class name of presenter
28
+ # @param [String] presenter_file_path File path where the presenter Ruby class was found at
14
29
  def initialize(presenter_class_name, presenter_file_path)
15
30
  super("Presenter class #{presenter_class_name} is not defined but file exists at #{presenter_file_path}")
16
31
  end
17
32
  end
18
33
 
34
+ # @return [Class] the presenter class for our controller and action combination
19
35
  def presenter_class
20
36
  # Try to find the class (it's not guaranteed)
21
37
  klass_name = ancestors.find do |klass_name|
@@ -2,6 +2,19 @@ require 'meta_presenter/builder'
2
2
  require 'active_support/concern'
3
3
 
4
4
  module MetaPresenter
5
+
6
+ # Including this module in your controller will give
7
+ # your views access to a `presenter` method that
8
+ # delegates to controller methods
9
+ #
10
+ # class ApplicationController < ActionController::Base
11
+ # include MetaPresenter::Base
12
+ # end
13
+ #
14
+ # class ApplicationMailer < ActionMailer::Base
15
+ # include MetaPresenter::Base
16
+ # end
17
+ #
5
18
  module Helpers
6
19
  extend ActiveSupport::Concern
7
20
  included do
@@ -2,7 +2,7 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = 'meta_presenter'
5
- s.version = '0.1.3'
5
+ s.version = '0.1.4'
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}
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: meta_presenter
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
4
+ version: 0.1.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - szTheory