asrake 0.12.4 → 0.13.0

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/asrake/adt.rb ADDED
@@ -0,0 +1,152 @@
1
+ require 'asrake/util'
2
+ require 'asrake/base_task'
3
+ require 'nokogiri'
4
+
5
+ module ASRake
6
+ class Adt < BaseTask
7
+
8
+ include Rake::DSL
9
+
10
+ # http://help.adobe.com/en_US/air/build/WS5b3ccc516d4fbf351e63e3d118666ade46-7ff1.html
11
+ attr_accessor :application_descriptor
12
+
13
+ #
14
+ # The path to the keystore file for file-based store types.
15
+ #
16
+ attr_accessor :keystore
17
+ #
18
+ # The alias of a key in the keystore. Specifying an alias is not necessary when a keystore only contains
19
+ # a single certificate. If no alias is specified, ADT uses the first key in the keystore.
20
+ #
21
+ attr_accessor :alias
22
+ attr_accessor :storetype
23
+ attr_accessor :storepass
24
+ attr_accessor :keystore_name
25
+ #
26
+ # Specifies the URL of an RFC3161-compliant timestamp server to time-stamp the digital signature.
27
+ # If no URL is specified, a default time-stamp server provided by Geotrust is used. When the signature
28
+ # of an AIR application is time-stamped, the application can still be installed after the signing
29
+ # certificate expires, because the timestamp verifies that the certificate was valid at the time of signing.
30
+ #
31
+ attr_accessor :tsa
32
+
33
+ attr_accessor :target
34
+
35
+ attr_accessor :include_files
36
+
37
+ attr_accessor :additional_args
38
+
39
+ def initialize(file)
40
+
41
+ self.application_descriptor = "application.xml"
42
+ self.storetype = "pkcs12"
43
+ self.target = "air"
44
+ self.include_files = []
45
+ @keystore = "cert.p12"
46
+
47
+ super(file)
48
+
49
+ create_keystore_task
50
+
51
+ end
52
+
53
+ # define named task first so if desc was called it will be attached to it instead of the file task
54
+ def execute
55
+
56
+ fail "You must define 'output' for #{self}" if self.output == nil
57
+ fail "You must define 'application_descriptor'" if self.application_descriptor == nil || !File.exists?(self.application_descriptor)
58
+ fail "You must define 'keystore' for #{self}" if self.keystore == nil
59
+ fail "You must define 'keystore_name' for #{self}" if self.keystore_name == nil
60
+ fail "You must define 'storepass' for #{self}" if self.storepass == nil
61
+
62
+ # TODO: Somehow confirm that the initialWindow content is included in the build
63
+ #app_xml = Nokogiri::XML(File.read(application_descriptor))
64
+ #swf = app_xml.at_css("initialWindow > content").content.to_s
65
+ #swf = File.join(@output_dir, swf)
66
+ #puts swf
67
+
68
+ command = "#{FlexSDK::adt}"
69
+ command << " -package"
70
+ command << " -tsa #{self.tsa}" if self.tsa != nil
71
+ command << " -storetype #{self.storetype}"
72
+ command << " -keystore #{self.keystore}"
73
+ command << " -storepass #{self.storepass}"
74
+ command << " -target #{target}" if target != nil && target != "air"
75
+ command << " #{self.output}"
76
+ command << " #{self.application_descriptor}"
77
+ command << " #{additional_args}" if self.additional_args != nil
78
+ if self.include_files == nil || self.include_files.length < 1
79
+ command << " -C #{self.output_dir} ."
80
+ else
81
+ self.include_files.each {|entry| command << " -C #{entry}" }
82
+ end
83
+ status = run command, false
84
+ if status.exitstatus != 0
85
+ case status.exitstatus
86
+ when 2
87
+ fail "Usage error\n" +
88
+ "Check the command line arguments for errors"
89
+ when 5
90
+ fail "Unknown error\n" +
91
+ "This error indicates a situation that cannot be explained by common error conditions.\n" +
92
+ "Possible root causes include incompatibility between ADT and the Java Runtime Environment,\n"
93
+ "corrupt ADT or JRE installations, and programming errors within ADT."
94
+ when 6
95
+ fail "Could not write to output directory\n" +
96
+ "Make sure that the specified (or implied) output directory is accessible and\n" +
97
+ "that the containing drive has sufficient disk space."
98
+ when 7
99
+ fail "Could not access certificate\n" +
100
+ "Make sure that the path to the keystore is specified correctly: #{self.keystore}\n" +
101
+ "Make sure that the keystore password is correct: #{self.storepass}"
102
+ #"Check that the certificate within the keystore can be accessed."
103
+ when 8
104
+ fail "Invalid certificate\n" +
105
+ "The certificate file is malformed, modified, expired, or revoked."
106
+ when 9
107
+ fail "Could not sign AIR file\n" +
108
+ "Verify the signing options passed to ADT."
109
+ when 10
110
+ fail "Could not create time stamp\n" +
111
+ "ADT could not establish a connection to the timestamp server.\n" +
112
+ "If you connect to the internet through a proxy server, you may need to configure\n" +
113
+ "the JRE proxy settings. There have also been errors reported with Java 7: \n" +
114
+ "http://www.flashdevelop.org/community/viewtopic.php?p=41221\n" +
115
+ "You can disable checking a timestamp server by setting 'tsa' to 'none' in your task"
116
+ when 11
117
+ fail "Certificate creation error\n" +
118
+ "Verify the command line arguments used for creating signatures."
119
+ when 12
120
+ fail "Invalid input\n" +
121
+ "Verify file paths and other arguments passed to ADT on the command line."#\n" +
122
+ #"Be sure the initial content in #{self.application_descriptor} is included in the build:\n" +
123
+ #"<initialWindow>\n <content>#{swf}</content>\n</initialWindow>"
124
+ else
125
+ fail "Operation exited with status #{status.exitstatus}"
126
+ end
127
+ end
128
+ end
129
+
130
+ def keystore= value
131
+ remove_keystore_task()
132
+ @keystore = value
133
+ create_keystore_task()
134
+ end
135
+
136
+ private
137
+
138
+ def remove_keystore_task
139
+ Rake::Task[@keystore].clear
140
+ end
141
+
142
+ def create_keystore_task
143
+ file self.keystore do
144
+ run "#{FlexSDK::adt} -certificate -cn #{self.keystore_name} 1024-RSA #{self.keystore} #{self.storepass}"
145
+ puts "Certificate created at #{self.keystore} with password '#{self.storepass}'"
146
+ end
147
+
148
+ file self.output => self.keystore
149
+ end
150
+
151
+ end
152
+ end
data/lib/asrake/asdoc.rb CHANGED
@@ -6,8 +6,8 @@ require 'nokogiri'
6
6
 
7
7
  class ASRake::Asdoc
8
8
 
9
- include ASRake::PathUtils
10
9
  include Rake::DSL
10
+ include ASRake
11
11
 
12
12
  attr_accessor :additional_args
13
13
 
@@ -140,27 +140,29 @@ class ASRake::Asdoc
140
140
  end
141
141
 
142
142
  def execute(&block)
143
- command = "#{FlexSDK::asdoc}"
144
-
143
+ args = ""
145
144
  @@compiler_args.each do |name, type|
146
145
  arg = name.to_s.gsub('_','-')
147
146
  value = instance_variable_get("@#{name}")
148
147
  case type
149
148
  when :bool
150
- command << " -#{arg}=#{value}" if value
149
+ args << " -#{arg}=#{value}" if value
151
150
  when :dirs
152
151
  value.flatten!
153
152
  value.uniq!
154
153
  value = value.map{|s| s.index(' ') != nil ? "\"#{s}\"" : s} if value.length > 1
155
- command << " -#{arg} #{cf value.join(' ')}" if !value.empty?
154
+ args << " -#{arg} #{Path::forward value.join(' ')}" if !value.empty?
156
155
  when :dir
157
- command << " -#{arg}=#{cf value}" if value != nil
156
+ if value != nil
157
+ value = "\"#{value}\"" if value.index(' ') != nil
158
+ args << " -#{arg}=#{Path::forward value}"
159
+ end
158
160
  when :array
159
161
  value.flatten!
160
162
  value.uniq!
161
- command << " -#{arg} #{value.join(' ')}" if !value.empty?
163
+ args << " -#{arg} #{value.join(' ')}" if !value.empty?
162
164
  when :string
163
- command << " -#{arg} #{value}" if value != nil
165
+ args << " -#{arg} #{value}" if value != nil
164
166
  else
165
167
  fail "unknown type #{type}"
166
168
  end
@@ -169,15 +171,14 @@ class ASRake::Asdoc
169
171
  # Use doc-sources argument if it has been assigned (duh) or if neither doc-classes or doc-namespaces have
170
172
  # been assigned and source-path has
171
173
  if !self.doc_sources.empty?
172
- command << " -doc-sources #{cf doc_sources.join(' ')}"
174
+ args << " -doc-sources #{Path::forward doc_sources.join(' ')}"
173
175
  elsif !self.source_path.empty? && self.doc_classes.empty? && self.doc_namespaces.empty?
174
- command << " -doc-sources #{cf source_path.join(' ')}" if !self.source_path.empty?
176
+ args << " -doc-sources #{Path::forward source_path.join(' ')}" if !self.source_path.empty?
175
177
  end
176
178
 
177
- command << " #{additional_args}" if self.additional_args != nil
179
+ args << " #{additional_args}" if self.additional_args != nil
178
180
 
179
- puts if !block_given?
180
- run(command, true, &block)
181
+ run("#{FlexSDK::asdoc} #{args}", true, &block)
181
182
  end
182
183
 
183
184
  end
@@ -5,7 +5,6 @@ require 'nokogiri'
5
5
  module ASRake
6
6
  class BaseCompiler < BaseTask
7
7
 
8
- include ASRake::PathUtils
9
8
  include Rake::DSL
10
9
 
11
10
  #
@@ -44,6 +43,14 @@ class BaseCompiler < BaseTask
44
43
 
45
44
  super(file)
46
45
 
46
+ # set dependencies on all .as and .mxml files in the source paths
47
+ dependencies = FileList.new
48
+ self.source_path.each do |path|
49
+ dependencies.include(Path::forward File.join(path, "**/*.as"))
50
+ dependencies.include(Path::forward File.join(path, "**/*.mxml"))
51
+ end
52
+ file(self.output => dependencies) if !dependencies.empty?
53
+
47
54
  # allow setting source_path with '=' instead of '<<'
48
55
  # actually, no, this is really bad and confusing we should probably throw when they try to assign
49
56
  #self.source_path = [self.source_path] if self.source_path.is_a? String
@@ -102,7 +109,6 @@ class BaseCompiler < BaseTask
102
109
  flex_config = Nokogiri::XML(File.read(config))
103
110
 
104
111
  is_target_defined = true if flex_config.at_css('target-player')
105
- #configSource? = true if
106
112
  end
107
113
  end
108
114
  end
@@ -112,16 +118,13 @@ class BaseCompiler < BaseTask
112
118
  # TODO: iterate over all non-default config files provided and look for source-path entries
113
119
  #fail "You must add at least one path to 'source_path' for #{self}" if source_path.empty? && !configSource?
114
120
 
115
- # TODO: iterate over all non-default config files provided and look for output
116
- fail "You must define 'output' for #{self}" if self.output == nil
117
-
118
121
  #
119
122
  # validation complete, generate build args
120
123
  #
121
124
 
122
125
  args = ""
123
126
  # set output as directory if it ends in a trailing slash
124
- args << " -output=#{cf output}"
127
+ args << " -output=#{Path::forward output}"
125
128
  args << " -directory=true" if output_is_dir?
126
129
 
127
130
  args << " -target-player=#{target_player}" if self.target_player != nil
@@ -130,23 +133,23 @@ class BaseCompiler < BaseTask
130
133
  args << " +configname=air" if self.isAIR
131
134
 
132
135
  args << " -debug=#{debug}"
133
- args << " -source-path=#{cf source_path.join(',')}" if !self.source_path.empty?
136
+ args << " -source-path=#{Path::forward source_path.join(',')}" if !self.source_path.empty?
134
137
 
135
138
  # add the -load-config option if it is anything other than the default
136
139
  unless self.load_config.length == 1 && is_default_config?(self.load_config[0])
137
140
  # if the default flex config is still in the load_config array, then append all config files, otherwise have the first one replace
138
141
  op = has_default_config_file? ? "+=" : "="
139
142
  self.load_config.each do |config|
140
- args << " -load-config#{op}#{cf config}" unless is_default_config?(config)
143
+ args << " -load-config#{op}#{Path::forward config}" unless is_default_config?(config)
141
144
  op = "+="
142
145
  end
143
146
  end
144
147
 
145
- args << " -library-path=#{cf library_path.join(',')}" if !self.library_path.empty?
146
- args << " -external-library-path=#{cf external_library_path.join(',')}" if !self.external_library_path.empty?
147
- args << " -include-libraries=#{cf include_libraries.join(',')}" if !self.include_libraries.empty?
148
+ args << " -library-path=#{Path::forward library_path.join(',')}" if !self.library_path.empty?
149
+ args << " -external-library-path=#{Path::forward external_library_path.join(',')}" if !self.external_library_path.empty?
150
+ args << " -include-libraries=#{Path::forward include_libraries.join(',')}" if !self.include_libraries.empty?
148
151
 
149
- args << " -dump-config=#{cf dump_config}" if self.dump_config != nil
152
+ args << " -dump-config=#{Path::forward dump_config}" if self.dump_config != nil
150
153
 
151
154
  args << " #{additional_args}" if self.additional_args != nil
152
155
  #args << ' -include-file images\core_logo.png ..\nexuslib\code\etc\core_logo.png'
@@ -180,7 +183,7 @@ class BaseCompiler < BaseTask
180
183
  advice = []
181
184
  if((target_player == nil || Float(target_player) < 11) && line.include?("Error: Access of undefined property JSON"))
182
185
  advice << "Be sure you are compiling with 'target_player' set to 11.0 or higher"
183
- advice << "to have access to the native JSON parser. It is currently set to #{target_player}"
186
+ advice << "to have access to the native JSON parser. Your target_player is currently #{target_player}"
184
187
  elsif line.include?("Error: The definition of base class Object was not found")
185
188
  advice << "If you have removed the default flex-config by setting 'load_config' to"
186
189
  advice << "an empty or alternate value using = instead of << you must be sure to"
@@ -3,20 +3,19 @@ require 'asrake/util'
3
3
  module ASRake
4
4
  class BaseTask
5
5
 
6
- include ASRake::PathUtils
7
6
  include Rake::DSL
8
7
 
9
8
  #
10
- # non-compiler arguments
9
+ # output file or directory
11
10
  #
12
11
 
13
12
  attr_reader :output
14
13
  attr_reader :output_file
15
14
  attr_reader :output_dir
16
15
 
17
- def initialize(file=nil)
16
+ def initialize(file)
18
17
 
19
- raise "Output file/directory must be provided" if file == nil
18
+ raise "An output file must be provided" if file == nil
20
19
 
21
20
  @output = file.to_s
22
21
  # if the output path ends in a path separator, it is a directory
@@ -24,7 +23,7 @@ class BaseTask
24
23
  @output_dir = @output
25
24
  else
26
25
  # forward-slashes required for File methods
27
- @output = cf @output
26
+ @output = Path::forward @output
28
27
  @output_dir = File.dirname(@output)
29
28
  @output_file = File.basename(@output)
30
29
  end
@@ -35,9 +34,7 @@ class BaseTask
35
34
  file self.output do
36
35
  self.execute
37
36
  # TODO: Want to output this even if the dependencies are met and the task isn't run
38
- result = c self.output
39
- result << " (#{File.size(output)} bytes)" unless self.output_is_dir?
40
- puts result
37
+ puts "#{Path::env self.output} (#{File.size(output)} bytes)" unless self.output_is_dir?
41
38
  end
42
39
 
43
40
  # create directory task for output
@@ -62,6 +59,15 @@ class BaseTask
62
59
  @output
63
60
  end
64
61
 
62
+ def to_str
63
+ @output
64
+ end
65
+
66
+ # this is probably a terrible idea
67
+ def pathmap *args
68
+ to_s.pathmap *args
69
+ end
70
+
65
71
  def execute
66
72
  raise "Must define execute in subclass"
67
73
  end
data/lib/asrake/compc.rb CHANGED
@@ -5,7 +5,6 @@ require 'asrake/asdoc'
5
5
  module ASRake
6
6
  class Compc < BaseCompiler
7
7
 
8
- include ASRake::PathUtils
9
8
  include Rake::DSL
10
9
 
11
10
  attr_accessor :include_asdoc
@@ -15,52 +14,44 @@ class Compc < BaseCompiler
15
14
  #
16
15
  def initialize(swc_file)
17
16
  super(swc_file, FlexSDK::compc)
17
+ end
18
18
 
19
- # set dependencies on all .as and .mxml files in the source paths
20
- dependencies = FileList.new
21
- self.source_path.each do |path|
22
- dependencies.include(cf File.join(path, "**/*.as"))
23
- dependencies.include(cf File.join(path, "**/*.mxml"))
24
- end
25
- file(self.output => dependencies) if !dependencies.empty?
26
-
27
- # update build task to include asdoc
28
- file self.output do
29
- if self.include_asdoc
30
- asdoc = ASRake::Asdoc.new File.join(self.output_dir, ".asrake_temp")
31
- asdoc.add(self)
32
- asdoc.keep_xml = true
33
- asdoc.skip_xsl = true
34
- asdoc.lenient = true
35
- # capture output in a block to prevent it from going to console
36
- asdoc.execute { |line| }
19
+ def execute
20
+ super
21
+ # include asdoc if needed
22
+ if self.include_asdoc
23
+ asdoc = ASRake::Asdoc.new File.join(self.output_dir, ".asrake_temp_#{Time.now.to_i}_#{rand(1000)}")
24
+ asdoc.add(self)
25
+ asdoc.keep_xml = true
26
+ asdoc.skip_xsl = true
27
+ asdoc.lenient = true
28
+ puts "> #{FlexSDK::asdoc}"
29
+ asdoc.execute {|line| puts "> #{line}"}
37
30
 
38
- if output_is_dir?
39
- cp_r "#{asdoc.output}/tempdita", File.join(self.output_dir, "docs")
40
- else
41
- Zip::ZipFile.open(self.output) do |zipfile|
42
- # remove existing docs (eg, from -include-libraries linking a swc with pre-existing docs)
43
- begin
44
- zipfile.remove("docs")
45
- rescue
46
- #no rescue
47
- end
48
- FileList["#{asdoc.output}/tempdita/*"].each do |file|
49
- zipfile.add("docs/#{File.basename(file)}", file)
50
- end
31
+ if output_is_dir?
32
+ cp_r "#{asdoc.output}/tempdita", File.join(self.output_dir, "docs")
33
+ else
34
+ Zip::ZipFile.open(self.output) do |zipfile|
35
+ # remove existing docs (eg, from -include-libraries linking a swc with pre-existing docs)
36
+ begin
37
+ zipfile.remove("docs")
38
+ rescue
39
+ #no rescue
40
+ end
41
+ FileList["#{asdoc.output}/tempdita/*"].each do |file|
42
+ zipfile.add("docs/#{File.basename(file)}", file)
51
43
  end
52
44
  end
53
-
54
- rm_rf asdoc.output, :verbose => false
55
45
  end
56
- end
57
46
 
47
+ rm_rf asdoc.output, :verbose => false
48
+ end
58
49
  end
59
50
 
60
51
  def generate_args
61
52
  compc = super
62
53
 
63
- #compc << " -include-sources=#{cf source_path.join(',')}" if !source_path.empty?
54
+ #compc << " -include-sources=#{Path::forward source_path.join(',')}" if !source_path.empty?
64
55
  self.source_path.each do |path|
65
56
  compc << " -include-classes #{ASRake::get_classes(path).join(' ')}"
66
57
  end
@@ -3,10 +3,11 @@ require 'asrake/util'
3
3
  class FlexSDK
4
4
 
5
5
  SDK_PATHS = []
6
+ SDK_PATHS << ENV["FLEX_HOME"].dup if defined?(ENV) && ENV["FLEX_HOME"] != nil
6
7
 
7
8
  class << self
8
-
9
- include ASRake::PathUtils
9
+
10
+ include ASRake
10
11
 
11
12
  @@initialized = false
12
13
 
@@ -36,25 +37,33 @@ class << self
36
37
  @@initialized = true
37
38
  @@root = nil
38
39
  missing = {}
39
- # Find where the flex sdk is installed
40
- SDK_PATHS.each do |path|
40
+
41
+ # clean up paths
42
+ SDK_PATHS.map do |path|
43
+ path.strip!
41
44
  #remove /bin/ fom the end of the path if it exists
42
45
  path.sub!(/[\/\\]bin[\/\\]?$/,'')
46
+ end
47
+
48
+ # Find where the flex sdk is installed
49
+ SDK_PATHS.each do |path|
43
50
  if File.exists?(path)
44
51
  missing[SDK_PATHS] = []
45
52
 
46
53
  @@configs.each do |name|
47
- config = c File.join(path, 'frameworks', "#{name}.xml")
54
+ config = Path::env File.join(path, 'frameworks', "#{name}.xml")
48
55
  missing[SDK_PATHS] << config if !File.exists?(config)
49
56
  config = "\"#{config}\"" if config =~ /\s/
50
57
  instance_variable_set "@#{name.gsub('-','_')}", config
58
+ (instance_variable_get "@#{name.gsub('-','_')}").freeze
51
59
  end
52
60
 
53
61
  @@executables.each do |name|
54
- exec = c File.join(path, 'bin', name)
62
+ exec = Path::env File.join(path, 'bin', name)
55
63
  missing[SDK_PATHS] << exec if !File.exists?(exec)
56
64
  exec = "\"#{exec}\"" if exec =~ /\s/
57
65
  instance_variable_set "@#{name}", exec
66
+ (instance_variable_get "@#{name}").freeze
58
67
  end
59
68
 
60
69
  if missing[SDK_PATHS].empty?
@@ -72,7 +81,9 @@ class << self
72
81
  str << SDK_PATHS.join("\n=> ")
73
82
  str << "\n"
74
83
  end
75
- str << "Append a valid SDK path in your rakefile, e.g.:\nFlexSDK::SDK_PATHS << 'C:\\develop\\sdk\\flex_sdk_4.6.0.23201'"
84
+ str << "Append a valid SDK path in your rakefile, e.g.:\n"
85
+ str << "FlexSDK::SDK_PATHS << 'C:\\develop\\sdk\\flex_sdk_4.6.0.23201'\n"
86
+ str << "or add an environment variable FLEX_HOME"
76
87
  #str << "\nFor more information, see: http://adobe.com/go/flex_sdk/"
77
88
  fail str
78
89
  end
data/lib/asrake/mxmlc.rb CHANGED
@@ -5,7 +5,6 @@ require 'asrake/asdoc'
5
5
  module ASRake
6
6
  class Mxmlc < BaseCompiler
7
7
 
8
- include ASRake::PathUtils
9
8
  include Rake::DSL
10
9
 
11
10
  def initialize(swf_file)
@@ -5,7 +5,6 @@ require 'zip/zip'
5
5
  module ASRake
6
6
  class Package < BaseTask
7
7
 
8
- include ASRake::PathUtils
9
8
  include Rake::DSL
10
9
 
11
10
  attr_accessor :files
@@ -20,7 +19,7 @@ class Package < BaseTask
20
19
  def files= value
21
20
  @files = value
22
21
  files.each do |to, from|
23
- file output => [cf(from)]
22
+ file output => [Path::forward(from)]
24
23
  end
25
24
  end
26
25
 
@@ -32,7 +31,7 @@ class Package < BaseTask
32
31
  rm_r output rescue nil
33
32
  Zip::ZipFile.open(output, Zip::ZipFile::CREATE) do |zipfile|
34
33
  files.each do |to, from|
35
- zipfile.add(cf(to), cf(from))
34
+ zipfile.add(Path::forward(to), Path::forward(from))
36
35
  end
37
36
  end
38
37
  end
data/lib/asrake/util.rb CHANGED
@@ -33,19 +33,21 @@ class << self
33
33
  end
34
34
  end
35
35
 
36
- module ASRake::PathUtils
37
- def c(str)
38
- ASRake::OS::is_windows? ? cb(str) : cf(str)
36
+ module ASRake::Path
37
+ class << self
38
+ def env(str)
39
+ ASRake::OS::is_windows? ? back(str) : forward(str)
39
40
  end
40
41
 
41
- def cb(str)
42
+ def back(str)
42
43
  str.gsub("/", "\\")
43
44
  end
44
45
 
45
- def cf(str)
46
+ def forward(str)
46
47
  str.gsub("\\", "/")
47
48
  end
48
49
  end
50
+ end
49
51
 
50
52
  def run(command, abort_on_failure = true)
51
53
  command.strip!
@@ -53,8 +55,11 @@ def run(command, abort_on_failure = true)
53
55
  puts "> #{command}" if !block_given?
54
56
  IO.popen("#{command} 2>&1") do |proc|
55
57
  while !proc.closed? && (line = proc.gets)
56
- puts "> #{line}" if !block_given?
57
- yield line if block_given?
58
+ if block_given?
59
+ yield line
60
+ else
61
+ puts "> #{line}"
62
+ end
58
63
  end
59
64
  end
60
65
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: asrake
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.12.4
4
+ version: 0.13.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-10-11 00:00:00.000000000 Z
12
+ date: 2012-10-21 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: nokogiri
@@ -69,7 +69,7 @@ executables: []
69
69
  extensions: []
70
70
  extra_rdoc_files: []
71
71
  files:
72
- - lib/asrake/adt_task.rb
72
+ - lib/asrake/adt.rb
73
73
  - lib/asrake/asdoc.rb
74
74
  - lib/asrake/base_compiler.rb
75
75
  - lib/asrake/base_task.rb
@@ -1,150 +0,0 @@
1
- require 'asrake/util'
2
- require 'rake/tasklib'
3
- require 'nokogiri'
4
-
5
- module ASRake
6
- class AdtTask < Rake::TaskLib
7
-
8
- include ASRake::PathUtils
9
- include Rake::DSL
10
-
11
- attr_accessor :output
12
- # http://help.adobe.com/en_US/air/build/WS5b3ccc516d4fbf351e63e3d118666ade46-7ff1.html
13
- attr_accessor :application_descriptor
14
-
15
- #
16
- # The path to the keystore file for file-based store types.
17
- #
18
- attr_accessor :keystore
19
- #
20
- # The alias of a key in the keystore. Specifying an alias is not necessary when a keystore only contains
21
- # a single certificate. If no alias is specified, ADT uses the first key in the keystore.
22
- #
23
- attr_accessor :alias
24
- attr_accessor :storetype
25
- attr_accessor :storepass
26
- attr_accessor :keystore_name
27
- #
28
- # Specifies the URL of an RFC3161-compliant timestamp server to time-stamp the digital signature.
29
- # If no URL is specified, a default time-stamp server provided by Geotrust is used. When the signature
30
- # of an AIR application is time-stamped, the application can still be installed after the signing
31
- # certificate expires, because the timestamp verifies that the certificate was valid at the time of signing.
32
- #
33
- attr_accessor :tsa
34
-
35
- attr_accessor :additional_args
36
-
37
- attr_reader :output_file
38
- attr_reader :output_dir
39
- attr_reader :keystore_file
40
- attr_reader :keystore_dir
41
-
42
- def initialize(name = :package)
43
- self.application_descriptor = "application.xml";
44
- self.storetype = "pkcs12"
45
-
46
- yield self if block_given?
47
-
48
- fail "You must define 'output' for #{self}" if self.output == nil
49
- fail "You must define 'application_descriptor' for #{self}" if self.application_descriptor == nil || !File.exists?(self.application_descriptor)
50
- fail "You must define 'keystore' for #{self}" if self.keystore == nil
51
- fail "You must define 'keystore_name' for #{self}" if self.keystore_name == nil
52
- fail "You must define 'storepass' for #{self}" if self.storepass == nil
53
-
54
- # TODO: Somehow confirm that the initialWindow content is included in the build
55
- app_xml = Nokogiri::XML(File.read(application_descriptor))
56
- swf = app_xml.at_css("initialWindow > content").content.to_s
57
- #swf = File.join(@output_dir, swf)
58
- #puts swf
59
-
60
- # define named task first so if desc was called it will be attached to it instead of the file task
61
- Rake::Task.define_task name do
62
- command = "#{FlexSDK::adt}"
63
- command << " -package"
64
- command << " -tsa #{self.tsa}" if self.tsa != nil
65
- command << " -storetype #{self.storetype}"
66
- command << " -keystore #{self.keystore}"
67
- command << " -storepass #{self.storepass}"
68
- command << " #{self.output} #{self.application_descriptor}"
69
- command << " #{additional_args}" if self.additional_args != nil
70
- status = run command, false
71
- if status.exitstatus != 0
72
- case status.exitstatus
73
- when 2
74
- fail "Usage error\n" +
75
- "Check the command line arguments for errors"
76
- when 5
77
- fail "Unknown error\n" +
78
- "This error indicates a situation that cannot be explained by common error conditions.\n" +
79
- "Possible root causes include incompatibility between ADT and the Java Runtime Environment,\n"
80
- "corrupt ADT or JRE installations, and programming errors within ADT."
81
- when 6
82
- fail "Could not write to output directory\n" +
83
- "Make sure that the specified (or implied) output directory is accessible and\n" +
84
- "that the containing drive has sufficient disk space."
85
- when 7
86
- fail "Could not access certificate\n" +
87
- "Make sure that the path to the keystore is specified correctly: #{self.keystore}\n" +
88
- "Make sure that the keystore password is correct: #{self.storepass}"
89
- #"Check that the certificate within the keystore can be accessed."
90
- when 8
91
- fail "Invalid certificate\n" +
92
- "The certificate file is malformed, modified, expired, or revoked."
93
- when 9
94
- fail "Could not sign AIR file\n" +
95
- "Verify the signing options passed to ADT."
96
- when 10
97
- fail "Could not create time stamp\n" +
98
- "ADT could not establish a connection to the timestamp server.\n" +
99
- "If you connect to the internet through a proxy server, you may need to configure\n" +
100
- "the JRE proxy settings. There have also been errors reported with Java 7: \n" +
101
- "http://www.flashdevelop.org/community/viewtopic.php?p=41221\n" +
102
- "You can disable checking a timestamp server by setting 'tsa' to 'none' in your task"
103
- when 11
104
- fail "Certificate creation error\n" +
105
- "Verify the command line arguments used for creating signatures."
106
- when 12
107
- fail "Invalid input\n" +
108
- "Verify file paths and other arguments passed to ADT on the command line."#\n" +
109
- #"Be sure the initial content in #{self.application_descriptor} is included in the build:\n" +
110
- #"<initialWindow>\n <content>#{swf}</content>\n</initialWindow>"
111
- else
112
- fail "Operation exited with status #{status.exitstatus}"
113
- end
114
- end
115
- puts "#{c output} (#{File.size(self.output)} bytes)"
116
- end
117
-
118
- # if the task name is a hash (ie, has dependencies defined) make sure we pull out the task name from it
119
- name, _ = name.first if name.is_a? Hash
120
-
121
- @output_dir = File.dirname(self.output)
122
- @output_file = File.basename(self.output)
123
-
124
- @keystore_dir = File.dirname(self.keystore)
125
- @keystore_file = File.basename(self.keystore)
126
-
127
- directory self.output_dir
128
-
129
- # setup file dependencies
130
- #file output => output_dir
131
- #files.each do |to, from|
132
- # file output => [cf(from)]
133
- #end
134
-
135
- #add output file task as a dependency to the named task created
136
- #task name => output
137
-
138
- task name => self.output_dir
139
-
140
- file self.keystore do
141
- run "#{FlexSDK::adt} -certificate -cn #{self.keystore_name} 1024-RSA #{self.keystore} #{self.storepass}"
142
- puts "Certificate created at #{self.keystore} with password '#{self.storepass}'"
143
- end
144
-
145
- task name => self.keystore
146
-
147
- end
148
-
149
- end
150
- end