lite-component 1.0.11 → 1.1.0

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 6d80713505881c685b68cc3a8a5cb9442bec310351d4225b151f759770c12e5e
4
- data.tar.gz: 87a603392431946bed13580336860d07a750cac9af35e27a087fc4402b506572
3
+ metadata.gz: 2d9bdfa9c79cc9a007b6b1e35c42072dcbbbf6cf319c09b7d69738ef0133f284
4
+ data.tar.gz: 790df7f0ced92eec0f4403740ac4e433dc80e11f1f5ab2305d3d2fe935359afd
5
5
  SHA512:
6
- metadata.gz: a91cf54a2dbeff070e6a671cf59a1006d037666ea3552c8aa4ab68f943fa1e2cbc597399dcf5c959267a729c10abe4f3e5229e18fe8364e4603ca6222c42ad1e
7
- data.tar.gz: a32a1cf7dad38912c7b54cd80b4dbb4635c2a794216f98395f229045e210e2f2f0d021cde47cf2b856ef6f66ad59d32ed322320308c20a071cec83280b6ebc24
6
+ metadata.gz: bda36b4310e86b25b3f1f6e57b24a42b8a1eec4afe178bcdcf4886a7bffcd025de9110a15aba00589062c3aacf5ae5294763acccfa70bd2690f8a45229db4196
7
+ data.tar.gz: 139d5bd118979cdb4d6ed7edcfe5f5e95e34d517aba028a5ef6bd462fe5955e7a2c36bed6dd7381bd79bba81eb69b95d48d3dbbc65f09eb870d26d9e507b917f
@@ -1,10 +1,16 @@
1
1
  require:
2
2
  - rubocop-performance
3
+ - rubocop-rake
3
4
  - rubocop-rspec
4
5
  AllCops:
5
- TargetRubyVersion: 2.6
6
+ TargetRubyVersion: 2.7
6
7
  DisplayCopNames: true
7
8
  DisplayStyleGuide: true
9
+ NewCops: enable
10
+ Gemspec/RequiredRubyVersion:
11
+ Enabled: false
12
+ Layout/EmptyLinesAroundAttributeAccessor:
13
+ Enabled: true
8
14
  Layout/EmptyLinesAroundBlockBody:
9
15
  Exclude:
10
16
  - 'spec/**/**/*'
@@ -44,3 +50,5 @@ Style/HashTransformKeys:
44
50
  Enabled: true
45
51
  Style/HashTransformValues:
46
52
  Enabled: true
53
+ Style/SlicingWithRange:
54
+ Enabled: false
@@ -6,6 +6,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
6
6
 
7
7
  ## [Unreleased]
8
8
 
9
+ ## [1.1.0] - 2021-01-20
10
+ ### Added
11
+ - Add improved collection rendering
12
+ ### Removed
13
+ - Collection class is no longer needed
14
+
9
15
  ## [1.0.11] - 2020-04-24
10
16
  ### Added
11
17
  - Added `to_h` and `to_hash` aliases for dumping locals
@@ -1,59 +1,60 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- lite-component (1.0.11)
4
+ lite-component (1.1.0)
5
5
  actionview
6
6
 
7
7
  GEM
8
8
  remote: https://rubygems.org/
9
9
  specs:
10
- actionpack (6.0.2.2)
11
- actionview (= 6.0.2.2)
12
- activesupport (= 6.0.2.2)
13
- rack (~> 2.0, >= 2.0.8)
10
+ actionpack (6.1.1)
11
+ actionview (= 6.1.1)
12
+ activesupport (= 6.1.1)
13
+ rack (~> 2.0, >= 2.0.9)
14
14
  rack-test (>= 0.6.3)
15
15
  rails-dom-testing (~> 2.0)
16
16
  rails-html-sanitizer (~> 1.0, >= 1.2.0)
17
- actionview (6.0.2.2)
18
- activesupport (= 6.0.2.2)
17
+ actionview (6.1.1)
18
+ activesupport (= 6.1.1)
19
19
  builder (~> 3.1)
20
20
  erubi (~> 1.4)
21
21
  rails-dom-testing (~> 2.0)
22
22
  rails-html-sanitizer (~> 1.1, >= 1.2.0)
23
- activesupport (6.0.2.2)
23
+ activesupport (6.1.1)
24
24
  concurrent-ruby (~> 1.0, >= 1.0.2)
25
- i18n (>= 0.7, < 2)
26
- minitest (~> 5.1)
27
- tzinfo (~> 1.1)
28
- zeitwerk (~> 2.2)
29
- ast (2.4.0)
25
+ i18n (>= 1.6, < 2)
26
+ minitest (>= 5.1)
27
+ tzinfo (~> 2.0)
28
+ zeitwerk (~> 2.3)
29
+ ast (2.4.1)
30
30
  builder (3.2.4)
31
31
  colorize (0.8.1)
32
- concurrent-ruby (1.1.6)
32
+ concurrent-ruby (1.1.8)
33
33
  crass (1.0.6)
34
- diff-lcs (1.3)
35
- erubi (1.9.0)
34
+ diff-lcs (1.4.4)
35
+ erubi (1.10.0)
36
36
  fasterer (0.8.3)
37
37
  colorize (~> 0.7)
38
38
  ruby_parser (>= 3.14.1)
39
39
  generator_spec (0.9.4)
40
40
  activesupport (>= 3.0.0)
41
41
  railties (>= 3.0.0)
42
- i18n (1.8.2)
42
+ i18n (1.8.7)
43
43
  concurrent-ruby (~> 1.0)
44
- jaro_winkler (1.5.4)
45
- loofah (2.5.0)
44
+ loofah (2.9.0)
46
45
  crass (~> 1.0.2)
47
46
  nokogiri (>= 1.5.9)
48
47
  method_source (1.0.0)
49
- mini_portile2 (2.4.0)
50
- minitest (5.14.0)
51
- nokogiri (1.10.9)
52
- mini_portile2 (~> 2.4.0)
53
- parallel (1.19.1)
54
- parser (2.7.1.1)
55
- ast (~> 2.4.0)
56
- rack (2.2.2)
48
+ mini_portile2 (2.5.0)
49
+ minitest (5.14.3)
50
+ nokogiri (1.11.1)
51
+ mini_portile2 (~> 2.5.0)
52
+ racc (~> 1.4)
53
+ parallel (1.20.1)
54
+ parser (3.0.0.0)
55
+ ast (~> 2.4.1)
56
+ racc (1.5.2)
57
+ rack (2.2.3)
57
58
  rack-test (1.1.0)
58
59
  rack (>= 1.0, < 3)
59
60
  rails-dom-testing (2.0.3)
@@ -61,50 +62,57 @@ GEM
61
62
  nokogiri (>= 1.6)
62
63
  rails-html-sanitizer (1.3.0)
63
64
  loofah (~> 2.3)
64
- railties (6.0.2.2)
65
- actionpack (= 6.0.2.2)
66
- activesupport (= 6.0.2.2)
65
+ railties (6.1.1)
66
+ actionpack (= 6.1.1)
67
+ activesupport (= 6.1.1)
67
68
  method_source
68
69
  rake (>= 0.8.7)
69
- thor (>= 0.20.3, < 2.0)
70
+ thor (~> 1.0)
70
71
  rainbow (3.0.0)
71
- rake (13.0.1)
72
+ rake (13.0.3)
73
+ regexp_parser (2.0.3)
72
74
  rexml (3.2.4)
73
- rspec (3.9.0)
74
- rspec-core (~> 3.9.0)
75
- rspec-expectations (~> 3.9.0)
76
- rspec-mocks (~> 3.9.0)
77
- rspec-core (3.9.1)
78
- rspec-support (~> 3.9.1)
79
- rspec-expectations (3.9.1)
75
+ rspec (3.10.0)
76
+ rspec-core (~> 3.10.0)
77
+ rspec-expectations (~> 3.10.0)
78
+ rspec-mocks (~> 3.10.0)
79
+ rspec-core (3.10.1)
80
+ rspec-support (~> 3.10.0)
81
+ rspec-expectations (3.10.1)
80
82
  diff-lcs (>= 1.2.0, < 2.0)
81
- rspec-support (~> 3.9.0)
82
- rspec-mocks (3.9.1)
83
+ rspec-support (~> 3.10.0)
84
+ rspec-mocks (3.10.1)
83
85
  diff-lcs (>= 1.2.0, < 2.0)
84
- rspec-support (~> 3.9.0)
85
- rspec-support (3.9.2)
86
- rubocop (0.82.0)
87
- jaro_winkler (~> 1.5.1)
86
+ rspec-support (~> 3.10.0)
87
+ rspec-support (3.10.1)
88
+ rubocop (1.8.1)
88
89
  parallel (~> 1.10)
89
- parser (>= 2.7.0.1)
90
+ parser (>= 3.0.0.0)
90
91
  rainbow (>= 2.2.2, < 4.0)
92
+ regexp_parser (>= 1.8, < 3.0)
91
93
  rexml
94
+ rubocop-ast (>= 1.2.0, < 2.0)
92
95
  ruby-progressbar (~> 1.7)
93
- unicode-display_width (>= 1.4.0, < 2.0)
94
- rubocop-performance (1.5.2)
95
- rubocop (>= 0.71.0)
96
- rubocop-rspec (1.38.1)
97
- rubocop (>= 0.68.1)
98
- ruby-progressbar (1.10.1)
99
- ruby_parser (3.14.2)
96
+ unicode-display_width (>= 1.4.0, < 3.0)
97
+ rubocop-ast (1.4.0)
98
+ parser (>= 2.7.1.5)
99
+ rubocop-performance (1.9.2)
100
+ rubocop (>= 0.90.0, < 2.0)
101
+ rubocop-ast (>= 0.4.0)
102
+ rubocop-rake (0.5.1)
103
+ rubocop
104
+ rubocop-rspec (2.1.0)
105
+ rubocop (~> 1.0)
106
+ rubocop-ast (>= 1.1.0)
107
+ ruby-progressbar (1.11.0)
108
+ ruby_parser (3.15.1)
100
109
  sexp_processor (~> 4.9)
101
- sexp_processor (4.14.1)
102
- thor (1.0.1)
103
- thread_safe (0.3.6)
104
- tzinfo (1.2.7)
105
- thread_safe (~> 0.1)
106
- unicode-display_width (1.7.0)
107
- zeitwerk (2.3.0)
110
+ sexp_processor (4.15.2)
111
+ thor (1.1.0)
112
+ tzinfo (2.0.4)
113
+ concurrent-ruby (~> 1.0)
114
+ unicode-display_width (2.0.0)
115
+ zeitwerk (2.4.2)
108
116
 
109
117
  PLATFORMS
110
118
  ruby
@@ -118,6 +126,7 @@ DEPENDENCIES
118
126
  rspec
119
127
  rubocop
120
128
  rubocop-performance
129
+ rubocop-rake
121
130
  rubocop-rspec
122
131
 
123
132
  BUNDLED WITH
@@ -2,7 +2,7 @@
2
2
 
3
3
  require 'action_view'
4
4
 
5
- %w[version engine iteration collection locals base].each do |filename|
5
+ %w[version engine iteration locals base].each do |filename|
6
6
  require "lite/component/#{filename}"
7
7
  end
8
8
 
@@ -8,23 +8,24 @@ module Lite
8
8
  include ActionView::Helpers
9
9
 
10
10
  attr_accessor :components
11
- attr_reader :context, :options
12
- attr_writer :iteration
11
+ attr_reader :context, :iteration, :options
13
12
 
14
- # rubocop:disable Lint/UnusedMethodArgument
13
+ # rubocop:disable Layout/LineLength
15
14
  def initialize(context, options = {}, &block)
15
+ @components = []
16
+ @iteration = (options[:locals] || {}).delete(:iteration) || Lite::Component::Iteration.new(1, 0)
17
+
16
18
  @context = context
17
19
  @options = default_options.deep_merge(options)
18
20
 
19
- @components = []
20
-
21
- yield(self) if block_given?
21
+ yield(self) if block
22
22
  end
23
- # rubocop:enable Lint/UnusedMethodArgument
23
+ # rubocop:enable Layout/LineLength
24
24
 
25
25
  alias helpers context
26
26
  alias c context
27
27
  alias h helpers
28
+ alias i iteration
28
29
 
29
30
  class << self
30
31
 
@@ -53,12 +54,6 @@ module Lite
53
54
  components << [name, options, block]
54
55
  end
55
56
 
56
- def iteration
57
- @iteration ||= Lite::Component::Iteration.new(1, 0)
58
- end
59
-
60
- alias i iteration
61
-
62
57
  def locals
63
58
  @locals ||= Lite::Component::Locals.new(options[:locals])
64
59
  end
@@ -69,13 +64,9 @@ module Lite
69
64
  return unless render?
70
65
 
71
66
  collection = options.delete(:collection)
72
- return render_content if collection.nil? || !collection.respond_to?(:each)
67
+ return render_collection(collection) if collection.respond_to?(:each)
73
68
 
74
- Lite::Component::Collection.render(
75
- collection,
76
- component: self,
77
- spacer_template: options.delete(:spacer_template)
78
- )
69
+ render_content
79
70
  end
80
71
 
81
72
  def render?
@@ -109,6 +100,22 @@ module Lite
109
100
  }
110
101
  end
111
102
 
103
+ # rubocop:disable Metrics/AbcSize
104
+ def render_collection(collection)
105
+ collection_size = collection.size
106
+ spacer_template = options.delete(:spacer_template)
107
+
108
+ results = collection.each_with_object([]).with_index do |(item, array), index|
109
+ array << context.render(spacer_template) if index.positive? && spacer_template
110
+ iteration = Lite::Component::Iteration.new(collection_size, index)
111
+ instance = self.class.new(context, locals: { object: item, iteration: iteration })
112
+ array << instance.render
113
+ end
114
+
115
+ context.safe_join(results)
116
+ end
117
+ # rubocop:enable Metrics/AbcSize
118
+
112
119
  def yield_content
113
120
  components.map do |name, options, block|
114
121
  klass = self.class.build(name)
@@ -3,7 +3,7 @@
3
3
  module Lite
4
4
  module Component
5
5
 
6
- VERSION ||= '1.0.11'
6
+ VERSION ||= '1.1.0'
7
7
 
8
8
  end
9
9
  end
@@ -46,5 +46,6 @@ Gem::Specification.new do |spec|
46
46
  spec.add_development_dependency 'rspec'
47
47
  spec.add_development_dependency 'rubocop'
48
48
  spec.add_development_dependency 'rubocop-performance'
49
+ spec.add_development_dependency 'rubocop-rake'
49
50
  spec.add_development_dependency 'rubocop-rspec'
50
51
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lite-component
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.11
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Juan Gomez
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-04-24 00:00:00.000000000 Z
11
+ date: 2021-01-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: actionview
@@ -122,6 +122,20 @@ dependencies:
122
122
  - - ">="
123
123
  - !ruby/object:Gem::Version
124
124
  version: '0'
125
+ - !ruby/object:Gem::Dependency
126
+ name: rubocop-rake
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ">="
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ">="
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
125
139
  - !ruby/object:Gem::Dependency
126
140
  name: rubocop-rspec
127
141
  requirement: !ruby/object:Gem::Requirement
@@ -136,7 +150,7 @@ dependencies:
136
150
  - - ">="
137
151
  - !ruby/object:Gem::Version
138
152
  version: '0'
139
- description:
153
+ description:
140
154
  email:
141
155
  - j.gomez@drexed.com
142
156
  executables: []
@@ -166,7 +180,6 @@ files:
166
180
  - lib/generators/rails/templates/component.scss
167
181
  - lib/lite/component.rb
168
182
  - lib/lite/component/base.rb
169
- - lib/lite/component/collection.rb
170
183
  - lib/lite/component/engine.rb
171
184
  - lib/lite/component/iteration.rb
172
185
  - lib/lite/component/locals.rb
@@ -176,7 +189,7 @@ homepage: http://drexed.github.io/lite-component
176
189
  licenses:
177
190
  - MIT
178
191
  metadata: {}
179
- post_install_message:
192
+ post_install_message:
180
193
  rdoc_options: []
181
194
  require_paths:
182
195
  - lib
@@ -191,8 +204,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
191
204
  - !ruby/object:Gem::Version
192
205
  version: '0'
193
206
  requirements: []
194
- rubygems_version: 3.1.2
195
- signing_key:
207
+ rubygems_version: 3.2.5
208
+ signing_key:
196
209
  specification_version: 4
197
210
  summary: Generate component from collections of data points
198
211
  test_files: []
@@ -1,60 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Lite
4
- module Component
5
- class Collection
6
-
7
- attr_reader :collection, :component, :spacer_template
8
-
9
- def initialize(collection, component:, spacer_template: nil)
10
- @collection = collection
11
- @component = component
12
- @spacer_template = spacer_template
13
- end
14
-
15
- class << self
16
-
17
- def render(collection, component)
18
- klass = new(collection, component)
19
- klass.render
20
- end
21
-
22
- end
23
-
24
- def render
25
- component.context.safe_join(iterated_collection)
26
- end
27
-
28
- private
29
-
30
- def collection_size
31
- @collection_size ||= begin
32
- if collection.respond_to?(:size)
33
- collection.size
34
- elsif collection.respond_to?(:to_a)
35
- collection.to_a.size
36
- elsif collection.respond_to?(:to_hash)
37
- collection.to_hash.size
38
- end
39
- end
40
- end
41
-
42
- # rubocop:disable Metrics/AbcSize
43
- def iterated_collection
44
- collection.each_with_object([]).with_index do |(object, array), index|
45
- component.iteration = Lite::Component::Iteration.new(collection_size, index)
46
- component.options.deep_merge!(locals: { object: object, iteration: component.iteration })
47
- content = component.render_content
48
- next if content.nil?
49
-
50
- array << content
51
- next unless spacer_template && !component.iteration.last?
52
-
53
- array << component.context.render(spacer_template)
54
- end
55
- end
56
- # rubocop:enable Metrics/AbcSize
57
-
58
- end
59
- end
60
- end