sprout-flashplayer-bundle 9.115.6

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.
@@ -0,0 +1,3 @@
1
+ require 'sprout'
2
+ require 'sprout/generator'
3
+ require 'sprout/tasks/flashplayer_task'
@@ -0,0 +1,12 @@
1
+ module Sprout
2
+ class FlashPlayer
3
+ module VERSION #:nodoc:
4
+ MAJOR = 9
5
+ MINOR = 115
6
+ TINY = 6
7
+
8
+ STRING = [MAJOR, MINOR, TINY].join('.')
9
+ MAJOR_MINOR = [MAJOR, MINOR].join('.')
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,365 @@
1
+ =begin
2
+ Copyright (c) 2007 Pattern Park
3
+
4
+ Permission is hereby granted, free of charge, to any person obtaining
5
+ a copy of this software and associated documentation files (the
6
+ "Software"), to deal in the Software without restriction, including
7
+ without limitation the rights to use, copy, modify, merge, publish,
8
+ distribute, sublicense, and/or sell copies of the Software, and to
9
+ permit persons to whom the Software is furnished to do so, subject to
10
+ the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be
13
+ included in all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
17
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
18
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
19
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
20
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
21
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22
+ =end
23
+
24
+ module Sprout
25
+
26
+ class FlashPlayerError < StandardError #:nodoc:
27
+ end
28
+
29
+ # The FlashPlayerTask will download, unpack, configure and launch the debug
30
+ # Flash Player for OS X, Windows and Linux.
31
+ #
32
+ # Simply send the rake task the +swf+ you'd like to launch either indirectly as a
33
+ # rake dependency or directly as the +swf+ property of this task.
34
+ #
35
+ # flashplayer :run => 'bin/SomeProject.swf'
36
+ #
37
+ # Or you could:
38
+ #
39
+ # flashplayer :run do |t|
40
+ # t.swf = 'bin/SomeProject.swf'
41
+ # end
42
+ #
43
+ # You can also send the FlashPlayerTask a variety of additional parameters including which
44
+ # version of the FlashPlayer to download (only 9.115.x is supported at the time of this writing).
45
+ #
46
+ class FlashPlayerTask < Rake::Task
47
+ DEFAULT_VERSION = nil
48
+ EXECUTABLE_NAME = 'sprout-flashplayer-tool'
49
+
50
+ @@test_result_pre_delimiter = '<XMLResultPrinter>'
51
+ @@test_result_post_delimiter = '</XMLResultPrinter>'
52
+ @@home = nil
53
+ @@trust = nil
54
+
55
+ attr_accessor :version,
56
+ :name
57
+
58
+ attr_writer :swf,
59
+ :test_result_file
60
+
61
+ def self.define_task(args, &block)
62
+ t = super
63
+ yield t if block_given?
64
+ t.define
65
+ end
66
+
67
+ def initialize_task
68
+ end
69
+
70
+ def swf
71
+ @swf ||= nil
72
+ if(@swf.nil?)
73
+ prerequisites.each do |req|
74
+ if(req.index('.swf'))
75
+ @swf = req.to_s
76
+ break
77
+ end
78
+ end
79
+ end
80
+ return @swf
81
+ end
82
+
83
+ def define
84
+ CLEAN.add(test_result_file)
85
+ end
86
+
87
+ def test_result_file
88
+ @test_result_file ||= 'AsUnitResults.xml'
89
+ end
90
+
91
+ def test_result
92
+ @test_result ||= ''
93
+ end
94
+
95
+ def FlashPlayerTask.trust
96
+ if(@@trust)
97
+ return @@trust
98
+ end
99
+ @@trust = File.join(FlashPlayerTask.home, '#Security', 'FlashPlayerTrust', 'sprout.cfg')
100
+ return @@trust
101
+ end
102
+
103
+ def FlashPlayerTask.home
104
+ if(@@home)
105
+ return @@home
106
+ end
107
+
108
+ FlashPlayerTask.home_paths.each do |path|
109
+ if(File.exists?(path))
110
+ return @@home = path
111
+ end
112
+ end
113
+
114
+ if(@@home.nil?)
115
+ raise FlashPlayerError.new('FlashPlayer unable to find home folder for your platform')
116
+ end
117
+ return @@home
118
+ end
119
+
120
+ # Enumerate the potential locations of the Flash Player Home
121
+ # For each supported Platform, the first existing location
122
+ # will be used.
123
+ def FlashPlayerTask.home_paths
124
+ return [File.join(User.library, 'Preferences', 'Macromedia', 'Flash Player'),
125
+ File.join(User.library, 'Application Support', 'Macromedia'),
126
+ File.join(User.home, 'Application Data', 'Macromedia', 'Flash Player'),
127
+ File.join(User.home, '.macromedia', 'Flash_Player')]
128
+ end
129
+
130
+ def initialize(task_name, app)
131
+ super(task_name, app)
132
+ @version = DEFAULT_VERSION
133
+ @inside_test_result = false
134
+ end
135
+
136
+ def execute(*args)
137
+ super
138
+ raise FlashPlayerError.new("FlashPlayer task #{name} required field swf is nil") unless swf
139
+
140
+ log_file = nil
141
+
142
+ # Don't let trust or log file failures break other features...
143
+ begin
144
+ log_file = FlashPlayerConfig.new().log
145
+ FlashPlayerTrust.new(File.dirname(swf))
146
+
147
+ if(File.exists?(log_file))
148
+ File.open(log_file, 'w') do |f|
149
+ f.write('')
150
+ end
151
+ else
152
+ FileUtils.mkdir_p(File.dirname(log_file))
153
+ FileUtils.touch(log_file)
154
+ end
155
+ rescue
156
+ puts '[WARNING] FlashPlayer encountered an error working with the mm.cfg log and/or editing the Trust file'
157
+ end
158
+
159
+ @running_process = nil
160
+ @thread = run(EXECUTABLE_NAME, version, swf)
161
+ read_log(@thread, log_file)
162
+ @thread.join
163
+ end
164
+
165
+ def close
166
+ if(User.new().is_a?(WinUser))
167
+ Thread.kill(@thread)
168
+ else
169
+ Process.kill("SIGALRM", @player_pid)
170
+ end
171
+ end
172
+
173
+ def run(tool, version, swf)
174
+ target = User.clean_path(Sprout.get_executable(tool, nil, version))
175
+ @player_pid = nil
176
+
177
+ thread_out = $stdout
178
+ command = "#{target} #{User.clean_path(swf)}"
179
+
180
+ return Thread.new {
181
+ usr = User.new()
182
+ if(usr.is_a?(WinUser) && !usr.is_a?(CygwinUser))
183
+ system command
184
+ else
185
+ require 'open4'
186
+ @player_pid, stdin, stdout, stderr = Open4.popen4(command)
187
+ focus_player_on_mac(thread_out)
188
+ stdout.read
189
+ end
190
+ }
191
+ end
192
+
193
+ def focus_player_on_mac(out)
194
+ if(User.new.is_a?(OSXUser))
195
+ require 'rbosa'
196
+ system_events = OSA.app("System Events")
197
+ system_events.application_processes.each do |process|
198
+ if(process.name == "Flash Player")
199
+ #out.puts "Focusing Flash Player now"
200
+ process.frontmost = true
201
+ end
202
+ end
203
+ end
204
+ end
205
+
206
+ def read_log(thread, log_file)
207
+ lines_put = 0
208
+
209
+ if(!File.exists?(log_file))
210
+ raise FlashPlayerError.new('[ERROR] Unable to find the trace output log file in the expected location: ' + log_file)
211
+ end
212
+
213
+ while(thread.alive?)
214
+ sleep(0.2)
215
+ lines_read = 0
216
+
217
+ File.open(log_file, 'r') do |file|
218
+ file.readlines.each do |line|
219
+ lines_read = lines_read + 1
220
+ if(lines_read > lines_put)
221
+ if(!parse_test_result(line, thread))
222
+ puts "[trace] #{line}"
223
+ end
224
+ $stdout.flush
225
+ lines_put = lines_put + 1
226
+ end
227
+ end
228
+ end
229
+ end
230
+ end
231
+
232
+ # Returns true if inside of a test result
233
+ def parse_test_result(line, thread)
234
+ if(@inside_test_result)
235
+ if(line.index(@@test_result_post_delimiter))
236
+ @inside_test_result = false
237
+ write_test_result(test_result)
238
+ close
239
+ return true
240
+ else
241
+ test_result << line
242
+ end
243
+ end
244
+
245
+ if(line.index(@@test_result_pre_delimiter))
246
+ @inside_test_result = true
247
+ end
248
+
249
+ return @inside_test_result
250
+ end
251
+
252
+ def write_test_result(result)
253
+ FileUtils.makedirs(File.dirname(test_result_file))
254
+ File.open(test_result_file, File::CREAT|File::TRUNC|File::RDWR) do |f|
255
+ f.puts(result)
256
+ end
257
+ end
258
+ end
259
+
260
+ ##########################################
261
+ # FlashPlayerConfig Class
262
+
263
+ class FlashPlayerConfig # :nodoc:
264
+
265
+ @@file_name = 'mm.cfg'
266
+
267
+ def initialize
268
+ osx_fp9 = File.join(User.library, 'Application Support', 'Macromedia')
269
+ if(FlashPlayerTask.home == osx_fp9)
270
+ @config = File.join(osx_fp9, @@file_name)
271
+ else
272
+ @config = File.join(User.home, @@file_name)
273
+ end
274
+
275
+ if(!File.exists?(@config))
276
+ write_config(@config, content)
277
+ end
278
+ end
279
+
280
+ def log
281
+ path = File.join(FlashPlayerTask.home, 'Logs', 'flashlog.txt')
282
+ if(User.new().is_a?(CygwinUser))
283
+ parts = path.split("/")
284
+ parts.shift()
285
+ part = parts.shift() # shift cygdrive
286
+ if(part != 'cygdrive')
287
+ Log.puts "[WARNING] There may have been a problem writing mm.cfg, please check the path in #{@config} and make sure it's a windows path..."
288
+ return path
289
+ end
290
+ drive = parts.shift()
291
+ parts.unshift(drive.upcase + ":")
292
+ path = parts.join("/")
293
+ end
294
+ return path
295
+ end
296
+
297
+ def content
298
+ return <<EOF
299
+ ErrorReportingEnable=1
300
+ MaxWarnings=0
301
+ TraceOutputEnable=1
302
+ TraceOutputFileName=#{log}
303
+ EOF
304
+ end
305
+
306
+ private
307
+ def write_config(location, content)
308
+ puts <<EOF
309
+
310
+ Correctly configured mm.cfg file not found at: #{location}
311
+
312
+ This file is required in order to capture trace output.
313
+
314
+ Would you like this file created automatically? [Yn]
315
+
316
+ EOF
317
+ answer = $stdin.gets.chomp.downcase
318
+ if(answer == 'y' || answer == '')
319
+ File.open(location, 'w') do |f|
320
+ f.write(content)
321
+ end
322
+ Log.puts ">> Created file: " + File.expand_path(location)
323
+ else
324
+ raise FlashPlayerError.new("[ERROR] Unable to create mm.cfg file at: #{location}")
325
+ end
326
+ end
327
+ end
328
+
329
+ ##########################################
330
+ # FlashPlayerTrust Class
331
+
332
+ class FlashPlayerTrust # :nodoc:
333
+
334
+ def initialize(path)
335
+ trust_file = FlashPlayerTask.trust
336
+ if(!File.exists?(trust_file))
337
+ FileUtils.mkdir_p(File.dirname(trust_file))
338
+ FileUtils.touch(trust_file)
339
+ end
340
+
341
+ parts = path.split(File::SEPARATOR)
342
+ if(parts.size == 1)
343
+ path = File::SEPARATOR + path
344
+ end
345
+
346
+ if(!has_path?(trust_file, path))
347
+ File.open(trust_file, 'a') do |f|
348
+ f.puts path
349
+ end
350
+ Log.puts ">> Added #{path} to Flash Player Trust file at: #{trust_file}"
351
+ end
352
+ end
353
+
354
+ def has_path?(file, path)
355
+ File.open(file, 'r') do |f|
356
+ return (f.read.index(path))
357
+ end
358
+ end
359
+ end
360
+
361
+ end
362
+
363
+ def flashplayer(args, &block)
364
+ Sprout::FlashPlayerTask.define_task(args, &block)
365
+ end
data/rakefile.rb ADDED
@@ -0,0 +1,54 @@
1
+ require 'rake'
2
+ require 'rake/gempackagetask'
3
+ require 'rake/clean'
4
+ require 'rake/testtask'
5
+ require 'lib/sprout/flashplayer/version'
6
+
7
+ SPROUT_HOME = ENV['SPROUT_HOME']
8
+
9
+ PROJECT = 'sprout'
10
+ NAME = 'sprout-flashplayer-bundle'
11
+ SUMMARY = 'Supporting tasks for Flash Player Rake integration'
12
+ GEM_VERSION = Sprout::FlashPlayer::VERSION::STRING
13
+ AUTHOR = 'Pattern Park'
14
+ EMAIL = 'projectsprouts@googlegroups.com'
15
+ HOMEPAGE = 'http://www.projectsprouts.org'
16
+ DESCRIPTION = "Shared Project to support the Flash Player task"
17
+ HOMEPATH = "http://#{PROJECT}.rubyforge.org"
18
+ RELEASE_TYPES = ["gem"]
19
+ PKG_LIST = FileList['[a-zA-Z]*',
20
+ 'lib/**/*'
21
+ ]
22
+
23
+ PKG_LIST.exclude('.svn')
24
+ PKG_LIST.exclude('artifacts')
25
+ PKG_LIST.each do |file|
26
+ task :package => file
27
+ end
28
+
29
+ spec = Gem::Specification.new do |s|
30
+ s.platform = Gem::Platform::RUBY
31
+ s.summary = SUMMARY
32
+ s.description = DESCRIPTION
33
+ s.name = NAME
34
+ s.version = GEM_VERSION
35
+ s.author = AUTHOR
36
+ s.email = EMAIL
37
+ s.homepage = HOMEPAGE
38
+ s.rubyforge_project = PROJECT
39
+ s.require_path = 'lib'
40
+ s.autorequire = 'sprout/flashplayer'
41
+ s.has_rdoc = false
42
+ s.files = PKG_LIST.to_a
43
+
44
+ s.add_dependency('sprout', '>= 0.7.1')
45
+ end
46
+
47
+ Rake::GemPackageTask.new(spec) do |p|
48
+ end
49
+
50
+ require File.join(SPROUT_HOME, 'sprout/script/build_helpers')
51
+
52
+ # Each task that wants this feature, needs to set this up
53
+ # because the flexsdks shouldn't get it...
54
+ #task :release => :increment_revision
metadata ADDED
@@ -0,0 +1,71 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: sprout-flashplayer-bundle
3
+ version: !ruby/object:Gem::Version
4
+ version: 9.115.6
5
+ platform: ruby
6
+ authors:
7
+ - Pattern Park
8
+ autorequire: sprout/flashplayer
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2008-02-09 00:00:00 -08:00
13
+ default_executable:
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: sprout
17
+ version_requirement:
18
+ version_requirements: !ruby/object:Gem::Requirement
19
+ requirements:
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: 0.7.1
23
+ version:
24
+ description: Shared Project to support the Flash Player task
25
+ email: projectsprouts@googlegroups.com
26
+ executables: []
27
+
28
+ extensions: []
29
+
30
+ extra_rdoc_files: []
31
+
32
+ files:
33
+ - lib
34
+ - pkg
35
+ - rakefile.rb
36
+ - samples
37
+ - test
38
+ - lib/sprout
39
+ - lib/sprout/flashplayer
40
+ - lib/sprout/flashplayer/version.rb
41
+ - lib/sprout/flashplayer.rb
42
+ - lib/sprout/tasks
43
+ - lib/sprout/tasks/flashplayer_task.rb
44
+ has_rdoc: false
45
+ homepage: http://www.projectsprouts.org
46
+ post_install_message:
47
+ rdoc_options: []
48
+
49
+ require_paths:
50
+ - lib
51
+ required_ruby_version: !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - ">="
54
+ - !ruby/object:Gem::Version
55
+ version: "0"
56
+ version:
57
+ required_rubygems_version: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: "0"
62
+ version:
63
+ requirements: []
64
+
65
+ rubyforge_project: sprout
66
+ rubygems_version: 1.0.1
67
+ signing_key:
68
+ specification_version: 2
69
+ summary: Supporting tasks for Flash Player Rake integration
70
+ test_files: []
71
+