ruby-quilt 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.
- data/lib/quilt.rb +70 -44
- metadata +1 -1
data/lib/quilt.rb
CHANGED
@@ -7,6 +7,8 @@ class Quilt
|
|
7
7
|
COMMON_KEY = "common"
|
8
8
|
OPTIONAL_KEY = "optional"
|
9
9
|
FOOTER_KEY = "footer"
|
10
|
+
PREFIX_KEY = "prefix"
|
11
|
+
DEBUG_PREFIX_KEY = "debug_prefix"
|
10
12
|
|
11
13
|
def initialize(config, log = Logger.new(STDOUT))
|
12
14
|
@config = config;
|
@@ -39,7 +41,7 @@ class Quilt
|
|
39
41
|
|
40
42
|
def get_module_name(filename)
|
41
43
|
return nil unless filename
|
42
|
-
matches = filename.match(/(^.*\/|^)(
|
44
|
+
matches = filename.match(/(^.*\/|^)(.+)\.[^.]+$/)
|
43
45
|
return nil unless matches && matches.length >= 3
|
44
46
|
matches[2]
|
45
47
|
end
|
@@ -61,20 +63,35 @@ class Quilt
|
|
61
63
|
def load_version(local_path, version_name)
|
62
64
|
log_debug("Loading Version: "+version_name)
|
63
65
|
manifest = {}
|
64
|
-
|
66
|
+
new_version = {
|
65
67
|
:name => version_name,
|
66
68
|
:dir => File.join(local_path, version_name),
|
67
|
-
:
|
68
|
-
|
69
|
+
:default => {
|
70
|
+
:base => '',
|
71
|
+
:optional => {},
|
72
|
+
}
|
69
73
|
}
|
70
74
|
begin
|
71
|
-
manifest = JSON.parse(File.read(File.join(
|
75
|
+
manifest = JSON.parse(File.read(File.join(new_version[:dir], "manifest.json")))
|
76
|
+
new_version[:default][:dir] =
|
77
|
+
manifest[PREFIX_KEY] ? File.join(new_version[:dir], manifest[PREFIX_KEY]) :
|
78
|
+
new_version[:dir]
|
79
|
+
if (manifest[DEBUG_PREFIX_KEY])
|
80
|
+
new_version[:debug] = {
|
81
|
+
:dir => manifest[DEBUG_PREFIX_KEY] ? File.join(new_version[:dir], manifest[DEBUG_PREFIX_KEY]) :
|
82
|
+
new_version[:dir],
|
83
|
+
:base => '',
|
84
|
+
:optional => {}
|
85
|
+
}
|
86
|
+
end
|
72
87
|
rescue Exception => e
|
73
88
|
log_error(" Could not read manifest!", e);
|
74
89
|
return nil
|
75
90
|
end
|
76
91
|
# manifest.json:
|
77
92
|
# {
|
93
|
+
# "prefix" : "<prefix directory>"
|
94
|
+
# "debug_prefix : "<debug prefix directory"
|
78
95
|
# "header" : "<header file>",
|
79
96
|
# "footer" : "<footer file>",
|
80
97
|
# "common" : [
|
@@ -86,46 +103,53 @@ class Quilt
|
|
86
103
|
# ...
|
87
104
|
# }
|
88
105
|
# }
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
manifest[HEADER_KEY]), "rb").read}"
|
93
|
-
rescue Exception => e
|
94
|
-
log_error(" Could not load header: #{manifest[HEADER_KEY]}", e)
|
95
|
-
end
|
96
|
-
end
|
97
|
-
if manifest[COMMON_KEY] && manifest[COMMON_KEY].is_a?(Array)
|
98
|
-
manifest[COMMON_KEY].each do |filename|
|
106
|
+
module_loader = Proc.new do |prefix|
|
107
|
+
dir = new_version[prefix][:dir]
|
108
|
+
if manifest[HEADER_KEY]
|
99
109
|
begin
|
100
|
-
|
101
|
-
|
110
|
+
new_version[prefix][:base] =
|
111
|
+
"#{new_version[prefix][:base]}#{File.open(File.join(dir, manifest[HEADER_KEY]), "rb").read}"
|
102
112
|
rescue Exception => e
|
103
|
-
log_error(" Could not load
|
113
|
+
log_error(" Could not load #{prefix.to_s} header: #{manifest[HEADER_KEY]}", e)
|
104
114
|
end
|
105
115
|
end
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
newVersion[:modules][tmp_module_name] = tmp_module
|
114
|
-
else
|
115
|
-
log_error(" Could not extract module name from: #{filename}")
|
116
|
+
if manifest[COMMON_KEY] && manifest[COMMON_KEY].is_a?(Array)
|
117
|
+
manifest[COMMON_KEY].each do |filename|
|
118
|
+
begin
|
119
|
+
new_version[prefix][:base] =
|
120
|
+
"#{new_version[prefix][:base]}#{File.open(File.join(dir, filename), "rb").read}"
|
121
|
+
rescue Exception => e
|
122
|
+
log_error(" Could not load #{prefix.to_s} common module: #{filename}", e)
|
116
123
|
end
|
117
124
|
end
|
118
125
|
end
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
+
if manifest[OPTIONAL_KEY] && manifest[OPTIONAL_KEY].is_a?(Hash)
|
127
|
+
manifest[OPTIONAL_KEY].each do |filename, dependancies|
|
128
|
+
tmp_module = get_module(filename, dependancies, dir)
|
129
|
+
if (tmp_module)
|
130
|
+
tmp_module_name = get_module_name(filename)
|
131
|
+
if (tmp_module_name)
|
132
|
+
new_version[prefix][:optional][tmp_module_name] = tmp_module
|
133
|
+
else
|
134
|
+
log_error(" Could not extract #{prefix.to_s} module name from: #{filename}")
|
135
|
+
end
|
136
|
+
end
|
137
|
+
end
|
138
|
+
end
|
139
|
+
if manifest[FOOTER_KEY]
|
140
|
+
begin
|
141
|
+
new_version[prefix][:footer] = File.open(File.join(dir, manifest[FOOTER_KEY]), "rb").read
|
142
|
+
rescue Exception => e
|
143
|
+
log_error(" Could not load #{prefix.to_s} footer: #{manifest[FOOTER_KEY]}", e)
|
144
|
+
new_version[:footer] = nil
|
145
|
+
end
|
126
146
|
end
|
127
147
|
end
|
128
|
-
|
148
|
+
|
149
|
+
module_loader.call(:default)
|
150
|
+
module_loader.call(:debug) if new_version[:debug]
|
151
|
+
|
152
|
+
new_version
|
129
153
|
end
|
130
154
|
|
131
155
|
def resolve_dependancies(modules, version, all_modules = {})
|
@@ -134,7 +158,7 @@ class Quilt
|
|
134
158
|
my_all_modules = all_modules
|
135
159
|
modules.each do |name|
|
136
160
|
break if my_all_modules[name] == 2
|
137
|
-
if (!version[:
|
161
|
+
if (!version[:optional][name] || !version[:optional][name][:module])
|
138
162
|
log_error(" invalid module: #{name}");
|
139
163
|
my_all_modules[name] = 2
|
140
164
|
break
|
@@ -144,8 +168,8 @@ class Quilt
|
|
144
168
|
break
|
145
169
|
end
|
146
170
|
my_all_modules[name] = 1
|
147
|
-
out = "#{out}#{resolve_dependancies(version[:
|
148
|
-
out = "#{out}#{version[:
|
171
|
+
out = "#{out}#{resolve_dependancies(version[:optional][name][:dependancies], version, my_all_modules)}"
|
172
|
+
out = "#{out}#{version[:optional][name][:module]}"
|
149
173
|
my_all_modules[name] = 2
|
150
174
|
end
|
151
175
|
out
|
@@ -188,7 +212,7 @@ class Quilt
|
|
188
212
|
@versions[name] = load_version(@config[:local_path], name)
|
189
213
|
end
|
190
214
|
|
191
|
-
def stitch(selector, version_name)
|
215
|
+
def stitch(selector, version_name, prefix = :default)
|
192
216
|
return '' if !selector
|
193
217
|
version = get_version(version_name)
|
194
218
|
if (!version)
|
@@ -199,7 +223,7 @@ class Quilt
|
|
199
223
|
# get modules we want to use
|
200
224
|
modules = []
|
201
225
|
if (selector.is_a?(Proc))
|
202
|
-
modules = version[:
|
226
|
+
modules = version[prefix][:optional].keys.select do |mod|
|
203
227
|
selector.call(mod)
|
204
228
|
end
|
205
229
|
elsif (selector.is_a?(Array))
|
@@ -207,8 +231,10 @@ class Quilt
|
|
207
231
|
end
|
208
232
|
|
209
233
|
# resolve dependancies
|
210
|
-
output = "#{version[:base]}#{resolve_dependancies(modules,
|
211
|
-
|
212
|
-
|
234
|
+
output = "#{version[prefix][:base]}#{resolve_dependancies(modules,
|
235
|
+
version[prefix],
|
236
|
+
{})}#{version[prefix][:footer] ?
|
237
|
+
version[prefix][:footer] :
|
238
|
+
''}"
|
213
239
|
end
|
214
240
|
end
|