bem-on-rails 0.0.2 → 0.0.3
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 +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
|