display_case 0.0.6 → 0.0.7
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.
- data/README.md +29 -2
- data/lib/display_case.rb +0 -1
- data/lib/display_case/configuration.rb +4 -0
- data/lib/display_case/enumerable_exhibit.rb +5 -0
- data/lib/display_case/exhibit.rb +11 -2
- data/lib/display_case/railtie.rb +2 -2
- metadata +2 -2
data/README.md
CHANGED
@@ -32,8 +32,6 @@ Your exhibits will look something like this:
|
|
32
32
|
# app/exhibits/league_exhibit.rb
|
33
33
|
|
34
34
|
class LeagueExhibit < DisplayCase::Exhibit
|
35
|
-
# Note: the context parameter is new in the master branch, not yet released in the gem.
|
36
|
-
# If you get an argument error, that's why
|
37
35
|
def self.applicable_to?(object, context)
|
38
36
|
object.class.name == 'League'
|
39
37
|
end
|
@@ -78,6 +76,7 @@ Several configuration options can be set via an initializer:
|
|
78
76
|
1. `definition_file_paths` Because Rails lazily-loads files, in development mode DisplayCase will search /app/exhibits to load the Exhibits found there. If your Exhibits are elsewhere, you can set `config.definition_file_paths = ['list/of/directories', 'to/find/exhibits']` in your initializers/display_case.rb.
|
79
77
|
1. `explicit` By default this option is false and Exhibits will be dynamically added via the inherited callback.
|
80
78
|
1. `exhibits` If `explicit` is true you must explicitly set the Exhibits you wish to use in the order you want them evaluated. You can set `config.exhibits = [AnExhibit,AnotherExhibit]` in your initializers/display_case.rb.
|
79
|
+
1. `cache_store` If you configure a cache store, you can use it by calling the `cache` method in your Exhibits (see below).
|
81
80
|
|
82
81
|
An example `initializers/display_case.rb`
|
83
82
|
```
|
@@ -85,9 +84,37 @@ DisplayCase.configure do |config|
|
|
85
84
|
config.definition_file_paths = ['app/exhibits','some/other/path']
|
86
85
|
config.explicit = true
|
87
86
|
config.exhibits = [MyFirstExhibit,MySecondExhibit]
|
87
|
+
config.cache_store = Rails.configuration.action_controller.perform_caching ? Rails.cache : nil
|
88
88
|
end
|
89
89
|
```
|
90
90
|
|
91
|
+
Caching
|
92
|
+
-------
|
93
|
+
You can cache the results of an operation in your exhibits by configuring DisplayCase to use a cache store, and then using the `cache` method.
|
94
|
+
If you do this, you ought not use a real cache in development mode, since you'll likely want to see changes you're making to code, which of
|
95
|
+
course won't happen if you cache the results.
|
96
|
+
|
97
|
+
Use the cache like you would in a Rails controller:
|
98
|
+
|
99
|
+
```ruby
|
100
|
+
class LeagueExhibit < DisplayCase::Exhibit
|
101
|
+
def self.applicable_to?(object, context)
|
102
|
+
object.class.name == 'League'
|
103
|
+
end
|
104
|
+
|
105
|
+
def render(context)
|
106
|
+
cache key, options={} do
|
107
|
+
# something that takes a long while, which might make you want
|
108
|
+
# to cache this call to render
|
109
|
+
context.render(partial: 'leagues/icon', locals: {league: self})
|
110
|
+
end
|
111
|
+
end
|
112
|
+
end
|
113
|
+
```
|
114
|
+
|
115
|
+
See [How key-based cache expiration works](http://37signals.com/svn/posts/3113-how-key-based-cache-expiration-works) for examples on
|
116
|
+
how to choose good keys.
|
117
|
+
|
91
118
|
Wrong url with extra parameters using an exhibited model?
|
92
119
|
------------------
|
93
120
|
See this issue for the reason: https://github.com/objects-on-rails/display-case/issues/8
|
data/lib/display_case.rb
CHANGED
@@ -21,10 +21,14 @@ module DisplayCase
|
|
21
21
|
# existing file will be loaded.
|
22
22
|
attr_accessor :definition_file_paths
|
23
23
|
|
24
|
+
# A cache store which responds to `fetch(key, options, &block)`
|
25
|
+
attr_accessor :cache_store
|
26
|
+
|
24
27
|
def initialize
|
25
28
|
@definition_file_paths = %w(app/exhibits)
|
26
29
|
@explicit = false
|
27
30
|
@exhibits = []
|
31
|
+
@cache_store = nil
|
28
32
|
end
|
29
33
|
|
30
34
|
def explicit?
|
data/lib/display_case/exhibit.rb
CHANGED
@@ -29,9 +29,10 @@ module DisplayCase
|
|
29
29
|
::Rails.logger.debug "Exhibit context: #{context}"
|
30
30
|
end
|
31
31
|
|
32
|
+
similar, unsimilar = exhibits.partition { |exhibit_class| context and exhibit_class.name and context.class.name and context.class.name.downcase.include?(exhibit_class.name.to_s.downcase.gsub("exhibit", "")) }
|
32
33
|
object = BasicExhibit.new(Exhibited.new(object, context), context)
|
33
|
-
|
34
|
-
|
34
|
+
(unsimilar+similar).inject(object) do |object, exhibit_class|
|
35
|
+
exhibit_class.exhibit_if_applicable(object, context)
|
35
36
|
end.tap do |obj|
|
36
37
|
::Rails.logger.debug "Exhibits applied: #{obj.inspect_exhibits}" if defined? ::Rails
|
37
38
|
end
|
@@ -128,6 +129,14 @@ module DisplayCase
|
|
128
129
|
def exhibited?
|
129
130
|
true
|
130
131
|
end
|
132
|
+
|
133
|
+
def cache(key, options = {}, &block)
|
134
|
+
if DisplayCase.configuration.cache_store
|
135
|
+
DisplayCase.configuration.cache_store.fetch(key, options, &block)
|
136
|
+
else
|
137
|
+
yield
|
138
|
+
end
|
139
|
+
end
|
131
140
|
|
132
141
|
private
|
133
142
|
|
data/lib/display_case/railtie.rb
CHANGED
@@ -3,7 +3,7 @@ module DisplayCase
|
|
3
3
|
# http://guides.rubyonrails.org/configuring.html#initialization-events
|
4
4
|
# "to_prepare will run upon every request in development, but only once (during boot-up) in production and test."
|
5
5
|
config.to_prepare do
|
6
|
-
DisplayCase.find_definitions
|
7
|
-
end
|
6
|
+
DisplayCase.find_definitions if Rails.env.development?
|
7
|
+
end
|
8
8
|
end
|
9
9
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: display_case
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.7
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-
|
12
|
+
date: 2013-05-29 00:00:00.000000000Z
|
13
13
|
dependencies: []
|
14
14
|
description: An implementation of the Exhibit pattern, as described in Objects on
|
15
15
|
Rails
|