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

Sign up to get free protection for your applications and to get access to all the features.
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