cells 4.1.1 → 4.1.2
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/.travis.yml +3 -5
- data/CHANGES.md +4 -0
- data/README.md +5 -20
- data/Rakefile +5 -1
- data/lib/cell/collection.rb +13 -8
- data/lib/cell/templates.rb +1 -1
- data/lib/cell/testing.rb +6 -11
- data/lib/cell/util.rb +5 -5
- data/lib/cell/version.rb +1 -1
- data/test/concept_test.rb +4 -2
- data/test/public_test.rb +13 -2
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 564e33d0ca30ee7280dd4362eca2cf8f57298836
|
4
|
+
data.tar.gz: 3178f06f6211191be74553cf806ae98f5e3017b9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: af0bdc4bf3a5c1b69e94ca1527cc476f836f309eff8d607645204f37cbabe86f612423ba25706328a3f7655dcee054fb575b96a9f9595ee7eada52fb61d4f569
|
7
|
+
data.tar.gz: 41098667ace56a3ce85bf588577c7ef7e7e3567804ea64d3df316d48d78b0855f3f32ef81774d075586c24c2ec9d23ddcce0e483708c83ddb9966a1d14a1b5d3
|
data/.travis.yml
CHANGED
data/CHANGES.md
CHANGED
@@ -1,3 +1,7 @@
|
|
1
|
+
## 4.1.2
|
2
|
+
|
3
|
+
* Testing with Rails 5 now works, by removing code the last piece of Rails-code (I know, it sounds bizarre).
|
4
|
+
|
1
5
|
## 4.1.1
|
2
6
|
|
3
7
|
* Fix rendering of `Collection` where in some environments (Rails), the overridden `#call` method wouldn't work and strings would be escaped.
|
data/README.md
CHANGED
@@ -149,7 +149,7 @@ It is completely up to you how you test, whether it's RSpec, MiniTest or whateve
|
|
149
149
|
|
150
150
|
## Properties
|
151
151
|
|
152
|
-
The cell's model is available via the `model` reader. You can have automatic readers to the model's fields by
|
152
|
+
The cell's model is available via the `model` reader. You can have automatic readers to the model's fields by using `::property`.
|
153
153
|
|
154
154
|
```ruby
|
155
155
|
class CommentCell < Cell::ViewModel
|
@@ -349,22 +349,14 @@ comments = Comment.all #=> three comments.
|
|
349
349
|
cell(:comment, collection: comments).()
|
350
350
|
```
|
351
351
|
|
352
|
-
This will invoke `cell(:comment, comment).()` three times and concatenate the rendered output automatically.
|
352
|
+
This will invoke `cell(:comment, comment).()` three times and concatenate the rendered output automatically.
|
353
353
|
|
354
|
-
|
355
|
-
cell(:comment, collection: comments).(:list)
|
356
|
-
```
|
357
|
-
Additional options are passed to every cell constructor.
|
354
|
+
Learn more [about collections here](http://trailblazer.to/gems/cells/api.html#collection).
|
358
355
|
|
359
|
-
```ruby
|
360
|
-
cell(:comment, collection: comments, style: "awesome", volume: "loud").()
|
361
|
-
```
|
362
356
|
|
363
357
|
## Builder
|
364
358
|
|
365
|
-
|
366
|
-
|
367
|
-
Builders allow instantiating different cell classes for different models and options.
|
359
|
+
Builders allow instantiating different cell classes for different models and options. They introduce polymorphism into cells.
|
368
360
|
|
369
361
|
```ruby
|
370
362
|
class CommentCell < Cell::ViewModel
|
@@ -380,14 +372,7 @@ The `#cell` helper takes care of instantiating the right cell class for you.
|
|
380
372
|
cell(:comment, Post.find(1)) #=> creates a PostCell.
|
381
373
|
```
|
382
374
|
|
383
|
-
|
384
|
-
|
385
|
-
```ruby
|
386
|
-
cell(:comment, collection: [@post, @comment]) #=> renders PostCell, then CommentCell.
|
387
|
-
```
|
388
|
-
|
389
|
-
Multiple calls to `::builds` will be ORed. If no block returns a class, the original class will be used (`CommentCell`). Builders are inherited.
|
390
|
-
|
375
|
+
Learn more [about builders here](http://trailblazer.to/gems/cells/api.html#builder).
|
391
376
|
|
392
377
|
## Caching
|
393
378
|
|
data/Rakefile
CHANGED
@@ -10,6 +10,10 @@ Rake::TestTask.new(:test) do |test|
|
|
10
10
|
test.libs << 'test'
|
11
11
|
test.pattern = 'test/*_test.rb'
|
12
12
|
test.verbose = true
|
13
|
+
# Ruby built-in warnings contain way too much noise to be useful. Consider turning them on again when the following issues are accepted in ruby:
|
14
|
+
# * https://bugs.ruby-lang.org/issues/10967 (remove warning: private attribute?)
|
15
|
+
# * https://bugs.ruby-lang.org/issues/12299 (customized warning handling)
|
16
|
+
test.warning = false
|
13
17
|
end
|
14
18
|
|
15
19
|
# Rake::TestTask.new(:rails) do |test|
|
@@ -21,4 +25,4 @@ end
|
|
21
25
|
# rails_task = Rake::Task["rails"]
|
22
26
|
# test_task = Rake::Task["test"]
|
23
27
|
# default_task.enhance { test_task.invoke }
|
24
|
-
# default_task.enhance { rails_task.invoke }
|
28
|
+
# default_task.enhance { rails_task.invoke }
|
data/lib/cell/collection.rb
CHANGED
@@ -2,25 +2,23 @@ module Cell
|
|
2
2
|
class Collection
|
3
3
|
def initialize(ary, options, cell_class)
|
4
4
|
options.delete(:collection)
|
5
|
-
|
6
|
-
@join = options.delete(:collection_join) # TODO: remove in 5.0.
|
5
|
+
set_deprecated_options(options) # TODO: remove in 5.0.
|
7
6
|
|
8
7
|
@ary = ary
|
9
8
|
@options = options
|
10
9
|
@cell_class = cell_class
|
11
|
-
|
12
|
-
deprecate_options!
|
13
10
|
end
|
14
11
|
|
15
|
-
def
|
16
|
-
|
17
|
-
|
12
|
+
def set_deprecated_options(options) # TODO: remove in 5.0.
|
13
|
+
self.method = options.delete(:method) if options.include?(:method)
|
14
|
+
self.collection_join = options.delete(:collection_join) if options.include?(:collection_join)
|
18
15
|
end
|
19
16
|
|
20
17
|
module Call
|
21
18
|
def call(state=:show)
|
22
|
-
join(
|
19
|
+
join(collection_join) { |cell, i| cell.(method || state) }
|
23
20
|
end
|
21
|
+
|
24
22
|
end
|
25
23
|
include Call
|
26
24
|
|
@@ -48,6 +46,13 @@ module Cell
|
|
48
46
|
end
|
49
47
|
include Layout
|
50
48
|
|
49
|
+
# TODO: remove in 5.0.
|
50
|
+
private
|
51
|
+
attr_accessor :collection_join, :method
|
52
|
+
|
53
|
+
extend Gem::Deprecate
|
54
|
+
deprecate :method=, "`call(method)` as documented here: http://trailblazer.to/gems/cells/api.html#collection", 2016, 7
|
55
|
+
deprecate :collection_join=, "`join(\"<br>\")` as documented here: http://trailblazer.to/gems/cells/api.html#collection", 2016, 7
|
51
56
|
end
|
52
57
|
end
|
53
58
|
|
data/lib/cell/templates.rb
CHANGED
@@ -21,7 +21,7 @@ module Cell
|
|
21
21
|
|
22
22
|
def create(prefix, view, options)
|
23
23
|
# puts "...checking #{prefix}/#{view}"
|
24
|
-
return unless File.
|
24
|
+
return unless File.exist?("#{prefix}/#{view}") # DISCUSS: can we use Tilt.new here?
|
25
25
|
|
26
26
|
template_class = options.delete(:template_class)
|
27
27
|
template_class.new("#{prefix}/#{view}", options) # Tilt.new()
|
data/lib/cell/testing.rb
CHANGED
@@ -46,17 +46,13 @@ module Cell
|
|
46
46
|
end
|
47
47
|
end
|
48
48
|
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
return unless controller_class
|
54
|
-
|
55
|
-
controller_class.new.tap do |ctl|
|
56
|
-
ctl.request = ::ActionController::TestRequest.new
|
57
|
-
ctl.instance_variable_set :@routes, ::Rails.application.routes.url_helpers
|
49
|
+
module ControllerFor
|
50
|
+
# This method is provided by the cells-rails gem.
|
51
|
+
def controller_for(controller_class)
|
52
|
+
# raise "[Cells] Please install (or update?) the cells-rails gem."
|
58
53
|
end
|
59
54
|
end
|
55
|
+
include ControllerFor
|
60
56
|
|
61
57
|
def controller # FIXME: this won't allow us using let(:controller) in MiniTest.
|
62
58
|
controller_for(self.class.controller_class)
|
@@ -72,6 +68,5 @@ module Cell
|
|
72
68
|
end
|
73
69
|
end
|
74
70
|
end
|
75
|
-
|
76
|
-
end
|
71
|
+
end # Testing
|
77
72
|
end
|
data/lib/cell/util.rb
CHANGED
@@ -15,11 +15,11 @@ module Cell::Util
|
|
15
15
|
|
16
16
|
# WARNING: this API might change.
|
17
17
|
def self.constant_for(name)
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
18
|
+
class_name = name.split("/").collect do |part|
|
19
|
+
part.split('_').collect(&:capitalize).join
|
20
|
+
end.join('::')
|
21
|
+
|
22
|
+
Object.const_get(class_name)
|
23
23
|
end
|
24
24
|
end
|
25
25
|
end
|
data/lib/cell/version.rb
CHANGED
data/test/concept_test.rb
CHANGED
@@ -79,7 +79,9 @@ class ConceptTest < MiniTest::Spec
|
|
79
79
|
it { Cell::Concept.cell("record/cell", nil, context: { controller: Object }).cell("record/cell", nil).must_be_instance_of Record::Cell }
|
80
80
|
it { Cell::Concept.cell("record/cell", nil, context: { controller: Object }).concept("record/cell", nil, tracks: 24).(:description).must_equal "A Tribute To Rancid, with 24 songs! [{:controller=>Object}]" }
|
81
81
|
# concept(.., collection: ..)
|
82
|
-
it
|
83
|
-
|
82
|
+
it do
|
83
|
+
Cell::Concept.cell("record/cell", nil, context: { controller: Object }).
|
84
|
+
concept("record/cell", collection: [1,2], tracks: 24).(:description).must_equal "A Tribute To Rancid, with 24 songs! [{:controller=>Object}]A Tribute To Rancid, with 24 songs! [{:controller=>Object}]"
|
85
|
+
end
|
84
86
|
end
|
85
87
|
end
|
data/test/public_test.rb
CHANGED
@@ -34,15 +34,26 @@ class PublicTest < MiniTest::Spec
|
|
34
34
|
# ViewModel.cell(collection: []) renders cells.
|
35
35
|
it { Cell::ViewModel.cell("public_test/song", collection: [Object, Module]).to_s.must_equal '[Object, {}][Module, {}]' }
|
36
36
|
|
37
|
+
# DISCUSS: should cell.() be the default?
|
37
38
|
# ViewModel.cell(collection: []) renders cells with custom join.
|
38
|
-
it
|
39
|
+
it do
|
40
|
+
Gem::Deprecate::skip_during do
|
41
|
+
Cell::ViewModel.cell("public_test/song", collection: [Object, Module]).join('<br/>') do |cell|
|
42
|
+
cell.()
|
43
|
+
end.must_equal '[Object, {}]<br/>[Module, {}]'
|
44
|
+
end
|
45
|
+
end
|
39
46
|
|
40
47
|
# ViewModel.cell(collection: []) passes generic options to cell.
|
41
48
|
it { Cell::ViewModel.cell("public_test/song", collection: [Object, Module], genre: 'Metal', context: { ready: true }).to_s.must_equal "[Object, {:genre=>\"Metal\", :context=>{:ready=>true}}][Module, {:genre=>\"Metal\", :context=>{:ready=>true}}]" }
|
42
49
|
|
43
50
|
# ViewModel.cell(collection: [], method: :detail) invokes #detail instead of #show.
|
44
51
|
# TODO: remove in 5.0.
|
45
|
-
it
|
52
|
+
it do
|
53
|
+
Gem::Deprecate::skip_during do
|
54
|
+
Cell::ViewModel.cell("public_test/song", collection: [Object, Module], method: :detail).to_s.must_equal '* [Object, {}]* [Module, {}]'
|
55
|
+
end
|
56
|
+
end
|
46
57
|
|
47
58
|
# ViewModel.cell(collection: []).() invokes #show.
|
48
59
|
it { Cell::ViewModel.cell("public_test/song", collection: [Object, Module]).().must_equal '[Object, {}][Module, {}]' }
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
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.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Nick Sutterer
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-07-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: uber
|