michaelforrest-tidy 0.1.1
Sign up to get free protection for your applications and to get access to all the features.
- data/Manifest +87 -0
- data/README +5 -0
- data/Rakefile +14 -0
- data/bin/tidyproject +33 -0
- data/lib/aslibs/as3/lbi/com/lbi/animation/animator/Animator.as +86 -0
- data/lib/aslibs/as3/lbi/com/lbi/animation/animator/Transition.as +142 -0
- data/lib/aslibs/as3/lbi/com/lbi/animation/group/Parallel.as +28 -0
- data/lib/aslibs/as3/lbi/com/lbi/animation/group/Queue.as +93 -0
- data/lib/aslibs/as3/lbi/com/lbi/animation/group/Sequence.as +28 -0
- data/lib/aslibs/as3/lbi/com/lbi/animation/group/Set.as +82 -0
- data/lib/aslibs/as3/lbi/com/lbi/animation/group/Stack.as +30 -0
- data/lib/aslibs/as3/lbi/com/lbi/animation/single/Animation.as +173 -0
- data/lib/aslibs/as3/lbi/com/lbi/animation/single/Message.as +36 -0
- data/lib/aslibs/as3/lbi/com/lbi/animation/single/MethodWithCompleteEvent.as +75 -0
- data/lib/aslibs/as3/lbi/com/lbi/animation/single/OrphanEvent.as +78 -0
- data/lib/aslibs/as3/lbi/com/lbi/animation/single/Pause.as +35 -0
- data/lib/aslibs/as3/lbi/com/lbi/animation/single/Tween.as +73 -0
- data/lib/aslibs/as3/lbi/com/lbi/animation/util/Easing.as +158 -0
- data/lib/aslibs/as3/lbi/com/lbi/animation/util/Engine.as +35 -0
- data/lib/aslibs/as3/lbi/com/lbi/animation/util/GroupCommon.as +62 -0
- data/lib/aslibs/as3/lbi/com/lbi/animation/util/IAnimation.as +30 -0
- data/lib/aslibs/as3/lbi/com/lbi/debug/DraggyClip.as +96 -0
- data/lib/aslibs/as3/lbi/com/lbi/debug/FPSView.as +48 -0
- data/lib/aslibs/as3/lbi/com/lbi/debug/KeySequenceTrigger.as +60 -0
- data/lib/aslibs/as3/lbi/com/lbi/debug/Log.as +168 -0
- data/lib/aslibs/as3/lbi/com/lbi/debug/LogItemType.as +23 -0
- data/lib/aslibs/as3/lbi/com/lbi/debug/LogType.as +31 -0
- data/lib/aslibs/as3/lbi/com/lbi/debug/ViewAnalysis.as +24 -0
- data/lib/aslibs/as3/lbi/com/lbi/media/IBufferable.as +16 -0
- data/lib/aslibs/as3/lbi/com/lbi/media/ITransportControllable.as +11 -0
- data/lib/aslibs/as3/lbi/com/lbi/mvc/collection/Collection.as +296 -0
- data/lib/aslibs/as3/lbi/com/lbi/mvc/collection/ISearchable.as +10 -0
- data/lib/aslibs/as3/lbi/com/lbi/mvc/collection/ISelectable.as +10 -0
- data/lib/aslibs/as3/lbi/com/lbi/mvc/collection/Matchable.as +9 -0
- data/lib/aslibs/as3/lbi/com/lbi/mvc/collection/Searchable.as +56 -0
- data/lib/aslibs/as3/lbi/com/lbi/mvc/collection/Selectable.as +49 -0
- data/lib/aslibs/as3/lbi/com/lbi/mvc/helper/Cloner.as +15 -0
- data/lib/aslibs/as3/lbi/com/lbi/mvc/helper/TypographyBase.as +194 -0
- data/lib/aslibs/as3/lbi/com/lbi/mvc/helper/preloading/LoadProgressEvent.as +18 -0
- data/lib/aslibs/as3/lbi/com/lbi/mvc/model/Application.as +45 -0
- data/lib/aslibs/as3/lbi/com/lbi/mvc/model/ConcurrentDependencyLoader.as +27 -0
- data/lib/aslibs/as3/lbi/com/lbi/mvc/model/EventMapper.as +85 -0
- data/lib/aslibs/as3/lbi/com/lbi/mvc/model/Hyperlink.as +36 -0
- data/lib/aslibs/as3/lbi/com/lbi/mvc/model/IEventMapper.as +10 -0
- data/lib/aslibs/as3/lbi/com/lbi/mvc/model/Merge.as +14 -0
- data/lib/aslibs/as3/lbi/com/lbi/mvc/model/SequentialDependencyLoader.as +43 -0
- data/lib/aslibs/as3/lbi/com/lbi/mvc/model/StringFormatting.as +142 -0
- data/lib/aslibs/as3/lbi/com/lbi/mvc/model/XMLListLoader.as +98 -0
- data/lib/aslibs/as3/lbi/com/lbi/mvc/model/XMLListLoaderDispatcher.as +52 -0
- data/lib/aslibs/as3/lbi/com/lbi/mvc/view/ViewBase.as +323 -0
- data/lib/aslibs/as3/lbi/com/quasimondo/geom/ColorMatrix.as +682 -0
- data/lib/script/as2/lib/as2_class.rb +37 -0
- data/lib/script/as2/lib/test/SampleClass.as +34 -0
- data/lib/script/as2/lib/test/as2_class_test.rb +15 -0
- data/lib/script/as2/navigation/bin/xml/__model.xml +7 -0
- data/lib/script/as2/navigation/navigation.rb +44 -0
- data/lib/script/as2/navigation/src/app/models/App.as +14 -0
- data/lib/script/as2/navigation/src/app/models/__Model.as +42 -0
- data/lib/script/as2/navigation/src/app/views/__model/__ModelView.as +61 -0
- data/lib/script/as2/navigation/src/app/views/__model/__ModelsView.as +33 -0
- data/lib/script/as2/project/project.rb +7 -0
- data/lib/script/as2/project/src/app/helpers/Colours.as +1 -0
- data/lib/script/as2/project/src/app/helpers/Typography.as +1 -0
- data/lib/script/as2/project/src/app/models/App.as +22 -0
- data/lib/script/as2/project/src/app/models/FlashVars.as +1 -0
- data/lib/script/as2/project/src/app/models/Linkages.as +8 -0
- data/lib/script/as2/project/src/app/views/AppView.as +21 -0
- data/lib/script/as3/project/project.rb +10 -0
- data/lib/script/as3/project/src/app/helpers/Colours.as +1 -0
- data/lib/script/as3/project/src/app/helpers/Typography.as +1 -0
- data/lib/script/as3/project/src/app/models/App.as +21 -0
- data/lib/script/as3/project/src/app/models/FlashVars.as +1 -0
- data/lib/script/as3/project/src/app/views/AppView.as +27 -0
- data/lib/script/as3/scaffold/bin/xml/__model.xml +0 -0
- data/lib/script/as3/scaffold/scaffold.rb +41 -0
- data/lib/script/as3/scaffold/src/models/__Model.as +11 -0
- data/lib/script/as3/scaffold/src/views/__model/__ModelDetailView.as +0 -0
- data/lib/script/as3/scaffold/src/views/__model/__ModelListItemView.as +0 -0
- data/lib/script/as3/scaffold/src/views/__model/__ModelListView.as +0 -0
- data/lib/script/bwlimit.rb +305 -0
- data/lib/script/generate +117 -0
- data/lib/script/server +4 -0
- data/lib/script/server.rb +20 -0
- data/lib/tidy_project.rb +19 -0
- data/tasks/build.rake +4 -0
- data/tasks/release.rake +8 -0
- data/test/test_tidy_project.rb +22 -0
- data/tidy.gemspec +33 -0
- metadata +229 -0
@@ -0,0 +1,305 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
|
4
|
+
require 'socket'
|
5
|
+
require 'fcntl'
|
6
|
+
require 'thread'
|
7
|
+
|
8
|
+
|
9
|
+
# Limits the amount of data sent/recv.
|
10
|
+
# It acts as a authorisation-to-sent/recv-data dispenser
|
11
|
+
# Whoever wants to send/recv data must call the #dispense method
|
12
|
+
# to know how many it should send/recv at that time
|
13
|
+
class BwLimiter
|
14
|
+
def initialize(rate, ticks)
|
15
|
+
@bytes_per_tick = 1.0*rate/ticks
|
16
|
+
@hz = 1.0/ticks
|
17
|
+
if @bytes_per_tick < 1
|
18
|
+
raise "rate too low or ticks too high"
|
19
|
+
end
|
20
|
+
@bytes_per_tick = @bytes_per_tick.round
|
21
|
+
if @bytes_per_tick * ticks != rate
|
22
|
+
puts "Adjusting rate to #{@bytes_per_tick * ticks}"
|
23
|
+
end
|
24
|
+
@last_tick = Time.now
|
25
|
+
end
|
26
|
+
def dispense
|
27
|
+
curr = Time.now
|
28
|
+
delta = curr - @last_tick
|
29
|
+
if delta < @hz
|
30
|
+
sleep(@hz - delta)
|
31
|
+
end
|
32
|
+
#puts "Releasing #{@bytes_per_tick}. Speed = #{@bytes_per_tick / (Time.now - curr)}"
|
33
|
+
@last_tick = curr
|
34
|
+
@bytes_per_tick
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
class ConstantBwLimiter < BwLimiter
|
39
|
+
def initialize
|
40
|
+
end
|
41
|
+
def dispense
|
42
|
+
8192
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
|
47
|
+
|
48
|
+
class BwLimiterProxy
|
49
|
+
def self.create_producer_thread(name, socket, socket_mutex,
|
50
|
+
queue, queue_mutex, queue_added_cond,
|
51
|
+
read_limiter, kill_thread_proc)
|
52
|
+
Thread.new {
|
53
|
+
read_s = nil
|
54
|
+
while (1)
|
55
|
+
result = select([socket], nil, [socket], nil)
|
56
|
+
if result[0].length > 0
|
57
|
+
n_read = read_limiter.dispense
|
58
|
+
#puts "#{name} need to read #{n_read}"
|
59
|
+
socket_mutex.synchronize {
|
60
|
+
read_s = socket.recv(n_read)
|
61
|
+
}
|
62
|
+
if (read_s.length == 0)
|
63
|
+
#puts "#{name} closed"
|
64
|
+
kill_thread_proc.call
|
65
|
+
break # or Thread.stop
|
66
|
+
else
|
67
|
+
queue_mutex.synchronize {
|
68
|
+
read_s.split(//).each {|i| queue << i}
|
69
|
+
#puts "#{name}: read #{read_s.length}"
|
70
|
+
queue_added_cond.signal
|
71
|
+
}
|
72
|
+
end
|
73
|
+
elsif result[2].length > 0
|
74
|
+
raise "#{name} read error"
|
75
|
+
end
|
76
|
+
end
|
77
|
+
}
|
78
|
+
end
|
79
|
+
|
80
|
+
|
81
|
+
|
82
|
+
def self.create_consumer_thread(name, socket, socket_mutex,
|
83
|
+
queue, queue_mutex, queue_added_cond,
|
84
|
+
write_limiter)
|
85
|
+
my_queue = nil
|
86
|
+
Thread.new{
|
87
|
+
while (1)
|
88
|
+
queue_mutex.synchronize {
|
89
|
+
queue_added_cond.wait(queue_mutex)
|
90
|
+
my_queue = queue.clone
|
91
|
+
queue.clear
|
92
|
+
}
|
93
|
+
while (my_queue && my_queue.length > 0)
|
94
|
+
result = select(nil, [socket], [socket], nil)
|
95
|
+
if result[1].length > 0
|
96
|
+
n_write = write_limiter.dispense
|
97
|
+
socket_mutex.synchronize {
|
98
|
+
n_write = socket.send(my_queue[0..n_write].join, 0)
|
99
|
+
}
|
100
|
+
my_queue.slice!(0..n_write);
|
101
|
+
#puts "REMOTE: written #{n_write}"
|
102
|
+
elsif result[2].length > 0
|
103
|
+
raise "#{name} send error"
|
104
|
+
end
|
105
|
+
end
|
106
|
+
end
|
107
|
+
}
|
108
|
+
end
|
109
|
+
|
110
|
+
|
111
|
+
|
112
|
+
def self.make_nonblocking(io)
|
113
|
+
io.fcntl(Fcntl::F_SETFD, io.fcntl(Fcntl::F_GETFD) | Fcntl::O_NONBLOCK)
|
114
|
+
end
|
115
|
+
|
116
|
+
|
117
|
+
def self.make_proc_kill_thread(t_parent)
|
118
|
+
proc{t_parent[:thread_list].each {|t|
|
119
|
+
t.kill if Thread.current != t
|
120
|
+
#puts "Killed: #{t.inspect}";
|
121
|
+
}
|
122
|
+
}
|
123
|
+
end
|
124
|
+
|
125
|
+
|
126
|
+
attr_reader :is_global_limit
|
127
|
+
attr_reader :input_rate
|
128
|
+
attr_reader :output_rate
|
129
|
+
attr_reader :ticks
|
130
|
+
attr_reader :input_limiter
|
131
|
+
attr_reader :output_limiter
|
132
|
+
|
133
|
+
def session(l_socket, r_socket)
|
134
|
+
[l_socket, r_socket].each {|io|
|
135
|
+
BwLimiterProxy.make_nonblocking io
|
136
|
+
}
|
137
|
+
|
138
|
+
proc_kill_thread = BwLimiterProxy.make_proc_kill_thread(Thread.current)
|
139
|
+
|
140
|
+
if @is_global_limit
|
141
|
+
input_limiter = @input_limiter
|
142
|
+
output_limiter = @output_limiter
|
143
|
+
else
|
144
|
+
t_current = Thread.current;
|
145
|
+
input_limiter = BwLimiter.new(@input_rate, @ticks)
|
146
|
+
output_limiter = BwLimiter.new(@output_rate, @ticks)
|
147
|
+
end
|
148
|
+
local_input_limiter = ConstantBwLimiter.new
|
149
|
+
local_output_limiter = ConstantBwLimiter.new
|
150
|
+
|
151
|
+
outgoing_queue = [] #from l->r
|
152
|
+
outgoing_mutex = Mutex.new
|
153
|
+
outgoing_produced = ConditionVariable.new
|
154
|
+
|
155
|
+
incoming_queue = [] #from r->l
|
156
|
+
incoming_mutex = Mutex.new
|
157
|
+
incoming_produced = ConditionVariable.new
|
158
|
+
|
159
|
+
l_socket_mutex = Mutex.new
|
160
|
+
r_socket_mutex = Mutex.new
|
161
|
+
|
162
|
+
t_outgoing_producer =
|
163
|
+
BwLimiterProxy.create_producer_thread("LOCAL", l_socket, l_socket_mutex,
|
164
|
+
outgoing_queue, outgoing_mutex,
|
165
|
+
outgoing_produced,
|
166
|
+
local_output_limiter,
|
167
|
+
proc_kill_thread)
|
168
|
+
t_incoming_producer =
|
169
|
+
BwLimiterProxy.create_producer_thread("REMOTE", r_socket, r_socket_mutex,
|
170
|
+
incoming_queue, incoming_mutex,
|
171
|
+
incoming_produced,
|
172
|
+
input_limiter,
|
173
|
+
proc_kill_thread)
|
174
|
+
t_outgoing_consumer =
|
175
|
+
BwLimiterProxy.create_consumer_thread("REMOTE", r_socket, r_socket_mutex,
|
176
|
+
outgoing_queue, outgoing_mutex,
|
177
|
+
outgoing_produced,
|
178
|
+
output_limiter)
|
179
|
+
t_incoming_consumer =
|
180
|
+
BwLimiterProxy.create_consumer_thread("LOCAL", l_socket, l_socket_mutex,
|
181
|
+
incoming_queue, incoming_mutex,
|
182
|
+
incoming_produced,
|
183
|
+
local_input_limiter)
|
184
|
+
|
185
|
+
t_current = Thread.current
|
186
|
+
t_current[:thread_list] = [t_outgoing_producer, t_incoming_producer,
|
187
|
+
t_outgoing_consumer, t_incoming_consumer]
|
188
|
+
#t_current[:thread_list].each{|t| puts "Threads: #{t.inspect}"}
|
189
|
+
|
190
|
+
t_current[:thread_list].each {|t|
|
191
|
+
t.join;
|
192
|
+
#puts "Joined: #{t.inspect}";
|
193
|
+
}
|
194
|
+
l_socket.close
|
195
|
+
r_socket.close
|
196
|
+
#puts "Exiting cleanly"
|
197
|
+
end
|
198
|
+
|
199
|
+
|
200
|
+
def initialize(input_rate, output_rate, is_global_limit, ticks)
|
201
|
+
@input_rate = input_rate
|
202
|
+
@output_rate = output_rate
|
203
|
+
@ticks = ticks
|
204
|
+
if @is_global_limit = is_global_limit
|
205
|
+
@input_limiter = BwLimiter.new(@input_rate, @ticks)
|
206
|
+
@output_limiter = BwLimiter.new(@output_rate, @ticks)
|
207
|
+
end
|
208
|
+
end
|
209
|
+
end
|
210
|
+
|
211
|
+
|
212
|
+
def print_help
|
213
|
+
puts <<-EOF
|
214
|
+
# #{$0} [options] rhost rport
|
215
|
+
#
|
216
|
+
# --lhost x listen to the interface x (def: localhost)
|
217
|
+
# --lport x listen to port x (def: 8119)
|
218
|
+
# --outgoing-rate x
|
219
|
+
# -o x output at x KBps (def: 5)
|
220
|
+
# --incoming-rate x
|
221
|
+
# -i x accepts input at xKBps (def: 5)
|
222
|
+
# --global-limit
|
223
|
+
# -g if set, the rate is for total rate (def: the rate is per connection)
|
224
|
+
# --ticks
|
225
|
+
# -t ticks per second, higher more accurate but consumes more cpu (def: 100)
|
226
|
+
# --help
|
227
|
+
# -h this page
|
228
|
+
# rhost host to connect to
|
229
|
+
# rport port to connect to
|
230
|
+
EOF
|
231
|
+
end
|
232
|
+
|
233
|
+
|
234
|
+
|
235
|
+
if $0 == __FILE__
|
236
|
+
require 'getoptlong'
|
237
|
+
|
238
|
+
if ARGV.length < 2
|
239
|
+
print_help
|
240
|
+
exit
|
241
|
+
end
|
242
|
+
opts = GetoptLong.new(["--lhost", GetoptLong::REQUIRED_ARGUMENT ],
|
243
|
+
["--lport", GetoptLong::REQUIRED_ARGUMENT ],
|
244
|
+
["--outgoing-rate", "-o", GetoptLong::REQUIRED_ARGUMENT ],
|
245
|
+
["--incoming-rate", "-i", GetoptLong::REQUIRED_ARGUMENT ],
|
246
|
+
["--outgoing-rate-byte", "--orb", GetoptLong::REQUIRED_ARGUMENT ],
|
247
|
+
["--incoming-rate-byte", "--irb", GetoptLong::REQUIRED_ARGUMENT ],
|
248
|
+
["--global-limit", "-g", GetoptLong::NO_ARGUMENT],
|
249
|
+
["--ticks", "-t", GetoptLong::REQUIRED_ARGUMENT],
|
250
|
+
["--help", "-h", GetoptLong::NO_ARGUMENT])
|
251
|
+
hopts = {}
|
252
|
+
opts.each {|opt, arg|
|
253
|
+
hopts[opt] = arg
|
254
|
+
}
|
255
|
+
if ARGV.length != 2
|
256
|
+
print_help
|
257
|
+
end
|
258
|
+
|
259
|
+
|
260
|
+
LPORT = (hopts["--lport"] || 8119).to_i
|
261
|
+
LHOST = hopts["--lhost"] || "localhost"
|
262
|
+
OUTGOING_RATE = (hopts["--outgoing-rate"] || 5).to_i * 1024
|
263
|
+
INCOMING_RATE = (hopts["--incoming-rate"] || 5).to_i * 1024
|
264
|
+
IS_GLOBAL_LIMIT = if hopts["--global-limit"] then true else false end
|
265
|
+
TICKS = (hopts["--ticks"] || 100).to_i
|
266
|
+
RHOST = ARGV[0]
|
267
|
+
RPORT = ARGV[1].to_i
|
268
|
+
|
269
|
+
if hopts["--outgoing-rate-byte"]
|
270
|
+
OUTGOING_RATE = hopts["--outgoing-rate-byte"].to_i
|
271
|
+
end
|
272
|
+
if hopts["--incoming-rate-byte"]
|
273
|
+
INCOMING_RATE = hopts["--incoming-rate-byte"].to_i
|
274
|
+
end
|
275
|
+
|
276
|
+
puts "LPORT=#{LPORT}"
|
277
|
+
puts "LHOST=#{LHOST}"
|
278
|
+
puts "OUTGOING_RATE=#{OUTGOING_RATE}"
|
279
|
+
puts "INCOMING_RATE=#{INCOMING_RATE}"
|
280
|
+
puts "TICKS=#{TICKS}"
|
281
|
+
puts "IS_GLOBAL_LIMIT=#{IS_GLOBAL_LIMIT.to_s}"
|
282
|
+
puts "RHOST=#{RHOST}"
|
283
|
+
puts "RPORT=#{RPORT}"
|
284
|
+
|
285
|
+
threads = []
|
286
|
+
threads_mutex = Mutex.new
|
287
|
+
proxy = BwLimiterProxy.new(INCOMING_RATE, OUTGOING_RATE, IS_GLOBAL_LIMIT, TICKS)
|
288
|
+
server = TCPServer.new(LHOST, LPORT)
|
289
|
+
#server.setsockopt(Socket::SOL_SOCKET, Socket::SO_REUSEADDR, 1)
|
290
|
+
puts "Ready"
|
291
|
+
while (local_socket = server.accept)
|
292
|
+
begin
|
293
|
+
remote_socket = TCPSocket.new(RHOST, RPORT)
|
294
|
+
t = Thread.new {
|
295
|
+
proxy.session(local_socket, remote_socket)
|
296
|
+
threads_mutex.synchronize { threads.delete_if{|t| Thread.current == t}}
|
297
|
+
puts "Now serving #{threads.size} connections"
|
298
|
+
}
|
299
|
+
threads_mutex.synchronize { threads << t }
|
300
|
+
puts "Now serving #{threads.size} connections"
|
301
|
+
rescue => e
|
302
|
+
p e
|
303
|
+
end
|
304
|
+
end
|
305
|
+
end
|
data/lib/script/generate
ADDED
@@ -0,0 +1,117 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
LANGUAGE = 'as3' #TODO: un-hard-code
|
3
|
+
SCRIPT_PATH = File.join("script","lbi", LANGUAGE)
|
4
|
+
def available_templates
|
5
|
+
Dir.entries(SCRIPT_PATH).collect{|e| e unless e[0]==46}.compact
|
6
|
+
end
|
7
|
+
|
8
|
+
module LBi
|
9
|
+
require 'erb'
|
10
|
+
require 'fileutils'
|
11
|
+
class Template
|
12
|
+
attr_reader :args
|
13
|
+
def initialize(params)
|
14
|
+
@template_id = params[:template_id]
|
15
|
+
@force = params[:force]
|
16
|
+
@args = params[:args].collect{|arg| arg unless arg.match("--")}
|
17
|
+
|
18
|
+
create_template_binding
|
19
|
+
copy_files if @template_binding.valid?
|
20
|
+
end
|
21
|
+
def create_template_binding
|
22
|
+
require template_class
|
23
|
+
# the get_template_binding method is placed
|
24
|
+
# in the included template class
|
25
|
+
@template_binding = get_template_binding(self)
|
26
|
+
@template_binding.init!
|
27
|
+
end
|
28
|
+
|
29
|
+
def template_path
|
30
|
+
File.join(SCRIPT_PATH,@template_id)
|
31
|
+
end
|
32
|
+
|
33
|
+
def template_class
|
34
|
+
File.join(template_path,"#{@template_id}.rb")
|
35
|
+
end
|
36
|
+
|
37
|
+
def copy_files
|
38
|
+
pattern = File.join(template_path,"**/*.*")
|
39
|
+
files = Dir.glob(pattern)
|
40
|
+
files.each do |filename|
|
41
|
+
copy_file(filename) unless filename == template_class
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
def copy_file(filename)
|
46
|
+
contents = IO.read(filename)
|
47
|
+
destination = get_destination(filename)
|
48
|
+
make_dirs(File.split(destination)[0])
|
49
|
+
|
50
|
+
result = ERB.new(contents,0,"%").result(@template_binding.get_binding)
|
51
|
+
force = @force unless @force.nil?
|
52
|
+
if File.exists?(destination)
|
53
|
+
if(force.nil?)
|
54
|
+
puts "overwrite #{destination}? (yN)"
|
55
|
+
force = $stdin.gets.chomp.downcase == "y"
|
56
|
+
end
|
57
|
+
unless force
|
58
|
+
puts "skipping #{destination}"
|
59
|
+
else
|
60
|
+
File.delete(destination)
|
61
|
+
write_result(result,destination)
|
62
|
+
end
|
63
|
+
else
|
64
|
+
write_result(result,destination)
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
def write_result result,destination
|
69
|
+
File.open(destination,'a') do |file|
|
70
|
+
file << result
|
71
|
+
end
|
72
|
+
puts("created " + destination)
|
73
|
+
end
|
74
|
+
|
75
|
+
def make_dirs(dir)
|
76
|
+
FileUtils.mkdir_p(dir) unless File.exists? dir
|
77
|
+
end
|
78
|
+
|
79
|
+
def get_destination(file)
|
80
|
+
@template_binding.get_destination file.gsub(template_path,".")
|
81
|
+
end
|
82
|
+
end
|
83
|
+
class TemplateBinding
|
84
|
+
def initialize(template)
|
85
|
+
@template = template
|
86
|
+
@is_valid = true
|
87
|
+
end
|
88
|
+
def init!
|
89
|
+
#override this method to do extra curricular template activities
|
90
|
+
end
|
91
|
+
def valid?
|
92
|
+
@is_valid
|
93
|
+
end
|
94
|
+
def get_binding
|
95
|
+
return binding
|
96
|
+
end
|
97
|
+
def get_destination path
|
98
|
+
path
|
99
|
+
end
|
100
|
+
#COMMON stuff for templates
|
101
|
+
def credit
|
102
|
+
"Generated by LBi Useful"
|
103
|
+
end
|
104
|
+
end
|
105
|
+
end
|
106
|
+
params = {:force=>ARGV.find{|a| a=="--force"}!=nil, :template_id=>ARGV.shift, :args=>ARGV}
|
107
|
+
|
108
|
+
unless params[:template_id].nil?
|
109
|
+
LBi::Template.new(params)
|
110
|
+
else
|
111
|
+
puts <<-MSG
|
112
|
+
Please provide a template name, e.g.
|
113
|
+
$ ruby script/lbi/generate carousel
|
114
|
+
Available templates: #{available_templates.join(",")}
|
115
|
+
MSG
|
116
|
+
end
|
117
|
+
|
data/lib/script/server
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
#!/usr/local/bin/ruby
|
2
|
+
require 'webrick'
|
3
|
+
include WEBrick
|
4
|
+
|
5
|
+
s = HTTPServer.new(
|
6
|
+
:Port => 2000,
|
7
|
+
:DocumentRoot => File.join(File.dirname(__FILE__), "..", "bin"),
|
8
|
+
:MimeTypes => {:js=>"text/javascript"}
|
9
|
+
)
|
10
|
+
|
11
|
+
## mount subdirectories
|
12
|
+
#s.mount("/ipr", HTTPServlet::FileHandler, "/proj/ipr/public_html")
|
13
|
+
#s.mount("/~gotoyuzo",
|
14
|
+
# HTTPServlet::FileHandler, "/home/gotoyuzo/public_html",
|
15
|
+
# true) #<= allow to show directory index.
|
16
|
+
#system_mime_table = Utils::load_mime_types('/etc/mime.types')
|
17
|
+
|
18
|
+
|
19
|
+
trap("INT"){ s.shutdown }
|
20
|
+
s.start()
|
data/lib/tidy_project.rb
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
require 'fileutils'
|
2
|
+
class TidyProject
|
3
|
+
|
4
|
+
LANGUAGE = 'as3'
|
5
|
+
def initialize(project_name)
|
6
|
+
@project_dir = project_name
|
7
|
+
folder('script', 'script')
|
8
|
+
folder("aslibs/#{LANGUAGE}/lbi", 'lib')
|
9
|
+
Dir.chdir(@project_dir){ `./script/generate project` }
|
10
|
+
end
|
11
|
+
def folder(source,dest)
|
12
|
+
puts "adding library to this project's #{dest} folder"
|
13
|
+
dest = "#{@project_dir}/#{dest}/"
|
14
|
+
FileUtils.mkdir_p(dest)
|
15
|
+
FileUtils.cp_r("#{File.dirname(File.expand_path(__FILE__))}/#{source}", dest)
|
16
|
+
|
17
|
+
end
|
18
|
+
|
19
|
+
end
|
data/tasks/build.rake
ADDED
data/tasks/release.rake
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
require "test/unit"
|
2
|
+
require 'lib/tidy_project'
|
3
|
+
require 'ftools'
|
4
|
+
class TestTidyProject < Test::Unit::TestCase
|
5
|
+
PROJECT_FOLDER = 'tmp/TestProject'
|
6
|
+
def setup
|
7
|
+
# jump_into(PROJECT_FOLDER)
|
8
|
+
|
9
|
+
end
|
10
|
+
def test_add_libs
|
11
|
+
TidyProject.new(PROJECT_FOLDER)
|
12
|
+
Dir.chdir PROJECT_FOLDER do
|
13
|
+
assert File.exists?('script'), "No script folder"
|
14
|
+
assert File.exists?('rakefile'), "No rakefile"
|
15
|
+
end
|
16
|
+
end
|
17
|
+
#def jump_into(dir)
|
18
|
+
# #Dir.rmdir(dir)
|
19
|
+
# Dir.mkdir(dir) unless File.exists?(dir)
|
20
|
+
# Dir.chdir(dir)
|
21
|
+
#end
|
22
|
+
end
|
data/tidy.gemspec
ADDED
@@ -0,0 +1,33 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
|
3
|
+
Gem::Specification.new do |s|
|
4
|
+
s.name = %q{tidy}
|
5
|
+
s.version = "0.1.1"
|
6
|
+
|
7
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
|
8
|
+
s.authors = ["Michael Forrest"]
|
9
|
+
s.date = %q{2009-08-15}
|
10
|
+
s.default_executable = %q{tidyproject}
|
11
|
+
s.description = %q{Tidy Flash - an ActionScript framework for people who love Ruby}
|
12
|
+
s.email = %q{mf@grimaceworks.com}
|
13
|
+
s.executables = ["tidyproject"]
|
14
|
+
s.extra_rdoc_files = ["bin/tidyproject", "lib/aslibs/as3/lbi/com/lbi/animation/animator/Animator.as", "lib/aslibs/as3/lbi/com/lbi/animation/animator/Transition.as", "lib/aslibs/as3/lbi/com/lbi/animation/group/Parallel.as", "lib/aslibs/as3/lbi/com/lbi/animation/group/Queue.as", "lib/aslibs/as3/lbi/com/lbi/animation/group/Sequence.as", "lib/aslibs/as3/lbi/com/lbi/animation/group/Set.as", "lib/aslibs/as3/lbi/com/lbi/animation/group/Stack.as", "lib/aslibs/as3/lbi/com/lbi/animation/single/Animation.as", "lib/aslibs/as3/lbi/com/lbi/animation/single/Message.as", "lib/aslibs/as3/lbi/com/lbi/animation/single/MethodWithCompleteEvent.as", "lib/aslibs/as3/lbi/com/lbi/animation/single/OrphanEvent.as", "lib/aslibs/as3/lbi/com/lbi/animation/single/Pause.as", "lib/aslibs/as3/lbi/com/lbi/animation/single/Tween.as", "lib/aslibs/as3/lbi/com/lbi/animation/util/Easing.as", "lib/aslibs/as3/lbi/com/lbi/animation/util/Engine.as", "lib/aslibs/as3/lbi/com/lbi/animation/util/GroupCommon.as", "lib/aslibs/as3/lbi/com/lbi/animation/util/IAnimation.as", "lib/aslibs/as3/lbi/com/lbi/debug/DraggyClip.as", "lib/aslibs/as3/lbi/com/lbi/debug/FPSView.as", "lib/aslibs/as3/lbi/com/lbi/debug/KeySequenceTrigger.as", "lib/aslibs/as3/lbi/com/lbi/debug/Log.as", "lib/aslibs/as3/lbi/com/lbi/debug/LogItemType.as", "lib/aslibs/as3/lbi/com/lbi/debug/LogType.as", "lib/aslibs/as3/lbi/com/lbi/debug/ViewAnalysis.as", "lib/aslibs/as3/lbi/com/lbi/media/IBufferable.as", "lib/aslibs/as3/lbi/com/lbi/media/ITransportControllable.as", "lib/aslibs/as3/lbi/com/lbi/mvc/collection/Collection.as", "lib/aslibs/as3/lbi/com/lbi/mvc/collection/ISearchable.as", "lib/aslibs/as3/lbi/com/lbi/mvc/collection/ISelectable.as", "lib/aslibs/as3/lbi/com/lbi/mvc/collection/Matchable.as", "lib/aslibs/as3/lbi/com/lbi/mvc/collection/Searchable.as", "lib/aslibs/as3/lbi/com/lbi/mvc/collection/Selectable.as", "lib/aslibs/as3/lbi/com/lbi/mvc/helper/Cloner.as", "lib/aslibs/as3/lbi/com/lbi/mvc/helper/preloading/LoadProgressEvent.as", "lib/aslibs/as3/lbi/com/lbi/mvc/helper/TypographyBase.as", "lib/aslibs/as3/lbi/com/lbi/mvc/model/Application.as", "lib/aslibs/as3/lbi/com/lbi/mvc/model/ConcurrentDependencyLoader.as", "lib/aslibs/as3/lbi/com/lbi/mvc/model/EventMapper.as", "lib/aslibs/as3/lbi/com/lbi/mvc/model/Hyperlink.as", "lib/aslibs/as3/lbi/com/lbi/mvc/model/IEventMapper.as", "lib/aslibs/as3/lbi/com/lbi/mvc/model/Merge.as", "lib/aslibs/as3/lbi/com/lbi/mvc/model/SequentialDependencyLoader.as", "lib/aslibs/as3/lbi/com/lbi/mvc/model/StringFormatting.as", "lib/aslibs/as3/lbi/com/lbi/mvc/model/XMLListLoader.as", "lib/aslibs/as3/lbi/com/lbi/mvc/model/XMLListLoaderDispatcher.as", "lib/aslibs/as3/lbi/com/lbi/mvc/view/ViewBase.as", "lib/aslibs/as3/lbi/com/quasimondo/geom/ColorMatrix.as", "lib/script/as2/lib/as2_class.rb", "lib/script/as2/lib/test/as2_class_test.rb", "lib/script/as2/lib/test/SampleClass.as", "lib/script/as2/navigation/bin/xml/__model.xml", "lib/script/as2/navigation/navigation.rb", "lib/script/as2/navigation/src/app/models/__Model.as", "lib/script/as2/navigation/src/app/models/App.as", "lib/script/as2/navigation/src/app/views/__model/__ModelsView.as", "lib/script/as2/navigation/src/app/views/__model/__ModelView.as", "lib/script/as2/project/project.rb", "lib/script/as2/project/src/app/helpers/Colours.as", "lib/script/as2/project/src/app/helpers/Typography.as", "lib/script/as2/project/src/app/models/App.as", "lib/script/as2/project/src/app/models/FlashVars.as", "lib/script/as2/project/src/app/models/Linkages.as", "lib/script/as2/project/src/app/views/AppView.as", "lib/script/as3/project/project.rb", "lib/script/as3/project/src/app/helpers/Colours.as", "lib/script/as3/project/src/app/helpers/Typography.as", "lib/script/as3/project/src/app/models/App.as", "lib/script/as3/project/src/app/models/FlashVars.as", "lib/script/as3/project/src/app/views/AppView.as", "lib/script/as3/scaffold/bin/xml/__model.xml", "lib/script/as3/scaffold/scaffold.rb", "lib/script/as3/scaffold/src/models/__Model.as", "lib/script/as3/scaffold/src/views/__model/__ModelDetailView.as", "lib/script/as3/scaffold/src/views/__model/__ModelListItemView.as", "lib/script/as3/scaffold/src/views/__model/__ModelListView.as", "lib/script/bwlimit.rb", "lib/script/generate", "lib/script/server", "lib/script/server.rb", "lib/tidy_project.rb", "README", "tasks/build.rake", "tasks/release.rake"]
|
15
|
+
s.files = ["bin/tidyproject", "lib/aslibs/as3/lbi/com/lbi/animation/animator/Animator.as", "lib/aslibs/as3/lbi/com/lbi/animation/animator/Transition.as", "lib/aslibs/as3/lbi/com/lbi/animation/group/Parallel.as", "lib/aslibs/as3/lbi/com/lbi/animation/group/Queue.as", "lib/aslibs/as3/lbi/com/lbi/animation/group/Sequence.as", "lib/aslibs/as3/lbi/com/lbi/animation/group/Set.as", "lib/aslibs/as3/lbi/com/lbi/animation/group/Stack.as", "lib/aslibs/as3/lbi/com/lbi/animation/single/Animation.as", "lib/aslibs/as3/lbi/com/lbi/animation/single/Message.as", "lib/aslibs/as3/lbi/com/lbi/animation/single/MethodWithCompleteEvent.as", "lib/aslibs/as3/lbi/com/lbi/animation/single/OrphanEvent.as", "lib/aslibs/as3/lbi/com/lbi/animation/single/Pause.as", "lib/aslibs/as3/lbi/com/lbi/animation/single/Tween.as", "lib/aslibs/as3/lbi/com/lbi/animation/util/Easing.as", "lib/aslibs/as3/lbi/com/lbi/animation/util/Engine.as", "lib/aslibs/as3/lbi/com/lbi/animation/util/GroupCommon.as", "lib/aslibs/as3/lbi/com/lbi/animation/util/IAnimation.as", "lib/aslibs/as3/lbi/com/lbi/debug/DraggyClip.as", "lib/aslibs/as3/lbi/com/lbi/debug/FPSView.as", "lib/aslibs/as3/lbi/com/lbi/debug/KeySequenceTrigger.as", "lib/aslibs/as3/lbi/com/lbi/debug/Log.as", "lib/aslibs/as3/lbi/com/lbi/debug/LogItemType.as", "lib/aslibs/as3/lbi/com/lbi/debug/LogType.as", "lib/aslibs/as3/lbi/com/lbi/debug/ViewAnalysis.as", "lib/aslibs/as3/lbi/com/lbi/media/IBufferable.as", "lib/aslibs/as3/lbi/com/lbi/media/ITransportControllable.as", "lib/aslibs/as3/lbi/com/lbi/mvc/collection/Collection.as", "lib/aslibs/as3/lbi/com/lbi/mvc/collection/ISearchable.as", "lib/aslibs/as3/lbi/com/lbi/mvc/collection/ISelectable.as", "lib/aslibs/as3/lbi/com/lbi/mvc/collection/Matchable.as", "lib/aslibs/as3/lbi/com/lbi/mvc/collection/Searchable.as", "lib/aslibs/as3/lbi/com/lbi/mvc/collection/Selectable.as", "lib/aslibs/as3/lbi/com/lbi/mvc/helper/Cloner.as", "lib/aslibs/as3/lbi/com/lbi/mvc/helper/preloading/LoadProgressEvent.as", "lib/aslibs/as3/lbi/com/lbi/mvc/helper/TypographyBase.as", "lib/aslibs/as3/lbi/com/lbi/mvc/model/Application.as", "lib/aslibs/as3/lbi/com/lbi/mvc/model/ConcurrentDependencyLoader.as", "lib/aslibs/as3/lbi/com/lbi/mvc/model/EventMapper.as", "lib/aslibs/as3/lbi/com/lbi/mvc/model/Hyperlink.as", "lib/aslibs/as3/lbi/com/lbi/mvc/model/IEventMapper.as", "lib/aslibs/as3/lbi/com/lbi/mvc/model/Merge.as", "lib/aslibs/as3/lbi/com/lbi/mvc/model/SequentialDependencyLoader.as", "lib/aslibs/as3/lbi/com/lbi/mvc/model/StringFormatting.as", "lib/aslibs/as3/lbi/com/lbi/mvc/model/XMLListLoader.as", "lib/aslibs/as3/lbi/com/lbi/mvc/model/XMLListLoaderDispatcher.as", "lib/aslibs/as3/lbi/com/lbi/mvc/view/ViewBase.as", "lib/aslibs/as3/lbi/com/quasimondo/geom/ColorMatrix.as", "lib/script/as2/lib/as2_class.rb", "lib/script/as2/lib/test/as2_class_test.rb", "lib/script/as2/lib/test/SampleClass.as", "lib/script/as2/navigation/bin/xml/__model.xml", "lib/script/as2/navigation/navigation.rb", "lib/script/as2/navigation/src/app/models/__Model.as", "lib/script/as2/navigation/src/app/models/App.as", "lib/script/as2/navigation/src/app/views/__model/__ModelsView.as", "lib/script/as2/navigation/src/app/views/__model/__ModelView.as", "lib/script/as2/project/project.rb", "lib/script/as2/project/src/app/helpers/Colours.as", "lib/script/as2/project/src/app/helpers/Typography.as", "lib/script/as2/project/src/app/models/App.as", "lib/script/as2/project/src/app/models/FlashVars.as", "lib/script/as2/project/src/app/models/Linkages.as", "lib/script/as2/project/src/app/views/AppView.as", "lib/script/as3/project/project.rb", "lib/script/as3/project/src/app/helpers/Colours.as", "lib/script/as3/project/src/app/helpers/Typography.as", "lib/script/as3/project/src/app/models/App.as", "lib/script/as3/project/src/app/models/FlashVars.as", "lib/script/as3/project/src/app/views/AppView.as", "lib/script/as3/scaffold/bin/xml/__model.xml", "lib/script/as3/scaffold/scaffold.rb", "lib/script/as3/scaffold/src/models/__Model.as", "lib/script/as3/scaffold/src/views/__model/__ModelDetailView.as", "lib/script/as3/scaffold/src/views/__model/__ModelListItemView.as", "lib/script/as3/scaffold/src/views/__model/__ModelListView.as", "lib/script/bwlimit.rb", "lib/script/generate", "lib/script/server", "lib/script/server.rb", "lib/tidy_project.rb", "Manifest", "Rakefile", "README", "tasks/build.rake", "tasks/release.rake", "test/test_tidy_project.rb", "tidy.gemspec"]
|
16
|
+
s.homepage = %q{http://github.com/michaelforrest/tidy}
|
17
|
+
s.rdoc_options = ["--line-numbers", "--inline-source", "--title", "Tidy", "--main", "README"]
|
18
|
+
s.require_paths = ["lib"]
|
19
|
+
s.rubyforge_project = %q{tidy}
|
20
|
+
s.rubygems_version = %q{1.3.4}
|
21
|
+
s.summary = %q{Tidy Flash - an ActionScript framework for people who love Ruby}
|
22
|
+
s.test_files = ["test/test_tidy_project.rb"]
|
23
|
+
|
24
|
+
if s.respond_to? :specification_version then
|
25
|
+
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
26
|
+
s.specification_version = 3
|
27
|
+
|
28
|
+
if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
|
29
|
+
else
|
30
|
+
end
|
31
|
+
else
|
32
|
+
end
|
33
|
+
end
|