cells 4.1.5 → 4.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 +4 -4
- data/CHANGES.md +4 -0
- data/Gemfile +2 -0
- data/README.md +6 -2
- data/cells.gemspec +4 -2
- data/lib/cell.rb +0 -1
- data/lib/cell/builder.rb +3 -3
- data/lib/cell/caching.rb +13 -16
- data/lib/cell/version.rb +1 -1
- data/lib/cell/view_model.rb +2 -0
- data/test/cache_test.rb +32 -0
- metadata +31 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b0cd2efb3cdf312f2c529647f9188b4e7e6639bd
|
4
|
+
data.tar.gz: 756d7e0d6e612d62d8750fb152f0ddfb238f6e47
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7fd5589f420bf75a25d03fd8c9e986cc4566cfd332457b58213f07a7f21b29087d0224bfb79977ebaae003bd998ff086edec71552bafb8ebb58973f71a9bf4a8
|
7
|
+
data.tar.gz: 00d6fab903c9a92c29fb8c0398185f663ee9f6bc6c0235d56816b11115bedda4d9f20eae629d6aded51b11a458ee0e83172f3950312abd8cbb3b937bd4ac32d2
|
data/CHANGES.md
CHANGED
@@ -1,3 +1,7 @@
|
|
1
|
+
## 4.1.6
|
2
|
+
|
3
|
+
* Use `Declarative::Option` and `Declarative::Builder` instead of `uber`'s. This allows removing the `uber` version restriction.
|
4
|
+
|
1
5
|
## 4.1.5
|
2
6
|
|
3
7
|
* Fix a bug where nested calls of `cell(name, context: {...})` would ignore the new context elements, resulting in the old context being passed on. By adding `Context::[]` the new elements are now properly merged into a **new context hash**. This means that adding elements to the child context won't leak up into the parent context anymore.
|
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -360,9 +360,13 @@ Builders allow instantiating different cell classes for different models and opt
|
|
360
360
|
|
361
361
|
```ruby
|
362
362
|
class CommentCell < Cell::ViewModel
|
363
|
+
include ::Cell::Builder
|
364
|
+
|
363
365
|
builds do |model, options|
|
364
|
-
|
365
|
-
|
366
|
+
case model
|
367
|
+
when Post; PostCell
|
368
|
+
when Comment; CommentCell
|
369
|
+
end
|
366
370
|
end
|
367
371
|
```
|
368
372
|
|
data/cells.gemspec
CHANGED
@@ -11,7 +11,7 @@ Gem::Specification.new do |spec|
|
|
11
11
|
spec.email = ["apotonick@gmail.com"]
|
12
12
|
spec.homepage = "https://github.com/apotonick/cells"
|
13
13
|
spec.summary = %q{View Models for Ruby and Rails.}
|
14
|
-
spec.description = %q{
|
14
|
+
spec.description = %q{View Models for Ruby and Rails, replacing helpers and partials while giving you a clean view architecture with proper encapsulation.}
|
15
15
|
spec.license = "MIT"
|
16
16
|
|
17
17
|
spec.files = `git ls-files`.split("\n")
|
@@ -19,7 +19,9 @@ Gem::Specification.new do |spec|
|
|
19
19
|
spec.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
20
20
|
spec.require_paths = ["lib"]
|
21
21
|
|
22
|
-
spec.add_dependency "uber", "
|
22
|
+
spec.add_dependency "uber", "< 0.2.0"
|
23
|
+
spec.add_dependency "declarative-option", "< 0.2.0"
|
24
|
+
spec.add_dependency "declarative-builder", "< 0.2.0"
|
23
25
|
spec.add_dependency "tilt", ">= 1.4", "< 3"
|
24
26
|
|
25
27
|
spec.add_development_dependency "rake"
|
data/lib/cell.rb
CHANGED
data/lib/cell/builder.rb
CHANGED
@@ -1,15 +1,15 @@
|
|
1
|
-
require "
|
1
|
+
require "declarative/builder"
|
2
2
|
|
3
3
|
module Cell
|
4
4
|
module Builder
|
5
5
|
def self.included(base)
|
6
|
-
base.send :include,
|
6
|
+
base.send :include, Declarative::Builder
|
7
7
|
base.extend ClassMethods
|
8
8
|
end
|
9
9
|
|
10
10
|
module ClassMethods
|
11
11
|
def build(*args)
|
12
|
-
build!(self, *args).new(*args) #
|
12
|
+
build!(self, *args).new(*args) # Declarative::Builder#build!.
|
13
13
|
end
|
14
14
|
end
|
15
15
|
end
|
data/lib/cell/caching.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
require
|
1
|
+
require "declarative/options"
|
2
2
|
|
3
3
|
module Cell
|
4
4
|
module Caching
|
@@ -10,19 +10,19 @@ module Cell
|
|
10
10
|
inheritable_attr :conditional_procs
|
11
11
|
inheritable_attr :cache_options
|
12
12
|
|
13
|
-
self.version_procs
|
13
|
+
self.version_procs = {}
|
14
14
|
self.conditional_procs = {}
|
15
|
-
self.cache_options
|
15
|
+
self.cache_options = {}
|
16
16
|
end
|
17
17
|
end
|
18
18
|
|
19
19
|
module ClassMethods
|
20
20
|
def cache(state, *args, &block)
|
21
|
-
options = args.last.is_a?(Hash) ? args.pop : {} # I have to admit, Array#extract_options is a
|
21
|
+
options = args.last.is_a?(Hash) ? args.pop : {} # I have to admit, Array#extract_options is a brilliant tool.
|
22
22
|
|
23
|
-
|
24
|
-
|
25
|
-
|
23
|
+
conditional_procs[state] = Declarative::Option(options.delete(:if) || true, instance_exec: true)
|
24
|
+
version_procs[state] = Declarative::Option(args.first || block, instance_exec: true)
|
25
|
+
cache_options[state] = Declarative::Options(options, instance_exec: true)
|
26
26
|
end
|
27
27
|
|
28
28
|
# Computes the complete, namespaced cache key for +state+.
|
@@ -37,17 +37,16 @@ module Cell
|
|
37
37
|
private
|
38
38
|
|
39
39
|
def expand_cache_key(key)
|
40
|
-
key.join("/")
|
40
|
+
key.join("/")
|
41
41
|
end
|
42
42
|
end
|
43
43
|
|
44
|
-
|
45
44
|
def render_state(state, *args)
|
46
45
|
state = state.to_sym
|
47
46
|
return super(state, *args) unless cache?(state, *args)
|
48
47
|
|
49
|
-
key = self.class.state_cache_key(state, self.class.version_procs[state].
|
50
|
-
options = self.class.cache_options.
|
48
|
+
key = self.class.state_cache_key(state, self.class.version_procs[state].(self, *args))
|
49
|
+
options = self.class.cache_options[state].(self, *args)
|
51
50
|
|
52
51
|
fetch_from_cache_for(key, options) { super(state, *args) }
|
53
52
|
end
|
@@ -57,7 +56,7 @@ module Cell
|
|
57
56
|
end
|
58
57
|
|
59
58
|
def cache?(state, *args)
|
60
|
-
perform_caching? and state_cached?(state) and self.class.conditional_procs[state].
|
59
|
+
perform_caching? and state_cached?(state) and self.class.conditional_procs[state].(self, *args)
|
61
60
|
end
|
62
61
|
|
63
62
|
private
|
@@ -66,10 +65,8 @@ module Cell
|
|
66
65
|
true
|
67
66
|
end
|
68
67
|
|
69
|
-
def fetch_from_cache_for(key, options)
|
70
|
-
cache_store.fetch(key, options)
|
71
|
-
yield
|
72
|
-
end
|
68
|
+
def fetch_from_cache_for(key, options, &block)
|
69
|
+
cache_store.fetch(key, options, &block)
|
73
70
|
end
|
74
71
|
|
75
72
|
def state_cached?(state)
|
data/lib/cell/version.rb
CHANGED
data/lib/cell/view_model.rb
CHANGED
data/test/cache_test.rb
ADDED
@@ -0,0 +1,32 @@
|
|
1
|
+
require "test_helper"
|
2
|
+
|
3
|
+
# TODO: test caching without rails
|
4
|
+
|
5
|
+
class CacheTest < Minitest::Spec
|
6
|
+
STORE = Class.new(Hash) do
|
7
|
+
def fetch(key, options, &block)
|
8
|
+
self[key] || self[key] = yield
|
9
|
+
end
|
10
|
+
end.new
|
11
|
+
|
12
|
+
module Cache
|
13
|
+
def show
|
14
|
+
"#{@model}"
|
15
|
+
end
|
16
|
+
|
17
|
+
def cache_store
|
18
|
+
STORE
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
class Index < Cell::ViewModel
|
23
|
+
cache :show
|
24
|
+
include Cache
|
25
|
+
end
|
26
|
+
|
27
|
+
it do
|
28
|
+
Index.new(1).().must_equal("1")
|
29
|
+
Index.new(2).().must_equal("1")
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
metadata
CHANGED
@@ -1,22 +1,33 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cells
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 4.1.
|
4
|
+
version: 4.1.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Nick Sutterer
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2017-01-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: uber
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - "
|
17
|
+
- - "<"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 0.
|
19
|
+
version: 0.2.0
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "<"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 0.2.0
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: declarative-option
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
20
31
|
- - "<"
|
21
32
|
- !ruby/object:Gem::Version
|
22
33
|
version: 0.2.0
|
@@ -24,9 +35,20 @@ dependencies:
|
|
24
35
|
prerelease: false
|
25
36
|
version_requirements: !ruby/object:Gem::Requirement
|
26
37
|
requirements:
|
27
|
-
- - "
|
38
|
+
- - "<"
|
28
39
|
- !ruby/object:Gem::Version
|
29
|
-
version: 0.
|
40
|
+
version: 0.2.0
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: declarative-builder
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "<"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: 0.2.0
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
30
52
|
- - "<"
|
31
53
|
- !ruby/object:Gem::Version
|
32
54
|
version: 0.2.0
|
@@ -92,8 +114,8 @@ dependencies:
|
|
92
114
|
- - ">="
|
93
115
|
- !ruby/object:Gem::Version
|
94
116
|
version: 0.0.4
|
95
|
-
description:
|
96
|
-
|
117
|
+
description: View Models for Ruby and Rails, replacing helpers and partials while
|
118
|
+
giving you a clean view architecture with proper encapsulation.
|
97
119
|
email:
|
98
120
|
- apotonick@gmail.com
|
99
121
|
executables: []
|
@@ -131,6 +153,7 @@ files:
|
|
131
153
|
- lib/cells.rb
|
132
154
|
- lib/tasks/cells.rake
|
133
155
|
- test/builder_test.rb
|
156
|
+
- test/cache_test.rb
|
134
157
|
- test/cell_benchmark.rb
|
135
158
|
- test/cell_test.rb
|
136
159
|
- test/concept_test.rb
|