rails_blocks 0.9.0.beta.1 → 0.9.0.beta.3

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: 033ebb0f7ed446801f2ae9cd57276c54881fa1ce0790b67475e8c0d3d58aaf68
4
- data.tar.gz: 909f87b36efb9f8c909de64e51564b5ca57c575253052374c4791b891f0705c6
3
+ metadata.gz: 72743d32fb1021d78a8a6bf364fe91d9312a64dffb304d3fcbf6d37d0035d1ad
4
+ data.tar.gz: 6da5a24ea6b1488d89318510767829f712d9e231ad6272d953a52c9c4b40ca25
5
5
  SHA512:
6
- metadata.gz: ed545d3e344a507e4c30cbd7b14bee0186e464e9a54c60d8f4498557607bec1bc1df142eefcfa9d37039f254cb08e5ab7cc0863123d6d4363a9a43480af58133
7
- data.tar.gz: 6f95e004db9ef7883bf17f41bd36fd226b3c7659ae3b5e85ae975c3dd6f63fcafe093de2674312a12ad915f8fcbc2b50c2ae4197bbbcbbbc9c1d03828cec5be6
6
+ metadata.gz: 354c470d345eb8b99c349974ad7f217e648962ac13505fd14a053aa380ca2450a4300ddc02f4f7b0b728514888cfd2c8a8beaf88e556604ec1c11e047a42f48f
7
+ data.tar.gz: 9e954a5d55cbad6f46b521b044707d66fcdd5f13bd4344c18a20ba89b6234467bb59c99ce7720985a98573a4d2393cf8091723dfff99383dc1b13ae66ddbb482
@@ -133,10 +133,14 @@ module BlockHelper
133
133
  private
134
134
  def current_bem_data
135
135
  data = {}
136
- data.merge! entity_data(current_entity_name, @current_options[:js]) if @current_options[:js]
136
+ if(@current_entity[:type] == :block)
137
+ data.merge! block_data(@current_entity[:name], @current_options[:js])
138
+ else
139
+ data.merge! element_data(context_block, @current_entity[:name], @current_options[:js])
140
+ end
137
141
  data.merge! mix_data(@current_options[:mix]) if @current_options[:mix]
138
142
 
139
- return nil if data == {}
143
+ return nil if data.length == 0
140
144
  data
141
145
  end
142
146
 
@@ -145,18 +149,25 @@ module BlockHelper
145
149
  data = mixes.map do |mix|
146
150
  next unless mix[:js]
147
151
  if mix[:e]
148
- if mix[:b]
149
- entity_data(element_name(mix[:b], mix[:e]), mix[:js])
150
- else
151
- entity_data(element_name(context_block, mix[:e]), mix[:js])
152
- end
152
+ element_data(mix[:b] || context_block, mix[:e], mix[:js])
153
153
  else
154
154
  raise RailsBlocks::BadMixError if mix[:b].nil?
155
- entity_data(block_name(mix[:b]), mix[:js])
155
+ block_data(mix[:b], mix[:js])
156
156
  end
157
157
  end.compact.inject(&:merge) || {}
158
158
  end
159
159
 
160
+ def block_data(name, js)
161
+ level = block_js_level(context_block, @current_options[:levels])
162
+ return {} if !js
163
+ data = (js == true ? {} : js).merge!({level: level, js_ext: block_js_ext(context_block, level)})
164
+ entity_data(name, data)
165
+ end
166
+
167
+ def element_data(b, e, js)
168
+ entity_data(element_name(b || context_block, e), js)
169
+ end
170
+
160
171
  def entity_data(name, data)
161
172
  return {name => data} if data.is_a? Hash
162
173
  return {name => {}} if data == true
@@ -6,6 +6,7 @@ module RailsBlocks
6
6
  attr_accessor :element_separator
7
7
  attr_accessor :modifier_separator
8
8
  attr_accessor :js_class
9
+ attr_accessor :js_exts
9
10
 
10
11
  def ns(name)
11
12
  @ns ||= {}
@@ -20,6 +21,7 @@ module RailsBlocks
20
21
  @element_separator = '__'
21
22
  @modifier_separator = '--'
22
23
  @js_class = 'js-bem'
24
+ @js_exts = ['js']
23
25
  end
24
26
  end
25
27
  end
@@ -30,6 +30,16 @@ module RailsBlocks
30
30
  end
31
31
  nil
32
32
  end
33
+
34
+ def block_js_level(b_name, levels)
35
+ return levels.reverse.find do |level|
36
+ Path.tree.dig(level, b_name, :js)
37
+ end
38
+ end
39
+
40
+ def block_js_ext(b_name, level)
41
+ return Path.tree.dig(level, b_name, :js_ext)
42
+ end
33
43
 
34
44
  def element_template(b_name, e_name, options = {})
35
45
  options[:levels].reverse.each do |level|
@@ -41,7 +51,6 @@ module RailsBlocks
41
51
  end
42
52
 
43
53
  private
44
-
45
54
  def mod(options)
46
55
  return '' unless options[:mods] && !options[:mods].empty?
47
56
  mod_class(*options[:mods].first)
@@ -63,31 +72,48 @@ module RailsBlocks
63
72
 
64
73
  def self.file_tree
65
74
  t = {}
66
- files = Dir["#{blocks_dir}/**/*#{RailsBlocks.config.template_engine}"]
75
+ engine_ext = RailsBlocks.config.template_engine
76
+ files = Dir["#{blocks_dir}/**/*#{engine_ext}"]
67
77
  files.each do |file|
68
78
  file.sub! blocks_dir.to_s + '/', ''
69
- file.sub! '.html' + RailsBlocks.config.template_engine, ''
79
+ file.sub! '.html' + engine_ext, ''
70
80
 
71
81
  parts = file.split('/')
72
- filename = File.basename(file, RailsBlocks.config.template_engine)
82
+ filename = File.basename(file, engine_ext)
73
83
  filename = File.basename(filename, '.html')
74
- template = {
75
- level: parts[0],
76
- block: parts[1],
77
- file: filename
78
- }
79
- t[template[:level]] ||= {}
80
- t[template[:level]][template[:block]] ||= {elements: {}}
84
+ # p filename
85
+ level, block = parts
86
+ t[level] ||= {}
87
+ block_def = (t[level][block] ||= {elements: {}})
81
88
 
82
89
  if is_e_file(filename)
83
- t[template[:level]][template[:block]][:elements][get_e_name(filename)] ||= {}
84
- t[template[:level]][template[:block]][:elements][get_e_name(filename)][get_e_mod(filename)] = file
90
+ block_def[:elements][get_e_name(filename)] ||= {}
91
+ block_def[:elements][get_e_name(filename)][get_e_mod(filename)] = file
85
92
  else
86
- t[template[:level]][template[:block]][get_b_mod(filename)] = file
93
+ block_def[get_b_mod(filename)] = file
87
94
  end
88
95
  end
96
+ add_js(t)
89
97
  t.with_indifferent_access.freeze
90
98
  end
99
+
100
+ def self.add_js(t)
101
+ exts = RailsBlocks.config.js_exts.join(',')
102
+ js_files = Dir["#{blocks_dir}/**/*.{#{exts}}"]
103
+ js_files.each do |file|
104
+ file.sub! blocks_dir.to_s + '/', ''
105
+ parts = file.split('/')
106
+ level, block, filename = parts
107
+ ext = File.extname(filename)
108
+ filename = File.basename(filename, '.*')
109
+
110
+ t[level] ||= {}
111
+ block_def = t[level][block] ||= {elements: {}}
112
+ block_def[:js] = true
113
+ block_def[:js_ext] = ext[1..-1]
114
+ end
115
+ p t
116
+ end
91
117
 
92
118
  def self.is_e_file(file)
93
119
  file.start_with? ELEMENT_FILE_PREFIX
@@ -1,3 +1,3 @@
1
1
  module RailsBlocks
2
- VERSION = "0.9.0.beta.1".freeze
2
+ VERSION = "0.9.0.beta.3".freeze
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rails_blocks
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.0.beta.1
4
+ version: 0.9.0.beta.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrey Potetiurin
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-07-19 00:00:00.000000000 Z
11
+ date: 2023-08-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -181,7 +181,6 @@ files:
181
181
  - lib/rails_blocks/path.rb
182
182
  - lib/rails_blocks/version.rb
183
183
  - lib/tasks/rails_blocks.rake
184
- - rails_blocks-0.7.11.gem
185
184
  - rails_blocks.gemspec
186
185
  - spec/helpers/block_helper_spec.rb
187
186
  - spec/internal/app/blocks/app/block3/_mod1.slim
Binary file