rails_blocks 0.5.6 → 0.6.4

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
  SHA1:
3
- metadata.gz: cad25c4a693e98e7ccc7f03ec1c60461355d2ba2
4
- data.tar.gz: 41a3c86b8f2205201cb5f3a9aacb4511995011ea
3
+ metadata.gz: a65055e52b9b72247afafaba66b23b0587b2d6fe
4
+ data.tar.gz: 5b998796ec4d8eb8e0fb8bf93065792517312446
5
5
  SHA512:
6
- metadata.gz: 71918f4d3f780141a77a107673dd9972971cfb62b735e90f09c822211fbf0af176646b102a412a16156deb5bbaf8b121961e06018acb724830ba964ce0eb7c16
7
- data.tar.gz: 44df018325de06dbe3564dfc388a046cd734cb4ba2d6ae11d2331e35fbc1dc48c149482307269b64006f873108ec198b0f39ed64b807405e059f5789f3205fe5
6
+ metadata.gz: ef4f8298d9330e4b357fe8482b4116dd90cff5d25fbfc1feade504becbf2198534243de744ce17658659ddb98a7869e29d9f943836fceb3d6b62c833fe0cd481
7
+ data.tar.gz: d730c6e442c72c40f60cab48cd354b14382dd308f709269af3dc3547c4a748b6812e91cbbc4d6f7720a96d5cd395db48b0e2be9880adda96f153caf82391c019
data/.gitignore CHANGED
@@ -7,9 +7,10 @@
7
7
  /pkg/
8
8
  /spec/reports/
9
9
  /tmp/
10
- /spec/internal/log/
10
+ /spec/internal/log/*.log
11
11
  *.bundle
12
12
  *.so
13
13
  *.o
14
14
  *.a
15
15
  mkmf.log
16
+ /.idea
data/.travis.yml CHANGED
@@ -12,3 +12,4 @@ deploy:
12
12
  branches:
13
13
  only:
14
14
  - master
15
+ - /\d+\.\d+\.\d+/
@@ -0,0 +1,106 @@
1
+ window.$$ =
2
+ decls: {}
3
+ cache: {}
4
+ bem_class: 'js-bem'
5
+ bem_class_selector: ".js-bem"
6
+ bemDataKey: 'bem'
7
+
8
+ processOptions: ($dom, b_name, o) ->
9
+ if o.attrs
10
+ for attr, attr_value of o.attrs
11
+ $dom.prop(attr, attr_value)
12
+ if o.content
13
+ $dom.html(o.content)
14
+ if o.mix
15
+ $dom.addClass($$.mixClass(o.mix))
16
+ if o.elements
17
+ for e_name, e_o of o.elements
18
+ $$.makeElement($dom, b_name, e_name, e_o)
19
+
20
+ makeElement: ($parent, b_name, e_name, o) ->
21
+ tag = o.tag || 'div'
22
+ $e = $("<#{tag} class='#{b_name}__#{e_name}'>")
23
+ $$.processOptions($e, b_name, o)
24
+ if o.prepend
25
+ $parent.prepend $e
26
+ else
27
+ $parent.append $e
28
+ $e
29
+
30
+ makeBlock: (b_name, o) ->
31
+ o ||= {}
32
+ tag = o.tag || 'div'
33
+ $b = $("<#{tag} class='#{b_name}'>")
34
+ $$.processOptions($b, b_name, o)
35
+ $b
36
+
37
+ init: ($context) ->
38
+ $blocks = $context.find($$.bem_class_selector)
39
+ $blocks = $blocks.add($context) if $context.hasClass $$.bem_class
40
+ $$.initBlocks($blocks)
41
+
42
+ initBlocks: ($context, options) ->
43
+ $context.each ->
44
+ $node = $(this)
45
+ allParams = $node.data($$.bemDataKey)
46
+ for own name, params of allParams
47
+ continue if name.indexOf('__') != -1
48
+ $$.getBlock($node, name, params)
49
+
50
+ getBlock: ($b, name, params)->
51
+ cacheKey = "#{name}_bid"
52
+ bid = $b.data(cacheKey)
53
+ if bid
54
+ return $$.cache[bid]
55
+ block = new $$.decls[$$.utils.camelCase(name)]($b, params, name)
56
+ bid = block.id
57
+ $b.data cacheKey, bid
58
+ $$.cache[bid] = block
59
+ block
60
+
61
+ makeMod: (name, value) ->
62
+ mod = name
63
+ mod += "_#{value}" if value
64
+ mod
65
+
66
+ mixClass: (mix) ->
67
+ return "#{mix.b}__#{mix.e}" if mix.e
68
+ mix.b
69
+
70
+ blockModClass: (name, mod, value) ->
71
+ "#{name}--#{$$.makeMod(mod, value)}"
72
+
73
+ elementModClass: (b_name, e_name, mod, value) ->
74
+ "#{$$.elementClass(b_name, e_name)}--#{$$.makeMod(mod, value)}"
75
+
76
+ elementClass: (b_name, e_name) ->
77
+ "#{b_name}__#{e_name}"
78
+
79
+ $.fn.destroyBlocks = ->
80
+ @find($$.bem_class_selector).getBlocks().each ->
81
+ @destroy()
82
+
83
+ $.fn.addMod = (name, value) ->
84
+ mod = $$.makeMod(name, value)
85
+ if @e_name
86
+ @addClass("#{@b_name}__#{@e_name}--#{mod}")
87
+ else
88
+ @addClass("#{@b_name}--#{mod}")
89
+
90
+ $.fn.delMod = (name, value) ->
91
+ mod = $$.makeMod(name, value)
92
+ if @e_name
93
+ @removeClass("#{@b_name}__#{@e_name}--#{mod}")
94
+ else
95
+ @removeClass("#{@b_name}--#{mod}")
96
+
97
+ $.fn.asBlock = (name, o) ->
98
+ @addClass("#{name}")
99
+ $$.getBlock(@, name, o)
100
+
101
+ $.fn.bemParams = () ->
102
+ allParams = @data($$.bemDataKey)
103
+ if @e_name
104
+ return allParams[$$.elementClass(@b_name, @e_name)]
105
+ else
106
+ console.log('Error, only for elements. Use initBlock for blocks.')
@@ -1,10 +1,10 @@
1
1
  class window.Block
2
- constructor: ($b, options) ->
2
+ constructor: ($b, params, name) ->
3
3
  @$node = $b
4
- @name = $$.getBlockName($b)
5
- @$node.b_name = @name
6
- @id = $$.guid()
7
- @params = $.extend({}, $b.data('bem'), options)
4
+ @name = name
5
+ console.log(@name)
6
+ @id = $$.utils.guid()
7
+ @params = params
8
8
  #$.extend this, decl.methods
9
9
  @_addEvents() if @events
10
10
  # if @elements
@@ -12,11 +12,11 @@ class window.Block
12
12
  # @_addEvents(element)
13
13
  @init() if @init
14
14
 
15
- elem: (e_name, mod_name, mod_value, context) ->
16
- klass = ".b-#{@name}__#{e_name}"
17
- $elem = $(klass, context || @$node)
15
+ elem: (e_name, mod_name, mod_value, context = @$node) ->
18
16
  if mod_name
19
- $elem = $elem.filter("#{klass}--#{$$.makeMod(mod_name, mod_value)}")
17
+ $elem = $(".#{$$.elementModClass(@name, e_name, mod_name, mod_value)}", context)
18
+ else
19
+ $elem = $(".#{@_elementClass(e_name)}", context)
20
20
 
21
21
  $elem.e_name = e_name
22
22
  $elem.b_name = @name
@@ -32,19 +32,27 @@ class window.Block
32
32
 
33
33
  _trigger: (event) ->
34
34
  @$node.trigger event
35
-
35
+
36
+ _elementClass: (e_name) ->
37
+ $$.elementClass(@name, e_name)
38
+
36
39
  addElem: (e_name, o, $parent) ->
37
40
  o ||= {}
38
41
  $elem = $$.makeElement($parent || @$node, @name, e_name, o)
39
42
  $elem.e_name = e_name
40
43
  $elem.b_name = @name
41
44
  $elem
45
+
46
+ asElem: ($elem, name) ->
47
+ $elem.e_name = name
48
+ $elem.b_name = @name
49
+ $elem
42
50
 
43
51
  addMod: (mod, value) ->
44
- @$node.addMod(mod, value)
52
+ @$node.addClass($$.blockModClass(@name, mod, value))
45
53
 
46
54
  delMod: (mod, value) ->
47
- @$node.delMod(mod, value)
55
+ @$node.removeClass($$.blockModClass(@name, mod, value))
48
56
 
49
57
  toggleMod: (mod, value) ->
50
58
  if @hasMod(mod, value)
@@ -53,46 +61,4 @@ class window.Block
53
61
  @$node.addMod(mod, value)
54
62
 
55
63
  hasMod: (mod, value) ->
56
- mod = $$.makeMod(mod, value)
57
- @$node.hasClass("b-#{@name}--#{mod}")
58
-
59
- # class window.Block
60
- # constructor: ($b) ->
61
- # name = $b.getBlockName()
62
- # params = $b.data('bem')
63
- # decl = RB.decls[name]
64
- # if !decl
65
- # throw new Error(name + ' block is not declared')
66
- # @name = name
67
- # @params = params
68
- # @$node = $b
69
- # @id = $$.guid()
70
- #
71
- # $.extend this, decl.methods
72
- # @_addEvents()
73
- # @_setInited()
74
- # @_trigger 'b-inited'
75
- # return
76
- #
77
- # _addEvents: ->
78
- # decl = $$.decls[@name]
79
- # events = decl.events
80
- # for e of events
81
- # if events.hasOwnProperty(e)
82
- # p = e.split(' ')
83
- # handler = events[e]
84
- # if typeof handler == 'string'
85
- # handler = decl.methods[handler]
86
- # @$node.on p[0], p[1], handler.bind(@)
87
- #
88
- # _setInited:->
89
- #
90
- # setMod: (mod, value) ->
91
- #
92
- # _trigger: (event) ->
93
- # @$node.trigger event
94
- #
95
- # destroy: ->
96
- # $$.cache[@id] = null
97
- # @$node.off()
98
- # @_trigger 'b-destroyed'
64
+ @$node.hasClass($$.blockModClass(@name, mod, value))
@@ -442,7 +442,7 @@
442
442
 
443
443
  $.BEM = new BEM(
444
444
  namePattern: '[a-zA-Z0-9-]+'
445
- blockPrefix: 'b-'
445
+ blockPrefix: ''
446
446
  elemPrefix: '__'
447
447
  modPrefix: '--'
448
448
  modDlmtr: '_')
@@ -1,5 +1,3 @@
1
- //require 'jquery_bem_copy'
2
- //=require 'jquery_bem'
3
- //=require 'block'
4
- //=require 'jblocks'
5
- //=require 'main'
1
+ //=require 'bem_blocks'
2
+ //=require 'utils'
3
+ //=require 'block'
@@ -0,0 +1,9 @@
1
+ window.$$.utils =
2
+ _id: 0
3
+ camelCase: (input) ->
4
+ input.toLowerCase().replace /(^|-)(.)/g, (match, $1, $2) ->
5
+ $2.toUpperCase()
6
+ dash: (input) ->
7
+ input.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase()
8
+ guid: () ->
9
+ return @_id++
@@ -1,9 +1,8 @@
1
- $bemBlockPrefix: 'b-'
2
- $bemElementSeparator: '__'
1
+ $bemElementSeparator: '__'
3
2
  $bemModifierSeparator: '--'
4
3
 
5
4
  @function b-class($block)
6
- @return ".#{$bemBlockPrefix+$block}"
5
+ @return ".#{$block}"
7
6
 
8
7
  @function selectorToString($selector)
9
8
  $selector: inspect($selector) //cast to string
@@ -40,7 +39,7 @@ $bemModifierSeparator: '--'
40
39
  @return str-slice($selector, 0, $start)
41
40
 
42
41
  =b($block)
43
- .#{$bemBlockPrefix+$block}
42
+ .#{$block}
44
43
  @content
45
44
 
46
45
  =plus_b
@@ -90,5 +89,4 @@ $bemModifierSeparator: '--'
90
89
  $selector: &
91
90
  $selector: selectorToString($selector)
92
91
  $block: if(containsModifier($selector) or containsPseudo($selector) or containsElement($selector), getBlock($selector), selectorToString($selector))
93
- $block: str-slice($block, str-length($bemBlockPrefix) + 1)
94
92
  @return image-url("#{$level}/#{$block}/images/#{$image}")
@@ -21,14 +21,11 @@ module BlockHelper
21
21
 
22
22
  #TODO бога ради, отрефактори это дерьмо
23
23
  def b(b_name, options = {}, &block)
24
- parent_block = context_block
25
- push_context_block b_name
26
24
  options = page_options.merge options
27
- options[:parent_block] = parent_block if parent_block
25
+ options[:parent_block] = context_block
26
+ push_context_block b_name
28
27
  template = block_template b_name, options
29
- classes = block_classes b_name, options
30
-
31
- result = element(classes, template, options, &block)
28
+ result = entity(template, :block, b_name, options, &block)
32
29
  pop_context_block
33
30
  result
34
31
  end
@@ -51,13 +48,12 @@ module BlockHelper
51
48
  end
52
49
 
53
50
  def e(e_name, options = {}, &block)
51
+ options = page_options.merge options
54
52
  parent_block = options[:b] || context_block
55
53
  raise RailsBlocks::NoBlockContextError unless parent_block
56
- options = page_options.merge options
57
54
  options[:parent_block] = parent_block
58
55
  template = element_template parent_block, e_name, options
59
- classes = element_classes(parent_block, e_name, options)
60
- element(classes, template, options, &block)
56
+ entity(template, :elem, e_name, options, &block)
61
57
  end
62
58
 
63
59
  def e_classes(e_name, options = {})
@@ -68,42 +64,93 @@ module BlockHelper
68
64
  element_classes(parent_block, e_name, options).join(' ')
69
65
  end
70
66
 
71
- def element(classes, template, options, &block)
67
+ def entity(template, type, name, options, &block)
72
68
  content = block ? capture(&block) : options[:content]
73
- @attrs = {class: classes.join(' ')}
74
- @attrs.merge! options[:attrs] if options[:attrs]
75
- @attrs["data-bem"] = options[:data].to_json if options[:data]
76
- @attrs[:tag] = options[:tag] || 'div'
77
-
69
+ #важно заполнять публичные поля только после того, как закапчюрится то, что внутри энтити, иначе они перезапишутся.
70
+ @attrs = nil
71
+ @current_options = options
72
+ @current_entity = {type: type, name: name}
73
+ Rails.logger.debug "------------------------------------------------#{@current_options}-------------------------------#{@current_entity}"
78
74
  template.nil? ? empty(content) : render(file: template, locals: {content: content, options: options})
79
75
  end
80
76
 
81
- #убрать после тестов производительности
82
- # def empty(content)
83
- # atrrs = @attrs.except(:tag).map do |key, value|
84
- # key.to_s + '=\'' + value.to_s + "'"
85
- # end
86
- # "<#{@attrs[:tag]} #{atrrs.join(' ')}>#{content}</#{@attrs[:tag]}>".html_safe
87
- # end
88
-
89
77
  def empty(content)
90
78
  content_tag bem_tag, content, bem_attrs_without_tag
91
79
  end
92
80
 
93
81
  def bem_tag
94
- @attrs[:tag]
82
+ bem_attrs[:tag]
95
83
  end
96
84
 
97
85
  def bem_attrs
86
+ if @attrs.nil?
87
+ @attrs = {class: current_entity_classes.join(' ')}
88
+ @attrs.merge! @current_options[:attrs] if @current_options[:attrs]
89
+ data = current_bem_data
90
+ @attrs['data-bem'] = data.to_json if data
91
+ @attrs[:tag] = @current_options[:tag] || 'div'
92
+ end
93
+
98
94
  @attrs
99
95
  end
100
96
 
101
97
  def bem_attrs_without_tag
102
- @attrs.except :tag
98
+ bem_attrs.except :tag
99
+ end
100
+
101
+
102
+
103
+ def set_tag(tag)
104
+ @current_options[:tag] = tag
105
+ end
106
+
107
+ def set_js(value)
108
+ @current_options[:js] = value
103
109
  end
104
110
 
105
111
  private
106
-
112
+ def current_bem_data
113
+ data = {}
114
+ data.merge! entity_data(current_entity_name, @current_options[:js]) if @current_options[:js]
115
+ data.merge! mix_data(@current_options[:mix]) if @current_options[:mix]
116
+
117
+ return nil if data == {}
118
+ data
119
+ end
120
+
121
+ def mix_data(mixes)
122
+ mixes = [mixes] unless mixes.is_a? Array
123
+ data = mixes.map do |mix|
124
+ next unless mix[:js]
125
+ if mix[:e]
126
+ if mix[:b]
127
+ entity_data(element_name(mix[:b], mix[:e]), mix[:js])
128
+ else
129
+ entity_data(element_name(context_block, mix[:e]), mix[:js])
130
+ end
131
+ else
132
+ raise RailsBlocks::BadMixError if mix[:b].nil?
133
+ entity_data(block_name(mix[:b]), mix[:js])
134
+ end
135
+ end.compact.inject(&:merge) || {}
136
+ end
137
+
138
+ def entity_data(name, data)
139
+ return {name => data} if data.is_a? Hash
140
+ return {name => {}} if data == true
141
+ {}
142
+ end
143
+
144
+ def current_entity_name
145
+ return block_name(@current_entity[:name]) if @current_entity[:type] == :block
146
+ element_name(@current_options[:parent_block], @current_entity[:name])
147
+ end
148
+
149
+ def current_entity_classes
150
+ return block_classes(@current_entity[:name], @current_options) if @current_entity[:type] == :block
151
+ element_classes(@current_options[:parent_block], @current_entity[:name], @current_options)
152
+ end
153
+
107
154
  def blocks_stack
108
155
  @blocks_stack = @blocks_stack || []
109
156
  end
@@ -21,7 +21,7 @@ module RailsBlocks
21
21
 
22
22
 
23
23
  def klass
24
- RailsBlocks.config.prefix + @name
24
+ @name
25
25
  end
26
26
  end
27
27
  end
@@ -1,6 +1,5 @@
1
1
  module RailsBlocks
2
2
  class Configuration
3
- attr_accessor :prefix
4
3
  attr_accessor :blocks_dir
5
4
  attr_accessor :levels
6
5
  attr_accessor :template_engine
@@ -15,13 +14,12 @@ module RailsBlocks
15
14
  end
16
15
 
17
16
  def initialize
18
- @prefix = 'b-'
19
17
  @blocks_dir = 'app/blocks'
20
18
  @levels = []
21
19
  @template_engine = '.slim'
22
20
  @element_separator = '__'
23
21
  @modifier_separator = '--'
24
- @js_class = 'js_bem'
22
+ @js_class = 'js-bem'
25
23
  end
26
24
  end
27
25
  end
@@ -2,22 +2,30 @@ module RailsBlocks
2
2
  module Names
3
3
  def element_classes(b_name, e_name, options = {})
4
4
  base_class = element_class b_name, e_name
5
- classes(base_class, options)
5
+ classes(base_class, false, options)
6
6
  end
7
7
 
8
8
  def block_classes(b_name, options = {})
9
9
  base_class = block_class b_name
10
- classes(base_class, options)
10
+ classes(base_class, true, options)
11
11
  end
12
-
12
+
13
+ def block_name(b_name)
14
+ b_name.to_s
15
+ end
16
+
17
+ def element_name(b_name, e_name)
18
+ b_name.to_s + RailsBlocks.config.element_separator + e_name.to_s
19
+ end
20
+
13
21
  private
14
- def classes(base_class, options = {})
22
+ def classes(base_class, add_js, options = {})
15
23
  classes = [base_class]
16
24
  classes |= mods_classes(base_class, options[:mods]) unless options[:mods].nil?
17
25
  classes |= mix_classes(options[:mix], options[:parent_block]) if options[:mix]
18
26
  classes |= Array(options[:class]) if options[:class]
19
- classes << RailsBlocks.config.js_class if options[:js]
20
- classes
27
+ classes << RailsBlocks.config.js_class if options[:js] && add_js
28
+ classes.uniq
21
29
  end
22
30
 
23
31
  def mix_classes(mixes, context_block = nil)
@@ -48,13 +56,13 @@ module RailsBlocks
48
56
  def mod_class(key, value)
49
57
  value == true ? key.to_s : key.to_s + '_' + value.to_s
50
58
  end
51
-
59
+
52
60
  def block_class(b_name)
53
- RailsBlocks.config.prefix + b_name.to_s
61
+ block_name(b_name)
54
62
  end
55
-
63
+
56
64
  def element_class(b_name, e_name)
57
- block_class(b_name) + RailsBlocks.config.element_separator + e_name.to_s
65
+ element_name(b_name, e_name)
58
66
  end
59
67
  end
60
68
  end
@@ -1,3 +1,3 @@
1
1
  module RailsBlocks
2
- VERSION = "0.5.6".freeze
2
+ VERSION = "0.6.4".freeze
3
3
  end
data/rails_blocks.gemspec CHANGED
@@ -28,11 +28,4 @@ Gem::Specification.new do |spec|
28
28
  spec.add_development_dependency 'rspec-rails', '~> 3.0'
29
29
  spec.add_development_dependency 'memfs'
30
30
  spec.add_development_dependency 'spring'
31
- spec.add_development_dependency 'guard'
32
- spec.add_development_dependency 'guard-rspec'
33
- spec.add_development_dependency 'pry'
34
- spec.add_development_dependency 'pry-remote'
35
- spec.add_development_dependency 'pry-nav'
36
- spec.add_development_dependency 'terminal-notifier'
37
- spec.add_development_dependency 'terminal-notifier-guard'
38
31
  end
@@ -6,24 +6,44 @@ describe BlockHelper, type: :helper do
6
6
  context ".b" do
7
7
  it "renders empty div with class when called without options" do
8
8
  result = b :test
9
- expect(result).to eq '<div class="b-test"></div>'
9
+ expect(result).to eq '<div class="test"></div>'
10
10
  end
11
11
 
12
12
  it "renders div with content when called with block" do
13
13
  result = b 'test-block' do
14
14
  'test-content'
15
15
  end
16
- expect(result).to eq '<div class="b-test-block">test-content</div>'
16
+ expect(result).to eq '<div class="test-block">test-content</div>'
17
17
  end
18
18
 
19
19
  it "renders empty div with mods class when called with mods" do
20
20
  result = b 'test-block', mods: {test: :one}
21
- expect(result).to eq '<div class="b-test-block b-test-block--test_one"></div>'
21
+ expect(result).to eq '<div class="test-block test-block--test_one"></div>'
22
22
  end
23
23
 
24
24
  it 'renders file when one exists' do
25
25
  result = b 'block1'
26
- expect(result).to eq '<div class="b-block1">block1</div>'
26
+ expect(result).to eq '<div class="block1">block1</div>'
27
+ end
28
+
29
+ it 'ads js-bem class and data-bem when js: true' do
30
+ result = b 'b1', js: true
31
+ expect(result).to eq '<div class="b1 js-bem" data-bem="{&quot;b1&quot;:{}}"></div>'
32
+ end
33
+
34
+ it 'ads js-bem class and mixed data-bem when js: true in mix' do
35
+ result = b 'b1', mix: {b: 'b2', js: true}
36
+ expect(result).to eq '<div class="b1 b2 js-bem" data-bem="{&quot;b2&quot;:{}}"></div>'
37
+ end
38
+
39
+ it 'ads js-bem class and full data-bem when js: true in mix' do
40
+ result = b 'b1', js: true, mix: {b: 'b2', js: true}
41
+ expect(result).to eq '<div class="b1 b2 js-bem" data-bem="{&quot;b1&quot;:{},&quot;b2&quot;:{}}"></div>'
42
+ end
43
+
44
+ it 'ads js-bem class and full custom data-bem when js: true in mix' do
45
+ result = b 'b1', js: {bb1: 'boo'}, mix: {b: 'b2', js: {bb2: 'boo2'}}
46
+ expect(result).to eq '<div class="b1 b2 js-bem" data-bem="{&quot;b1&quot;:{&quot;bb1&quot;:&quot;boo&quot;},&quot;b2&quot;:{&quot;bb2&quot;:&quot;boo2&quot;}}"></div>'
27
47
  end
28
48
  end
29
49
 
@@ -35,14 +55,14 @@ describe BlockHelper, type: :helper do
35
55
  it "renders empty element with class when called without options" do
36
56
  b 'test' do
37
57
  result = e :element
38
- expect(result).to eq '<div class="b-test__element"></div>'
58
+ expect(result).to eq '<div class="test__element"></div>'
39
59
  end
40
60
  end
41
61
 
42
62
  it "renders element with mods class when called with mods" do
43
63
  b 'test' do
44
64
  result = e 'element', mods: {test: :boo, test2: true}
45
- expect(result).to eq '<div class="b-test__element b-test__element--test_boo b-test__element--test2"></div>'
65
+ expect(result).to eq '<div class="test__element test__element--test_boo test__element--test2"></div>'
46
66
  end
47
67
  end
48
68
 
@@ -51,8 +71,27 @@ describe BlockHelper, type: :helper do
51
71
  result = e 'element' do
52
72
  "content"
53
73
  end
54
- expect(result).to eq '<div class="b-test__element">content</div>'
74
+ expect(result).to eq '<div class="test__element">content</div>'
75
+ end
76
+ end
77
+
78
+ it 'ads data-bem, but not js-bem class when js: true' do
79
+ b 'test' do
80
+ result = e 'e1', js: {test: 2}
81
+ expect(result).to eq '<div class="test__e1" data-bem="{&quot;test__e1&quot;:{&quot;test&quot;:2}}"></div>'
55
82
  end
56
83
  end
84
+
85
+ it 'ads js-bem class and mixed data-bem when js: true in mix with block' do
86
+ b 'test' do
87
+ result = e 'e1', mix: {b: 'b1', js: true}
88
+ expect(result).to eq '<div class="test__e1 b1 js-bem" data-bem="{&quot;b1&quot;:{}}"></div>'
89
+ end
90
+ end
91
+
92
+ it 'ads js-bem class and full data-bem when js: true in mix' do
93
+ result = b 'b1', js: true, mix: {b: 'b2', js: true}
94
+ expect(result).to eq '<div class="b1 b2 js-bem" data-bem="{&quot;b1&quot;:{},&quot;b2&quot;:{}}"></div>'
95
+ end
57
96
  end
58
97
  end
@@ -5,7 +5,7 @@ describe RailsBlocks::Blocks::Block do
5
5
  b_name = 'test-block'
6
6
  block = RailsBlocks.get_block b_name
7
7
  result = block.render
8
- klass = RailsBlocks.config.prefix + b_name
8
+ klass = b_name
9
9
  expect(result).to match(/<div.*\/div>/) & match(/class=\"#{klass}\"/)
10
10
  end
11
11
  end
@@ -1,18 +1,6 @@
1
1
  describe RailsBlocks::Configuration do
2
2
  subject { RailsBlocks::Configuration.new }
3
- describe "#prefix" do
4
- it "default value is 'b-'" do
5
- expect(subject.prefix).to eq 'b-'
6
- end
7
- end
8
3
 
9
- describe "#prefix=" do
10
- it "can set value" do
11
- subject.prefix = 't-'
12
- expect(subject.prefix).to eq 't-'
13
- end
14
- end
15
-
16
4
  describe "#ns" do
17
5
  it 'yield new Configuration' do
18
6
  subject.ns :admin do |config|
@@ -5,58 +5,58 @@ describe RailsBlocks::Names do
5
5
  context '.element_classes' do
6
6
  it 'returns simple element_classes without options' do
7
7
  classes = element_classes 'block', 'element'
8
- expect(classes).to contain_exactly 'b-block__element'
8
+ expect(classes).to contain_exactly 'block__element'
9
9
  end
10
10
 
11
11
  it 'returns element_class & mods with options[:mods]' do
12
12
  classes = element_classes 'block', 'element', mods: {test: :one}
13
- expect(classes).to contain_exactly 'b-block__element', 'b-block__element--test_one'
13
+ expect(classes).to contain_exactly 'block__element', 'block__element--test_one'
14
14
  end
15
15
  end
16
16
 
17
17
  context '.block_classes' do
18
18
  it 'returns simple block_class without options' do
19
19
  classes = block_classes 'block'
20
- expect(classes).to contain_exactly 'b-block'
20
+ expect(classes).to contain_exactly 'block'
21
21
  end
22
22
 
23
23
  it 'returns block_class & mods with options[:mods]' do
24
24
  classes = block_classes 'block', mods: {test: :one}
25
- expect(classes).to contain_exactly 'b-block', 'b-block--test_one'
25
+ expect(classes).to contain_exactly 'block', 'block--test_one'
26
26
  end
27
27
  end
28
28
 
29
29
  context '.mods_classes' do
30
30
  it 'returns mods classes' do
31
- classes = mods_classes 'b-base', {test: :one, boo: :two}
32
- expect(classes).to contain_exactly 'b-base--test_one', 'b-base--boo_two'
31
+ classes = mods_classes 'base', {test: :one, boo: :two}
32
+ expect(classes).to contain_exactly 'base--test_one', 'base--boo_two'
33
33
  end
34
34
  end
35
35
 
36
36
  context '.mix_classes' do
37
37
  it 'returns element class when one :b & :e exists' do
38
38
  classes = mix_classes b: :block, e: :element
39
- expect(classes).to contain_exactly 'b-block__element'
39
+ expect(classes).to contain_exactly 'block__element'
40
40
  end
41
41
 
42
42
  it 'returns element classes when array :b & :e exists' do
43
43
  classes = mix_classes [{b: :block, e: :element}, {b: 'block2', e: 'element2'}]
44
- expect(classes).to contain_exactly 'b-block__element', 'b-block2__element2'
44
+ expect(classes).to contain_exactly 'block__element', 'block2__element2'
45
45
  end
46
46
 
47
47
  it 'returns blocks classes when only :b exists' do
48
48
  classes = mix_classes b: :block
49
- expect(classes).to contain_exactly 'b-block'
49
+ expect(classes).to contain_exactly 'block'
50
50
  end
51
51
 
52
52
  it 'returns blocks classes when array of :b exists' do
53
53
  classes = mix_classes [{b: :block}, {b: :test}]
54
- expect(classes).to contain_exactly 'b-block', 'b-test'
54
+ expect(classes).to contain_exactly 'block', 'test'
55
55
  end
56
56
 
57
57
  it 'returns blocks classes & element classes when array of :b, :b & :e exists' do
58
58
  classes = mix_classes [{b: :block}, {b: :test, e: :boo}]
59
- expect(classes).to contain_exactly 'b-block', 'b-test__boo'
59
+ expect(classes).to contain_exactly 'block', 'test__boo'
60
60
  end
61
61
 
62
62
  it 'raise error if :b not exists' do
@@ -3,14 +3,7 @@ require 'rails'
3
3
 
4
4
  describe RailsBlocks do
5
5
  describe ".configure" do
6
- it "set prefix for block class" do
7
- RailsBlocks.configure do |config|
8
- config.prefix = 't-'
9
- end
10
6
 
11
- expect(RailsBlocks.config.prefix).to eq 't-'
12
- end
13
-
14
7
  it "set path for blocks folder" do
15
8
  RailsBlocks.configure do |config|
16
9
  config.blocks_dir = 'bem'
@@ -63,7 +56,6 @@ describe RailsBlocks do
63
56
  describe ".reset" do
64
57
  before :each do
65
58
  RailsBlocks.configure do |config|
66
- config.prefix = 'test-'
67
59
  config.blocks_dir = 'test_path'
68
60
  config.levels = ['common', 'test']
69
61
  config.template_engine = '.haml'
@@ -71,11 +63,6 @@ describe RailsBlocks do
71
63
  end
72
64
  end
73
65
 
74
- it "resets the configuration prefix" do
75
- RailsBlocks.reset
76
- expect(RailsBlocks.config.prefix).to eq('b-')
77
- end
78
-
79
66
  it "resets the configuration block_path" do
80
67
  RailsBlocks.reset
81
68
  expect(RailsBlocks.config.blocks_dir).to eq('app/blocks')
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.5.6
4
+ version: 0.6.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrey Potetiurin
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-04-26 00:00:00.000000000 Z
11
+ date: 2016-11-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -142,104 +142,6 @@ dependencies:
142
142
  - - ">="
143
143
  - !ruby/object:Gem::Version
144
144
  version: '0'
145
- - !ruby/object:Gem::Dependency
146
- name: guard
147
- requirement: !ruby/object:Gem::Requirement
148
- requirements:
149
- - - ">="
150
- - !ruby/object:Gem::Version
151
- version: '0'
152
- type: :development
153
- prerelease: false
154
- version_requirements: !ruby/object:Gem::Requirement
155
- requirements:
156
- - - ">="
157
- - !ruby/object:Gem::Version
158
- version: '0'
159
- - !ruby/object:Gem::Dependency
160
- name: guard-rspec
161
- requirement: !ruby/object:Gem::Requirement
162
- requirements:
163
- - - ">="
164
- - !ruby/object:Gem::Version
165
- version: '0'
166
- type: :development
167
- prerelease: false
168
- version_requirements: !ruby/object:Gem::Requirement
169
- requirements:
170
- - - ">="
171
- - !ruby/object:Gem::Version
172
- version: '0'
173
- - !ruby/object:Gem::Dependency
174
- name: pry
175
- requirement: !ruby/object:Gem::Requirement
176
- requirements:
177
- - - ">="
178
- - !ruby/object:Gem::Version
179
- version: '0'
180
- type: :development
181
- prerelease: false
182
- version_requirements: !ruby/object:Gem::Requirement
183
- requirements:
184
- - - ">="
185
- - !ruby/object:Gem::Version
186
- version: '0'
187
- - !ruby/object:Gem::Dependency
188
- name: pry-remote
189
- requirement: !ruby/object:Gem::Requirement
190
- requirements:
191
- - - ">="
192
- - !ruby/object:Gem::Version
193
- version: '0'
194
- type: :development
195
- prerelease: false
196
- version_requirements: !ruby/object:Gem::Requirement
197
- requirements:
198
- - - ">="
199
- - !ruby/object:Gem::Version
200
- version: '0'
201
- - !ruby/object:Gem::Dependency
202
- name: pry-nav
203
- requirement: !ruby/object:Gem::Requirement
204
- requirements:
205
- - - ">="
206
- - !ruby/object:Gem::Version
207
- version: '0'
208
- type: :development
209
- prerelease: false
210
- version_requirements: !ruby/object:Gem::Requirement
211
- requirements:
212
- - - ">="
213
- - !ruby/object:Gem::Version
214
- version: '0'
215
- - !ruby/object:Gem::Dependency
216
- name: terminal-notifier
217
- requirement: !ruby/object:Gem::Requirement
218
- requirements:
219
- - - ">="
220
- - !ruby/object:Gem::Version
221
- version: '0'
222
- type: :development
223
- prerelease: false
224
- version_requirements: !ruby/object:Gem::Requirement
225
- requirements:
226
- - - ">="
227
- - !ruby/object:Gem::Version
228
- version: '0'
229
- - !ruby/object:Gem::Dependency
230
- name: terminal-notifier-guard
231
- requirement: !ruby/object:Gem::Requirement
232
- requirements:
233
- - - ">="
234
- - !ruby/object:Gem::Version
235
- version: '0'
236
- type: :development
237
- prerelease: false
238
- version_requirements: !ruby/object:Gem::Requirement
239
- requirements:
240
- - - ">="
241
- - !ruby/object:Gem::Version
242
- version: '0'
243
145
  description: Gem helps build UI with blocks approach
244
146
  email:
245
147
  - potetiurin@gmail.com
@@ -255,12 +157,14 @@ files:
255
157
  - LICENSE.txt
256
158
  - README.md
257
159
  - Rakefile
160
+ - app/assets/javascripts/bem_blocks.coffee
258
161
  - app/assets/javascripts/block.coffee
259
162
  - app/assets/javascripts/jblocks.coffee
260
163
  - app/assets/javascripts/jquery_bem.coffee
261
164
  - app/assets/javascripts/jquery_bem_copy.coffee
262
165
  - app/assets/javascripts/main.coffee
263
166
  - app/assets/javascripts/rails_blocks.js
167
+ - app/assets/javascripts/utils.coffee
264
168
  - app/assets/stylesheets/rails_blocks.sass
265
169
  - app/helpers/block_helper.rb
266
170
  - app/views/rails_blocks/element.slim
@@ -303,7 +207,6 @@ files:
303
207
  - spec/internal/config/routes.rb
304
208
  - spec/internal/db/schema.rb
305
209
  - spec/internal/log/.gitignore
306
- - spec/internal/log/test.log
307
210
  - spec/internal/public/favicon.ico
308
211
  - spec/rails_blocks/blocks/block_spec.rb
309
212
  - spec/rails_blocks/configuration_spec.rb
@@ -331,7 +234,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
331
234
  version: '0'
332
235
  requirements: []
333
236
  rubyforge_project:
334
- rubygems_version: 2.4.8
237
+ rubygems_version: 2.4.5
335
238
  signing_key:
336
239
  specification_version: 4
337
240
  summary: Rails plugin for work with some modification of BEM methodology
@@ -358,7 +261,6 @@ test_files:
358
261
  - spec/internal/config/routes.rb
359
262
  - spec/internal/db/schema.rb
360
263
  - spec/internal/log/.gitignore
361
- - spec/internal/log/test.log
362
264
  - spec/internal/public/favicon.ico
363
265
  - spec/rails_blocks/blocks/block_spec.rb
364
266
  - spec/rails_blocks/configuration_spec.rb
@@ -1,8 +0,0 @@
1
- Rendered app/blocks/common/block1/block1.slim (0.6ms)
2
- Rendered app/blocks/common/block1/block1.slim (0.5ms)
3
- Rendered app/blocks/common/block1/block1.slim (16.8ms)
4
- Rendered app/blocks/common/block1/block1.slim (29.1ms)
5
- Rendered app/blocks/common/block1/block1.slim (14.3ms)
6
- Rendered app/blocks/common/block1/block1.slim (17.0ms)
7
- Rendered app/blocks/common/block1/block1.slim (16.0ms)
8
- Rendered app/blocks/common/block1/block1.slim (20.0ms)