rails_blocks 0.9.0.beta.4 → 0.9.0.beta.5

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: 03e2b58cf290941dd680f6e0d7893c5ad06ccaed98e6f6549f9c24876204e9aa
4
- data.tar.gz: 5d5fda3dc88c986ea65c00f5291874c3e17f9b5712f42540be04c77f9e8e4fa9
3
+ metadata.gz: bc74656544b8c832b8a27f558279e3e9ee410e7572c22dbc03227b8b058ec2f0
4
+ data.tar.gz: d040fa04f369046ee122bf644acfb05949a0fa182f623ae3930c2333d079c4c9
5
5
  SHA512:
6
- metadata.gz: 837d083a5707d595483fc788b169c44ae9cda7db9ed35a5727f70330b4753980ee1e3da6fb173bc6aa633cf04b6d9afc0ce003569b63acd725ea7bba2ccfb82b
7
- data.tar.gz: e0e8e4a89613e8859d2a5e6af26d543963418e56ee87aaa0ec921578c1967e779785308bba035efea81ef058cb81d14fc7e5a6195868d468601889a859d2c81a
6
+ metadata.gz: 25e2b23f1803c200a8e75da1b4944b9733e2feb2c4bb4a326a7c4133a88c52e2653a13b5aa81e28a2e8cc1e581c1e1947006573fd0798cabef1f47c63dfda492
7
+ data.tar.gz: 56545688413c6e6c66f9180421cdd6d25e3f0e1bcebc74b3b88fe838bca4ab373367fcf7fe8e66c0b7606c4233bccc927b2f3e56d118c6a492edb7f3708b6140
@@ -16,21 +16,21 @@ end
16
16
  module BlockHelper
17
17
  include RailsBlocks::Path
18
18
  include RailsBlocks::Names
19
-
19
+
20
20
  BEM_KEYS = [:tag, :class, :attrs, :mods, :mix, :data, :levels, :content]
21
-
21
+
22
22
  def bem_page(options, &block)
23
23
  @page_options = options
24
24
  block_given? ? capture(&block) : ''
25
25
  end
26
-
26
+
27
27
  def page_options
28
28
  defaults = {
29
29
  levels: RailsBlocks.config.levels
30
30
  }
31
31
  defaults.merge @page_options || {}
32
32
  end
33
-
33
+
34
34
  #TODO бога ради, отрефактори это дерьмо
35
35
  def b(b_name, options = {}, &block)
36
36
  options = page_options.merge options
@@ -41,7 +41,7 @@ module BlockHelper
41
41
  pop_context_block
42
42
  result
43
43
  end
44
-
44
+
45
45
  def b_classes(b_name, options = {})
46
46
  parent_block = context_block
47
47
  push_context_block b_name, options
@@ -51,14 +51,14 @@ module BlockHelper
51
51
  pop_context_block
52
52
  classes
53
53
  end
54
-
54
+
55
55
  def b_context(b_name, options = {}, &block)
56
56
  push_context_block b_name, options
57
57
  result = capture(&block)
58
58
  pop_context_block
59
59
  result
60
60
  end
61
-
61
+
62
62
  def e(e_name, options = {}, &block)
63
63
  options = page_options.merge options
64
64
  parent_block = options[:b] || context_block
@@ -67,7 +67,7 @@ module BlockHelper
67
67
  template = element_template parent_block, e_name, options
68
68
  entity(template, :elem, e_name, options, &block)
69
69
  end
70
-
70
+
71
71
  def e_classes(e_name, options = {})
72
72
  parent_block = options[:b] || context_block
73
73
  raise RailsBlocks::NoBlockContextError unless parent_block
@@ -75,9 +75,11 @@ module BlockHelper
75
75
  options[:parent_block] = parent_block
76
76
  element_classes(parent_block, e_name, options).join(' ')
77
77
  end
78
-
78
+
79
79
  def entity(template, type, name, options, &block)
80
+ # p template
80
81
  ctx = RenderContext.new
82
+ # content = block ? block.call(ctx) : options[:content]
81
83
  content = block ? capture(ctx, &block) : options[:content]
82
84
  ctx.slots.each {|k, v| ctx.rendered_slots[k] = capture(&v)}
83
85
  #важно заполнять публичные поля только после того, как закапчюрится то, что внутри энтити, иначе они перезапишутся.
@@ -85,16 +87,33 @@ module BlockHelper
85
87
  @current_options = options
86
88
  @current_entity = {type: type, name: name}
87
89
  template.nil? ? empty(content) : render(template: template, locals: {content: content, options: options, slots: ctx.rendered_slots})
90
+
91
+ # result = nil
92
+ # if template.nil?
93
+ # result = empty(content&.to_s&.html_safe)
94
+ # else
95
+ # result = my_render(template: template, locals: {content: content&.to_s&.html_safe, options: options, slots: ctx.rendered_slots})
96
+ # end
97
+ # result.html_safe
98
+ end
99
+
100
+ def my_render(opts)
101
+ p opts[:template]["file"], opts[:locals]
102
+ if(opts[:template][:template])
103
+ return opts[:template][:template].render(self, opts[:locals]).html_safe
104
+ end
105
+ # return opts[:locals][:content] || 'foo'
88
106
  end
89
-
107
+
90
108
  def empty(content)
109
+ # content_tag(bem_tag, content, bem_attrs_without_tag, false).html_safe
91
110
  content_tag bem_tag, content, bem_attrs_without_tag
92
111
  end
93
-
112
+
94
113
  def bem_tag
95
114
  bem_attrs[:tag]
96
115
  end
97
-
116
+
98
117
  def bem_attrs
99
118
  if @attrs.nil?
100
119
  @attrs = {class: current_entity_classes.join(' ')}
@@ -106,7 +125,7 @@ module BlockHelper
106
125
 
107
126
  @attrs
108
127
  end
109
-
128
+
110
129
  def bem_attrs_without_tag
111
130
  bem_attrs.except :tag
112
131
  end
@@ -129,7 +148,7 @@ module BlockHelper
129
148
  return @current_options[:mix].push(mix) if mix.is_a? Hash
130
149
  @current_options[:mix].push(*mix) if mix.is_a? Array
131
150
  end
132
-
151
+
133
152
  private
134
153
  def current_bem_data
135
154
  data = {}
@@ -158,9 +177,10 @@ module BlockHelper
158
177
  end
159
178
 
160
179
  def block_data(name, js)
161
- level = block_js_level(context_block, @current_options[:levels])
180
+ level = block_js_level(name, @current_options[:levels])
162
181
  return {} if !js
163
- data = (js == true ? {} : js).merge!({level: level, js_ext: block_js_ext(context_block, level)})
182
+
183
+ data = (js == true ? {} : js).merge!({level: level, js_ext: block_js_ext(name, level)})
164
184
  entity_data(name, data)
165
185
  end
166
186
 
@@ -190,7 +210,7 @@ module BlockHelper
190
210
  def blocks_stack
191
211
  @blocks_stack = @blocks_stack || []
192
212
  end
193
-
213
+
194
214
  def context_block
195
215
  blocks_stack.last&.fetch(:name, nil)
196
216
  end
@@ -198,11 +218,11 @@ module BlockHelper
198
218
  def context_block_options
199
219
  blocks_stack.last&.fetch(:options, nil)
200
220
  end
201
-
221
+
202
222
  def push_context_block(b_name, options)
203
223
  blocks_stack.push({name: b_name, options: options})
204
224
  end
205
-
225
+
206
226
  def pop_context_block
207
227
  blocks_stack.pop
208
228
  end
@@ -1,13 +1,16 @@
1
1
  module RailsBlocks
2
2
  module Names
3
+ @@block_classes_cache = {}
3
4
  def element_classes(b_name, e_name, options = {})
4
5
  base_class = element_class b_name, e_name
5
6
  classes(base_class, false, options)
6
7
  end
7
8
 
8
9
  def block_classes(b_name, options = {})
9
- base_class = block_class b_name
10
- classes(base_class, true, options)
10
+ @@block_classes_cache[{type: :block, name: b_name, options: options}] ||= (
11
+ base_class = block_class b_name
12
+ classes(base_class, true, options)
13
+ )
11
14
  end
12
15
 
13
16
  def block_name(b_name)
@@ -4,7 +4,7 @@ module RailsBlocks
4
4
  include RailsBlocks::Names
5
5
  ELEMENT_FILE_PREFIX = '__'
6
6
  MOD_FILE_PREFIX = '_'
7
-
7
+
8
8
  class << self
9
9
  attr_writer :tree
10
10
  end
@@ -18,11 +18,11 @@ module RailsBlocks
18
18
  def self.reload_tree
19
19
  @tree = build_tree
20
20
  end
21
-
21
+
22
22
  def self.blocks_dir
23
23
  Rails.root.join RailsBlocks.config.blocks_dir
24
24
  end
25
-
25
+
26
26
  def block_template(b_name, options = {})
27
27
  options[:levels].reverse.each do |level|
28
28
  next unless Path.tree[level][b_name]
@@ -31,6 +31,15 @@ module RailsBlocks
31
31
  nil
32
32
  end
33
33
 
34
+ def block_template_precompiled
35
+
36
+ end
37
+
38
+ def element_template_precompiled
39
+
40
+ end
41
+
42
+
34
43
  def block_js_level(b_name, levels)
35
44
  return levels.reverse.find do |level|
36
45
  Path.tree.dig(level, b_name, :js)
@@ -40,7 +49,7 @@ module RailsBlocks
40
49
  def block_js_ext(b_name, level)
41
50
  return Path.tree.dig(level, b_name, :js_ext)
42
51
  end
43
-
52
+
44
53
  def element_template(b_name, e_name, options = {})
45
54
  options[:levels].reverse.each do |level|
46
55
  next unless Path.tree[level][b_name]
@@ -49,13 +58,13 @@ module RailsBlocks
49
58
  end
50
59
  nil
51
60
  end
52
-
61
+
53
62
  private
54
63
  def mod(options)
55
64
  return '' unless options[:mods] && !options[:mods].empty?
56
65
  mod_class(*options[:mods].first)
57
66
  end
58
-
67
+
59
68
  def get_block_dir(b_name, levels)
60
69
  levels.reverse.each do |level|
61
70
  block_dir = File.join(self.blocks_dir, level, b_name)
@@ -65,19 +74,35 @@ module RailsBlocks
65
74
  end
66
75
  nil
67
76
  end
68
-
77
+
69
78
  def self.build_tree
70
79
  file_tree
71
80
  end
72
-
81
+
73
82
  def self.file_tree
83
+ # p '****' * 20
84
+ # Slim::Engine.set_options
85
+
74
86
  t = {}
75
87
  engine_ext = RailsBlocks.config.template_engine
76
88
  files = Dir["#{blocks_dir}/**/*#{engine_ext}"]
77
89
  files.each do |file|
90
+ # p file
91
+ # template = Tilt.new(file,
92
+ # use_html_safe: true,
93
+ # sort_attrs: false,
94
+ # attr_quote: "'",
95
+ # hyphen_underscore_attrs: true,
96
+ # pretty: false,
97
+ # streaming: false,
98
+ # disable_escape: true,
99
+ # disable_capture: true
100
+ # )
101
+ # p template if file.include?('header.html.slim')
78
102
  file.sub! blocks_dir.to_s + '/', ''
79
103
  file.sub! '.html' + engine_ext, ''
80
-
104
+
105
+
81
106
  parts = file.split('/')
82
107
  filename = File.basename(file, engine_ext)
83
108
  filename = File.basename(filename, '.html')
@@ -85,12 +110,19 @@ module RailsBlocks
85
110
  level, block = parts
86
111
  t[level] ||= {}
87
112
  block_def = (t[level][block] ||= {elements: {}})
88
-
113
+
89
114
  if is_e_file(filename)
90
115
  block_def[:elements][get_e_name(filename)] ||= {}
91
116
  block_def[:elements][get_e_name(filename)][get_e_mod(filename)] = file
117
+
118
+ # block_def[:elements][get_e_name(filename)][get_e_mod(filename)] ||= {}
119
+ # block_def[:elements][get_e_name(filename)][get_e_mod(filename)][:file] ||= file
120
+ # block_def[:elements][get_e_name(filename)][get_e_mod(filename)][:template] ||= template
92
121
  else
93
122
  block_def[get_b_mod(filename)] = file
123
+ # block_def[get_b_mod(filename)] ||= {}
124
+ # block_def[get_b_mod(filename)][:file] = file
125
+ # block_def[get_b_mod(filename)][:template] = template
94
126
  end
95
127
  end
96
128
  add_js(t)
@@ -112,24 +144,23 @@ module RailsBlocks
112
144
  block_def[:js] = true
113
145
  block_def[:js_ext] = ext[1..-1]
114
146
  end
115
- p t
116
147
  end
117
-
148
+
118
149
  def self.is_e_file(file)
119
150
  file.start_with? ELEMENT_FILE_PREFIX
120
151
  end
121
-
152
+
122
153
  def self.get_e_name(file)
123
154
  file.match(/\A__([^_]*)/)
124
155
  $1
125
156
  end
126
-
157
+
127
158
  def self.get_e_mod(file)
128
159
  return '' unless file.match(/__\w+#{MOD_FILE_PREFIX}\w/)
129
160
  file.match(/\A__(?:[^_]*)_(.*)/)
130
161
  $1
131
162
  end
132
-
163
+
133
164
  def self.get_b_mod(file)
134
165
  return '' unless file.start_with? MOD_FILE_PREFIX
135
166
  file.match(/^_(.*)/)
@@ -1,3 +1,3 @@
1
1
  module RailsBlocks
2
- VERSION = "0.9.0.beta.4".freeze
2
+ VERSION = "0.9.0.beta.5".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.4
4
+ version: 0.9.0.beta.5
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-08-17 00:00:00.000000000 Z
11
+ date: 2024-05-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -230,7 +230,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
230
230
  - !ruby/object:Gem::Version
231
231
  version: 1.3.1
232
232
  requirements: []
233
- rubygems_version: 3.4.15
233
+ rubygems_version: 3.4.20
234
234
  signing_key:
235
235
  specification_version: 4
236
236
  summary: Rails plugin for work with some modification of BEM methodology