view_assets 1.0.4 → 1.1.1
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/tasks/tool.rb +29 -0
- data/lib/view_assets/finder/directive.rb +26 -26
- data/lib/view_assets/finder/finder.rb +46 -15
- data/lib/view_assets/manager/manager.rb +6 -18
- data/lib/view_assets/manager/map.rb +110 -0
- data/lib/view_assets/manager/modifier.rb +214 -0
- data/lib/view_assets/packager/actions_map.rb +1 -9
- data/lib/view_assets/packager/packager.rb +34 -9
- data/lib/view_assets/path_info.rb +4 -0
- data/lib/view_assets/railtie.rb +1 -0
- data/lib/view_assets/version.rb +1 -1
- data/test/dummy/public/assets/javascripts_assets.yml +133 -0
- metadata +52 -61
- data/MIT-LICENSE +0 -20
- data/test/dummy/db/development.sqlite3 +0 -0
- data/test/dummy/db/production.sqlite3 +0 -0
- data/test/dummy/db/test.sqlite3 +0 -0
- data/test/dummy/log/development.log +0 -1842
- data/test/dummy/log/production.log +0 -591
- data/test/dummy/public/assets/javascripts/application-984fbe5ea1e3d5e4aaa99059a02281ef.js +0 -31
- data/test/dummy/public/assets/javascripts/application-e6c5fe847d07144f1b32520af2550e6f.js +0 -122202
- data/test/dummy/public/assets/javascripts/controller-e6c5fe847d07144f1b32520af2550e6f.js +0 -122202
- data/test/dummy/public/assets/javascripts/controller_action-e6c5fe847d07144f1b32520af2550e6f.js +0 -122202
- data/test/dummy/public/assets/javascripts/cutting_records-984fbe5ea1e3d5e4aaa99059a02281ef.js +0 -31
- data/test/dummy/public/assets/javascripts/cutting_records-e6c5fe847d07144f1b32520af2550e6f.js +0 -122202
- data/test/dummy/public/assets/javascripts/cutting_records_index-1edda21952a9f03edc5ecd1492947fbf.js +0 -122340
- data/test/dummy/public/assets/javascripts/material_attributes-984fbe5ea1e3d5e4aaa99059a02281ef.js +0 -31
- data/test/dummy/public/assets/javascripts/purchasing_orders-984fbe5ea1e3d5e4aaa99059a02281ef.js +0 -31
- data/test/dummy/public/assets/javascripts/sample_orders-984fbe5ea1e3d5e4aaa99059a02281ef.js +0 -31
- data/test/dummy/public/assets/javascripts/workshop_reports-984fbe5ea1e3d5e4aaa99059a02281ef.js +0 -31
- data/test/dummy/public/assets/stylesheets/application-084630668892a3d31830a3759745a582.css +0 -10478
- data/test/dummy/public/assets/stylesheets/application-9097e8fd786603bf9b4f22c0ad4aab7b.css +0 -6
- data/test/dummy/public/assets/stylesheets/controller-084630668892a3d31830a3759745a582.css +0 -10478
- data/test/dummy/public/assets/stylesheets/controller_action-084630668892a3d31830a3759745a582.css +0 -10478
- data/test/dummy/public/assets/stylesheets/cutting_records-084630668892a3d31830a3759745a582.css +0 -10478
- data/test/dummy/public/assets/stylesheets/cutting_records_index-084630668892a3d31830a3759745a582.css +0 -10478
- data/test/dummy/public/assets/stylesheets/homes-60aed35175c8508853f14087857e6224.css +0 -6
data/lib/tasks/tool.rb
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
namespace :va do
|
2
|
+
namespace :tool do
|
3
|
+
require 'view_assets/manager/manager'
|
4
|
+
|
5
|
+
desc "Change Manifest Name"
|
6
|
+
task :mv, [:type, :original, :new_name] do |t, args|
|
7
|
+
case args.type
|
8
|
+
when 'js'
|
9
|
+
ViewAssets::Manager::JsModifier.new.update(args.original, args.new_name, { :verbal => true })
|
10
|
+
when 'css'
|
11
|
+
ViewAssets::Manager::CssModifier.new.update(args.original, args.new_name, { :verbal => true })
|
12
|
+
else
|
13
|
+
puts "Unrecognized Type: #{args.type}"
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
desc "Remove Manifest"
|
18
|
+
task :rm, [:type, :manifest] do |t, args|
|
19
|
+
case args.type
|
20
|
+
when 'js'
|
21
|
+
ViewAssets::Manager::JsModifier.new.remove(args.manifest, { :verbal => true })
|
22
|
+
when 'css'
|
23
|
+
ViewAssets::Manager::CssModifier.new.remove(args.manifest, { :verbal => true })
|
24
|
+
else
|
25
|
+
puts "Unrecognized Type: #{args.type}"
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -8,29 +8,29 @@ module ViewAssets
|
|
8
8
|
if [JS_TYPE, CSS_TYPE].include?(asset_type)
|
9
9
|
@asset_type = asset_type
|
10
10
|
else
|
11
|
-
raise ConfigurationError.new("asset type should be '#{JS_TYPE}' or '#{CSS_TYPE}'")
|
11
|
+
raise ConfigurationError.new("asset type should be '#{JS_TYPE}' or '#{CSS_TYPE}'")
|
12
12
|
end
|
13
13
|
end
|
14
|
-
|
15
|
-
# TODO realize this method
|
16
|
-
# remember to take different syntax into consideration
|
17
|
-
def ending_directive?(primitive_params)
|
18
|
-
|
19
|
-
end
|
20
|
-
|
14
|
+
|
15
|
+
# # TODO realize this method
|
16
|
+
# # remember to take different syntax into consideration
|
17
|
+
# def ending_directive?(primitive_params)
|
18
|
+
# # primitive_params.match
|
19
|
+
# end
|
20
|
+
|
21
21
|
# TODO add docs
|
22
22
|
def legal_directive?(primitive_params)
|
23
23
|
[vendor_directive, lib_directive, app_directive].any? { |d| d =~ primitive_params }
|
24
24
|
end
|
25
|
-
|
25
|
+
|
26
26
|
# return root folder and all the path params that have been split
|
27
27
|
# TODO this method bellow need refactor
|
28
28
|
def parse(primitive_params)
|
29
29
|
asset_root = ''
|
30
30
|
path_param_str = ''
|
31
31
|
path_params = []
|
32
|
-
unknown_directive = false
|
33
|
-
|
32
|
+
# unknown_directive = false
|
33
|
+
|
34
34
|
# TODO make sure path_param_str will return nil for non-matched result and array for matched result
|
35
35
|
# rememer to write tests for this section of codes
|
36
36
|
if vendor_directive =~ primitive_params
|
@@ -42,30 +42,30 @@ module ViewAssets
|
|
42
42
|
elsif app_directive =~ primitive_params
|
43
43
|
asset_root = 'app'
|
44
44
|
path_param_str = primitive_params.match(app_directive)[:path_params]
|
45
|
-
else
|
46
|
-
|
47
|
-
|
48
|
-
|
45
|
+
# else
|
46
|
+
# # TODO remove UnknownDirectiveError or try to find another way to get thing done
|
47
|
+
# # raise UnknownDirectiveError.new "'#{primitive_params}' is not in legal directive format"
|
48
|
+
# unknown_directive = true
|
49
49
|
end
|
50
|
-
|
50
|
+
|
51
51
|
# TODO refactor codes bellow after the above paragraph was refactored
|
52
52
|
would_be_path_params = path_param_str.strip.split(/,\s?/)
|
53
53
|
# would_be_path_params = [would_be_path_params] if would_be_path_params.kind_of?(String)
|
54
54
|
path_params = would_be_path_params unless would_be_path_params.empty?
|
55
|
-
|
55
|
+
|
56
56
|
# unknown_directive ? [nil, nil] : [asset_root, path_params.strip.split(/,\s?/)]
|
57
|
-
#
|
57
|
+
# TODO: add rspec examples for returning a ['', []] when the primitive_params is illegal
|
58
58
|
[asset_root, path_params]
|
59
59
|
end
|
60
|
-
|
60
|
+
|
61
61
|
# def all_directives
|
62
62
|
# /#{tree_directive}|#{file_directive}/
|
63
63
|
# end
|
64
|
-
|
64
|
+
|
65
65
|
def vendor_directive
|
66
66
|
@vendor_directive ||= generate_formula 'require_vendor'
|
67
67
|
end
|
68
|
-
|
68
|
+
|
69
69
|
def lib_directive
|
70
70
|
@lib_directive ||= generate_formula 'require_lib'
|
71
71
|
end
|
@@ -73,19 +73,19 @@ module ViewAssets
|
|
73
73
|
def app_directive
|
74
74
|
@app_directive ||= generate_formula
|
75
75
|
end
|
76
|
-
|
76
|
+
|
77
77
|
private
|
78
|
-
|
78
|
+
|
79
79
|
##
|
80
80
|
# for javascript
|
81
81
|
# double-slash syntax => "//= require_vendor xxx"
|
82
82
|
# space-asterisk syntax => " *= require_vendor xxx"
|
83
83
|
# slash-asterisk syntax => "/*= require_vendor xxx */"
|
84
|
-
#
|
84
|
+
#
|
85
85
|
# for stylesheets
|
86
86
|
# space-asterisk syntax => " *= require_vendor xxx"
|
87
87
|
# slash-asterisk syntax => "/*= require_vendor xxx */"
|
88
|
-
#
|
88
|
+
#
|
89
89
|
# TODO refactor: use reasonable and effective regular expression
|
90
90
|
# TODO use "require_app" as app asset directive and make "require" as a relative directive
|
91
91
|
# TODO BUG => rspec examples is unqualified on slash-asterisk syntax for css
|
@@ -107,7 +107,7 @@ module ViewAssets
|
|
107
107
|
}x
|
108
108
|
end
|
109
109
|
end
|
110
|
-
|
110
|
+
|
111
111
|
def javascript? type
|
112
112
|
%w(js javascript javascripts).include? type
|
113
113
|
end
|
@@ -32,17 +32,17 @@ module ViewAssets
|
|
32
32
|
# :action => nil
|
33
33
|
# :full => false
|
34
34
|
# :tagged => false
|
35
|
+
# :tagged => false
|
36
|
+
# :shallow => false
|
35
37
|
# TODO: need to retrive action-less assets
|
36
38
|
def retrieve(controller = '', action = '', options = {})
|
37
|
-
|
39
|
+
options = { :full => false, :tagged => false, :shallow => false }.update(options)
|
38
40
|
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
@
|
43
|
-
@
|
44
|
-
@controller = controller
|
45
|
-
@action = action
|
41
|
+
@assets = []
|
42
|
+
@parsed_manifests = []
|
43
|
+
@controller = controller
|
44
|
+
@action = action
|
45
|
+
@shallow_retrieval = options[:shallow]
|
46
46
|
|
47
47
|
retrieve_controller_assets
|
48
48
|
retrieve_action_assets if @action != ''
|
@@ -54,12 +54,32 @@ module ViewAssets
|
|
54
54
|
@assets
|
55
55
|
end
|
56
56
|
|
57
|
+
# manifest path should be a relative path
|
58
|
+
def retrieve_manifest(manifest, options = {})
|
59
|
+
options = { :full => false, :tagged => false, :shallow => false, :non_ext => true }.update(options)
|
60
|
+
|
61
|
+
@assets = []
|
62
|
+
@parsed_manifests = []
|
63
|
+
@controller = options[:controller]
|
64
|
+
@action = options[:action]
|
65
|
+
@shallow_retrieval = options[:shallow]
|
66
|
+
|
67
|
+
@assets = meta_retrieve(root, manifest)
|
68
|
+
@assets.uniq!
|
69
|
+
|
70
|
+
@assets.map! { |asset| PathInfo.new(asset).abs } if options[:full]
|
71
|
+
@assets.map! { |asset| tag("/#{asset.rel}") } if options[:tagged]
|
72
|
+
|
73
|
+
@assets
|
74
|
+
end
|
75
|
+
|
57
76
|
private
|
58
77
|
|
59
78
|
##
|
60
79
|
# Check out whether all assets is existed or not
|
61
80
|
# It is better to be turned off in production
|
62
81
|
# TODO: add Rspec Examples
|
82
|
+
# TODO: apply verify function
|
63
83
|
def verify
|
64
84
|
all_assets.each do |asset|
|
65
85
|
raise AssetNotFound.new("File #{asset} DOEST EXIST") unless FileTest.exist?(asset.abs)
|
@@ -82,7 +102,10 @@ module ViewAssets
|
|
82
102
|
manifest = controller_manifest if FileTest.exist?(controller_manifest)
|
83
103
|
|
84
104
|
# TODO add rspec example
|
85
|
-
return assets if manifest.nil?
|
105
|
+
return @assets if manifest.nil?
|
106
|
+
|
107
|
+
# TODO: test when application is not exist
|
108
|
+
return @assets.push(manifest.rel) if @shallow_retrieval
|
86
109
|
|
87
110
|
@assets.concat(retrieve_assets_from(manifest) << manifest.rel)
|
88
111
|
end
|
@@ -115,9 +138,9 @@ module ViewAssets
|
|
115
138
|
end
|
116
139
|
end
|
117
140
|
|
118
|
-
#
|
141
|
+
# Start Point of Parsing Dependent Assets
|
119
142
|
def retrieve_assets_from(manifest)
|
120
|
-
# TODO
|
143
|
+
# TODO: Rspec Examples for non-Existed Files
|
121
144
|
return [] if @parsed_manifests.include?(manifest) || !FileTest.exist?(manifest)
|
122
145
|
@parsed_manifests.push(manifest)
|
123
146
|
|
@@ -131,6 +154,7 @@ module ViewAssets
|
|
131
154
|
required_assets.flatten
|
132
155
|
end
|
133
156
|
|
157
|
+
# Support Multiple Path Params
|
134
158
|
def analyze(asset_category, path_params)
|
135
159
|
case asset_category
|
136
160
|
when 'vendor'
|
@@ -150,20 +174,24 @@ module ViewAssets
|
|
150
174
|
def retrieve_app_asset(required_asset)
|
151
175
|
required_asset = PathInfo.new(required_asset)
|
152
176
|
|
153
|
-
dir = "#{app_path}
|
177
|
+
dir = "#{app_path}#{required_asset.match(/^\//) ? '' : "/#{@controller}/"}"
|
154
178
|
asset = "#{required_asset}#{required_asset.with_ext? ? '' : ".#{asset_extension}"}"
|
155
179
|
PathInfo.new(dir + asset).rel
|
156
180
|
end
|
157
181
|
|
158
182
|
def retrieve_vendor_assets(manifest)
|
183
|
+
return PathInfo.new("#{vendor_path}/#{manifest}").rel if @shallow_retrieval
|
184
|
+
|
159
185
|
meta_retrieve(vendor_path, manifest)
|
160
186
|
end
|
161
187
|
|
162
188
|
def retrieve_lib_assets(manifest)
|
189
|
+
return PathInfo.new("#{lib_path}/#{manifest}").rel if @shallow_retrieval
|
190
|
+
|
163
191
|
meta_retrieve(lib_path, manifest)
|
164
192
|
end
|
165
193
|
|
166
|
-
#
|
194
|
+
# For lib and vendor assets, finder will assume that it was stored in the
|
167
195
|
# root of vendor|lib and the file itself is a manifest file at first. If
|
168
196
|
# that isn't the case, finder will try to locate it in
|
169
197
|
# vendor|lib/:lib_or_vendor_name and take index.js inside that folder as
|
@@ -174,7 +202,8 @@ module ViewAssets
|
|
174
202
|
# todo BUG => can't retrieve assets with slash-asterisk(/*= xxx */) directive.
|
175
203
|
# todo add specs for testing required folders without index
|
176
204
|
def meta_retrieve(manifest_path, manifest)
|
177
|
-
|
205
|
+
# TODO: add Tests for Manifest With File Extension
|
206
|
+
single_file_lib = PathInfo.new("#{manifest_path}/#{manifest}#{PathInfo.new(manifest).with_ext? ? '' : ".#{asset_extension}"}")
|
178
207
|
|
179
208
|
manifest_dir = "#{manifest_path}/#{manifest}"
|
180
209
|
indexing_lib = PathInfo.new("#{manifest_dir}/index.#{asset_extension}")
|
@@ -183,7 +212,7 @@ module ViewAssets
|
|
183
212
|
real_manifest = nil
|
184
213
|
if FileTest.exist?(single_file_lib)
|
185
214
|
real_manifest = single_file_lib
|
186
|
-
# TODO refactor => add for a hotfix loading required folders without index
|
215
|
+
# TODO: refactor => add for a hotfix loading required folders without index
|
187
216
|
|
188
217
|
all_assets_in_manifest_dir = [real_manifest.rel]
|
189
218
|
else FileTest.exist?(indexing_lib)
|
@@ -192,6 +221,8 @@ module ViewAssets
|
|
192
221
|
all_assets_in_manifest_dir = Dir["#{manifest_dir}/**/*.#{asset_extension}"].map { |file| PathInfo.new(file).rel }
|
193
222
|
end
|
194
223
|
|
224
|
+
# return all_assets_in_manifest_dir if @shallow_retrieval
|
225
|
+
|
195
226
|
# TODO add specs for dependent assets sequence
|
196
227
|
retrieve_assets_from(real_manifest).flatten
|
197
228
|
.concat(all_assets_in_manifest_dir)
|
@@ -1,24 +1,12 @@
|
|
1
1
|
module ViewAssets
|
2
2
|
module Manager
|
3
|
+
require 'yaml'
|
4
|
+
require 'term/ansicolor'
|
5
|
+
|
3
6
|
require 'view_assets'
|
4
7
|
require 'view_assets/finder/core'
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
end
|
10
|
-
|
11
|
-
def read(asset)
|
12
|
-
|
13
|
-
end
|
14
|
-
|
15
|
-
def update(old_asset, new_asset)
|
16
|
-
|
17
|
-
end
|
18
|
-
|
19
|
-
def remove(asset)
|
20
|
-
|
21
|
-
end
|
22
|
-
end
|
8
|
+
require 'view_assets/packager/actions_map'
|
9
|
+
require 'view_assets/manager/map'
|
10
|
+
require 'view_assets/manager/modifier'
|
23
11
|
end
|
24
12
|
end
|
@@ -0,0 +1,110 @@
|
|
1
|
+
module ViewAssets
|
2
|
+
module Manager
|
3
|
+
class Map
|
4
|
+
def draw
|
5
|
+
map = { :vendor => {}, :lib => {}, :app => {} }
|
6
|
+
|
7
|
+
# App
|
8
|
+
# Application
|
9
|
+
application_manifest = PathInfo.new("#{app_path}/#{asset_path}/application")
|
10
|
+
app_covered_action = false
|
11
|
+
if FileTest.exist?("#{application_manifest.abs}.#{ext}")
|
12
|
+
map[:app][application_manifest.to_s] = finder.retrieve_manifest(application_manifest, { :shallow => true })
|
13
|
+
app_covered_action = true
|
14
|
+
end
|
15
|
+
|
16
|
+
# Controllers and Actions
|
17
|
+
actions = action_map.retrieve
|
18
|
+
actions.each do |controller, actions|
|
19
|
+
controller_manifest = PathInfo.new("#{app_path}/#{asset_path}/#{controller}/#{controller}")
|
20
|
+
controller_convered_action = false
|
21
|
+
if FileTest.exist?("#{controller_manifest.abs}.#{ext}")
|
22
|
+
map[:app][controller_manifest.to_s] = finder.retrieve_manifest(controller_manifest, { :shallow => true, :controller => controller })
|
23
|
+
|
24
|
+
controller_convered_action = true
|
25
|
+
end
|
26
|
+
|
27
|
+
actions.each do |action|
|
28
|
+
action_manifest = "#{app_path}/#{asset_path}/#{controller}/#{action}"
|
29
|
+
map[:app][action_manifest] = finder.retrieve(controller, action, { :shallow => true, :controller => controller, :action => action })
|
30
|
+
|
31
|
+
if controller_convered_action || app_covered_action
|
32
|
+
map[:app][action_manifest][0] = map[:app][action_manifest][0].basename
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
# Vendor
|
38
|
+
Pathname.new("#{root}/#{vendor_path}/#{asset_path}").children.each do |entry|
|
39
|
+
manifest = PathInfo.new(entry.to_s).rel
|
40
|
+
|
41
|
+
map[:vendor][manifest.basename] = finder.retrieve_manifest(manifest.rel, { :shallow => true })
|
42
|
+
end
|
43
|
+
|
44
|
+
# Lib
|
45
|
+
Pathname.new("#{root}/#{lib_path}/#{asset_path}").children.each do |entry|
|
46
|
+
manifest = PathInfo.new(entry.to_s).rel
|
47
|
+
|
48
|
+
map[:lib][manifest.basename] = finder.retrieve_manifest(manifest.rel, { :shallow => true })
|
49
|
+
end
|
50
|
+
|
51
|
+
FileUtils.mkdir_p("#{root}/assets")
|
52
|
+
File.open("#{root}/assets/#{asset_path}_assets.yml", 'w') { |file| file << YAML.dump(map) }
|
53
|
+
|
54
|
+
map
|
55
|
+
end
|
56
|
+
|
57
|
+
def root
|
58
|
+
Rails.public_path
|
59
|
+
end
|
60
|
+
|
61
|
+
def app_path
|
62
|
+
::ViewAssets::APP_FOLDER
|
63
|
+
end
|
64
|
+
|
65
|
+
def vendor_path
|
66
|
+
::ViewAssets::VENDOR_FOLDER
|
67
|
+
end
|
68
|
+
|
69
|
+
def lib_path
|
70
|
+
::ViewAssets::LIB_FOLDER
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
class JsMap < Map
|
75
|
+
def ext
|
76
|
+
JS_EXT
|
77
|
+
end
|
78
|
+
|
79
|
+
def asset_path
|
80
|
+
JS_PATH
|
81
|
+
end
|
82
|
+
|
83
|
+
def action_map
|
84
|
+
::ViewAssets::Packager::JsActionsMap.new
|
85
|
+
end
|
86
|
+
|
87
|
+
def finder
|
88
|
+
::ViewAssets::Finder::JsFinder.new
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
class CssMap < Map
|
93
|
+
def ext
|
94
|
+
CSS_EXT
|
95
|
+
end
|
96
|
+
|
97
|
+
def asset_path
|
98
|
+
CSS_PATH
|
99
|
+
end
|
100
|
+
|
101
|
+
def action_map
|
102
|
+
::ViewAssets::Packager::CssActionsMap.new
|
103
|
+
end
|
104
|
+
|
105
|
+
def finder
|
106
|
+
::ViewAssets::Finder::CssFinder.new
|
107
|
+
end
|
108
|
+
end
|
109
|
+
end
|
110
|
+
end
|
@@ -0,0 +1,214 @@
|
|
1
|
+
module ViewAssets
|
2
|
+
module Manager
|
3
|
+
class Modifier
|
4
|
+
include Term::ANSIColor
|
5
|
+
|
6
|
+
def update(index, new_index, options = {})
|
7
|
+
options = { :verbal => false }.update(options)
|
8
|
+
|
9
|
+
type = retrieve_type(index)
|
10
|
+
validate_index = map[type].key?(index)
|
11
|
+
|
12
|
+
# unless validate_index
|
13
|
+
# map.each_value do |manifests|
|
14
|
+
# validate_index = manifests.select do |manifest, indexes|
|
15
|
+
# indexes.any? do |map_index|
|
16
|
+
# map_index.match(index)
|
17
|
+
# end
|
18
|
+
# end
|
19
|
+
#
|
20
|
+
# break if validate_index
|
21
|
+
# end
|
22
|
+
# end
|
23
|
+
|
24
|
+
raise Error.new(red("#{index} is not exist.")) unless validate_index
|
25
|
+
|
26
|
+
puts green("mv #{index}, #{new_index}") if options[:verbal]
|
27
|
+
update_index(index, new_index)
|
28
|
+
update_requirements(index, new_index, options)
|
29
|
+
end
|
30
|
+
|
31
|
+
def retrieve_type(index)
|
32
|
+
case
|
33
|
+
when /^vendor\/.+$/.match(index)
|
34
|
+
:vendor
|
35
|
+
when /^lib\/.+$/.match(index)
|
36
|
+
:lib
|
37
|
+
when /^app\/.+$/.match(index)
|
38
|
+
:app
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
def update_index(index, new_index)
|
43
|
+
path_to_index = PathInfo.new(index).abs
|
44
|
+
new_path_to_index = PathInfo.new(new_index).abs
|
45
|
+
|
46
|
+
if FileTest.exists?(path_to_index)
|
47
|
+
FileUtils.mv(path_to_index, new_path_to_index)
|
48
|
+
elsif FileTest.exists?("#{path_to_index}.#{ext}")
|
49
|
+
FileUtils.mv("#{path_to_index}.#{ext}", "#{new_path_to_index}.#{ext}")
|
50
|
+
else
|
51
|
+
raise Error.new(red("Manifest #{index} doesn't exist."))
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
def update_requirements(index, new_index, options = {})
|
56
|
+
options = { :verbal => false }.update(options)
|
57
|
+
|
58
|
+
map.each_value do |type|
|
59
|
+
type.each do |manifest, requirements|
|
60
|
+
if requirements.any? { |requirement| requirement == index }
|
61
|
+
puts ("Update #{green(manifest)}") if options[:verbal]
|
62
|
+
|
63
|
+
if new_index.empty?
|
64
|
+
requirements.delete(index)
|
65
|
+
else
|
66
|
+
requirements[requirements.index(index)] = new_index
|
67
|
+
end
|
68
|
+
|
69
|
+
modify(manifest, generate_requirements_block(manifest, requirements))
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
def generate_requirements_block(manifest, requirements)
|
76
|
+
if retrieve_type(manifest) == :app
|
77
|
+
# Remove 'app/:asset_path/application' or
|
78
|
+
# 'app/:asset_path/application.:ext'
|
79
|
+
requirements.delete("app/#{asset_path}/application")
|
80
|
+
requirements.delete("app/#{asset_path}/application.#{ext}")
|
81
|
+
|
82
|
+
# Remove 'app/:asset_path/controller/controller' or
|
83
|
+
# 'app/:asset_path/controller/controller.ext'
|
84
|
+
if manifest.count('/') > 2
|
85
|
+
controller_asset = manifest.gsub(
|
86
|
+
/(?<path>.+\/.+\/(?<controller>.+)\/).+/,
|
87
|
+
'\k<path>\k<controller>'
|
88
|
+
)
|
89
|
+
|
90
|
+
requirements.delete("#{controller_asset}")
|
91
|
+
requirements.delete("#{controller_asset}.#{ext}")
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
requirements.delete("#{manifest}.#{ext}")
|
96
|
+
requirements.reject! { |req| req.match(manifest + '/') }
|
97
|
+
|
98
|
+
requirements.each_with_object(["/**"]) do |requirement, block|
|
99
|
+
directive, prefix = case retrieve_type(requirement)
|
100
|
+
when :vendor
|
101
|
+
[' *= require_vendor ', "vendor/#{asset_path}/"]
|
102
|
+
when :lib
|
103
|
+
[' *= require_lib ', "lib/#{asset_path}/"]
|
104
|
+
when :app
|
105
|
+
[' *= require ', "app/#{asset_path}"]
|
106
|
+
end
|
107
|
+
|
108
|
+
block.push("#{directive}#{requirement.gsub(prefix, "")}")
|
109
|
+
end.push(' */').join("\n")+"\n"
|
110
|
+
end
|
111
|
+
|
112
|
+
def remove(index, options = {})
|
113
|
+
options = { :verbal => false }.update(options)
|
114
|
+
|
115
|
+
raise Error.new(red("#{index} is not exist.")) unless map[retrieve_type(index)].key?(index)
|
116
|
+
|
117
|
+
puts green("rm #{index}") if options[:verbal]
|
118
|
+
index_path = PathInfo.new(index).abs
|
119
|
+
if FileTest.exist?("#{index_path}.#{ext}")
|
120
|
+
FileUtils.rm_r("#{index_path}.#{ext}")
|
121
|
+
elsif FileTest.exist?(index_path)
|
122
|
+
FileUtils.rm_r("#{index_path}")
|
123
|
+
else
|
124
|
+
raise Error.new(red("#{index} Is Not Exist."))
|
125
|
+
end
|
126
|
+
|
127
|
+
update_requirements(index, '', options)
|
128
|
+
end
|
129
|
+
|
130
|
+
def modify(path, new_requirement_block)
|
131
|
+
path = PathInfo.new(path).abs
|
132
|
+
manifest = if FileTest.exists?("#{path}.#{ext}")
|
133
|
+
"#{path}.#{ext}"
|
134
|
+
elsif FileTest.exists?("#{path}/index.#{ext}")
|
135
|
+
"#{path}/index.#{ext}"
|
136
|
+
else
|
137
|
+
raise Error.new(red("Can't Load #{path.rel}"))
|
138
|
+
end
|
139
|
+
|
140
|
+
start_of_requirement_block = false
|
141
|
+
end_of_requirement_block = false
|
142
|
+
asset_content = ''
|
143
|
+
|
144
|
+
Pathname.new(manifest).each_line do |line|
|
145
|
+
legal_directive = analyize(*directive.parse(line))
|
146
|
+
|
147
|
+
start_of_requirement_block = true if legal_directive && !start_of_requirement_block
|
148
|
+
end_of_requirement_block = true if !legal_directive && start_of_requirement_block && !end_of_requirement_block
|
149
|
+
|
150
|
+
if !start_of_requirement_block || end_of_requirement_block
|
151
|
+
asset_content << line
|
152
|
+
end
|
153
|
+
end
|
154
|
+
|
155
|
+
File.open(manifest, 'w') do |file|
|
156
|
+
file << new_requirement_block
|
157
|
+
file << asset_content
|
158
|
+
end
|
159
|
+
end
|
160
|
+
|
161
|
+
def analyize(type, asset)
|
162
|
+
return type != '' || asset != []
|
163
|
+
end
|
164
|
+
|
165
|
+
def map
|
166
|
+
@map_value
|
167
|
+
end
|
168
|
+
|
169
|
+
def update_map
|
170
|
+
@map_value = @map.draw
|
171
|
+
end
|
172
|
+
end
|
173
|
+
|
174
|
+
class JsModifier < Modifier
|
175
|
+
def initialize
|
176
|
+
@map = ::ViewAssets::Manager::JsMap.new
|
177
|
+
@map_value = @map.draw
|
178
|
+
end
|
179
|
+
|
180
|
+
DIRECTIVE = ::ViewAssets::Finder::Directive.new(JS_TYPE)
|
181
|
+
def directive
|
182
|
+
DIRECTIVE
|
183
|
+
end
|
184
|
+
|
185
|
+
def ext
|
186
|
+
JS_EXT
|
187
|
+
end
|
188
|
+
|
189
|
+
def asset_path
|
190
|
+
::ViewAssets::JS_PATH
|
191
|
+
end
|
192
|
+
end
|
193
|
+
|
194
|
+
class CssModifier < Modifier
|
195
|
+
def initialize
|
196
|
+
@map = ::ViewAssets::Manager::CssMap.new
|
197
|
+
@map_value = @map.draw
|
198
|
+
end
|
199
|
+
|
200
|
+
DIRECTIVE = ::ViewAssets::Finder::Directive.new(CSS_TYPE)
|
201
|
+
def directive
|
202
|
+
DIRECTIVE
|
203
|
+
end
|
204
|
+
|
205
|
+
def ext
|
206
|
+
CSS_EXT
|
207
|
+
end
|
208
|
+
|
209
|
+
def asset_path
|
210
|
+
::ViewAssets::CSS_PATH
|
211
|
+
end
|
212
|
+
end
|
213
|
+
end
|
214
|
+
end
|