rails_blocks 0.5.4.pre.alpha.pre.2
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 +15 -0
- data/.gitignore +15 -0
- data/.rspec +2 -0
- data/.travis.yml +10 -0
- data/Gemfile +10 -0
- data/Guardfile +43 -0
- data/LICENSE.txt +22 -0
- data/README.md +31 -0
- data/Rakefile +12 -0
- data/app/assets/javascripts/block.coffee +98 -0
- data/app/assets/javascripts/jblocks.coffee +95 -0
- data/app/assets/javascripts/jquery_bem.coffee +4 -0
- data/app/assets/javascripts/jquery_bem_copy.coffee +486 -0
- data/app/assets/javascripts/main.coffee +10 -0
- data/app/assets/javascripts/rails_blocks.js +5 -0
- data/app/assets/stylesheets/rails_blocks.sass +94 -0
- data/app/helpers/block_helper.rb +122 -0
- data/app/views/rails_blocks/element.slim +2 -0
- data/coffeelint.json +12 -0
- data/config/spring.rb +1 -0
- data/config.ru +7 -0
- data/lib/rails_blocks/blocks/block.rb +28 -0
- data/lib/rails_blocks/blocks/element.rb +6 -0
- data/lib/rails_blocks/blocks/renderer.rb +13 -0
- data/lib/rails_blocks/configuration.rb +27 -0
- data/lib/rails_blocks/engine.rb +29 -0
- data/lib/rails_blocks/exceptions.rb +4 -0
- data/lib/rails_blocks/initializers/rails_blocks.rb +0 -0
- data/lib/rails_blocks/levels.rb +7 -0
- data/lib/rails_blocks/names.rb +60 -0
- data/lib/rails_blocks/path.rb +108 -0
- data/lib/rails_blocks/version.rb +3 -0
- data/lib/rails_blocks.rb +24 -0
- data/lib/tasks/rails_blocks.rake +8 -0
- data/rails_blocks.gemspec +39 -0
- data/spec/helpers/block_helper_spec.rb +58 -0
- data/spec/internal/app/blocks/app/block3/_mod1.slim +0 -0
- data/spec/internal/app/blocks/app/block3/_mod2_value2.slim +0 -0
- data/spec/internal/app/blocks/app/block3/block3.slim +0 -0
- data/spec/internal/app/blocks/common/block1/_mod1.slim +0 -0
- data/spec/internal/app/blocks/common/block1/_mod2_value2.slim +0 -0
- data/spec/internal/app/blocks/common/block1/block1.slim +2 -0
- data/spec/internal/app/blocks/common/block2/__elem1.slim +0 -0
- data/spec/internal/app/blocks/common/block2/__elem1_mod1.slim +0 -0
- data/spec/internal/app/blocks/common/block2/__elem1_mod2_val2.slim +0 -0
- data/spec/internal/app/blocks/common/block2/block2.slim +0 -0
- data/spec/internal/app/blocks/common/block3/_mod1.slim +0 -0
- data/spec/internal/app/blocks/common/block3/_mod2_value2.slim +0 -0
- data/spec/internal/app/blocks/common/block3/block3.slim +0 -0
- data/spec/internal/app/controllers/admin/admin_test_controller.rb +2 -0
- data/spec/internal/app/controllers/admin_controller.rb +2 -0
- data/spec/internal/app/controllers/application_controller.rb +2 -0
- data/spec/internal/config/database.yml +3 -0
- data/spec/internal/config/initializers/rails_blocks.rb +7 -0
- data/spec/internal/config/routes.rb +3 -0
- data/spec/internal/db/schema.rb +3 -0
- data/spec/internal/log/.gitignore +1 -0
- data/spec/internal/log/test.log +8 -0
- data/spec/internal/public/favicon.ico +0 -0
- data/spec/rails_blocks/blocks/block_spec.rb +11 -0
- data/spec/rails_blocks/configuration_spec.rb +29 -0
- data/spec/rails_blocks/names_spec.rb +66 -0
- data/spec/rails_blocks/path_spec.rb +70 -0
- data/spec/rails_blocks_spec.rb +104 -0
- data/spec/spec_helper.rb +112 -0
- metadata +368 -0
data/coffeelint.json
ADDED
data/config/spring.rb
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
Spring.application_root = './spec/dummy'
|
data/config.ru
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
require 'rails_blocks/blocks/renderer'
|
2
|
+
module RailsBlocks
|
3
|
+
module Blocks
|
4
|
+
class Block
|
5
|
+
include Blocks::Renderer
|
6
|
+
attr_accessor :name
|
7
|
+
attr_accessor :options
|
8
|
+
attr_accessor :content
|
9
|
+
|
10
|
+
def initialize(name)
|
11
|
+
@name = name
|
12
|
+
end
|
13
|
+
|
14
|
+
def render
|
15
|
+
".#{klass}\n\t#{render_content}"
|
16
|
+
end
|
17
|
+
|
18
|
+
def render_content
|
19
|
+
instance_eval &content
|
20
|
+
end
|
21
|
+
|
22
|
+
|
23
|
+
def klass
|
24
|
+
RailsBlocks.config.prefix + @name
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
module RailsBlocks
|
2
|
+
class Configuration
|
3
|
+
attr_accessor :prefix
|
4
|
+
attr_accessor :blocks_dir
|
5
|
+
attr_accessor :levels
|
6
|
+
attr_accessor :template_engine
|
7
|
+
attr_accessor :element_separator
|
8
|
+
attr_accessor :modifier_separator
|
9
|
+
attr_accessor :js_class
|
10
|
+
|
11
|
+
def ns(name)
|
12
|
+
@ns ||= {}
|
13
|
+
ns_config = @ns[name] ||= Configuration.new
|
14
|
+
yield ns_config
|
15
|
+
end
|
16
|
+
|
17
|
+
def initialize
|
18
|
+
@prefix = 'b-'
|
19
|
+
@blocks_dir = 'app/blocks'
|
20
|
+
@levels = []
|
21
|
+
@template_engine = '.slim'
|
22
|
+
@element_separator = '__'
|
23
|
+
@modifier_separator = '--'
|
24
|
+
@js_class = 'js_bem'
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
require 'rails_blocks/levels'
|
2
|
+
module RailsBlocks
|
3
|
+
class Engine < Rails::Engine
|
4
|
+
#isolate_namespace RailsBlocks
|
5
|
+
config.autoload_paths << File.expand_path("../rails_blocks", __FILE__)
|
6
|
+
|
7
|
+
initializer 'rails_blocks.configure_rails_initialization' do
|
8
|
+
require 'rails_blocks/initializers/rails_blocks'
|
9
|
+
end
|
10
|
+
|
11
|
+
initializer 'rails_blocks.precompile', :group => :all do |app|
|
12
|
+
app.config.assets.precompile += %w( rails_blocks.js )
|
13
|
+
end
|
14
|
+
|
15
|
+
config.to_prepare do
|
16
|
+
ActionView::Base.send :include, BlockHelper
|
17
|
+
#ApplicationController.helper(BlockHelper)
|
18
|
+
end
|
19
|
+
|
20
|
+
ActiveSupport.on_load :action_controller do
|
21
|
+
include RailsBlocks::Levels
|
22
|
+
before_filter :add_view_paths
|
23
|
+
end
|
24
|
+
|
25
|
+
rake_tasks do
|
26
|
+
load "tasks/rails_blocks.rake"
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
File without changes
|
@@ -0,0 +1,60 @@
|
|
1
|
+
module RailsBlocks
|
2
|
+
module Names
|
3
|
+
def element_classes(b_name, e_name, options = {})
|
4
|
+
base_class = element_class b_name, e_name
|
5
|
+
classes(base_class, options)
|
6
|
+
end
|
7
|
+
|
8
|
+
def block_classes(b_name, options = {})
|
9
|
+
base_class = block_class b_name
|
10
|
+
classes(base_class, options)
|
11
|
+
end
|
12
|
+
|
13
|
+
private
|
14
|
+
def classes(base_class, options = {})
|
15
|
+
classes = [base_class]
|
16
|
+
classes |= mods_classes(base_class, options[:mods]) unless options[:mods].nil?
|
17
|
+
classes |= mix_classes(options[:mix], options[:parent_block]) if options[:mix]
|
18
|
+
classes |= Array(options[:class]) if options[:class]
|
19
|
+
classes << RailsBlocks.config.js_class if options[:js]
|
20
|
+
classes
|
21
|
+
end
|
22
|
+
|
23
|
+
def mix_classes(mixes, context_block = nil)
|
24
|
+
mixes = [mixes] unless mixes.is_a? Array
|
25
|
+
mixes.map do |mix|
|
26
|
+
if mix[:e]
|
27
|
+
raise RailsBlocks::BadMixError if context_block.nil? && !mix[:b]
|
28
|
+
if mix[:b]
|
29
|
+
element_classes(mix[:b].to_s, mix[:e].to_s, mix)
|
30
|
+
else
|
31
|
+
element_classes(context_block, mix[:e].to_s, mix)
|
32
|
+
end
|
33
|
+
else
|
34
|
+
raise RailsBlocks::BadMixError if mix[:b].nil?
|
35
|
+
block_classes(mix[:b].to_s, mix)
|
36
|
+
end
|
37
|
+
end.inject(&:|)
|
38
|
+
end
|
39
|
+
|
40
|
+
def mods_classes(base_class, mods)
|
41
|
+
mods.map do |key, value|
|
42
|
+
next('') unless value
|
43
|
+
mod = mod_class(key, value)
|
44
|
+
base_class + RailsBlocks.config.modifier_separator + mod
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
def mod_class(key, value)
|
49
|
+
value == true ? key.to_s : key.to_s + '_' + value.to_s
|
50
|
+
end
|
51
|
+
|
52
|
+
def block_class(b_name)
|
53
|
+
RailsBlocks.config.prefix + b_name.to_s
|
54
|
+
end
|
55
|
+
|
56
|
+
def element_class(b_name, e_name)
|
57
|
+
block_class(b_name) + RailsBlocks.config.element_separator + e_name.to_s
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
@@ -0,0 +1,108 @@
|
|
1
|
+
require 'rails_blocks/names'
|
2
|
+
module RailsBlocks
|
3
|
+
module Path
|
4
|
+
include RailsBlocks::Names
|
5
|
+
ELEMENT_FILE_PREFIX = '__'
|
6
|
+
MOD_FILE_PREFIX = '_'
|
7
|
+
|
8
|
+
class << self
|
9
|
+
attr_writer :tree
|
10
|
+
end
|
11
|
+
|
12
|
+
def self.tree
|
13
|
+
#so slow, переделать на оновление при запросе, а не каждый раз
|
14
|
+
#return build_tree if Rails.env.development?
|
15
|
+
@tree ||= (
|
16
|
+
build_tree
|
17
|
+
)
|
18
|
+
end
|
19
|
+
|
20
|
+
def self.blocks_dir
|
21
|
+
Rails.root.join RailsBlocks.config.blocks_dir
|
22
|
+
end
|
23
|
+
|
24
|
+
def block_template(b_name, options = {})
|
25
|
+
options[:levels].reverse.each do |level|
|
26
|
+
next unless Path.tree[level][b_name]
|
27
|
+
return Path.tree[level][b_name][mod(options)] || Path.tree[level][b_name]['']
|
28
|
+
end
|
29
|
+
nil
|
30
|
+
end
|
31
|
+
|
32
|
+
def element_template(b_name, e_name, options = {})
|
33
|
+
options[:levels].reverse.each do |level|
|
34
|
+
next unless Path.tree[level][b_name]
|
35
|
+
next unless Path.tree[level][b_name][:elements][e_name]
|
36
|
+
return Path.tree[level][b_name][:elements][e_name][mod(options)] || Path.tree[level][b_name][:elements][e_name]['']
|
37
|
+
end
|
38
|
+
nil
|
39
|
+
end
|
40
|
+
|
41
|
+
private
|
42
|
+
|
43
|
+
def mod(options)
|
44
|
+
return '' unless options[:mods] && !options[:mods].empty?
|
45
|
+
mod_class(*options[:mods].first)
|
46
|
+
end
|
47
|
+
|
48
|
+
def get_block_dir(b_name, levels)
|
49
|
+
levels.reverse.each do |level|
|
50
|
+
block_dir = File.join(self.blocks_dir, level, b_name)
|
51
|
+
if Dir.exists? block_dir
|
52
|
+
return block_dir
|
53
|
+
end
|
54
|
+
end
|
55
|
+
nil
|
56
|
+
end
|
57
|
+
|
58
|
+
def self.build_tree
|
59
|
+
file_tree
|
60
|
+
end
|
61
|
+
|
62
|
+
def self.file_tree
|
63
|
+
t = {}
|
64
|
+
files = Dir["#{blocks_dir}/**/*#{RailsBlocks.config.template_engine}"]
|
65
|
+
files.each do |file|
|
66
|
+
file.sub! blocks_dir.to_s + '/', ''
|
67
|
+
parts = file.split('/')
|
68
|
+
filename = parts[2].sub RailsBlocks.config.template_engine, ''
|
69
|
+
template = {
|
70
|
+
level: parts[0],
|
71
|
+
block: parts[1],
|
72
|
+
file: filename
|
73
|
+
}
|
74
|
+
t[template[:level]] ||= {}
|
75
|
+
t[template[:level]][template[:block]] ||= {elements: {}}
|
76
|
+
|
77
|
+
if is_e_file(filename)
|
78
|
+
t[template[:level]][template[:block]][:elements][get_e_name(filename)] ||= {}
|
79
|
+
t[template[:level]][template[:block]][:elements][get_e_name(filename)][get_e_mod(filename)] = file
|
80
|
+
else
|
81
|
+
t[template[:level]][template[:block]][get_b_mod(filename)] = file
|
82
|
+
end
|
83
|
+
end
|
84
|
+
t.with_indifferent_access.freeze
|
85
|
+
end
|
86
|
+
|
87
|
+
def self.is_e_file(file)
|
88
|
+
file.start_with? ELEMENT_FILE_PREFIX
|
89
|
+
end
|
90
|
+
|
91
|
+
def self.get_e_name(file)
|
92
|
+
file.match(/\A__([^_]*)/)
|
93
|
+
$1
|
94
|
+
end
|
95
|
+
|
96
|
+
def self.get_e_mod(file)
|
97
|
+
return '' unless file.match(/__\w+#{MOD_FILE_PREFIX}\w/)
|
98
|
+
file.match(/\A__(?:[^_]*)_(.*)/)
|
99
|
+
$1
|
100
|
+
end
|
101
|
+
|
102
|
+
def self.get_b_mod(file)
|
103
|
+
return '' unless file.start_with? MOD_FILE_PREFIX
|
104
|
+
file.match(/^_(.*)/)
|
105
|
+
$1
|
106
|
+
end
|
107
|
+
end
|
108
|
+
end
|
data/lib/rails_blocks.rb
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
require 'rails_blocks/version'
|
2
|
+
require 'rails_blocks/blocks/block'
|
3
|
+
require 'rails_blocks/configuration'
|
4
|
+
require 'rails_blocks/exceptions'
|
5
|
+
require 'rails_blocks/path'
|
6
|
+
require 'rails_blocks/engine' if defined?(Rails)
|
7
|
+
|
8
|
+
module RailsBlocks
|
9
|
+
class << self
|
10
|
+
attr_writer :config
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.config
|
14
|
+
@config ||= Configuration.new
|
15
|
+
end
|
16
|
+
|
17
|
+
def self.configure
|
18
|
+
yield config
|
19
|
+
end
|
20
|
+
|
21
|
+
def self.reset
|
22
|
+
@config = Configuration.new
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'rails_blocks/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = 'rails_blocks'
|
8
|
+
spec.version = RailsBlocks::VERSION
|
9
|
+
spec.version = "#{spec.version}-alpha-#{ENV['TRAVIS_BUILD_NUMBER']}" if ENV['TRAVIS']
|
10
|
+
spec.authors = ['Andrey Potetiurin']
|
11
|
+
spec.email = ['potetiurin@gmail.com']
|
12
|
+
spec.summary = 'Rails plugin for work with some modification of BEM methodology'
|
13
|
+
spec.description = 'Gem helps build UI with blocks approach'
|
14
|
+
spec.homepage = ''
|
15
|
+
spec.license = 'MIT'
|
16
|
+
|
17
|
+
spec.files = `git ls-files -z`.split("\x0")
|
18
|
+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
19
|
+
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
20
|
+
spec.require_paths = ["lib"]
|
21
|
+
|
22
|
+
spec.add_dependency 'rails', '~> 4.2', '>= 4.2.3'
|
23
|
+
#testing
|
24
|
+
spec.add_development_dependency 'combustion', '~> 0.5.3'
|
25
|
+
spec.add_development_dependency 'bundler', '~> 1.7'
|
26
|
+
spec.add_development_dependency 'rspec', '~> 3.3'
|
27
|
+
spec.add_development_dependency 'rspec-nc'
|
28
|
+
spec.add_development_dependency 'capybara'
|
29
|
+
spec.add_development_dependency 'rspec-rails', '~> 3.0'
|
30
|
+
spec.add_development_dependency 'memfs'
|
31
|
+
spec.add_development_dependency 'spring'
|
32
|
+
spec.add_development_dependency 'guard'
|
33
|
+
spec.add_development_dependency 'guard-rspec'
|
34
|
+
spec.add_development_dependency 'pry'
|
35
|
+
spec.add_development_dependency 'pry-remote'
|
36
|
+
spec.add_development_dependency 'pry-nav'
|
37
|
+
spec.add_development_dependency 'terminal-notifier'
|
38
|
+
spec.add_development_dependency 'terminal-notifier-guard'
|
39
|
+
end
|
@@ -0,0 +1,58 @@
|
|
1
|
+
describe BlockHelper, type: :helper do
|
2
|
+
before do
|
3
|
+
controller.add_view_paths
|
4
|
+
end
|
5
|
+
|
6
|
+
context ".b" do
|
7
|
+
it "renders empty div with class when called without options" do
|
8
|
+
result = b :test
|
9
|
+
expect(result).to eq '<div class="b-test"></div>'
|
10
|
+
end
|
11
|
+
|
12
|
+
it "renders div with content when called with block" do
|
13
|
+
result = b 'test-block' do
|
14
|
+
'test-content'
|
15
|
+
end
|
16
|
+
expect(result).to eq '<div class="b-test-block">test-content</div>'
|
17
|
+
end
|
18
|
+
|
19
|
+
it "renders empty div with mods class when called with mods" do
|
20
|
+
result = b 'test-block', mods: {test: :one}
|
21
|
+
expect(result).to eq '<div class="b-test-block b-test-block--test_one"></div>'
|
22
|
+
end
|
23
|
+
|
24
|
+
it 'renders file when one exists' do
|
25
|
+
result = b 'block1'
|
26
|
+
expect(result).to eq '<div class="b-block1">block1</div>'
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
context ".e" do
|
31
|
+
it "raise error when called outside block" do
|
32
|
+
expect{ e 'test-element' }.to raise_error RailsBlocks::NoBlockContextError
|
33
|
+
end
|
34
|
+
|
35
|
+
it "renders empty element with class when called without options" do
|
36
|
+
b 'test' do
|
37
|
+
result = e :element
|
38
|
+
expect(result).to eq '<div class="b-test__element"></div>'
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
it "renders element with mods class when called with mods" do
|
43
|
+
b 'test' do
|
44
|
+
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>'
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
it "renders element with class & content when called with block" do
|
50
|
+
b 'test' do
|
51
|
+
result = e 'element' do
|
52
|
+
"content"
|
53
|
+
end
|
54
|
+
expect(result).to eq '<div class="b-test__element">content</div>'
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
@@ -0,0 +1 @@
|
|
1
|
+
*.log
|
@@ -0,0 +1,8 @@
|
|
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)
|
File without changes
|
@@ -0,0 +1,11 @@
|
|
1
|
+
require 'rails_blocks/blocks/block'
|
2
|
+
|
3
|
+
describe RailsBlocks::Blocks::Block do
|
4
|
+
xit 'render empty div with block class if block isn\'t defined' do
|
5
|
+
b_name = 'test-block'
|
6
|
+
block = RailsBlocks.get_block b_name
|
7
|
+
result = block.render
|
8
|
+
klass = RailsBlocks.config.prefix + b_name
|
9
|
+
expect(result).to match(/<div.*\/div>/) & match(/class=\"#{klass}\"/)
|
10
|
+
end
|
11
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
describe RailsBlocks::Configuration do
|
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
|
+
|
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
|
+
describe "#ns" do
|
17
|
+
it 'yield new Configuration' do
|
18
|
+
subject.ns :admin do |config|
|
19
|
+
expect(config).to be_a RailsBlocks::Configuration
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
xit 'creates new namespace' do
|
24
|
+
subject.ns :admin do |config|
|
25
|
+
expect(config.nss).not_to be_empty
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,66 @@
|
|
1
|
+
require 'rails_blocks/names'
|
2
|
+
|
3
|
+
describe RailsBlocks::Names do
|
4
|
+
include RailsBlocks::Names
|
5
|
+
context '.element_classes' do
|
6
|
+
it 'returns simple element_classes without options' do
|
7
|
+
classes = element_classes 'block', 'element'
|
8
|
+
expect(classes).to contain_exactly 'b-block__element'
|
9
|
+
end
|
10
|
+
|
11
|
+
it 'returns element_class & mods with options[:mods]' do
|
12
|
+
classes = element_classes 'block', 'element', mods: {test: :one}
|
13
|
+
expect(classes).to contain_exactly 'b-block__element', 'b-block__element--test_one'
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
context '.block_classes' do
|
18
|
+
it 'returns simple block_class without options' do
|
19
|
+
classes = block_classes 'block'
|
20
|
+
expect(classes).to contain_exactly 'b-block'
|
21
|
+
end
|
22
|
+
|
23
|
+
it 'returns block_class & mods with options[:mods]' do
|
24
|
+
classes = block_classes 'block', mods: {test: :one}
|
25
|
+
expect(classes).to contain_exactly 'b-block', 'b-block--test_one'
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
context '.mods_classes' do
|
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'
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
context '.mix_classes' do
|
37
|
+
it 'returns element class when one :b & :e exists' do
|
38
|
+
classes = mix_classes b: :block, e: :element
|
39
|
+
expect(classes).to contain_exactly 'b-block__element'
|
40
|
+
end
|
41
|
+
|
42
|
+
it 'returns element classes when array :b & :e exists' do
|
43
|
+
classes = mix_classes [{b: :block, e: :element}, {b: 'block2', e: 'element2'}]
|
44
|
+
expect(classes).to contain_exactly 'b-block__element', 'b-block2__element2'
|
45
|
+
end
|
46
|
+
|
47
|
+
it 'returns blocks classes when only :b exists' do
|
48
|
+
classes = mix_classes b: :block
|
49
|
+
expect(classes).to contain_exactly 'b-block'
|
50
|
+
end
|
51
|
+
|
52
|
+
it 'returns blocks classes when array of :b exists' do
|
53
|
+
classes = mix_classes [{b: :block}, {b: :test}]
|
54
|
+
expect(classes).to contain_exactly 'b-block', 'b-test'
|
55
|
+
end
|
56
|
+
|
57
|
+
it 'returns blocks classes & element classes when array of :b, :b & :e exists' do
|
58
|
+
classes = mix_classes [{b: :block}, {b: :test, e: :boo}]
|
59
|
+
expect(classes).to contain_exactly 'b-block', 'b-test__boo'
|
60
|
+
end
|
61
|
+
|
62
|
+
it 'raise error if :b not exists' do
|
63
|
+
expect { mix_classes(e: :boo) }.to raise_error RailsBlocks::BadMixError
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|