bem-on-rails 0.0.2 → 0.0.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +6 -0
- data/README.md +19 -10
- data/app/helpers/bemonrails/bem_render_helper.rb +96 -91
- data/app/views/bemonrails/essences/_content.html.haml +16 -14
- data/lib/bem-on-rails.rb +2 -1
- data/lib/bem-on-rails/build/bem_names.rb +104 -90
- data/lib/bem-on-rails/build/console_messages.rb +24 -0
- data/lib/bem-on-rails/engine.rb +4 -4
- data/lib/bem-on-rails/generators/install_generator.rb +6 -22
- data/lib/bem-on-rails/generators/templates/config/initializer.tt.rb +42 -42
- data/lib/bem-on-rails/generators/templates/techs/coffee.tt +1 -1
- data/lib/bem-on-rails/generators/templates/techs/haml.tt +2 -2
- data/lib/bem-on-rails/generators/templates/techs/slim.tt +2 -0
- data/lib/bem-on-rails/generators/templates/thor/bem.tt.rb +174 -278
- data/lib/bem-on-rails/railtie.rb +13 -0
- data/lib/bem-on-rails/version.rb +1 -1
- metadata +5 -2
@@ -0,0 +1,24 @@
|
|
1
|
+
module Bemonrails
|
2
|
+
module ConsoleMessages
|
3
|
+
def print_message(message, color)
|
4
|
+
check_argument_data_type(message, String)
|
5
|
+
check_argument_data_type(color, String)
|
6
|
+
|
7
|
+
color = case color
|
8
|
+
when 'green' then "\e[0;32m"
|
9
|
+
when 'red' then "\e[0;31m"
|
10
|
+
when 'blue' then "\e[0;34m"
|
11
|
+
when 'cyan' then "\e[0;36m"
|
12
|
+
when 'purple' then "\e[0;35m"
|
13
|
+
when 'yellow' then "\e[1;33m"
|
14
|
+
else ''
|
15
|
+
end
|
16
|
+
|
17
|
+
puts "#{color + message} \e[0m"
|
18
|
+
end
|
19
|
+
|
20
|
+
def check_argument_data_type(argument, type)
|
21
|
+
raise print_message("#{argument} must be a #{type.to_s}", 'red') unless argument.kind_of? type
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
data/lib/bem-on-rails/engine.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
module Bemonrails
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
end
|
2
|
+
class Engine < Rails::Engine
|
3
|
+
isolate_namespace Bemonrails
|
4
|
+
end
|
5
|
+
end
|
@@ -5,36 +5,20 @@ module Bemonrails
|
|
5
5
|
class InstallGenerator < ::Rails::Generators::Base
|
6
6
|
source_root File.expand_path("../templates/", __FILE__)
|
7
7
|
|
8
|
-
def add_render_helpers
|
9
|
-
app_helper = 'app/helpers/application_helper.rb'
|
10
|
-
first_string = "module ApplicationHelper"
|
11
|
-
bem_render_helpers = "\n\t# Add BEM blocks rendering helpers\n\tinclude Bemonrails::BemRenderHelper\n"
|
12
|
-
|
13
|
-
insert_into_file app_helper, bem_render_helpers, :after => first_string
|
14
|
-
end
|
15
|
-
|
16
|
-
def add_blocks_folder
|
17
|
-
app_controller = 'app/controllers/application_controller.rb'
|
18
|
-
protection_str = "protect_from_forgery\n"
|
19
|
-
bem_block_folder = "\n\t# Add BEM blocks folder to default views scope\n\tbefore_filter { prepend_view_path(BEM[:blocks][:dir]) }\n"
|
20
|
-
|
21
|
-
insert_into_file app_controller, bem_block_folder, :after => protection_str
|
22
|
-
end
|
23
|
-
|
24
8
|
def add_initializer
|
25
|
-
|
9
|
+
template "config/initializer.tt.rb", File.join(Rails.root, "config", "initializers", "bem.rb")
|
26
10
|
end
|
27
11
|
|
28
12
|
def install_bem_tasks
|
29
|
-
|
13
|
+
template "thor/bem.tt.rb", File.join(Rails.root, "lib", "tasks", "bem.thor")
|
30
14
|
end
|
31
15
|
|
32
16
|
def add_blocks_templates
|
33
|
-
|
34
|
-
|
35
|
-
|
17
|
+
%w(slim.tt haml.tt coffee.tt md.tt sass.tt).each do |t|
|
18
|
+
template "techs/#{t}", File.join(Rails.root, "lib", "tasks", "templates", t)
|
19
|
+
end
|
36
20
|
end
|
37
21
|
|
38
22
|
end
|
39
23
|
end
|
40
|
-
end
|
24
|
+
end
|
@@ -2,60 +2,60 @@ BEM = {}
|
|
2
2
|
|
3
3
|
# List of known techs.
|
4
4
|
BEM[:techs] = {
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
5
|
+
haml: ".html.haml",
|
6
|
+
slim: ".html.slim",
|
7
|
+
erb: "html.erb",
|
8
|
+
jade: ".jade",
|
9
|
+
sass: ".css.sass",
|
10
|
+
scss: ".css.scss",
|
11
|
+
less: ".css.less",
|
12
|
+
styl: ".css.styl",
|
13
|
+
css: ".css",
|
14
|
+
coffee: ".coffee",
|
15
|
+
js: ".js",
|
16
|
+
md: ".md",
|
17
|
+
wiki: ".wiki"
|
18
18
|
}
|
19
19
|
|
20
20
|
# List of default techs, generating if -T is empty.
|
21
21
|
BEM[:default] = {
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
22
|
+
slim: BEM[:techs][:slim],
|
23
|
+
sass: BEM[:techs][:sass],
|
24
|
+
coffee: BEM[:techs][:coffee],
|
25
|
+
md: BEM[:techs][:md]
|
26
26
|
}
|
27
27
|
|
28
28
|
# Usage files variants.
|
29
29
|
BEM[:usage] = {
|
30
|
-
|
31
|
-
|
30
|
+
md: BEM[:techs][:md],
|
31
|
+
wiki: BEM[:techs][:wiki]
|
32
32
|
}
|
33
33
|
|
34
34
|
# Default directories, try to customize.
|
35
35
|
# Blocks directory in root of rails app.
|
36
36
|
BEM[:blocks] = {
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
37
|
+
dir: "blocks",
|
38
|
+
path: Rails.root.join("blocks"),
|
39
|
+
prefix: "",
|
40
|
+
postfix: ""
|
41
41
|
}
|
42
42
|
|
43
43
|
# Elements directory in every block directory.
|
44
44
|
# Write 'dir: ""' for creating elements in root of block.
|
45
45
|
BEM[:elements] = {
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
46
|
+
dir: "elements",
|
47
|
+
path: BEM[:blocks][:path], # This is individualy for every block
|
48
|
+
prefix: "__",
|
49
|
+
postfix: ""
|
50
50
|
}
|
51
51
|
|
52
52
|
# Mods directory in every block directory.
|
53
53
|
# Write 'dir: ""' for creating mods in root of block.
|
54
54
|
BEM[:mods] = {
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
55
|
+
dir: "mods",
|
56
|
+
path: BEM[:blocks][:path], # This is individualy for every block or element
|
57
|
+
prefix: "_",
|
58
|
+
postfix: ""
|
59
59
|
}
|
60
60
|
|
61
61
|
# [!] If you work with sass and you want to create blocks, elements and mods in sass,
|
@@ -75,16 +75,16 @@ BEM[:mods] = {
|
|
75
75
|
# }
|
76
76
|
|
77
77
|
BEM[:assets] = {
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
78
|
+
stylesheets:
|
79
|
+
{
|
80
|
+
ext: BEM[:techs][:sass],
|
81
|
+
import: '//= require'
|
82
|
+
},
|
83
|
+
javascripts:
|
84
|
+
{
|
85
|
+
ext: BEM[:techs][:js],
|
86
|
+
import: '//= require'
|
87
|
+
}
|
88
88
|
}
|
89
89
|
|
90
90
|
# You must use application files in
|
@@ -98,4 +98,4 @@ Rails.application.config.assets.paths << BEM[:blocks][:dir]
|
|
98
98
|
# gem 'csso-rails'
|
99
99
|
|
100
100
|
# And uncomment this
|
101
|
-
# Rails.config.assets.css_compressor = :csso
|
101
|
+
# Rails.config.assets.css_compressor = :csso
|
@@ -1,2 +1,2 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
- haml_tag bemtag, bemattrs
|
2
|
+
= bemcontent
|
@@ -1,291 +1,187 @@
|
|
1
1
|
require File.expand_path('config/environment.rb')
|
2
2
|
|
3
3
|
class Bem < Thor
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
4
|
+
include Thor::Actions
|
5
|
+
include Bemonrails::BemNames
|
6
|
+
include Bemonrails::ConsoleMessages
|
7
|
+
|
8
|
+
source_root File.expand_path('../templates', __FILE__)
|
9
|
+
|
10
|
+
desc 'create', 'Create block, element or mod'
|
11
|
+
method_option :block, type: :string, aliases: "-b", desc: "Create block in default techs."
|
12
|
+
method_option :element, type: :string, aliases: "-e", desc: "Create element in default techs. Use with block param."
|
13
|
+
method_option :mod, type: :string, aliases: "-m", desc: "Create modificator for block or element."
|
14
|
+
method_option :value, type: :string, aliases: "-v", desc: "Value for modificator."
|
15
|
+
method_option :tech, type: :string, aliases: "-T", desc: "Create essence in spec tech."
|
16
|
+
method_option :group, type: :string, aliases: "-G", desc: "Create essence in group. Work for blocks only!"
|
17
|
+
method_option :force, type: :boolean, desc: "Force existing block, element or mod files."
|
18
|
+
def create
|
19
|
+
path = build_path_for(essence)
|
20
|
+
manipulate_essence(:create, essence, path)
|
21
|
+
end
|
22
|
+
|
23
|
+
|
24
|
+
desc 'remove', 'Remove block, element or mod'
|
25
|
+
method_option :block, type: :string, aliases: "-b", desc: "Remove block in default techs."
|
26
|
+
method_option :element, type: :string, aliases: "-e", desc: "Remove element in default techs. Use with block param."
|
27
|
+
method_option :mod, type: :string, aliases: "-m", desc: "Remove modificator for block or element."
|
28
|
+
method_option :value, type: :string, aliases: "-v", desc: "Value for modificator."
|
29
|
+
method_option :tech, type: :string, aliases: "-T", desc: "Remove essence in spec tech."
|
30
|
+
method_option :group, type: :string, aliases: "-G", desc: "Remove essence in group. Work for blocks only!"
|
31
|
+
def remove
|
32
|
+
path = build_path_for(essence)
|
33
|
+
manipulate_essence(:remove, essence, path)
|
34
|
+
end
|
35
|
+
|
36
|
+
|
37
|
+
desc 'usage', 'Essence usage information'
|
38
|
+
method_option :block, type: :string, aliases: "-b", desc: "Block usage."
|
39
|
+
method_option :element, type: :string, aliases: "-e", desc: "Element usage"
|
40
|
+
method_option :mod, type: :string, aliases: "-m", desc: "Mod usage."
|
41
|
+
method_option :value, type: :string, aliases: "-v", desc: "Mod value usage."
|
42
|
+
method_option :group, type: :string, aliases: "-G", desc: "Search essence in group."
|
43
|
+
def usage
|
44
|
+
path = build_path_for(essence)
|
45
|
+
manipulate_essence(:usage, essence, path)
|
46
|
+
end
|
47
|
+
|
48
|
+
|
49
|
+
desc 'list', 'See list of group, block elements, mods and etc.'
|
50
|
+
method_option :block, type: :string, aliases: "-b", desc: "All block elements, mods and mods values"
|
51
|
+
method_option :element, type: :string, aliases: "-e", desc: "All element mods and mods values"
|
52
|
+
method_option :mod, type: :string, aliases: "-m", desc: "All mod values."
|
53
|
+
method_option :group, type: :string, aliases: "-G", desc: "All blocks in group."
|
54
|
+
def list
|
55
|
+
path = essence ? build_path_for(essence) : build_path_for(:block)
|
56
|
+
case essence
|
57
|
+
when :block
|
58
|
+
print_elements_list(block, path)
|
59
|
+
print_mods_list(block, path)
|
60
|
+
when :element
|
61
|
+
print_mods_list(element, path)
|
62
|
+
when :mod
|
63
|
+
print_values_list(element, path)
|
64
|
+
else
|
65
|
+
print_blocks_list(path)
|
45
66
|
end
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
end
|
65
|
-
elsif options[:element] && !options[:mod]
|
66
|
-
path = build_path_for(:element)
|
67
|
-
destination = File.join(path, element)
|
68
|
-
if essence_exist?(destination, false)
|
69
|
-
remove_essence(BEM[:elements], path)
|
70
|
-
cut_assets(element, path)
|
71
|
-
end
|
72
|
-
elsif options[:mod]
|
73
|
-
path = build_path_for(:mod)
|
74
|
-
essence = options[:value] ? options[:value] : options[:mod]
|
75
|
-
destination = File.join(path, mod(essence))
|
76
|
-
if essence_exist?(destination, false)
|
77
|
-
remove_essence(BEM[:mods], path)
|
78
|
-
cut_assets(mod(essence), path)
|
79
|
-
end
|
80
|
-
else
|
81
|
-
raise print_message("You should set params. Try 'thor help bem:remove' for more information", 'red')
|
82
|
-
end
|
67
|
+
end
|
68
|
+
|
69
|
+
protected
|
70
|
+
|
71
|
+
def essence_exist?(essence_dir)
|
72
|
+
File.directory?(File.join(BEM[:blocks][:path], essence_dir))
|
73
|
+
end
|
74
|
+
|
75
|
+
def create_essence(essence_options, path)
|
76
|
+
names = generate_names
|
77
|
+
@css_class = '.' + names[:klass]
|
78
|
+
# If you need more templates. Please create them into templates
|
79
|
+
# directory. Watch existing templates for example.
|
80
|
+
# What is .tt? It is custom extension for finding templates in other files.
|
81
|
+
if options[:tech] # Maybe recive from command line
|
82
|
+
template "#{options[:tech]}.tt", File.join(essence_options[:path], path, names[:name], names[:name] + BEM[:techs][options[:tech].to_sym])
|
83
|
+
else
|
84
|
+
create_defaults(essence_options, path, names)
|
83
85
|
end
|
86
|
+
end
|
84
87
|
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
method_option :block, type: :string, aliases: "-b", desc: "Block usage."
|
89
|
-
method_option :element, type: :string, aliases: "-e", desc: "Element usage"
|
90
|
-
method_option :mod, type: :string, aliases: "-m", desc: "Mod usage."
|
91
|
-
method_option :value, type: :string, aliases: "-v", desc: "Mod value usage."
|
92
|
-
method_option :group, type: :string, aliases: "-G", desc: "Search essence in group."
|
93
|
-
def usage
|
94
|
-
if options[:block] && !options[:element] && !options[:mod]
|
95
|
-
path = build_path_for(:block)
|
96
|
-
search_usage_information(block, path)
|
97
|
-
elsif options[:element] && !options[:mod]
|
98
|
-
path = build_path_for(:element)
|
99
|
-
search_usage_information(element, path)
|
100
|
-
elsif options[:mod]
|
101
|
-
path = build_path_for(:mod)
|
102
|
-
essence = options[:value] ? options[:value] : options[:mod]
|
103
|
-
search_usage_information(mod(essence), path)
|
104
|
-
else
|
105
|
-
raise print_message("You should set params. Try 'thor help bem:usage' for more information", 'red')
|
106
|
-
end
|
88
|
+
def create_defaults(essence_options, path, names)
|
89
|
+
BEM[:default].each do |tech, extension|
|
90
|
+
template "#{tech}.tt", File.join(essence_options[:path], path, names[:name], names[:name] + extension)
|
107
91
|
end
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
print_mods_list(element, path)
|
126
|
-
elsif options[:mod]
|
127
|
-
# Print all mod values
|
128
|
-
path = build_path_for(:mod)
|
129
|
-
print_values_list(element, path)
|
130
|
-
else
|
131
|
-
# Print all blocks
|
132
|
-
path = build_path_for(:block)
|
133
|
-
print_blocks_list(path)
|
134
|
-
end
|
92
|
+
end
|
93
|
+
|
94
|
+
def remove_essence(essence_options, path)
|
95
|
+
names = generate_names
|
96
|
+
destination = File.join(essence_options[:path], path, names[:name])
|
97
|
+
destination = File.join(destination, names[:name] + BEM[:techs][options[:tech].to_sym]) if options[:tech]
|
98
|
+
FileUtils.rm_rf(destination)
|
99
|
+
|
100
|
+
puts "\e[0;31m remove\e[0m " + destination.to_s.gsub(Rails.root.to_s + "/", "")
|
101
|
+
end
|
102
|
+
|
103
|
+
def update_assets(name, path)
|
104
|
+
BEM[:assets].each do |type, tech|
|
105
|
+
asset = File.join(Rails.root, "app", "assets", type.to_s, "application" + tech[:ext])
|
106
|
+
destination = [path, name, name + tech[:ext]].reject(&:empty?)
|
107
|
+
line = "#{tech[:import]} #{File.join(destination)}#{tech[:postfix]}"
|
108
|
+
File.open(asset, "a") { |f| f.write("\n" + line) }
|
135
109
|
end
|
110
|
+
end
|
136
111
|
|
112
|
+
def cut_assets(name, path)
|
113
|
+
BEM[:assets].each do |type, tech|
|
114
|
+
asset = File.join(Rails.root, "app", "assets", type.to_s, "application" + tech[:ext])
|
115
|
+
destination = [path, name, name + tech[:ext]].reject(&:empty?)
|
116
|
+
line = "#{tech[:import]} #{File.join(destination)}#{tech[:postfix]}"
|
137
117
|
|
118
|
+
tmp = Tempfile.new("temp")
|
119
|
+
open(asset, 'r').each do |l|
|
120
|
+
tmp << l unless l.chomp == line || l.empty?
|
121
|
+
end
|
122
|
+
tmp.close
|
138
123
|
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
if File.directory?(File.join(BEM[:blocks][:path], essence_dir))
|
143
|
-
puts print_message("Essence with this name is already exists. Try 'thor help bem:list' or 'thor help bem:usage ", 'red') if creating
|
144
|
-
true
|
145
|
-
end
|
146
|
-
end
|
147
|
-
|
148
|
-
def create_essence(essence_options, path)
|
149
|
-
|
150
|
-
names = generate_names
|
151
|
-
|
152
|
-
@css_class = '.' + names[:klass]
|
153
|
-
|
154
|
-
# [!] Templates exist only for wiki, haml, sass and coffee.
|
155
|
-
# If you need more templates. Please create them into templates
|
156
|
-
# directory. Watch existing templates for example.
|
157
|
-
# What is .tt? It is custom extension for finding templates in other files.
|
158
|
-
if options[:tech] # Maybe recive from command line
|
159
|
-
template "#{options[:tech]}.tt", File.join(essence_options[:path], path, names[:name], names[:name] + BEM[:techs][options[:tech].to_sym])
|
160
|
-
else
|
161
|
-
# You can customize this list of defaults. See on top of file.
|
162
|
-
BEM[:default].each do |tech, extension|
|
163
|
-
template "#{tech}.tt", File.join(essence_options[:path], path, names[:name], names[:name] + extension)
|
164
|
-
end
|
165
|
-
end
|
166
|
-
end
|
167
|
-
|
168
|
-
def remove_essence(essence_options, path)
|
169
|
-
|
170
|
-
names = generate_names
|
171
|
-
|
172
|
-
if options[:tech]
|
173
|
-
destination = File.join(essence_options[:path], path, names[:name], names[:name] + BEM[:techs][options[:tech].to_sym])
|
174
|
-
FileUtils.rm(destination)
|
175
|
-
else
|
176
|
-
destination = File.join(essence_options[:path], path, names[:name])
|
177
|
-
FileUtils.rm_rf(destination)
|
178
|
-
end
|
179
|
-
|
180
|
-
puts "\e[0;31m remove\e[0m " + destination.to_s.gsub(Rails.root.to_s + "/", "")
|
181
|
-
end
|
182
|
-
|
183
|
-
def update_assets(name, path)
|
184
|
-
BEM[:assets].each do |type, tech|
|
185
|
-
asset = File.join(Rails.root, "app", "assets", type.to_s, "application" + tech[:ext])
|
186
|
-
destination = [path, name, name + tech[:ext]].reject(&:empty?)
|
187
|
-
line = "#{tech[:import]} #{File.join(destination)}#{tech[:postfix]}"
|
188
|
-
File.open(asset, "a") do |f|
|
189
|
-
f.write("\n" + line)
|
190
|
-
end
|
191
|
-
end
|
192
|
-
end
|
193
|
-
|
194
|
-
def cut_assets(name, path)
|
195
|
-
BEM[:assets].each do |type, tech|
|
196
|
-
asset = File.join(Rails.root, "app", "assets", type.to_s, "application" + tech[:ext])
|
197
|
-
destination = [path, name, name + tech[:ext]].reject(&:empty?)
|
198
|
-
line = "#{tech[:import]} #{File.join(destination)}#{tech[:postfix]}"
|
199
|
-
|
200
|
-
# Open temporary file
|
201
|
-
tmp = Tempfile.new("temp")
|
202
|
-
# Write good lines to temporary file.
|
203
|
-
open(asset, 'r').each do |l|
|
204
|
-
tmp << l unless l.chomp == line || l.empty?
|
205
|
-
end
|
206
|
-
# Close tmp, or troubles ahead.
|
207
|
-
tmp.close
|
208
|
-
# Temp to original.
|
209
|
-
FileUtils.mv(tmp.path, asset)
|
210
|
-
end
|
211
|
-
end
|
212
|
-
|
213
|
-
def search_usage_information(essence, path)
|
214
|
-
BEM[:usage].each do |tech, extension|
|
215
|
-
file_destination = File.join(BEM[:blocks][:path] + path, essence, essence + extension)
|
216
|
-
if File.exist?(file_destination)
|
217
|
-
puts tech.to_s + ": " + file_destination
|
218
|
-
puts "BEM[:usage]:\t"
|
219
|
-
File.readlines(file_destination).each do |line|
|
220
|
-
puts line
|
221
|
-
end
|
222
|
-
end
|
223
|
-
end
|
224
|
-
end
|
225
|
-
|
226
|
-
def print_blocks_list(essence="", path)
|
227
|
-
directory_destination = File.join(BEM[:blocks][:path] + path, essence)
|
228
|
-
puts directory_destination
|
229
|
-
print_message("BEM[:blocks]:\t", 'green')
|
230
|
-
Dir[directory_destination + "/*"].each do |name|
|
231
|
-
# Show only essences. No files. No groups.
|
232
|
-
# Essences have't ext.
|
233
|
-
# Get dir name.
|
234
|
-
name = name.split('/')[-1]
|
235
|
-
if name.split('.').size == 1
|
236
|
-
puts " - " + name
|
237
|
-
end
|
238
|
-
end
|
239
|
-
end
|
240
|
-
|
241
|
-
def print_elements_list(essence="", path)
|
242
|
-
directory_destination = File.join(BEM[:blocks][:path] + path, essence, BEM[:elements][:dir])
|
243
|
-
print_message("BEM[:elements]:\t", 'purple')
|
244
|
-
Dir[directory_destination + "/*"].each do |name|
|
245
|
-
# Get dir name.
|
246
|
-
name = name.split('/')[-1]
|
247
|
-
puts " - " + name.split(BEM[:elements][:prefix])[1]
|
248
|
-
end
|
249
|
-
end
|
250
|
-
|
251
|
-
def print_mods_list(essence="", path)
|
252
|
-
directory_destination = File.join(BEM[:blocks][:path] + path, essence, BEM[:mods][:dir])
|
253
|
-
print_message("BEM[:mods]:\t", 'cyan')
|
254
|
-
Dir[directory_destination + "/*"].each do |name|
|
255
|
-
# Get dir name.
|
256
|
-
name = name.split('/')[-1]
|
257
|
-
puts " - " + name.split(BEM[:mods][:prefix])[1]
|
258
|
-
end
|
259
|
-
end
|
260
|
-
|
261
|
-
def print_values_list(essence="", path)
|
262
|
-
directory_destination = File.join(BEM[:blocks][:path] + path, essence)
|
263
|
-
print_message("VALUES:\t", 'yellow')
|
264
|
-
Dir[directory_destination + "/*"].each do |name|
|
265
|
-
# Get dir name.
|
266
|
-
name = name.split('/')[-1]
|
267
|
-
puts " - " + name.split(BEM[:mods][:prefix])[1]
|
268
|
-
end
|
269
|
-
end
|
270
|
-
|
271
|
-
def print_message(message, color)
|
272
|
-
check_argument_data_type(message, String)
|
273
|
-
check_argument_data_type(color, String)
|
274
|
-
|
275
|
-
color = case color
|
276
|
-
when 'green' then "\e[0;32m"
|
277
|
-
when 'red' then "\e[0;31m"
|
278
|
-
when 'blue' then "\e[0;34m"
|
279
|
-
when 'cyan' then "\e[0;36m"
|
280
|
-
when 'purple' then "\e[0;35m"
|
281
|
-
when 'yellow' then "\e[1;33m"
|
282
|
-
else ''
|
283
|
-
end
|
124
|
+
FileUtils.mv(tmp.path, asset)
|
125
|
+
end
|
126
|
+
end
|
284
127
|
|
285
|
-
|
286
|
-
|
128
|
+
def search_usage_information(essence, path)
|
129
|
+
BEM[:usage].each do |tech, extension|
|
130
|
+
file_destination = File.join(path_to_block(path), essence, essence + extension)
|
131
|
+
read_usage(file_destination) if File.exist?(file_destination)
|
132
|
+
end
|
133
|
+
end
|
134
|
+
|
135
|
+
def read_usage(target)
|
136
|
+
puts "#{ tech }: #{ target }"
|
137
|
+
puts "BEM[:usage]:\t"
|
138
|
+
File.readlines(target) { |line| puts line }
|
139
|
+
end
|
140
|
+
|
141
|
+
def print_blocks_list(essence="", path)
|
142
|
+
directory_destination = File.join(path_to_block(path), essence)
|
143
|
+
parse_directory(:blocks, 'green', directory_destination)
|
144
|
+
end
|
145
|
+
|
146
|
+
def print_elements_list(ess_name="", path)
|
147
|
+
directory_destination = File.join(path_to_block(path), ess_name, BEM[:elements][:dir])
|
148
|
+
parse_directory(:elements, 'purple', directory_destination)
|
149
|
+
end
|
150
|
+
|
151
|
+
def print_mods_list(ess_name="", path)
|
152
|
+
directory_destination = File.join(path_to_block(path), ess_name, BEM[:mods][:dir])
|
153
|
+
parse_directory(:mods, 'cyan', directory_destination)
|
154
|
+
end
|
155
|
+
|
156
|
+
def print_values_list(ess_name="", path)
|
157
|
+
directory_destination = File.join(path_to_block(path), ess_name)
|
158
|
+
parse_directory(:mods, 'yellow', directory_destination)
|
159
|
+
end
|
160
|
+
|
161
|
+
def parse_directory(directory, essence, color)
|
162
|
+
print_message("BEM[#{ essence }]:\t", color)
|
163
|
+
Dir[directory + "/*"].each do |name|
|
164
|
+
name = name.split('/')[-1]
|
165
|
+
puts " - " + name.split(BEM[essence][:prefix])[1]
|
166
|
+
end
|
167
|
+
end
|
168
|
+
|
169
|
+
def manipulate_essence(action, ess, path)
|
170
|
+
ess_name = send(ess)
|
171
|
+
ess_name = mod(options[:value] ? options[:value] : options[:mod]) if ess == :mod
|
172
|
+
destination = File.join(path, ess_name)
|
173
|
+
|
174
|
+
case action
|
175
|
+
when :create
|
176
|
+
create_essence(BEM[ess.to_s.pluralize.to_sym], path)
|
177
|
+
update_assets(ess_name, path)
|
178
|
+
when :remove
|
179
|
+
remove_essence(BEM[ess.to_s.pluralize.to_sym], path)
|
180
|
+
cut_assets(ess_name, path)
|
181
|
+
when :usage
|
182
|
+
search_usage_information(ess_name, path) if essence_exist?(destination)
|
183
|
+
else raise print_message("You should set params. Try 'thor help bem:#{action}' for more information", 'red')
|
184
|
+
end
|
185
|
+
end
|
287
186
|
|
288
|
-
|
289
|
-
raise print_message("#{argument} must be a #{type.to_s}", 'red') unless argument.kind_of? type
|
290
|
-
end
|
291
|
-
end
|
187
|
+
end
|