bemer 0.5.0 → 0.6.0

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: 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