bemer 0.3.0 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,74 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'active_support/core_ext/object/blank'
4
-
5
- module Bemer
6
- class MixinList
7
- def initialize(mix)
8
- @mix = mix
9
- @mixins = nil
10
- end
11
-
12
- def to_a
13
- build_mixins
14
- end
15
-
16
- def to_s
17
- @to_s ||= to_a.join(' ')
18
- end
19
-
20
- protected
21
-
22
- attr_reader :mixins
23
-
24
- def build_mixins
25
- return mixins unless mixins.nil?
26
-
27
- mix = @mix.instance_of?(Hash) ? build_mixins_from_hash : build_mixins_from_array
28
-
29
- @mixins = mix.flatten.reject(&:blank?).uniq
30
- end
31
-
32
- def build_mixin(mixin)
33
- return mixin.split if mixin.instance_of?(String)
34
-
35
- case mixin
36
- when Symbol then Bemer.bem_class(mixin)
37
- when Array then build_mixin_from_array(mixin)
38
- when Hash then build_mixin_from_hash(mixin)
39
- end
40
- end
41
-
42
- def build_mixin_from_hash(mixin)
43
- mixin.map do |block, element|
44
- next Bemer.bem_class(block, element) unless element.instance_of?(Array)
45
-
46
- element.map { |elem| Bemer.bem_class(block, elem) }
47
- end
48
- end
49
-
50
- def build_mixin_from_array(mixin)
51
- block, element = *mixin
52
-
53
- return Bemer.bem_class(block, element) unless element.instance_of?(Array)
54
-
55
- element.map { |elem| Bemer.bem_class(block, elem) }
56
- end
57
-
58
- def build_mixins_from_hash
59
- @mix.map do |mixin|
60
- next if mixin.blank?
61
-
62
- build_mixin(mixin)
63
- end
64
- end
65
-
66
- def build_mixins_from_array
67
- Array(@mix).map do |mixin|
68
- next if mixin.blank?
69
-
70
- mixin.instance_of?(Array) ? mixin.map { |mix| build_mixin(mix) } : build_mixin(mixin)
71
- end
72
- end
73
- end
74
- end
@@ -1,99 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- RSpec.describe Bemer::MixinList do
4
- describe 'mixins from an empty params' do
5
- subject(:mixin_list) { described_class.new([nil, '', {}]) }
6
-
7
- it 'returns an empty string' do
8
- expect(mixin_list.to_s).to be_empty
9
- end
10
-
11
- it 'returns an empty array' do
12
- expect(mixin_list.to_a).to be_empty
13
- end
14
- end
15
-
16
- describe 'mixins from an empty array' do
17
- subject(:mixin_list) { described_class.new([]) }
18
-
19
- it 'returns an empty string' do
20
- expect(mixin_list.to_s).to be_empty
21
- end
22
-
23
- it 'returns an empty array' do
24
- expect(mixin_list.to_a).to be_empty
25
- end
26
- end
27
-
28
- describe 'mixins from an empty hash' do
29
- subject(:mixin_list) { described_class.new({}) }
30
-
31
- it 'returns an empty string' do
32
- expect(mixin_list.to_s).to be_empty
33
- end
34
-
35
- it 'returns an empty array' do
36
- expect(mixin_list.to_a).to be_empty
37
- end
38
- end
39
-
40
- describe 'mixins from an array' do
41
- subject(:mixin_list) { described_class.new([:block_name, { block_name: %i[elem_name1 elem_name2] }, block: :elem]) }
42
-
43
- it 'returns mixins as a string' do
44
- expect(mixin_list.to_s).to eq 'block-name block-name__elem-name1 block-name__elem-name2 block__elem'
45
- end
46
-
47
- it 'returns mixins as an array' do
48
- expect(mixin_list.to_a).to match_array %w[block-name block-name__elem-name1 block-name__elem-name2 block__elem]
49
- end
50
- end
51
-
52
- describe 'mixins from a hash' do
53
- subject(:mixin_list) { described_class.new(block_name: [nil, :elem_name1, :elem_name2], block: :elem) }
54
-
55
- it 'returns mixins as a string' do
56
- expect(mixin_list.to_s).to eq 'block-name block-name__elem-name1 block-name__elem-name2 block__elem'
57
- end
58
-
59
- it 'returns mixins as an array' do
60
- expect(mixin_list.to_a).to match_array %w[block-name block-name__elem-name1 block-name__elem-name2 block__elem]
61
- end
62
- end
63
-
64
- describe 'mixins from a symbol' do
65
- subject(:mixin_list) { described_class.new(:block_name) }
66
-
67
- it 'returns mixins as a string' do
68
- expect(mixin_list.to_s).to eq 'block-name'
69
- end
70
-
71
- it 'returns mixins as an array' do
72
- expect(mixin_list.to_a).to match_array %w[block-name]
73
- end
74
- end
75
-
76
- describe 'mixins from a string' do
77
- subject(:mixin_list) { described_class.new('block_name block__elem') }
78
-
79
- it 'returns mixins as a string' do
80
- expect(mixin_list.to_s).to eq 'block_name block__elem'
81
- end
82
-
83
- it 'returns mixins as an array' do
84
- expect(mixin_list.to_a).to match_array %w[block_name block__elem]
85
- end
86
- end
87
-
88
- describe 'mixins from a hash with string values' do
89
- subject(:mixin_list) { described_class.new('BlockName' => [nil, 'ElemName', :elem_name], 'Block' => 'ElemName') }
90
-
91
- it 'returns mixins as a string' do
92
- expect(mixin_list.to_s).to eq 'BlockName BlockName__ElemName BlockName__elem-name Block__ElemName'
93
- end
94
-
95
- it 'returns mixins as an array' do
96
- expect(mixin_list.to_a).to match_array %w[BlockName BlockName__ElemName BlockName__elem-name Block__ElemName]
97
- end
98
- end
99
- end
@@ -1,21 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- RSpec.shared_examples 'an HTML entity tree builder method' do |*params|
4
- it 'creates an HTML tree' do # rubocop:disable RSpec/ExampleLength
5
- pretty_html = params.pop if params[-1].is_a?(String)
6
- pretty_html = html if pretty_html.nil? && defined?(html)
7
- compressed_html = pretty_html.to_s.strip.gsub(/>\s+/, '>')
8
-
9
- html_tree =
10
- if defined?(html_entity_tree)
11
- html_entity_tree
12
- else
13
- options = params.extract_options!
14
- options[:content] = content if defined?(content) && !options.key?(:content)
15
-
16
- html_entity_tree_builder_method.call(*params, options)
17
- end
18
-
19
- expect(html_tree).to eq compressed_html
20
- end
21
- end