-
Notifications
You must be signed in to change notification settings - Fork 0
/
jekyll-bower.rb
70 lines (56 loc) · 1.75 KB
/
jekyll-bower.rb
1
2
3
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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
require "fileutils"
require "json"
ASSET_DIR = "assets"
BOWERCONFIG = ".bowerrc"
BOWERJSON = "bower.json"
DEFAULT_DIR = "bower_components"
class Bower_helper
# Finds where bower components are being installed.
# # This can either be the default bower_components
# # or a directory defined in .bowerrc
def bower_dir
if(File.exist?(BOWERCONFIG))
rcFile = JSON.parse(File.read(BOWERCONFIG))
return rcFile["directory"] || DEFAULT_DIR
else
return DEFAULT_DIR
end
end
# given a dependancies dir 'dir', analyze its bower.json
# from that file get its 'main' file and the dependancies name
def extract_dependancy(component)
bower_file = File.join(component, BOWERJSON)
if(!File.exist?(bower_file))
logger.warn "no #{BOWERJSON} file found for #{component}"
return
end
bower_file = JSON.parse(File.read(bower_file))
if(!bower_file.has_key?('main'))
logger.warn "No main section found for #{component}"
return
end
files_ = bower_file['main']
files = files_.is_a?(Array) ? files_ : [files_]
{
:name => bower_file['name'],
:files => files
}
end
end
bower_dir = Bower_helper.new().bower_dir
component_search = File.join(bower_dir,"*")
packages = Dir.glob(component_search).select{|c| File.directory? c}.map { |component|
Bower_helper.new().extract_dependancy component
}
packages.each do |package|
package_name = package[:name]
package_dest = File.join(ASSET_DIR, package_name)
package[:files].each do |filepath|
file_dest = File.join(package_dest, File.dirname(filepath))
file_src = File.join(bower_dir, package_name, filepath)
if(!Dir.exist?(file_dest))
FileUtils.mkdir_p(file_dest)
end
FileUtils.cp(file_src, file_dest)
end
end