oprah 0.1.2 → 0.1.3

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
  SHA1:
3
- metadata.gz: b1e9fd6ab8d90759dcb787eadca9fd7ef1c2afe8
4
- data.tar.gz: 9aeae5743f0dc4572659e5da7cae55bcfcbdeec8
3
+ metadata.gz: 4011edd6b8e184f5ec62fabddffa5cade44f4b0b
4
+ data.tar.gz: b6403c0fbb058e6c94115604eb59f6a748888e2f
5
5
  SHA512:
6
- metadata.gz: 3398aba9e5893f76f10378beb116b6d87669e578e78bb90404c2d5fcb305a9e40f4c90cb51e14348f62758eefec15ea3635f465b56c607af6541717fca431f58
7
- data.tar.gz: 1eef4021cd796d65299e84a53f97ca1eae5d66b14dafb45e25a81297dd3302d7e43f46620ae83a640cd4c3e673720b512373bc01375268340eed1c41f28856e7
6
+ metadata.gz: c80a890fa2610c667edd35148f7b2beee0c4c7fbac4f7804ffe8924c26689d1173b7b89124832a0bf8e00afd3ac0a2eb517bdd4a7b4bff597a42adeb477e8025
7
+ data.tar.gz: 7afe2120219f96cd17d5b820cff5cb2654b7e7a4b85aae8632cf086d9b73033119968dccdd7feb7995d102c930d756ae52e844be4bddbf58d6f85b718f1bb35b
data/.gitignore CHANGED
@@ -12,3 +12,4 @@
12
12
  *.o
13
13
  *.a
14
14
  mkmf.log
15
+ test/dummy/log/
data/.travis.yml CHANGED
@@ -1,7 +1,7 @@
1
1
  language: ruby
2
2
  sudo: false
3
3
  cache: bundler
4
- script: rake test
4
+ script: bundle exec rake test
5
5
  rvm:
6
6
  - 2.3.1
7
7
  matrix:
data/CHANGELOG.md CHANGED
@@ -1,3 +1,14 @@
1
+ 0.1.3
2
+ -----
3
+
4
+ - Presenters can now be specified using the `only:` keyword
5
+ argument, which takes either a Class or an Array of classes
6
+ - Replace repeated method default arguments with splats
7
+ - Add assertions to TestHelper
8
+ - Delegate to most recent view context in presenters created
9
+ from within Rails controllers [#1]
10
+ - Add #present and #present_many methods to Presenter [#2]
11
+
1
12
  0.1.2
2
13
  -----
3
14
 
data/README.md CHANGED
@@ -18,6 +18,10 @@ Opinionated presenters for Rails 5 - without the cruft.
18
18
  * [Composition](#composition)
19
19
  + [Performance](#performance)
20
20
  + [Ordering](#ordering)
21
+ + [Choosing presenters](#choosing-presenters)
22
+ * [Testing](#testing)
23
+ * [API Documentation](#api-documentation)
24
+ * [Contributing](#contributing)
21
25
  * [License](#license)
22
26
  * [Author](#author)
23
27
 
@@ -32,7 +36,7 @@ goals in mind only covered partially (or not at all) by other gems:
32
36
 
33
37
  - Lightweight
34
38
  - Presenters should be easy to test
35
- - No monkey patching :monkey::gun:
39
+ - Avoid monkey patching, where possible :monkey::gun:
36
40
  - Embrace convention over configuration
37
41
  - First-class support for composition (modules and concerns)
38
42
 
@@ -239,6 +243,51 @@ Oprah.present(User.new).baz
239
243
  # => "foobar"
240
244
  ```
241
245
 
246
+ ### Choosing presenters
247
+
248
+ When presenting an object you can optionally choose which presenter classes
249
+ to use:
250
+
251
+ ``` ruby
252
+ Oprah.present(User.new, only: DescribablePresenter)
253
+ ```
254
+
255
+ This parameter takes either a single presenter or an `Array` of presenters.
256
+ The presenter(s) given need to match the object's class or one of it's
257
+ ancestors. Non-matching presenters given will be ignored.
258
+
259
+ ## Testing
260
+
261
+ Testing presenters is as simple as testing a regular class. Oprah also
262
+ provides couple of helpers to make it even easier:
263
+
264
+ ``` ruby
265
+ class UserPresenterTest < Minitest::Test
266
+ include Oprah::TestHelpers
267
+
268
+ def setup
269
+ @presenter = present User.new
270
+ end
271
+
272
+ def test_presented
273
+ assert_presented @presenter
274
+ end
275
+
276
+ def test_name
277
+ assert_equal "John Doe", @presenter.name
278
+ end
279
+ end
280
+ ```
281
+
282
+ ## API Documentation
283
+
284
+ Comprehensive API Documentation is available at
285
+ [rubydoc.info](http://www.rubydoc.info/gems/oprah).
286
+
287
+ ## Contributing
288
+
289
+ Please check out our [contributing guidelines](CONTRIBUTING.md).
290
+
242
291
  ## License
243
292
 
244
293
  Released under the MIT license. See the LICENSE file for details.
data/lib/oprah.rb CHANGED
@@ -5,6 +5,7 @@ require 'singleton'
5
5
  # gems
6
6
  require 'active_support/concern'
7
7
  require 'active_support/inflector'
8
+ require 'active_support/proxy_object'
8
9
  require 'action_controller'
9
10
 
10
11
  # internal
@@ -16,28 +17,26 @@ require 'oprah/version'
16
17
  require 'oprah/railtie' if defined?(Rails)
17
18
 
18
19
  # The Oprah namespace.
20
+ #
21
+ # @since 0.0.1
19
22
  module Oprah
20
23
  # @!visibility private
21
24
  def debug?
22
25
  !!ENV["OPRAH_DEBUG"]
23
26
  end
24
27
 
25
- # Shortcut to {Oprah::Presenter#present}.
28
+ # Presents a single object.
26
29
  #
27
- # @param object [Object] The object to present
28
- # @param view_context [ActionView::Context] View context to assign
29
- # @return [Presenter] Presented object
30
- def present(object, view_context: Presenter.default_view_context)
31
- Presenter.present(object, view_context: view_context)
30
+ # @see Presenter.present
31
+ def present(*args, **kwargs, &block)
32
+ Presenter.present(*args, **kwargs, &block)
32
33
  end
33
34
 
34
- # Shortcut to {Presenter#present_many}.
35
+ # Presents a collection of objects.
35
36
  #
36
- # @param objects [Enumerable] The objects to present
37
- # @param view_context [ActionView::Context] View context to assign
38
- # @return [Enumerable] Presented collection
39
- def present_many(objects, view_context: Presenter.default_view_context)
40
- Presenter.present_many(objects, view_context: view_context)
37
+ # @see Presenter.present_many
38
+ def present_many(*args, **kwargs, &block)
39
+ Presenter.present_many(*args, **kwargs, &block)
41
40
  end
42
41
 
43
42
  extend self
@@ -2,6 +2,29 @@ module Oprah
2
2
  # Helpers that will be mixed into `ActionController::Base` by
3
3
  # the {Oprah::Railtie}.
4
4
  module ControllerHelpers
5
+ # A proxy class to delegate method calls to view contexts in presenters
6
+ # to the most recently created view context by
7
+ # {ControllerHelpers#view_context}.
8
+ #
9
+ # `ViewContextProxy` objects are automatically created in
10
+ # {ControllerHelpers#present} and {ControllerHelpers#present_many} and
11
+ # shouldn't have to be created manually.
12
+ #
13
+ # @since 0.1.3
14
+ class ViewContextProxy < ActiveSupport::ProxyObject
15
+ # @param [ActionController::Base] controller
16
+ # The controller to delegate to.
17
+ def initialize(controller)
18
+ @controller = controller
19
+ end
20
+
21
+ # Delegates all method calls to the `ActionView::Base` returned from
22
+ # {ControllerHelpers#oprah_view_context}.
23
+ def method_missing(meth, *args, &block)
24
+ @controller.oprah_view_context.__send__(meth, *args, &block)
25
+ end
26
+ end
27
+
5
28
  extend ActiveSupport::Concern
6
29
 
7
30
  included do
@@ -9,38 +32,78 @@ module Oprah
9
32
  helper_method :present_many
10
33
  end
11
34
 
12
- # Presents the given `object` using {Presenter.present}.
35
+ # Presents a single object.
13
36
  #
14
37
  # Will pass the view context returned from {#oprah_view_context} to the
15
- # presenter.
38
+ # presenter by default. This can be overridden.
16
39
  #
17
- # @param object [Object] The object to present
18
- # @param view_context [ActionView::Context] View context to assign
19
- # @return [Presenter] Presented object
20
- def present(object, view_context: oprah_view_context)
21
- Oprah.present(object, view_context: view_context)
40
+ # @see Presenter.present
41
+ def present(*args, **kwargs, &block)
42
+ kwargs = {
43
+ view_context: oprah_view_context_proxy
44
+ }.merge(kwargs)
45
+
46
+ Presenter.present(*args, **kwargs, &block)
22
47
  end
23
48
 
24
- # Presents the given `objects` using {Presenter.present}.
49
+ # Presents a collection of objects.
25
50
  #
26
51
  # Will pass the view context returned from {#oprah_view_context} to the
27
- # presenter.
52
+ # presenter by default. This can be overridden.
28
53
  #
29
- # @param objects [Enumerable] The objects to present
30
- # @param view_context [ActionView::Context] View context to assign
31
- # @return [Presenter] Presented object
32
- def present_many(objects, view_context: oprah_view_context)
33
- Oprah.present_many(objects, view_context: view_context)
54
+ # @see Presenter.present_many
55
+ def present_many(*args, **kwargs, &block)
56
+ kwargs = {
57
+ view_context: oprah_view_context_proxy
58
+ }.merge(kwargs)
59
+
60
+ Presenter.present_many(*args, **kwargs, &block)
34
61
  end
35
62
 
36
- # The view context automatically passed to presented objects.
63
+ # The view context automatically passed to objects presented from this
64
+ # controller.
37
65
  #
38
66
  # You can override this method pass a custom view context to all
39
67
  # presented objects from the controller scope.
40
68
  #
41
- # @return [ActionView::Context]
69
+ # @see #oprah_view_context=
70
+ # @return [ActionView::Base]
42
71
  def oprah_view_context
43
- view_context
72
+ @oprah_view_context || view_context
73
+ end
74
+
75
+ # Assigns the view context returned from {#oprah_view_context}.
76
+ #
77
+ # You can override this method pass a custom view context to all
78
+ # presented objects from the controller scope.
79
+ #
80
+ # @since 0.1.3
81
+ # @see #oprah_view_context
82
+ # @param [ActionView::Base] view_context The view context to assign
83
+ # @return [ActionView::Base]
84
+ def oprah_view_context=(view_context)
85
+ @oprah_view_context = view_context
86
+ end
87
+
88
+ # Returns an instance of a view class and sets the current view context
89
+ # returned by {#oprah_view_context}.
90
+ #
91
+ # If you override this method in your controller ensure you keep Oprah's
92
+ # view context updated using {#oprah_view_context=}.
93
+ #
94
+ # @since 0.1.3
95
+ # @see http://api.rubyonrails.org/classes/ActionView/Rendering.html#method-i-view_context
96
+ # Rails API Documentation
97
+ # @return [ActionView::Base]
98
+ def view_context
99
+ self.oprah_view_context = super
100
+ end
101
+
102
+ private
103
+
104
+ # @since 0.1.3
105
+ def oprah_view_context_proxy
106
+ @oprah_view_context_proxy ||= ViewContextProxy.new(self)
44
107
  end
45
108
  end
46
109
  end
@@ -34,46 +34,49 @@ module Oprah
34
34
  #
35
35
  # @param object [Object] The object to present
36
36
  # @param view_context [ActionView::Context] View context to assign
37
+ # @param only [Class] Class or Array of presenters to use
37
38
  # @return [Presenter] Presented object
38
- def present(object, view_context: default_view_context)
39
- @@cache.lookup(object).inject(object) do |memo, presenter|
39
+ def present(object, view_context: default_view_context, only: nil)
40
+ presenters = @@cache.lookup(object)
41
+ presenters = presenters & (only.kind_of?(Array) ? only : [only]) if only
42
+
43
+ presenters.inject(object) do |memo, presenter|
40
44
  presenter.new(memo, view_context: view_context)
41
45
  end
42
46
  end
43
47
 
44
48
  # Presents the given `objects` with all their matching presenters.
45
- # The individual behavior is the same as `.present`'s.
49
+ # The behaviour and parameters are identical to `.present`'s.
46
50
  #
47
51
  # @param objects [Enumerable] The objects to present
48
- # @param view_context [ActionView::Context] View context to assign
49
- # @return [Enumerable] Presented collection
50
- def present_many(objects, view_context: default_view_context)
51
- objects.map do |object|
52
- present(object, view_context: view_context)
53
- end
52
+ # @see .present
53
+ def present_many(objects, **kwargs)
54
+ objects.map { |object| present(object, **kwargs) }
54
55
  end
55
56
 
56
57
  # Automatically wrap the objects returned by the given one-to-one
57
58
  # `association` method in presenters.
58
59
  #
60
+ # Presenters will re-use the parent's assigned view context.
61
+ #
59
62
  # @param association [Symbol] Name of the association
60
63
  # @return [Boolean]
61
64
  def presents_one(association)
62
65
  define_method association do
63
- self.class.present(
64
- object.__send__(association), view_context: view_context)
66
+ present(object.__send__(association), view_context: view_context)
65
67
  end
66
68
  end
67
69
 
68
70
  # Automatically wrap the objects returned by the given one-to-many
69
71
  # or many-to-many `association` method in presenters.
70
72
  #
73
+ # Presenters will re-use the parent's assigned view context.
74
+ #
71
75
  # @param association [Symbol] Name of the association
72
76
  # @return [Boolean]
73
77
  def presents_many(association)
74
78
  define_method association do
75
- self.class.present_many(
76
- object.__send__(association), view_context: view_context)
79
+ present_many(object.__send__(association), view_context: view_context)
77
80
  end
78
81
 
79
82
  true
@@ -106,6 +109,28 @@ module Oprah
106
109
  end
107
110
  end
108
111
 
112
+ # Presents a single object.
113
+ #
114
+ # Will re-use the presenter's assigned view context if no `view_context`:
115
+ # parameter is given.
116
+ #
117
+ # @see .present
118
+ def present(*args, **kwargs, &block)
119
+ kwargs = { view_context: view_context }.merge(kwargs)
120
+ self.class.present(*args, **kwargs, &block)
121
+ end
122
+
123
+ # Presents a collection of objects.
124
+ #
125
+ # Will re-use the presenter's assigned view context if no `view_context`:
126
+ # parameter is given.
127
+ #
128
+ # @see .present_many
129
+ def present_many(*args, **kwargs, &block)
130
+ kwargs = { view_context: view_context }.merge(kwargs)
131
+ self.class.present_many(*args, **kwargs, &block)
132
+ end
133
+
109
134
  # Returns true if either `object` or `self` responds to the given method
110
135
  # name.
111
136
  #
@@ -1,11 +1,47 @@
1
1
  module Oprah
2
+ # Test helpers that can be included into `Minitest::Test` or
3
+ # `ActiveSupport::TestCase`.
4
+ #
5
+ # @since 0.1.2
2
6
  module TestHelpers
3
- def present_many(*args, &block)
4
- Oprah.present_many(*args, &block)
7
+ # Presents a collection of objects.
8
+ #
9
+ # @see Presenter.present_many
10
+ def present_many(*args, **kwargs, &block)
11
+ Presenter.present_many(*args, **kwargs, &block)
5
12
  end
6
13
 
7
- def present(*args, &block)
8
- Oprah.present(*args, &block)
14
+ # Presents a single object.
15
+ #
16
+ # @see Presenter.present
17
+ def present(*args, **kwargs, &block)
18
+ Presenter.present(*args, **kwargs, &block)
19
+ end
20
+
21
+ # Fails unless `object` is a presenter.
22
+ #
23
+ # @since 0.1.3
24
+ # @param [Object] object The object to be tested
25
+ # @return [Boolean]
26
+ def assert_presented(object)
27
+ msg = message(msg) do
28
+ "Expected #{mu_pp(object)} to be an Oprah::Presenter"
29
+ end
30
+
31
+ assert object.kind_of?(Oprah::Presenter), msg
32
+ end
33
+
34
+ # Fails if `object` is a presenter.
35
+ #
36
+ # @since 0.1.3
37
+ # @param [Object] object The object to be tested
38
+ # @return [Boolean]
39
+ def refute_presented(object)
40
+ msg = message(msg) do
41
+ "Expected #{mu_pp(object)} to not be an Oprah::Presenter"
42
+ end
43
+
44
+ refute object.kind_of?(Oprah::Presenter), msg
9
45
  end
10
46
  end
11
47
  end
data/lib/oprah/version.rb CHANGED
@@ -1,4 +1,4 @@
1
1
  module Oprah
2
2
  # @return [String] The Oprah library version.
3
- VERSION = "0.1.2"
3
+ VERSION = "0.1.3"
4
4
  end
data/oprah.gemspec CHANGED
@@ -11,7 +11,7 @@ Gem::Specification.new do |gem|
11
11
  gem.summary = "Opinionated presenters for Rails 5 - without the cruft"
12
12
  gem.description = gem.summary
13
13
  gem.homepage = "https://github.com/endofunky/oprah"
14
- gem.license = "Apache License, Version 2.0"
14
+ gem.license = "MIT"
15
15
 
16
16
  gem.files = `git ls-files -z`.split("\x0")
17
17
  gem.executables = gem.files.grep(%r{^bin/}) { |f| File.basename(f) }
@@ -23,9 +23,11 @@ Gem::Specification.new do |gem|
23
23
  gem.add_dependency "activesupport", ">= 5.0.0"
24
24
  gem.add_dependency "actionpack", ">= 5.0.0"
25
25
 
26
- gem.add_development_dependency "yard", "~> 0.9.5"
27
- gem.add_development_dependency "redcarpet", "~> 3.3.4"
28
26
  gem.add_development_dependency "bundler", "~> 1.7"
27
+ gem.add_development_dependency "minitest", "~> 5.9.0"
28
+ gem.add_development_dependency "rails", ">= 5.0.0"
29
29
  gem.add_development_dependency "rake", "~> 10.0"
30
- gem.add_development_dependency "minitest", "~> 5.5.1"
30
+ gem.add_development_dependency "redcarpet", "~> 3.3.4"
31
+ gem.add_development_dependency "yard", "~> 0.9.5"
32
+ gem.add_development_dependency "sqlite3", "~> 1.3.11"
31
33
  end
@@ -0,0 +1,11 @@
1
+ require 'helper'
2
+ require 'dummy/init'
3
+
4
+ class PostsControllerTest < ActionController::TestCase
5
+ def test_show
6
+ get :show, params: { id: 1 }
7
+
8
+ expected = "<p>\n Hello!\n</p>"
9
+ assert_equal expected, response.body
10
+ end
11
+ end
@@ -0,0 +1,3 @@
1
+ class ApplicationController < ActionController::Base
2
+ include Oprah::ControllerHelpers
3
+ end
@@ -0,0 +1,5 @@
1
+ class PostsController < ApplicationController
2
+ def show
3
+ @post = present Post.new
4
+ end
5
+ end
@@ -0,0 +1,2 @@
1
+ class Post
2
+ end
@@ -0,0 +1,5 @@
1
+ class PostPresenter < Oprah::Presenter
2
+ def paragraph(&block)
3
+ h.content_tag(:p, &block)
4
+ end
5
+ end
@@ -0,0 +1,3 @@
1
+ <%= @post.paragraph do %>
2
+ Hello!
3
+ <% end %>
@@ -0,0 +1,6 @@
1
+
2
+ test:
3
+ adapter: sqlite3
4
+ database: ':memory:'
5
+ pool: 5
6
+ timeout: 5000
@@ -0,0 +1,3 @@
1
+ Dummy::Application.routes.draw do
2
+ resources :posts, only: [:show]
3
+ end
@@ -0,0 +1,29 @@
1
+ ENV['RAILS_ENV'] ||= 'test'
2
+ ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../../Gemfile', __FILE__)
3
+ require 'bundler/setup'
4
+ require 'rails/all'
5
+ Bundler.require(:default, Rails.env)
6
+
7
+ module Dummy
8
+ class Application < ::Rails::Application
9
+ config.root = File.join __FILE__, '..'
10
+ config.cache_store = :memory_store
11
+ config.assets.enabled = false
12
+ config.active_support.test_order = :random
13
+ config.consider_all_requests_local = true
14
+ config.action_controller.perform_caching = false
15
+ config.action_dispatch.show_exceptions = false
16
+ config.action_controller.allow_forgery_protection = false
17
+ config.action_mailer.delivery_method = :test
18
+ config.active_support.deprecation = :stderr
19
+ config.allow_concurrency = true
20
+ config.cache_classes = true
21
+ config.dependency_loading = true
22
+ config.preload_frameworks = true
23
+ config.eager_load = true
24
+ config.secret_key_base = '012345678901234567890123456789'
25
+ end
26
+ end
27
+
28
+ Dummy::Application.initialize!
29
+ require 'rails/test_help'
File without changes
@@ -35,25 +35,25 @@ module Oprah
35
35
  assert_kind_of UserPresenter, presenter
36
36
  assert_kind_of EntityPresenter, presenter
37
37
 
38
- assert_equal :ok, presenter.view_context
38
+ assert_equal "ok", presenter.view_context.to_s
39
39
  end
40
40
 
41
- def test_present
41
+ def test_present_custom_view_context
42
+ presenter = @controller.present(User.new, view_context: :foobar)
43
+ assert_equal :foobar, presenter.view_context
44
+ end
45
+
46
+ def test_present_many
42
47
  presenters = @controller.present_many([User.new, User.new])
43
48
 
44
49
  assert_equal 2, presenters.length
45
50
 
46
51
  presenters.each do |presenter|
47
52
  assert_equal "Foo Bar", presenter.name
48
- assert_equal :ok, presenter.view_context
53
+ assert_equal "ok", presenter.view_context.to_s
49
54
  end
50
55
  end
51
56
 
52
- def test_present_custom_view_context
53
- presenter = @controller.present(User.new, view_context: :foobar)
54
- assert_equal :foobar, presenter.view_context
55
- end
56
-
57
57
  def test_helper_method
58
58
  assert_equal [:present, :present_many], Controller.helper_methods
59
59
  end
@@ -10,6 +10,32 @@ module Oprah
10
10
  assert_equal UserPresenter.cache, Presenter.cache
11
11
  end
12
12
 
13
+ def test_present
14
+ assert_presented present(User.new)
15
+ end
16
+
17
+ def test_present_no_matching_presenter
18
+ object = Object.new
19
+ presented = present(object)
20
+
21
+ refute_presented presented
22
+ assert_equal presented, object
23
+ end
24
+
25
+ def test_present_only
26
+ presenter = present(User.new, only: UserPresenter)
27
+
28
+ assert_kind_of UserPresenter, presenter
29
+ refute_kind_of EntityPresenter, presenter
30
+
31
+ classes = [UserPresenter, EntityPresenter, CommentPresenter]
32
+ presenter = present(User.new, only: classes)
33
+
34
+ assert_kind_of UserPresenter, presenter
35
+ assert_kind_of EntityPresenter, presenter
36
+ refute_kind_of CommentPresenter, presenter
37
+ end
38
+
13
39
  def test_present_many
14
40
  present_many([User.new, User.new]).each do |presenter|
15
41
  assert_equal "Foo Bar", presenter.name
@@ -27,6 +53,38 @@ module Oprah
27
53
  end
28
54
  end
29
55
 
56
+ def test_present_from_instance
57
+ view_context = Object.new
58
+ presenter = present(User.new, view_context: view_context)
59
+ presented = presenter.present(User.new)
60
+
61
+ assert_equal view_context.object_id, presented.view_context.object_id
62
+ end
63
+
64
+ def test_present_many_from_instance
65
+ view_context = Object.new
66
+ presenter = present(User.new, view_context: view_context)
67
+ presented = presenter.present_many([User.new]).first
68
+
69
+ assert_equal view_context.object_id, presented.view_context.object_id
70
+ end
71
+
72
+ def test_present_from_instance_custom_view_context
73
+ view_context = Object.new
74
+ presenter = present(User.new, view_context: view_context)
75
+ presented = presenter.present(User.new, view_context: :ok)
76
+
77
+ assert_equal :ok, presented.view_context
78
+ end
79
+
80
+ def test_present_many_from_instance_custom_view_context
81
+ view_context = Object.new
82
+ presenter = present(User.new, view_context: view_context)
83
+ presented = presenter.present_many([User.new], view_context: :ok).first
84
+
85
+ assert_equal :ok, presented.view_context
86
+ end
87
+
30
88
  def test_presents_one
31
89
  project = present(Project.new)
32
90
  owner = project.owner
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: oprah
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
  - Tobias Svensson
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-08-18 00:00:00.000000000 Z
11
+ date: 2016-08-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -39,47 +39,47 @@ dependencies:
39
39
  - !ruby/object:Gem::Version
40
40
  version: 5.0.0
41
41
  - !ruby/object:Gem::Dependency
42
- name: yard
42
+ name: bundler
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: 0.9.5
47
+ version: '1.7'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: 0.9.5
54
+ version: '1.7'
55
55
  - !ruby/object:Gem::Dependency
56
- name: redcarpet
56
+ name: minitest
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: 3.3.4
61
+ version: 5.9.0
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
- version: 3.3.4
68
+ version: 5.9.0
69
69
  - !ruby/object:Gem::Dependency
70
- name: bundler
70
+ name: rails
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
- - - "~>"
73
+ - - ">="
74
74
  - !ruby/object:Gem::Version
75
- version: '1.7'
75
+ version: 5.0.0
76
76
  type: :development
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
- - - "~>"
80
+ - - ">="
81
81
  - !ruby/object:Gem::Version
82
- version: '1.7'
82
+ version: 5.0.0
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: rake
85
85
  requirement: !ruby/object:Gem::Requirement
@@ -95,19 +95,47 @@ dependencies:
95
95
  - !ruby/object:Gem::Version
96
96
  version: '10.0'
97
97
  - !ruby/object:Gem::Dependency
98
- name: minitest
98
+ name: redcarpet
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: 3.3.4
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: 3.3.4
111
+ - !ruby/object:Gem::Dependency
112
+ name: yard
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - "~>"
116
+ - !ruby/object:Gem::Version
117
+ version: 0.9.5
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - "~>"
123
+ - !ruby/object:Gem::Version
124
+ version: 0.9.5
125
+ - !ruby/object:Gem::Dependency
126
+ name: sqlite3
99
127
  requirement: !ruby/object:Gem::Requirement
100
128
  requirements:
101
129
  - - "~>"
102
130
  - !ruby/object:Gem::Version
103
- version: 5.5.1
131
+ version: 1.3.11
104
132
  type: :development
105
133
  prerelease: false
106
134
  version_requirements: !ruby/object:Gem::Requirement
107
135
  requirements:
108
136
  - - "~>"
109
137
  - !ruby/object:Gem::Version
110
- version: 5.5.1
138
+ version: 1.3.11
111
139
  description: Opinionated presenters for Rails 5 - without the cruft
112
140
  email:
113
141
  - tob@tobiassvensson.co.uk
@@ -135,13 +163,23 @@ files:
135
163
  - tasks/console.rb
136
164
  - tasks/minitest.rb
137
165
  - tasks/yard.rb
166
+ - test/controllers/posts_controller_test.rb
167
+ - test/dummy/app/controllers/application_controller.rb
168
+ - test/dummy/app/controllers/posts_controller.rb
169
+ - test/dummy/app/models/post.rb
170
+ - test/dummy/app/presenters/post_presenter.rb
171
+ - test/dummy/app/views/posts/show.html.erb
172
+ - test/dummy/config/database.yml
173
+ - test/dummy/config/routes.rb
174
+ - test/dummy/init.rb
175
+ - test/dummy/tmp/.gitkeep
138
176
  - test/helper.rb
139
177
  - test/oprah/controller_helpers_test.rb
140
178
  - test/oprah/oprah_test.rb
141
179
  - test/oprah/presenter_test.rb
142
180
  homepage: https://github.com/endofunky/oprah
143
181
  licenses:
144
- - Apache License, Version 2.0
182
+ - MIT
145
183
  metadata: {}
146
184
  post_install_message:
147
185
  rdoc_options: []
@@ -164,6 +202,16 @@ signing_key:
164
202
  specification_version: 4
165
203
  summary: Opinionated presenters for Rails 5 - without the cruft
166
204
  test_files:
205
+ - test/controllers/posts_controller_test.rb
206
+ - test/dummy/app/controllers/application_controller.rb
207
+ - test/dummy/app/controllers/posts_controller.rb
208
+ - test/dummy/app/models/post.rb
209
+ - test/dummy/app/presenters/post_presenter.rb
210
+ - test/dummy/app/views/posts/show.html.erb
211
+ - test/dummy/config/database.yml
212
+ - test/dummy/config/routes.rb
213
+ - test/dummy/init.rb
214
+ - test/dummy/tmp/.gitkeep
167
215
  - test/helper.rb
168
216
  - test/oprah/controller_helpers_test.rb
169
217
  - test/oprah/oprah_test.rb