sprout 0.7.198-darwin → 0.7.201-darwin
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of sprout might be problematic. Click here for more details.
- data/lib/sprout/process_runner.rb +4 -0
- data/lib/sprout/project_model.rb +4 -0
- data/lib/sprout/tasks/tool_task.rb +209 -26
- data/lib/sprout/version.rb +1 -1
- metadata +2 -2
data/lib/sprout/project_model.rb
CHANGED
@@ -98,6 +98,10 @@ module Sprout
|
|
98
98
|
attr_accessor :organization
|
99
99
|
# The production file that this Project will generate
|
100
100
|
attr_accessor :output
|
101
|
+
# Terminal command to preprocessor application that accepts STDIN and returns on STDOUT
|
102
|
+
attr_accessor :preprocessor
|
103
|
+
# Folder where preprocessed files will be created. Defaults to '.preprocessed'
|
104
|
+
attr_accessor :preprocessed_path
|
101
105
|
# The real name of the project, usually capitalized like a class name 'SomeProject'
|
102
106
|
attr_accessor :project_name
|
103
107
|
# The folder where compile time skins can be loaded from
|
@@ -30,17 +30,13 @@ module Sprout
|
|
30
30
|
#
|
31
31
|
class ToolTask < Rake::FileTask
|
32
32
|
|
33
|
-
# Arguments to be prepended in front of the command line output
|
34
|
-
attr_accessor :prepended_args
|
35
|
-
# Arguments to appended at the end of the command line output
|
36
|
-
attr_accessor :appended_args
|
37
|
-
|
38
33
|
def initialize(name, app) # :nodoc:
|
39
34
|
super
|
40
|
-
@
|
41
|
-
@
|
42
|
-
@
|
43
|
-
@
|
35
|
+
@preprocessed_path = nil
|
36
|
+
@prepended_args = nil
|
37
|
+
@appended_args = nil
|
38
|
+
@default_gem_name = nil
|
39
|
+
@default_gem_path = nil
|
44
40
|
initialize_task
|
45
41
|
end
|
46
42
|
|
@@ -115,8 +111,80 @@ module Sprout
|
|
115
111
|
|
116
112
|
return result
|
117
113
|
end
|
114
|
+
|
115
|
+
# Arguments to be prepended in front of the command line output
|
116
|
+
def prepended_args=(args)
|
117
|
+
@prepended_args = args
|
118
|
+
end
|
119
|
+
|
120
|
+
# Returns arguments that were prepended in front of the command line output
|
121
|
+
def prepended_args
|
122
|
+
@prepended_args
|
123
|
+
end
|
124
|
+
|
125
|
+
# Arguments to appended at the end of the command line output
|
126
|
+
def appended_args=(args)
|
127
|
+
@appended_args = args
|
128
|
+
end
|
129
|
+
|
130
|
+
# Returns arguments that were appended at the end of the command line output
|
131
|
+
def appended_args
|
132
|
+
@appended_args
|
133
|
+
end
|
134
|
+
|
135
|
+
# Command line arguments to execute preprocessor.
|
136
|
+
# The preprocessor execution should accept text via STDIN and return its processed content via STDOUT.
|
137
|
+
#
|
138
|
+
# In the following example, the +MXMLCTask+ has been configured to use the C preprocessor (cpp) and
|
139
|
+
# place the processed output into a +_preprocessed+ folder, instead of the hidden default folder at
|
140
|
+
# .preprocessed.
|
141
|
+
#
|
142
|
+
# One side effect of the cpp tool is that it adds 2 carriage returns to the top of any processed files,
|
143
|
+
# so we have simply piped its output to the tail command which then strips those carriage returns from
|
144
|
+
# all files - which retains accurate line numbers for any compiler error messages.
|
145
|
+
#
|
146
|
+
# mxmlc 'bin/SomeProject.swf' => :corelib do |t|
|
147
|
+
# t.input = 'src/SomeProject.as'
|
148
|
+
# t.default_size = '800 600'
|
149
|
+
# t.preprocessor = 'cpp -D__DEBUG=true -P - - | tail -c +3'
|
150
|
+
# t.preprocessed_path = '_preprocessed'
|
151
|
+
# end
|
152
|
+
#
|
153
|
+
# Any source files found in this example project can now take advantage of any tools, macros or syntax
|
154
|
+
# available to CPP. For example, the +__DEBUG+ variable is now defined and can be accessed in ActionScript
|
155
|
+
# source code as follows:
|
156
|
+
#
|
157
|
+
# public static const DEBUG:Boolean = __DEBUG;
|
158
|
+
#
|
159
|
+
# Any commandline tool identified on this attribute will be provided the content of each file on STDIN and
|
160
|
+
# whatever it returns to STDOUT will be written into the +preprocessed_path+. This means that we can
|
161
|
+
# take advantage of the entire posix tool chain by piping inputs and outputs from one tool to another.
|
162
|
+
# Whatever the last tool returns will be handed off to the concrete compiler.
|
163
|
+
def preprocessor=(preprocessor)
|
164
|
+
@preprocessor = preprocessor
|
165
|
+
end
|
166
|
+
|
167
|
+
def preprocessor
|
168
|
+
@preprocessor
|
169
|
+
end
|
170
|
+
|
171
|
+
# Path where preprocessed files are stored. Defaults to '.preprocessed'
|
172
|
+
def preprocessed_path=(preprocessed_path)
|
173
|
+
@preprocessed_path = preprocessed_path
|
174
|
+
end
|
175
|
+
|
176
|
+
def preprocessed_path
|
177
|
+
@preprocessed_path ||= '.preprocessed'
|
178
|
+
end
|
179
|
+
|
180
|
+
def display_preprocess_message # :nodoc:
|
181
|
+
if(!preprocessor.nil?)
|
182
|
+
puts ">> Preprocessed text files in: #{File.join(Dir.pwd, preprocessed_path)} with #{preprocessor}"
|
183
|
+
end
|
184
|
+
end
|
118
185
|
|
119
186
|
def execute(*args)
|
187
|
+
display_preprocess_message
|
120
188
|
#puts ">> Executing #{File.basename(exe)} #{to_shell}"
|
121
189
|
exe = Sprout.get_executable(gem_name, gem_path, gem_version)
|
122
190
|
User.execute(exe, to_shell)
|
@@ -319,15 +387,16 @@ module Sprout
|
|
319
387
|
# rake tasks for Command Line Interface (CLI) compilers.
|
320
388
|
#
|
321
389
|
class TaskParam
|
322
|
-
attr_accessor :
|
323
|
-
attr_accessor :type
|
324
|
-
attr_accessor :validator
|
390
|
+
attr_accessor :belongs_to
|
325
391
|
attr_accessor :description
|
326
|
-
attr_accessor :visible
|
327
392
|
attr_accessor :hidden_name
|
328
393
|
attr_accessor :hidden_value
|
394
|
+
attr_accessor :name
|
395
|
+
attr_accessor :preprocessable
|
329
396
|
attr_accessor :required
|
330
|
-
attr_accessor :
|
397
|
+
attr_accessor :type
|
398
|
+
attr_accessor :validator
|
399
|
+
attr_accessor :visible
|
331
400
|
|
332
401
|
attr_writer :prefix
|
333
402
|
attr_writer :value
|
@@ -433,6 +502,94 @@ module Sprout
|
|
433
502
|
result << "def #{name}=(#{type})\n @#{name} = #{type}\nend\n\n"
|
434
503
|
return result
|
435
504
|
end
|
505
|
+
|
506
|
+
protected
|
507
|
+
|
508
|
+
def should_preprocess?
|
509
|
+
return preprocessable && !belongs_to.preprocessor.nil?
|
510
|
+
end
|
511
|
+
|
512
|
+
def prepare_preprocessor_paths(paths)
|
513
|
+
processed = []
|
514
|
+
paths.each do |path|
|
515
|
+
processed << prepare_preprocessor_path(path)
|
516
|
+
end
|
517
|
+
return processed
|
518
|
+
end
|
519
|
+
|
520
|
+
def prepare_preprocessor_files(files)
|
521
|
+
processed = []
|
522
|
+
files.each do |file|
|
523
|
+
processed << prepare_preprocessor_file(file)
|
524
|
+
end
|
525
|
+
return processed
|
526
|
+
end
|
527
|
+
|
528
|
+
def cleaned_preprocessed_path(path)
|
529
|
+
File.join(belongs_to.preprocessed_path, path.gsub('../', 'backslash/'))
|
530
|
+
end
|
531
|
+
|
532
|
+
def prepare_preprocessor_path(path)
|
533
|
+
processed_path = cleaned_preprocessed_path(path)
|
534
|
+
FileUtils.mkdir_p(processed_path)
|
535
|
+
files = FileList[path + file_expression]
|
536
|
+
files.each do |input_file|
|
537
|
+
prepare_preprocessor_file(input_file)
|
538
|
+
end
|
539
|
+
|
540
|
+
return processed_path
|
541
|
+
end
|
542
|
+
|
543
|
+
def prepare_preprocessor_file(input_file)
|
544
|
+
output_file = cleaned_preprocessed_path(input_file)
|
545
|
+
setup_preprocessing_file_tasks(input_file, output_file)
|
546
|
+
return output_file
|
547
|
+
end
|
548
|
+
|
549
|
+
def text_file?(file_name)
|
550
|
+
[/\.as$/, /\.txt$/, /\.mxml$/, /\.xml$/, /\.js$/, /\.html$/, /\.htm$/].select { |regex|
|
551
|
+
if(file_name.match(regex))
|
552
|
+
return true
|
553
|
+
end
|
554
|
+
}.size > 0
|
555
|
+
end
|
556
|
+
|
557
|
+
def setup_preprocessing_file_tasks(input_file, output_file)
|
558
|
+
return if(File.directory?(input_file))
|
559
|
+
CLEAN.add(belongs_to.preprocessed_path) if(!CLEAN.index(belongs_to.preprocessed_path))
|
560
|
+
|
561
|
+
file input_file
|
562
|
+
file output_file => input_file do
|
563
|
+
dir = File.dirname(output_file)
|
564
|
+
if(!File.exists?(dir))
|
565
|
+
FileUtils.mkdir_p(dir)
|
566
|
+
end
|
567
|
+
File.open(input_file, 'r') do |readable|
|
568
|
+
File.open(output_file, 'w+') do |writable|
|
569
|
+
if(text_file?(input_file))
|
570
|
+
preprocess_content(readable, writable, belongs_to.preprocessor, input_file)
|
571
|
+
else
|
572
|
+
writable.write(readable.read)
|
573
|
+
end
|
574
|
+
end
|
575
|
+
end
|
576
|
+
end
|
577
|
+
belongs_to.prerequisites << output_file
|
578
|
+
end
|
579
|
+
|
580
|
+
def preprocess_content(readable, writable, processor, file)
|
581
|
+
process = ProcessRunner.new(processor)
|
582
|
+
process.puts(readable.read)
|
583
|
+
process.close_write
|
584
|
+
result = process.read
|
585
|
+
error = process.read_err
|
586
|
+
if(error.size > 0)
|
587
|
+
belongs_to.display_preprocess_message
|
588
|
+
FileUtils.rm_rf(belongs_to.preprocessed_path)
|
589
|
+
raise ExecutionError.new("[ERROR] Preprocessor failed on file #{file} #{error}")
|
590
|
+
end
|
591
|
+
writable.write(result)
|
592
|
+
end
|
436
593
|
|
437
594
|
end
|
438
595
|
|
@@ -456,16 +613,32 @@ module Sprout
|
|
456
613
|
|
457
614
|
# Concrete param object for :file values
|
458
615
|
class FileParam < TaskParam # :nodoc:
|
616
|
+
|
459
617
|
def prepare_prerequisites
|
460
618
|
if(value && value != belongs_to.name.to_s)
|
461
|
-
|
462
|
-
|
619
|
+
if(should_preprocess?)
|
620
|
+
@value = prepare_preprocessor_file(value)
|
621
|
+
else
|
622
|
+
file value
|
623
|
+
belongs_to.prerequisites << value
|
624
|
+
end
|
463
625
|
end
|
464
626
|
end
|
465
627
|
end
|
466
628
|
|
467
629
|
# Concrete param object for :path values
|
468
|
-
class PathParam <
|
630
|
+
class PathParam < TaskParam # :nodoc:
|
631
|
+
|
632
|
+
def prepare_prerequisites
|
633
|
+
if(value && value != belongs_to.name.to_s)
|
634
|
+
if should_preprocess?
|
635
|
+
@value = prepare_preprocessor_path(value)
|
636
|
+
else
|
637
|
+
file value
|
638
|
+
belongs_to.prerequisites << value
|
639
|
+
end
|
640
|
+
end
|
641
|
+
end
|
469
642
|
end
|
470
643
|
|
471
644
|
# Concrete param object for :boolean values
|
@@ -540,26 +713,36 @@ module Sprout
|
|
540
713
|
end
|
541
714
|
|
542
715
|
def prepare_prerequisites
|
543
|
-
|
544
|
-
|
545
|
-
|
716
|
+
if should_preprocess?
|
717
|
+
@value = prepare_preprocessor_files(value)
|
718
|
+
else
|
719
|
+
value.each do |f|
|
720
|
+
file f
|
721
|
+
belongs_to.prerequisites << f
|
722
|
+
end
|
546
723
|
end
|
547
724
|
end
|
725
|
+
|
548
726
|
end
|
549
727
|
|
550
728
|
# Concrete param object for collections of paths
|
551
729
|
class PathsParam < FilesParam # :nodoc:
|
552
730
|
|
553
731
|
def prepare_prerequisites
|
554
|
-
|
555
|
-
|
556
|
-
|
557
|
-
|
558
|
-
|
559
|
-
|
732
|
+
if should_preprocess?
|
733
|
+
@value = prepare_preprocessor_paths(value)
|
734
|
+
else
|
735
|
+
value.each do |path|
|
736
|
+
files = FileList[path + file_expression]
|
737
|
+
files.each do |f|
|
738
|
+
file f
|
739
|
+
belongs_to.prerequisites << f
|
740
|
+
end
|
560
741
|
end
|
561
742
|
end
|
562
743
|
end
|
744
|
+
|
745
|
+
|
563
746
|
end
|
564
747
|
|
565
748
|
# Concrete param object for collections of files
|
data/lib/sprout/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sprout
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.7.
|
4
|
+
version: 0.7.201
|
5
5
|
platform: darwin
|
6
6
|
authors:
|
7
7
|
- Luke Bayes
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-01-
|
12
|
+
date: 2009-01-13 00:00:00 -08:00
|
13
13
|
default_executable: sprout
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|