oprah 0.1.3 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +13 -8
- data/lib/oprah.rb +2 -1
- data/lib/oprah/presenter.rb +16 -3
- data/lib/oprah/railtie.rb +5 -1
- data/lib/oprah/version.rb +1 -1
- data/test/controllers/posts_controller_test.rb +0 -1
- data/test/helper.rb +7 -0
- data/test/oprah/presenter_test.rb +1 -1
- data/test/oprah/railtie_test.rb +18 -0
- metadata +4 -3
- data/lib/oprah/cache.rb +0 -57
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ba7c8bb10a7c5315fa5db9c50d99e67b1ad8cccd
|
4
|
+
data.tar.gz: 427b1dde4525a16e5f0c1120c0a1d810bd74bf0c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 35f838726cbab68a99dce830b8252c7e707cb2c093935073ad35eb54aeba6ad108adb544167f4e990dbf093f9dbbb253f5e5700e5448958cc4220167e9b1f2d0
|
7
|
+
data.tar.gz: 3986a517a7d8619255e805a922eedf63ff20b5bd5cdad8b36b83b8b0aafa5f13cb89a05d0353ecb914907c39131c5d06cc5433be300a59a270747e83665cc8fa
|
data/CHANGELOG.md
CHANGED
@@ -1,20 +1,25 @@
|
|
1
|
+
0.2.0
|
2
|
+
-----
|
3
|
+
|
4
|
+
- Replace `Oprah::Cache` with `ActiveSupport::Cache::MemoryStore` [#3]
|
5
|
+
|
1
6
|
0.1.3
|
2
7
|
-----
|
3
8
|
|
4
|
-
- Presenters can now be specified using the `only:` keyword
|
5
|
-
|
9
|
+
- Presenters can now be specified using the `only:` keyword argument, which
|
10
|
+
takes either a Class or an Array of classes
|
6
11
|
- Replace repeated method default arguments with splats
|
7
12
|
- Add assertions to TestHelper
|
8
|
-
- Delegate to most recent view context in presenters created
|
9
|
-
|
10
|
-
- Add
|
13
|
+
- Delegate to most recent view context in presenters created from within Rails
|
14
|
+
controllers [#1]
|
15
|
+
- Add `#present` and `#present_many` methods to Presenter [#2]
|
11
16
|
|
12
17
|
0.1.2
|
13
18
|
-----
|
14
19
|
|
15
|
-
- Explicitly rescue NameError in Cache#presenter_classes_for
|
16
|
-
- Add Oprah::TestHelpers
|
17
|
-
- Delegate
|
20
|
+
- Explicitly rescue `NameError` in `Cache#presenter_classes_for`
|
21
|
+
- Add `Oprah::TestHelpers`
|
22
|
+
- Delegate `#to_s` and `#inspect` to the presented object
|
18
23
|
|
19
24
|
0.1.1
|
20
25
|
-----
|
data/lib/oprah.rb
CHANGED
@@ -3,13 +3,13 @@ require 'forwardable'
|
|
3
3
|
require 'singleton'
|
4
4
|
|
5
5
|
# gems
|
6
|
+
require 'active_support/cache'
|
6
7
|
require 'active_support/concern'
|
7
8
|
require 'active_support/inflector'
|
8
9
|
require 'active_support/proxy_object'
|
9
10
|
require 'action_controller'
|
10
11
|
|
11
12
|
# internal
|
12
|
-
require 'oprah/cache'
|
13
13
|
require 'oprah/controller_helpers'
|
14
14
|
require 'oprah/presenter'
|
15
15
|
require 'oprah/version'
|
@@ -41,3 +41,4 @@ module Oprah
|
|
41
41
|
|
42
42
|
extend self
|
43
43
|
end
|
44
|
+
|
data/lib/oprah/presenter.rb
CHANGED
@@ -11,7 +11,7 @@ module Oprah
|
|
11
11
|
alias :h :view_context
|
12
12
|
|
13
13
|
# @!visibility private
|
14
|
-
@@cache =
|
14
|
+
@@cache = ActiveSupport::Cache::MemoryStore.new
|
15
15
|
|
16
16
|
# @!method inspect
|
17
17
|
# @see Object#inspect
|
@@ -24,7 +24,7 @@ module Oprah
|
|
24
24
|
class << self
|
25
25
|
# Returns the shared presenter cache object.
|
26
26
|
#
|
27
|
-
# @return [Cache]
|
27
|
+
# @return [ActiveSupport::Cache::MemoryStore]
|
28
28
|
def cache
|
29
29
|
@@cache
|
30
30
|
end
|
@@ -37,7 +37,7 @@ module Oprah
|
|
37
37
|
# @param only [Class] Class or Array of presenters to use
|
38
38
|
# @return [Presenter] Presented object
|
39
39
|
def present(object, view_context: default_view_context, only: nil)
|
40
|
-
presenters =
|
40
|
+
presenters = presenter_classes_for(object)
|
41
41
|
presenters = presenters & (only.kind_of?(Array) ? only : [only]) if only
|
42
42
|
|
43
43
|
presenters.inject(object) do |memo, presenter|
|
@@ -89,6 +89,19 @@ module Oprah
|
|
89
89
|
def default_view_context
|
90
90
|
ActionController::Base.new.view_context
|
91
91
|
end
|
92
|
+
|
93
|
+
private
|
94
|
+
|
95
|
+
# @since 0.2.0
|
96
|
+
def presenter_classes_for(object)
|
97
|
+
klass = object.class
|
98
|
+
|
99
|
+
@@cache.fetch klass.name do
|
100
|
+
klass.ancestors.map do |klass|
|
101
|
+
(klass.name + "Presenter").safe_constantize
|
102
|
+
end.compact.reverse
|
103
|
+
end
|
104
|
+
end
|
92
105
|
end
|
93
106
|
|
94
107
|
# Initializes a new Presenter.
|
data/lib/oprah/railtie.rb
CHANGED
@@ -4,7 +4,11 @@ module Oprah
|
|
4
4
|
class Railtie < Rails::Railtie
|
5
5
|
initializer "oprah.configure_cache_clear_on_code_reload" do
|
6
6
|
ActiveSupport::Reloader.to_run do
|
7
|
-
Oprah::Presenter.cache.clear
|
7
|
+
Oprah::Presenter.cache.clear
|
8
|
+
|
9
|
+
if Oprah.debug?
|
10
|
+
Rails.logger.debug "Oprah cache cleared"
|
11
|
+
end
|
8
12
|
end
|
9
13
|
end
|
10
14
|
|
data/lib/oprah/version.rb
CHANGED
data/test/helper.rb
CHANGED
@@ -1,10 +1,17 @@
|
|
1
1
|
require 'minitest/autorun'
|
2
2
|
require 'minitest/pride'
|
3
3
|
require 'oprah'
|
4
|
+
require 'oprah/railtie'
|
4
5
|
require 'oprah/test_helpers'
|
6
|
+
require 'dummy/init'
|
5
7
|
|
6
8
|
class Minitest::Test
|
7
9
|
include Oprah::TestHelpers
|
10
|
+
|
11
|
+
def setup
|
12
|
+
super
|
13
|
+
Oprah::Presenter.cache.clear
|
14
|
+
end
|
8
15
|
end
|
9
16
|
|
10
17
|
module Fixtures
|
@@ -5,7 +5,7 @@ module Oprah
|
|
5
5
|
include Fixtures
|
6
6
|
|
7
7
|
def test_cache
|
8
|
-
assert_kind_of
|
8
|
+
assert_kind_of ActiveSupport::Cache::MemoryStore, Presenter.cache
|
9
9
|
assert_equal Presenter.cache, Presenter.cache
|
10
10
|
assert_equal UserPresenter.cache, Presenter.cache
|
11
11
|
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require 'helper'
|
2
|
+
|
3
|
+
module Oprah
|
4
|
+
class RailtieTest < Minitest::Test
|
5
|
+
include Fixtures
|
6
|
+
|
7
|
+
def test_cache_invalidation
|
8
|
+
present User.new
|
9
|
+
refute_nil Presenter.cache.fetch(User.name)
|
10
|
+
Rails.application.reloader.reload!
|
11
|
+
assert_nil Presenter.cache.fetch(User.name)
|
12
|
+
end
|
13
|
+
|
14
|
+
def test_controller_helper_inclusion
|
15
|
+
assert_includes ActionController::Base, ControllerHelpers
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
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.
|
4
|
+
version: 0.2.0
|
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-
|
11
|
+
date: 2016-08-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -152,7 +152,6 @@ files:
|
|
152
152
|
- README.md
|
153
153
|
- Rakefile
|
154
154
|
- lib/oprah.rb
|
155
|
-
- lib/oprah/cache.rb
|
156
155
|
- lib/oprah/controller_helpers.rb
|
157
156
|
- lib/oprah/presenter.rb
|
158
157
|
- lib/oprah/railtie.rb
|
@@ -177,6 +176,7 @@ files:
|
|
177
176
|
- test/oprah/controller_helpers_test.rb
|
178
177
|
- test/oprah/oprah_test.rb
|
179
178
|
- test/oprah/presenter_test.rb
|
179
|
+
- test/oprah/railtie_test.rb
|
180
180
|
homepage: https://github.com/endofunky/oprah
|
181
181
|
licenses:
|
182
182
|
- MIT
|
@@ -216,3 +216,4 @@ test_files:
|
|
216
216
|
- test/oprah/controller_helpers_test.rb
|
217
217
|
- test/oprah/oprah_test.rb
|
218
218
|
- test/oprah/presenter_test.rb
|
219
|
+
- test/oprah/railtie_test.rb
|
data/lib/oprah/cache.rb
DELETED
@@ -1,57 +0,0 @@
|
|
1
|
-
module Oprah
|
2
|
-
# A cache store to keep Object-to-Presenter mappings. This class is
|
3
|
-
# thread-safe.
|
4
|
-
class Cache
|
5
|
-
def initialize
|
6
|
-
@mutex = Mutex.new
|
7
|
-
@mapping = {}
|
8
|
-
end
|
9
|
-
|
10
|
-
# Looks up presenters matching to `object` and stores them in the cache.
|
11
|
-
#
|
12
|
-
# @param object [Object] The presentable object
|
13
|
-
# @return [Array] An array of Presenter classes
|
14
|
-
def lookup(object)
|
15
|
-
@mutex.synchronize do
|
16
|
-
key = class_name_for(object)
|
17
|
-
|
18
|
-
cached = @mapping[key]
|
19
|
-
return cached if cached
|
20
|
-
|
21
|
-
@mapping[key] = presenter_classes_for(object)
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
|
-
# Clears the presenter cache.
|
26
|
-
#
|
27
|
-
# @return [Boolean]
|
28
|
-
def clear!
|
29
|
-
@mutex.synchronize do
|
30
|
-
@mapping = {}
|
31
|
-
end
|
32
|
-
|
33
|
-
Rails.logger.debug "Oprah cache cleared." if Oprah.debug?
|
34
|
-
|
35
|
-
true
|
36
|
-
end
|
37
|
-
|
38
|
-
private
|
39
|
-
|
40
|
-
def presenter_classes_for(object)
|
41
|
-
class_for(object).ancestors.map do |klass|
|
42
|
-
begin
|
43
|
-
(klass.name + "Presenter").constantize
|
44
|
-
rescue NameError
|
45
|
-
end
|
46
|
-
end.compact.reverse
|
47
|
-
end
|
48
|
-
|
49
|
-
def class_name_for(object)
|
50
|
-
class_for(object).name
|
51
|
-
end
|
52
|
-
|
53
|
-
def class_for(object)
|
54
|
-
object.kind_of?(Class) ? object : object.class
|
55
|
-
end
|
56
|
-
end
|
57
|
-
end
|