bemer 0.5.0 → 0.6.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 84098253bdd2d8a9d177fddcf79e6a98af7c76af3e7fab7c717e380a799d12e1
4
- data.tar.gz: 673f538a9fe0f1e34c649527cd1d8a3d08940601b18d16223308ebf9ef22dfcf
3
+ metadata.gz: 8c61ceea37aaaf31ca46dfc01af60ddade3b934962e5fdfbc87b8cb3be867b29
4
+ data.tar.gz: 1f56488269559e0ee07b52da4369b8a57fb33fced4204ff0ab5209e2e60a35c8
5
5
  SHA512:
6
- metadata.gz: 9a3fb72c68982a9d558192541b7de078d6ec98df923ddf048a2074742b62b553852d7f8486e1fd4786f690c6cf0ec392c33d15d82bbded151ccbec14168ed999
7
- data.tar.gz: 6a9d7821d738c7a4137438708b8c4b5c9c707aa726cf4619647f2a69fd2c76d33d5c66a82b21a9cf059520f1dcae733b799fc318b96f75216db3379e47e53977
6
+ metadata.gz: 5d18f1a45d3ea28fbdc17ab7f854fa99ca6b2468dff970855a942eba28674cc4fb09ff8b9403aaa8da76a8b24d99480579dcd0ae78be53dfdd0fba33cca6d914
7
+ data.tar.gz: 6d9c2c5effef10213f13638cb8b19c1a4bfa5fd88d3774e2be3c12f91d8bc757836fbb8c5f435d4e6a132db1896f8178c33ddaaae079dab211c34b99d4d54373
data/README.md CHANGED
@@ -12,9 +12,6 @@ Additional resources:
12
12
  1. [`bemer-bootstrap`](https://github.com/vill/bemer-bootstrap) - Reusable UI components of `Bootstrap`.
13
13
  1. [Ruby on Rails application](https://github.com/vill/bemer-example) using `bemer` and [`bemer-bootstrap`](https://github.com/vill/bemer-bootstrap).
14
14
 
15
- *Please refer to the [README.ru.md](README.ru.md) file for instructions in Russian.*
16
-
17
-
18
15
  ## Installation
19
16
 
20
17
  Add it to your Gemfile:
@@ -78,7 +75,7 @@ app/
78
75
  | | ├── common/
79
76
  | | | ├── carousel/
80
77
  | | | | ├── index.slim
81
- | | | | ├── index.bemhtml.slim
78
+ | | | | ├── bemhtml.slim
82
79
  | | | | ├── index.js
83
80
  | | | | ├── index.scss
84
81
  | | | | └── ...
@@ -165,7 +162,7 @@ app/
165
162
  | | ├── common/
166
163
  | | | ├── carousel/
167
164
  | | | | ├── index.slim
168
- | | | | ├── index.bemhtml.slim
165
+ | | | | ├── bemhtml.slim
169
166
  | | | | ├── index.js
170
167
  | | | | ├── index.scss
171
168
  | | | | └── ...
@@ -250,7 +247,7 @@ Tree structure of the [Carousel component from Bootstrap](https://getbootstrap.c
250
247
 
251
248
  [Default template](docs/%D0%A5%D0%B5%D0%BB%D0%BF%D0%B5%D1%80-define_templates.md):
252
249
  ```slim
253
- / app/frontend/components/common/carousel/index.bemhtml.slim
250
+ / app/frontend/components/common/carousel/bemhtml.slim
254
251
 
255
252
  = define_templates do |template|
256
253
  = template.elem(mods: :active).add_cls :active
@@ -178,7 +178,7 @@ HTML тег изменить на `small` если текущая сущност
178
178
  Позволяет вызвать любой основной режим (`Symbol`) в контексте текущего узла, дополнительно можно передать параметры которые будут доступны в `params`.
179
179
 
180
180
  ```slim
181
- / Содержимое файла index.bemhtml.slim компонента alert
181
+ / Содержимое файла bemhtml.slim компонента alert
182
182
  = define_templates do |template|
183
183
  = template.block(:alert).add_cls ->(node) { "alert-#{node.params.fetch(:type, :info)}" }
184
184
  ```
@@ -195,7 +195,7 @@ HTML тег изменить на `small` если текущая сущност
195
195
  Позволяет вызвать следующий по очередности шаблон для текущего режима, дополнительно можно передать параметры которые будут доступны в `params`.
196
196
 
197
197
  ```slim
198
- / Содержимое файла index.bemhtml.slim компонента alert
198
+ / Содержимое файла bemhtml.slim компонента alert
199
199
  = define_templates do |template|
200
200
  = template.block(:alert).add_cls ->(node) { "alert-#{node.params.fetch(:type, :info)}" }
201
201
  ```
@@ -20,7 +20,7 @@ app/
20
20
  | ├── common/
21
21
  | | ├── alert/
22
22
  | | | ├── index.html.slim
23
- | | | ├── index.bemhtml.slim
23
+ | | | ├── bemhtml.slim
24
24
  | | | ├── index.js
25
25
  | | | └── index.css
26
26
  | | └── ...
@@ -63,7 +63,7 @@ app/
63
63
  ```
64
64
  Возможный вариант шаблонов по умолчанию для компонента `alert`:
65
65
  ```slim
66
- / Содержимое файла index.bemhtml.slim компонента alert
66
+ / Содержимое файла bemhtml.slim компонента alert
67
67
  = define_templates do |template|
68
68
  = template.block(:alert).add_cls :alert_info
69
69
  ```
@@ -12,7 +12,7 @@ app/
12
12
  | | └── ...
13
13
  | ├── top_navbar/
14
14
  | | ├── index.html.slim
15
- | | ├── index.bemhtml.slim
15
+ | | ├── bemhtml.slim
16
16
  | | ├── index.js
17
17
  | | ├── index.scss
18
18
  | | └── ...
@@ -26,7 +26,7 @@ app/
26
26
 
27
27
  1. Каталог **обязательно** должен содержать индексный файл для технологии HTML (это может быть: `index.html`, `index.html.slim`, `index.html.erb` и т.д.), который [описывает структуру компонента](Создание-и-использование-UI-компонент.md), используя для этого любой шаблонизатор (`ERB`, `Slim`, `HAML` и др.) или только HTML код.
28
28
 
29
- 1. Если индексный файл технологии HTML для создания структуры (дерева) компонента [использует хелпер `define_component`](Хелпер-define_component.md), тогда каталог может содержать индексный файл для [шаблонов по умолчанию](Хелпер-define_templates.md) (технология `bemhtml`), он должен называться `index.bemhtml` с обязательным указанием шаблонизатора например: `index.bemhtml.erb`, `index.bemhtml.slim` и т.д.
29
+ 1. Если индексный файл технологии HTML для создания структуры (дерева) компонента [использует хелпер `define_component`](Хелпер-define_component.md), тогда каталог может содержать индексный файл для [шаблонов по умолчанию](Хелпер-define_templates.md) (технология `bemhtml`), он должен называться `bemhtml` с обязательным указанием шаблонизатора например: `bemhtml.erb`, `bemhtml.slim` и т.д.
30
30
 
31
31
  1. Все остальные технологии (`js`, `css`, `md` и т.д.) считаются дополнительными и их можно добавлять по мере необходимости, имена файлов могут быть любыми но для единообразия и удобства лучше использовать `index` в качестве имени:
32
32
 
@@ -67,13 +67,13 @@ app/
67
67
  | ├── common/
68
68
  | | ├── modal/
69
69
  | | | ├── index.html.slim
70
- | | | ├── index.bemhtml.slim
70
+ | | | ├── bemhtml.slim
71
71
  | | | ├── index.js
72
72
  | | | ├── index.scss
73
73
  | | | └── ...
74
74
  | | ├── top_navbar/
75
75
  | | | ├── index.html.slim
76
- | | | ├── index.bemhtml.slim
76
+ | | | ├── bemhtml.slim
77
77
  | | | ├── index.js
78
78
  | | | ├── index.scss
79
79
  | | | └── ...
@@ -81,7 +81,7 @@ app/
81
81
  | ├── admin/
82
82
  | | ├── top_navbar/
83
83
  | | | ├── index.html.slim
84
- | | | ├── index.bemhtml.slim
84
+ | | | ├── bemhtml.slim
85
85
  | | | ├── index.js
86
86
  | | | ├── index.scss
87
87
  | | | └── ...
@@ -89,7 +89,7 @@ app/
89
89
  | ├── user/
90
90
  | | ├── top_navbar/
91
91
  | | | ├── index.html.slim
92
- | | | ├── index.bemhtml.slim
92
+ | | | ├── bemhtml.slim
93
93
  | | | ├── index.js
94
94
  | | | ├── index.scss
95
95
  | | | └── ...
@@ -108,13 +108,13 @@ app/
108
108
  | ├── common/
109
109
  | | ├── modal/
110
110
  | | | ├── index.html.slim
111
- | | | ├── index.bemhtml.slim
111
+ | | | ├── bemhtml.slim
112
112
  | | | ├── index.js
113
113
  | | | ├── index.scss
114
114
  | | | └── ...
115
115
  | | ├── top_navbar/
116
116
  | | | ├── index.html.slim
117
- | | | ├── index.bemhtml.slim
117
+ | | | ├── bemhtml.slim
118
118
  | | | ├── index.js
119
119
  | | | ├── index.scss
120
120
  | | | └── ...
@@ -122,7 +122,7 @@ app/
122
122
  | ├── desktop/
123
123
  | | ├── top_navbar/
124
124
  | | | ├── index.html.slim
125
- | | | ├── index.bemhtml.slim
125
+ | | | ├── bemhtml.slim
126
126
  | | | ├── index.js
127
127
  | | | ├── index.scss
128
128
  | | | └── ...
@@ -130,7 +130,7 @@ app/
130
130
  | ├── touch_pad/
131
131
  | | ├── top_navbar/
132
132
  | | | ├── index.html.slim
133
- | | | ├── index.bemhtml.slim
133
+ | | | ├── bemhtml.slim
134
134
  | | | ├── index.js
135
135
  | | | ├── index.scss
136
136
  | | | └── ...
@@ -150,7 +150,7 @@ app/
150
150
  | | ├── index.html.slim
151
151
  | | ├── index.html+phone.slim
152
152
  | | ├── index.html+tablet.slim
153
- | | ├── index.bemhtml.slim
153
+ | | ├── bemhtml.slim
154
154
  | | ├── index.js
155
155
  | | ├── index.scss
156
156
  | | └── ...
@@ -158,7 +158,7 @@ app/
158
158
  | | ├── index.html.slim
159
159
  | | ├── index.html+phone.slim
160
160
  | | ├── index.html+tablet.slim
161
- | | ├── index.bemhtml.slim
161
+ | | ├── bemhtml.slim
162
162
  | | ├── index.js
163
163
  | | ├── index.scss
164
164
  | | └── ...
@@ -17,7 +17,7 @@ app/
17
17
  ├── bemer_components/
18
18
  | ├── panel/
19
19
  | | ├── index.html.slim
20
- | | ├── index.bemhtml.slim
20
+ | | ├── bemhtml.slim
21
21
  | | ├── index.js
22
22
  | | └── index.css
23
23
  | └── ...
@@ -71,11 +71,11 @@ app/
71
71
  / <div class="panel-footer">Panel footer</div>
72
72
  / </div>
73
73
  ```
74
- С помощью файла `index.bemhtml.slim` можно задать дефолтные шаблоны для компонента, которые можно будет переопределить при вызове `render_component` или `refine_component`.
74
+ С помощью файла `bemhtml.slim` можно задать дефолтные шаблоны для компонента, которые можно будет переопределить при вызове `render_component` или `refine_component`.
75
75
 
76
76
  Возможный вариант шаблонов по умолчанию для компонента `panel`:
77
77
  ```slim
78
- / Содержимое файла index.bemhtml.slim компонента panel
78
+ / Содержимое файла bemhtml.slim компонента panel
79
79
  = define_templates do |template|
80
80
  = template.block(:panel).add_cls :panel_default
81
81
  ```
@@ -15,7 +15,7 @@
15
15
 
16
16
  ## Примеры шаблонов
17
17
 
18
- ### Шаблоны по умолчанию для компонента из файла `index.bemhtml.slim`
18
+ ### Шаблоны по умолчанию для компонента из файла `bemhtml.slim`
19
19
 
20
20
  ```slim
21
21
  = define_templates do |template|
@@ -44,7 +44,7 @@ module Bemer
44
44
  block = @block.eql?('*') ? block : @block
45
45
  elem = @element.nil? || @element.eql?('*') ? elem : @element
46
46
  params = { **new_options, **options, condition: condition, block: block, elem: elem }
47
- builder = Builders::Template.new(templates, params)
47
+ builder = Builders::Template.new(templates, **params)
48
48
 
49
49
  block_given? ? yield(builder) : builder
50
50
  end
@@ -10,7 +10,7 @@ module Bemer
10
10
  def block(name = '*', condition = true, **options)
11
11
  params = { **options, condition: condition, block: name, elem: nil }
12
12
 
13
- builder = Builders::Template.new(templates, params)
13
+ builder = Builders::Template.new(templates, **params)
14
14
 
15
15
  block_given? ? yield(builder) : builder
16
16
  end
@@ -18,7 +18,7 @@ module Bemer
18
18
  def elem(name = '*', condition = true, block: '*', **options)
19
19
  params = { **options, condition: condition, block: block || '*', elem: name }
20
20
 
21
- builder = Builders::Template.new(templates, params)
21
+ builder = Builders::Template.new(templates, **params)
22
22
 
23
23
  block_given? ? yield(builder) : builder
24
24
  end
@@ -10,7 +10,7 @@ module Bemer
10
10
  end
11
11
 
12
12
  def elem(name = '', **options, &content)
13
- tree.add_node(block, name, options, &content)
13
+ tree.add_node(block, name, **options, &content)
14
14
  end
15
15
 
16
16
  protected
@@ -8,11 +8,11 @@ module Bemer
8
8
  end
9
9
 
10
10
  def block(name = '', **options, &content)
11
- tree.add_node(name, options, &content)
11
+ tree.add_node(name, **options, &content)
12
12
  end
13
13
 
14
14
  def elem(block = '', name = '', **options, &content)
15
- tree.add_node(block, name, options, &content)
15
+ tree.add_node(block, name, **options, &content)
16
16
  end
17
17
 
18
18
  def text(content = nil, &callback)
@@ -9,7 +9,7 @@ module Bemer
9
9
  def render(**options, &block)
10
10
  return if !block_given? || template_catalog.nil?
11
11
 
12
- Tree.new(template_catalog, options).render(&block)
12
+ Tree.new(template_catalog, **options).render(&block)
13
13
  end
14
14
 
15
15
  protected
@@ -4,11 +4,11 @@ module Bemer
4
4
  module ContextExtentions
5
5
  module Template
6
6
  def apply_next(**options)
7
- node.apply_next(template, options)
7
+ node.apply_next(template, **options)
8
8
  end
9
9
 
10
10
  def apply(mode, **options)
11
- node.apply(mode, template, options)
11
+ node.apply(mode, template, **options)
12
12
  end
13
13
  end
14
14
  end
data/lib/bemer/helpers.rb CHANGED
@@ -3,11 +3,11 @@
3
3
  module Bemer
4
4
  module Helpers
5
5
  def block_tag(name = '', **options, &content)
6
- Bemer::Tag.new(name, options, &content).render
6
+ Bemer::Tag.new(name, **options, &content).render
7
7
  end
8
8
 
9
9
  def elem_tag(block = '', element = '', **options, &content)
10
- Bemer::Tag.new(block, element, options, &content).render
10
+ Bemer::Tag.new(block, element, **options, &content).render
11
11
  end
12
12
 
13
13
  # Использовать mix
@@ -30,7 +30,7 @@ module Bemer
30
30
  end
31
31
 
32
32
  def render_component(path, **options, &block)
33
- Bemer::TemplateList.new(self, path, options).compile(&block)
33
+ Bemer::TemplateList.new(self, path, **options).compile(&block)
34
34
  end
35
35
 
36
36
  alias refine_component render_component
@@ -40,7 +40,7 @@ module Bemer
40
40
  end
41
41
 
42
42
  def define_component(**options, &block)
43
- Bemer::Component.new(self).render(options, &block)
43
+ Bemer::Component.new(self).render(**options, &block)
44
44
  end
45
45
 
46
46
  def component_pack(&block)
@@ -58,7 +58,7 @@ module Bemer
58
58
  def bem_attrs_for(block = '', element = nil, **options)
59
59
  js = options[:js].nil? ? true : options.delete(:js)
60
60
 
61
- Bemer::EntityBuilder.new(block, element, options.merge(bem: true, js: js)).attrs
61
+ Bemer::EntityBuilder.new(block, element, **options.merge(bem: true, js: js)).attrs
62
62
  end
63
63
  end
64
64
  end
@@ -6,14 +6,18 @@ module Bemer
6
6
  @view = view
7
7
  end
8
8
 
9
- def resolve(name, partial = false)
10
- virtual_path = view.instance_variable_get(:@virtual_path)
11
- directory = [File.dirname(virtual_path)]
12
- file_name = name.to_s
9
+ def resolve(name, partial = false) # rubocop:disable Metrics/AbcSize
10
+ name = name.to_s
11
+ virtual_dir = File.dirname(view.instance_variable_get(:@virtual_path))
12
+ dirs = [virtual_dir, File.dirname(name).delete('.')].reject(&:blank?)
13
+ prefixes = [File.join(*dirs).to_s]
14
+ format = File.extname(name).delete('.') unless partial
15
+ basename = File.basename(name, '.*')
16
+ options = { formats: [format.to_sym] } if format
13
17
 
14
- return file_name unless view.lookup_context.exists?(file_name, directory, partial)
18
+ return name unless view.lookup_context.exists?(basename, prefixes, partial, **options.to_h)
15
19
 
16
- File.join(directory, file_name).to_s
20
+ File.join(virtual_dir, name).to_s
17
21
  end
18
22
 
19
23
  protected
@@ -21,16 +21,16 @@ module Bemer
21
21
  def apply_next(current_template, node, **params)
22
22
  position = priorities[current_template.mode][current_template.object_id] + 1
23
23
 
24
- apply_template(current_template.mode, node, position, params)
24
+ apply_template(current_template.mode, node, position, **params)
25
25
  end
26
26
 
27
27
  def apply(mode, current_template, node, **params)
28
28
  return unless allowable_mode?(mode) && compatible_modes?(mode, current_template.mode)
29
29
 
30
30
  if current_template.mode.eql?(mode)
31
- apply_next(current_template, node, params)
31
+ apply_next(current_template, node, **params)
32
32
  else
33
- apply_template(mode, node, params)
33
+ apply_template(mode, node, **params)
34
34
  end
35
35
  end
36
36
 
@@ -48,11 +48,11 @@ module Bemer
48
48
  end
49
49
 
50
50
  def apply_next(template, node, **params)
51
- handler_by(node.name).apply_next(template, node, params)
51
+ handler_by(node.name).apply_next(template, node, **params)
52
52
  end
53
53
 
54
54
  def apply(mode, template, node, **params)
55
- handler_by(node.name).apply(mode, template, node, params)
55
+ handler_by(node.name).apply(mode, template, node, **params)
56
56
  end
57
57
 
58
58
  protected
data/lib/bemer/tag.rb CHANGED
@@ -8,7 +8,7 @@ module Bemer
8
8
 
9
9
  def initialize(block = '', element = nil, **options, &content)
10
10
  @bem_cascade = options[:bem_cascade]
11
- @tag_builder = TagBuilder.new(block, element, options, &content)
11
+ @tag_builder = TagBuilder.new(block, element, **options, &content)
12
12
  @renderer = Renderer.new
13
13
  end
14
14
 
@@ -26,7 +26,7 @@ module Bemer
26
26
  attr_reader :options, :path
27
27
 
28
28
  def add_default_templates
29
- default_template = template('index.bemhtml')
29
+ default_template = template(:bemhtml)
30
30
 
31
31
  return unless view.lookup_context.exists?(default_template)
32
32
 
@@ -13,8 +13,8 @@ module Bemer
13
13
  :content, :elem, :elem?, :element?, :js, :mix, :mods, :name, :tag
14
14
 
15
15
  def initialize(tree, block = '', element = nil, **options, &content)
16
- @entity = Entity.new(block, element, options, &content)
17
- @entity_builder = EntityBuilder.new(block, element, options, &content)
16
+ @entity = Entity.new(block, element, **options, &content)
17
+ @entity_builder = EntityBuilder.new(block, element, **options, &content)
18
18
  @renderer = Renderer.new
19
19
  @tree = tree
20
20
  end
@@ -12,7 +12,7 @@ module Bemer
12
12
  alias need_replace? need_replace
13
13
 
14
14
  def initialize(tree, block = '', element = nil, **options, &content)
15
- super(tree, block, element, options, &content)
15
+ super(tree, block, element, **options, &content)
16
16
 
17
17
  @applied_modes = Pipeline::MODES.map { |mode| [mode, false] }.to_h
18
18
  @children = []
@@ -62,11 +62,11 @@ module Bemer
62
62
  end
63
63
 
64
64
  def apply_next(template, **params)
65
- tree.pipeline.apply_next(template, self, params)
65
+ tree.pipeline.apply_next(template, self, **params)
66
66
  end
67
67
 
68
68
  def apply(mode, template, **params)
69
- tree.pipeline.apply(mode, template, self, params)
69
+ tree.pipeline.apply(mode, template, self, **params)
70
70
  end
71
71
 
72
72
  protected
data/lib/bemer/tree.rb CHANGED
@@ -66,7 +66,7 @@ module Bemer
66
66
  bem_cascade = inherited_bem_cascade if bem_cascade.nil?
67
67
  new_options = { **params, bem_cascade: bem_cascade, **options }
68
68
 
69
- add Node.new(self, block, element, new_options, &content)
69
+ add Node.new(self, block, element, **new_options, &content)
70
70
  end
71
71
 
72
72
  def add_text_node(content = nil, &callback)
data/lib/bemer/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Bemer
4
- VERSION = '0.5.0'.freeze
4
+ VERSION = '0.6.0'.freeze
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bemer
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.0
4
+ version: 0.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alexander Grigorev
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-03-14 00:00:00.000000000 Z
11
+ date: 2023-05-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: railties
@@ -160,7 +160,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
160
160
  - !ruby/object:Gem::Version
161
161
  version: 2.2.0
162
162
  requirements: []
163
- rubygems_version: 3.4.3
163
+ rubygems_version: 3.4.12
164
164
  signing_key:
165
165
  specification_version: 4
166
166
  summary: Build reusable UI components for Rails applications with the ability to use