bemer 0.3.0 → 0.4.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 +4 -4
- data/README.md +229 -6
- data/docs//320/232/320/276/320/275/321/202/320/265/320/272/321/201/321/202-/321/203/320/267/320/273/320/260.md +1 -1
- data/docs//320/245/320/265/320/273/320/277/320/265/321/200-bem_attrs_for.md +58 -0
- data/docs//320/245/320/265/320/273/320/277/320/265/321/200-bem_mix.md +0 -6
- data/docs//320/245/320/265/320/273/320/277/320/265/321/200-block_tag.md +10 -4
- data/docs//320/245/320/265/320/273/320/277/320/265/321/200-elem_tag.md +1 -1
- data/lib/bemer.rb +4 -3
- data/lib/bemer/configuration.rb +2 -0
- data/lib/bemer/entity.rb +1 -1
- data/lib/bemer/entity_builder.rb +44 -9
- data/lib/bemer/helpers.rb +10 -1
- data/lib/bemer/mixes.rb +43 -0
- data/lib/bemer/predicate.rb +1 -1
- data/lib/bemer/version.rb +1 -1
- data/spec/action_view/helpers/bem_attrs_for_spec.rb +35 -0
- data/spec/action_view/helpers/block_tag_spec.rb +1 -1
- data/spec/action_view/helpers/elem_tag_spec.rb +166 -0
- data/spec/rails_helper.rb +2 -0
- metadata +48 -31
- data/lib/bemer/mixin_list.rb +0 -74
- data/spec/bemer/mixin_list_spec.rb +0 -99
- data/spec/support/shared_examples/an_html_entity_tree_builder_method.rb +0 -21
data/lib/bemer/mixin_list.rb
DELETED
@@ -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
|