asproject 0.1.21

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.
Files changed (142) hide show
  1. data/CHANGELOG.txt +0 -0
  2. data/History.txt +0 -0
  3. data/MIT-LICENSE.txt +20 -0
  4. data/Manifest.txt +16 -0
  5. data/README.txt +3 -0
  6. data/TODO.txt +10 -0
  7. data/bin/asclass +16 -0
  8. data/bin/asproject +16 -0
  9. data/lib/asclass.rb +254 -0
  10. data/lib/asclass_arguments.rb +147 -0
  11. data/lib/asproject.rb +248 -0
  12. data/lib/asproject/version.rb +9 -0
  13. data/lib/asproject_arguments.rb +175 -0
  14. data/lib/asproject_base.rb +43 -0
  15. data/lib/asproject_utils.rb +57 -0
  16. data/lib/eclipse_project.rb +32 -0
  17. data/lib/path_finder.rb +286 -0
  18. data/lib/platform.rb +107 -0
  19. data/lib/project.rb +82 -0
  20. data/lib/template_resolver.rb +144 -0
  21. data/lib/test_suite_generator.rb +128 -0
  22. data/rakefile.rb +85 -0
  23. data/setup.rb +1585 -0
  24. data/templates/asclass/as2/Class.as +11 -0
  25. data/templates/asclass/as2/Component.as +8 -0
  26. data/templates/asclass/as2/Interface.as +3 -0
  27. data/templates/asclass/as2/TestCase.as +30 -0
  28. data/templates/asclass/as2/TestSuite.as +15 -0
  29. data/templates/asclass/as3/Class.as +9 -0
  30. data/templates/asclass/as3/Component.as +9 -0
  31. data/templates/asclass/as3/Component.mxml +1 -0
  32. data/templates/asclass/as3/Interface.as +6 -0
  33. data/templates/asclass/as3/TestCase.as +30 -0
  34. data/templates/asclass/as3/TestSuite.as +18 -0
  35. data/templates/asproject/as2/project/rakefile.rb +18 -0
  36. data/templates/asproject/as2/project/src/AsProject.as +13 -0
  37. data/templates/asproject/as2/project/test/AsProjectRunner.as +12 -0
  38. data/templates/asproject/as3/project/rakefile.rb +18 -0
  39. data/templates/asproject/as3/project/src/AsProject.as +9 -0
  40. data/templates/asproject/as3/project/src/AsProjectRunner.as +11 -0
  41. data/templates/asproject/asunit2/project/lib/asunit/AsUnitUi.swf +0 -0
  42. data/templates/asproject/asunit2/project/lib/asunit/Sys.as +70 -0
  43. data/templates/asproject/asunit2/project/lib/asunit/com/asunit/controls/LocalOutputPanel.as +182 -0
  44. data/templates/asproject/asunit2/project/lib/asunit/com/asunit/controls/LocalOutputPanelTest.as +84 -0
  45. data/templates/asproject/asunit2/project/lib/asunit/com/asunit/controls/LocalOutputPanelTextArea.as +111 -0
  46. data/templates/asproject/asunit2/project/lib/asunit/com/asunit/controls/LocalOutputPanelTextAreaTest.as +26 -0
  47. data/templates/asproject/asunit2/project/lib/asunit/com/asunit/controls/LocalOutputPanelTitleBar.as +81 -0
  48. data/templates/asproject/asunit2/project/lib/asunit/com/asunit/controls/ResizeHandle.as +35 -0
  49. data/templates/asproject/asunit2/project/lib/asunit/com/asunit/controls/ScrollArrow.as +34 -0
  50. data/templates/asproject/asunit2/project/lib/asunit/com/asunit/controls/ScrollHandle.as +43 -0
  51. data/templates/asproject/asunit2/project/lib/asunit/com/asunit/controls/ScrollListener.as +10 -0
  52. data/templates/asproject/asunit2/project/lib/asunit/com/asunit/controls/TextScroller.as +169 -0
  53. data/templates/asproject/asunit2/project/lib/asunit/com/asunit/controls/shapes/Rectangle.as +29 -0
  54. data/templates/asproject/asunit2/project/lib/asunit/com/asunit/controls/shapes/Triangle.as +27 -0
  55. data/templates/asproject/asunit2/project/lib/asunit/com/asunit/framework/AsUnit.as +19 -0
  56. data/templates/asproject/asunit2/project/lib/asunit/com/asunit/framework/Assert.as +408 -0
  57. data/templates/asproject/asunit2/project/lib/asunit/com/asunit/framework/Assertion.as +27 -0
  58. data/templates/asproject/asunit2/project/lib/asunit/com/asunit/framework/Reflection.as +68 -0
  59. data/templates/asproject/asunit2/project/lib/asunit/com/asunit/framework/Test.as +3 -0
  60. data/templates/asproject/asunit2/project/lib/asunit/com/asunit/framework/TestCase.as +191 -0
  61. data/templates/asproject/asunit2/project/lib/asunit/com/asunit/framework/TestCaseXml.as +31 -0
  62. data/templates/asproject/asunit2/project/lib/asunit/com/asunit/framework/TestFailure.as +15 -0
  63. data/templates/asproject/asunit2/project/lib/asunit/com/asunit/framework/TestResult.as +15 -0
  64. data/templates/asproject/asunit2/project/lib/asunit/com/asunit/framework/TestRunner.as +41 -0
  65. data/templates/asproject/asunit2/project/lib/asunit/com/asunit/framework/TestSetup.as +19 -0
  66. data/templates/asproject/asunit2/project/lib/asunit/com/asunit/framework/TestSuite.as +22 -0
  67. data/templates/asproject/asunit2/project/lib/asunit/com/asunit/ui/Main.as +325 -0
  68. data/templates/asproject/asunit2/project/lib/asunit/com/asunit/ui/RemoteVersion.as +24 -0
  69. data/templates/asproject/asunit2/project/lib/asunit/com/asunit/ui/SuccessMeter.as +32 -0
  70. data/templates/asproject/asunit2/project/lib/asunit/com/asunit/util/Comparable.as +7 -0
  71. data/templates/asproject/asunit2/project/lib/asunit/com/asunit/util/EventListener.as +29 -0
  72. data/templates/asproject/asunit2/project/lib/asunit/com/asunit/util/EventSource.as +89 -0
  73. data/templates/asproject/asunit2/project/lib/asunit/com/asunit/util/LocalConnClient.as +42 -0
  74. data/templates/asproject/asunit2/project/lib/asunit/com/asunit/util/LocalConnGateway.as +47 -0
  75. data/templates/asproject/asunit2/project/lib/asunit/com/asunit/util/LocalConnServer.as +61 -0
  76. data/templates/asproject/asunit2/project/lib/asunit/com/asunit/util/LocalMessageBroker.as +58 -0
  77. data/templates/asproject/asunit2/project/lib/asunit/com/asunit/util/Observable.as +11 -0
  78. data/templates/asproject/asunit2/project/lib/asunit/com/asunit/util/TextFile.as +30 -0
  79. data/templates/asproject/asunit25/project/lib/asunit/AsUnitTestRunner.as +13 -0
  80. data/templates/asproject/asunit25/project/lib/asunit/asunit/errors/AssertionFailedError.as +7 -0
  81. data/templates/asproject/asunit25/project/lib/asunit/asunit/errors/AssertionPassedError.as +7 -0
  82. data/templates/asproject/asunit25/project/lib/asunit/asunit/errors/ClassNotFoundError.as +7 -0
  83. data/templates/asproject/asunit25/project/lib/asunit/asunit/errors/IllegalOperationError.as +7 -0
  84. data/templates/asproject/asunit25/project/lib/asunit/asunit/errors/InstanceNotFoundError.as +7 -0
  85. data/templates/asproject/asunit25/project/lib/asunit/asunit/errors/InvocationTargetError.as +7 -0
  86. data/templates/asproject/asunit25/project/lib/asunit/asunit/errors/UnimplementedFeatureError.as +7 -0
  87. data/templates/asproject/asunit25/project/lib/asunit/asunit/framework/Assert.as +376 -0
  88. data/templates/asproject/asunit25/project/lib/asunit/asunit/framework/AssertMock.as +15 -0
  89. data/templates/asproject/asunit25/project/lib/asunit/asunit/framework/AssertTest.as +59 -0
  90. data/templates/asproject/asunit25/project/lib/asunit/asunit/framework/ITestListener.as +13 -0
  91. data/templates/asproject/asunit25/project/lib/asunit/asunit/framework/Test.as +11 -0
  92. data/templates/asproject/asunit25/project/lib/asunit/asunit/framework/TestCase.as +277 -0
  93. data/templates/asproject/asunit25/project/lib/asunit/asunit/framework/TestCaseMock.as +23 -0
  94. data/templates/asproject/asunit25/project/lib/asunit/asunit/framework/TestCaseTest.as +29 -0
  95. data/templates/asproject/asunit25/project/lib/asunit/asunit/framework/TestCaseXml.as +38 -0
  96. data/templates/asproject/asunit25/project/lib/asunit/asunit/framework/TestFailure.as +47 -0
  97. data/templates/asproject/asunit25/project/lib/asunit/asunit/framework/TestResult.as +168 -0
  98. data/templates/asproject/asunit25/project/lib/asunit/asunit/framework/TestSuite.as +102 -0
  99. data/templates/asproject/asunit25/project/lib/asunit/asunit/runner/BaseTestRunner.as +101 -0
  100. data/templates/asproject/asunit25/project/lib/asunit/asunit/runner/IResultPrinter.as +8 -0
  101. data/templates/asproject/asunit25/project/lib/asunit/asunit/textui/ResultPrinter.as +254 -0
  102. data/templates/asproject/asunit25/project/lib/asunit/asunit/textui/SuccessBar.as +41 -0
  103. data/templates/asproject/asunit25/project/lib/asunit/asunit/textui/TestRunner.as +17 -0
  104. data/templates/asproject/asunit25/project/lib/asunit/asunit/util/ArrayIterator.as +24 -0
  105. data/templates/asproject/asunit25/project/lib/asunit/asunit/util/ArrayIteratorTest.as +52 -0
  106. data/templates/asproject/asunit25/project/lib/asunit/asunit/util/Iterator.as +5 -0
  107. data/templates/asproject/asunit3/project/lib/asunit/AsUnitTestRunner.as +10 -0
  108. data/templates/asproject/asunit3/project/lib/asunit/asunit/errors/AbstractMemberCalledError.as +10 -0
  109. data/templates/asproject/asunit3/project/lib/asunit/asunit/errors/AssertionFailedError.as +10 -0
  110. data/templates/asproject/asunit3/project/lib/asunit/asunit/errors/ClassNotFoundError.as +10 -0
  111. data/templates/asproject/asunit3/project/lib/asunit/asunit/errors/InstanceNotFoundError.as +10 -0
  112. data/templates/asproject/asunit3/project/lib/asunit/asunit/errors/UnimplementedFeatureError.as +10 -0
  113. data/templates/asproject/asunit3/project/lib/asunit/asunit/framework/Assert.as +271 -0
  114. data/templates/asproject/asunit3/project/lib/asunit/asunit/framework/AsynchronousTestCase.as +52 -0
  115. data/templates/asproject/asunit3/project/lib/asunit/asunit/framework/AsynchronousTestCaseExample.as +71 -0
  116. data/templates/asproject/asunit3/project/lib/asunit/asunit/framework/Test.as +15 -0
  117. data/templates/asproject/asunit3/project/lib/asunit/asunit/framework/TestCase.as +351 -0
  118. data/templates/asproject/asunit3/project/lib/asunit/asunit/framework/TestCaseExample.as +73 -0
  119. data/templates/asproject/asunit3/project/lib/asunit/asunit/framework/TestFailure.as +47 -0
  120. data/templates/asproject/asunit3/project/lib/asunit/asunit/framework/TestListener.as +22 -0
  121. data/templates/asproject/asunit3/project/lib/asunit/asunit/framework/TestResult.as +158 -0
  122. data/templates/asproject/asunit3/project/lib/asunit/asunit/framework/TestSuite.as +115 -0
  123. data/templates/asproject/asunit3/project/lib/asunit/asunit/runner/BaseTestRunner.as +15 -0
  124. data/templates/asproject/asunit3/project/lib/asunit/asunit/runner/TestSuiteLoader.as +9 -0
  125. data/templates/asproject/asunit3/project/lib/asunit/asunit/runner/Version.as +11 -0
  126. data/templates/asproject/asunit3/project/lib/asunit/asunit/textui/FlexRunner.as +19 -0
  127. data/templates/asproject/asunit3/project/lib/asunit/asunit/textui/FlexTestRunner.as +55 -0
  128. data/templates/asproject/asunit3/project/lib/asunit/asunit/textui/ResultPrinter.as +245 -0
  129. data/templates/asproject/asunit3/project/lib/asunit/asunit/textui/TestRunner.as +121 -0
  130. data/templates/asproject/asunit3/project/lib/asunit/asunit/util/ArrayIterator.as +26 -0
  131. data/templates/asproject/asunit3/project/lib/asunit/asunit/util/Iterator.as +9 -0
  132. data/templates/asproject/asunit3/project/lib/asunit/asunit/util/Properties.as +30 -0
  133. data/templates/asproject/asunit3/project/lib/asunit/mx/managers/LayoutManager.as +945 -0
  134. data/templates/asproject/config/project/config/asclass_config.rb +58 -0
  135. data/templates/asproject/fb2as/project/.actionScriptProperties +21 -0
  136. data/templates/asproject/fb2as/project/.project +29 -0
  137. data/templates/asproject/fdt/project/.as2_classpath +6 -0
  138. data/templates/asproject/fdt/project/.project +19 -0
  139. data/templates/ide/mate/Create Class.tmCommand +37 -0
  140. data/templates/ide/mate/Rebuild Test Suites.tmCommand +33 -0
  141. data/templates/ide/mate/Run Rake Task.tmCommand +127 -0
  142. metadata +266 -0
@@ -0,0 +1,57 @@
1
+
2
+ module AsProject
3
+
4
+ ##########################
5
+ # Custom Errors
6
+ class ProjectError < StandardError; end
7
+ class UsageError < ProjectError; end
8
+ end
9
+
10
+ RAND_CHARS = ['A','B','C','D','E','F','a','b','c','d','e','f']
11
+
12
+ def Dir::unique_tmpdir(application='RubyApplication')
13
+ rand_max = RAND_CHARS.size
14
+ uniqueish_name = ''
15
+ 24.times{ uniqueish_name << RAND_CHARS[rand(rand_max)] }
16
+
17
+ tmp = Dir.tmpdir
18
+ app_tmp = File.join(tmp, application)
19
+ if(!File.exists?(app_tmp))
20
+ Dir.mkdir(app_tmp)
21
+ end
22
+
23
+ tmp = File.expand_path(File.join(app_tmp, uniqueish_name))
24
+ if(File.exists?(tmp) && is_retry)
25
+ raise ProjectError.new('Dir.unique_tmpdir attempted to create a new dir over an existing dir')
26
+ # else if(File.exists?(tmp))
27
+ # Try again once before failing, uniqueish names aren't too unique...
28
+ # Dir.unique_tmpdir(application, true)
29
+ end
30
+ Dir.mkdir(tmp)
31
+ return tmp
32
+ end
33
+
34
+ def Dir::tmpdir
35
+ tmp = nil
36
+ for dir in [ENV['TMPDIR'], ENV['TMP'], ENV['TEMP'],
37
+ ENV['USERPROFILE'], '/tmp']
38
+ if dir and File.directory?(dir) and File.writable?(dir)
39
+ tmp = dir
40
+ break
41
+ end
42
+ end
43
+ if(tmp.nil?)
44
+ raise ProjectError.new('AsProject was unable to find a valid temporary directory on this computer.')
45
+ end
46
+ # Has to actually CD to the dir, because
47
+ # on os x, tmp == /tmp until you're in it,
48
+ # then it's /private/tmp?!
49
+ # TestCases are relying on this value to
50
+ # Be identical when you retrieve it and
51
+ # when you are 'in' it...
52
+ start = Dir.pwd
53
+ Dir.chdir(tmp)
54
+ tmp = Dir.pwd
55
+ Dir.chdir(start)
56
+ return tmp
57
+ end
@@ -0,0 +1,32 @@
1
+
2
+ require 'rexml/document'
3
+
4
+ module AsProject
5
+ class EclipseProject < Project
6
+
7
+ def initialize(dir=nil)
8
+ super(dir)
9
+ @project_name = ''
10
+ @file_path = nil
11
+ if(!dir.nil?)
12
+ self.file_path = File.join(dir, '.project')
13
+ end
14
+ end
15
+
16
+ def file_path=(path)
17
+ @file_path = path
18
+ file = File.open(path, 'r')
19
+ parse(file.read)
20
+ file.close
21
+ end
22
+
23
+ def parse(str)
24
+ xml = REXML::Document.new(str)
25
+ @project_name = REXML::XPath.first(xml, '//projectDescription/name').text
26
+ end
27
+
28
+ def file_path
29
+ return @file_path
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,286 @@
1
+
2
+ module AsProject
3
+ class PathFinder < TemplateResolver
4
+ attr_accessor :execution_dir
5
+
6
+ def initialize(execution_dir)
7
+ super()
8
+ @execution_dir = execution_dir
9
+ @current_project = nil
10
+ @user = create_user
11
+ end
12
+
13
+ def gem_asproject_home
14
+ parent = File.dirname(File.dirname(__FILE__))
15
+ return File.expand_path(parent)
16
+ end
17
+
18
+ def user_library
19
+ return @user.library
20
+ end
21
+
22
+ def user_home
23
+ return @user.home
24
+ end
25
+
26
+ def user_asproject_home
27
+ return @user.asproject_home
28
+ end
29
+
30
+ def current_project=(dir)
31
+ @current_project = dir
32
+ end
33
+
34
+ # Don't store the 'inspected' current_project
35
+ # Only store it if the value was set from
36
+ # outside
37
+ def current_project
38
+ if(@current_project.nil?)
39
+ return find_project(@execution_dir)
40
+ else
41
+ return @current_project
42
+ end
43
+ end
44
+
45
+ def get_children(dir)
46
+ list = []
47
+ if(dir.nil?)
48
+ return list
49
+ end
50
+ Dir.open(dir).each do |child|
51
+ if(!AsProject.ignore_file? child)
52
+ list << child
53
+ end
54
+ end
55
+ return list
56
+ end
57
+
58
+ # Collect and return all available templates from:
59
+ # (PROJECT_PATH)/config/templates/(TYPE)/
60
+ # (USER_HOME)/(ASPROJECT_HOME)/templates/
61
+ # (ASPROJECT_GEM_HOME)/templates
62
+ def get_available_templates(type)
63
+ project_templates = get_children(get_project_template(type, ''))
64
+ user_templates = get_children(get_user_template(type, ''))
65
+ gem_templates = get_children(get_gem_template(type, ''))
66
+ result = []
67
+ project_templates.each do |template|
68
+ result << template
69
+ end
70
+ user_templates.each do |template|
71
+ if(!result.index(template))
72
+ result << template
73
+ end
74
+ end
75
+ gem_templates.each do |template|
76
+ if(!result.index(template))
77
+ result << template
78
+ end
79
+ end
80
+ return result
81
+ end
82
+
83
+ # @type: 'class' or 'project'
84
+ # @name: 'as3', 'mxml', 'fb2', or user-created folder name
85
+ # Represents folders inside of the appropriate template type dir
86
+ def get_template(type, name)
87
+ template = get_project_template(type, name)
88
+ if(template.nil?)
89
+ template = get_user_template(type, name)
90
+ end
91
+ if(template.nil?)
92
+ template = get_gem_template(type, name)
93
+ end
94
+ return template
95
+ end
96
+
97
+ def get_project_template(type, name)
98
+ begin
99
+ if(@execution_dir.nil?)
100
+ dir = Dir.pwd
101
+ else
102
+ dir = @execution_dir
103
+ end
104
+ project = find_project(dir)
105
+ template = File.join(project, 'config', 'templates', type, name)
106
+ if(File.exists? template)
107
+ return template
108
+ else
109
+ return nil
110
+ end
111
+ rescue
112
+ return nil
113
+ end
114
+ end
115
+
116
+ def get_user_template(type, name)
117
+ template = File.expand_path(File.join(user_asproject_home, 'templates', type, name))
118
+ if(File.exists? template)
119
+ return template
120
+ else
121
+ return nil
122
+ end
123
+ end
124
+
125
+ def get_gem_template(type, name)
126
+ template = File.expand_path(File.join(gem_asproject_home, 'templates', type, name))
127
+ if(File.exists? template)
128
+ return template
129
+ end
130
+ raise ProjectError.new('Requested template not found at ' + template)
131
+ end
132
+
133
+ private
134
+ def find_project(dir)
135
+ if(is_project? dir)
136
+ return dir
137
+ elsif(File.dirname(dir) == dir)
138
+ raise ProjectError.new('AsProject::PathFinder reached the root of the file system without finding a valid project.')
139
+ else
140
+ find_project(File.dirname(dir))
141
+ end
142
+ end
143
+
144
+ # Why wouldn't RDT let me spread this if statement
145
+ # Over multiple lines?
146
+ private
147
+ def is_project?(dir)
148
+ return (has_config_yaml?(dir) || has_eclipse_project?(dir) || has_src_eclipse_project?(dir) || has_src_and_test?(dir))
149
+ end
150
+
151
+ def has_config_yaml?(dir)
152
+ return File.exists?(File.join(dir, 'config', 'asproject.yaml'))
153
+ end
154
+
155
+ def has_eclipse_project?(dir)
156
+ return File.exists?(File.join(dir, '.project'))
157
+ end
158
+
159
+ def has_src_eclipse_project?(dir)
160
+ return File.exists?(File.join(dir, 'src', '.project'))
161
+ end
162
+
163
+ def has_src_and_test?(dir)
164
+ return File.directory?(File.join(dir, 'src')) && File.directory?(File.join(dir, 'test'))
165
+ end
166
+
167
+ private
168
+ def create_user
169
+ os = Platform::OS
170
+ impl = Platform::IMPL
171
+ if(os == :win32 || os == :unix && impl == :cygwin)
172
+ @user = WinUser.new
173
+ elsif(os == :unix && impl == :macosx)
174
+ @user = OSXUser.new
175
+ else
176
+ @user = User.new
177
+ end
178
+ end
179
+ end
180
+
181
+ #############################
182
+ # User class
183
+ class User
184
+
185
+ def initialize
186
+ @default_asproject = '.asproject'
187
+ end
188
+
189
+ def asproject_home
190
+ return get_or_create(File.join(home, @default_asproject))
191
+ end
192
+
193
+ def library
194
+ return home
195
+ end
196
+
197
+ def home
198
+ ["HOME", "USERPROFILE"].each do |homekey|
199
+ return ENV[homekey] if ENV[homekey]
200
+ end
201
+
202
+ if ENV["HOMEDRIVE"] && ENV["HOMEPATH"]
203
+ return "#{ENV["HOMEDRIVE"]}:#{ENV["HOMEPATH"]}"
204
+ end
205
+
206
+ begin
207
+ File.expand_path("~")
208
+ rescue StandardError => ex
209
+ if File::ALT_SEPARATOR
210
+ "C:/"
211
+ else
212
+ "/"
213
+ end
214
+ end
215
+ end
216
+
217
+ def file_exists?(file)
218
+ return File.exists?(file)
219
+ end
220
+
221
+ def get_or_create dir
222
+ if(!file_exists? dir)
223
+ Dir.mkdir dir
224
+ end
225
+ return dir
226
+ end
227
+ end
228
+
229
+ class WinUser < User
230
+ @@LOCAL_SETTINGS = "Local\ Settings"
231
+ @@APPLICATION_DATA = "Application\ Data"
232
+
233
+ def initialize
234
+ super
235
+ @win_asproject = 'AsProject'
236
+ end
237
+
238
+ def library
239
+ usr = home
240
+ # For some reason, my homepath returns inside 'My Documents'...
241
+ if(usr.index "My Documents")
242
+ usr = File.dirname(usr)
243
+ end
244
+ application_data = File.join(usr, @@LOCAL_SETTINGS, @@APPLICATION_DATA)
245
+ if(File.exists?(application_data))
246
+ return application_data
247
+ else
248
+ return super
249
+ end
250
+ end
251
+
252
+ def asproject_home
253
+ if(library == home)
254
+ return super
255
+ end
256
+ ap_home = File.join(library, @win_asproject);
257
+ return get_or_create(ap_home)
258
+ end
259
+ end
260
+
261
+ class OSXUser < User
262
+ @@LIBRARY = 'Library'
263
+
264
+ def initialize
265
+ super
266
+ @osx_asproject = 'AsProject'
267
+ end
268
+
269
+ def library
270
+ lib = File.join(home, @@LIBRARY)
271
+ if(File.exists?(lib))
272
+ return lib
273
+ else
274
+ return super
275
+ end
276
+ end
277
+
278
+ def asproject_home
279
+ if(library == home)
280
+ return super
281
+ end
282
+ ap_home = File.join(library, @osx_asproject)
283
+ get_or_create(ap_home)
284
+ end
285
+ end
286
+ end
@@ -0,0 +1,107 @@
1
+ #
2
+ # platform.rb: naive platform detection for Ruby
3
+ # author: Matt Mower <self@mattmower.com>
4
+ #
5
+
6
+ # == Platform
7
+ #
8
+ # Platform is a simple module which parses the Ruby constant
9
+ # RUBY_PLATFORM and works out the OS, it's implementation,
10
+ # and the architecture it's running on.
11
+ #
12
+ # The motivation for writing this was coming across a case where
13
+ #
14
+ # +if RUBY_PLATFORM =~ /win/+
15
+ #
16
+ # didn't behave as expected (i.e. on powerpc-darwin-8.1.0)
17
+ #
18
+ # It is hoped that providing a library for parsing the platform
19
+ # means that we can cover all the cases and have something which
20
+ # works reliably 99% of the time.
21
+ #
22
+ # Please report any anomalies or new combinations to the author(s).
23
+ #
24
+ # == Use
25
+ #
26
+ # require "platform"
27
+ #
28
+ # defines
29
+ #
30
+ # Platform::OS (:unix,:win32,:vms,:os2)
31
+ # Platform::impl (:macosx,:linux,:mswin)
32
+ # Platform::arch (:powerpc,:x86,:alpha)
33
+ #
34
+ # if an unknown configuration is encountered any (or all) of
35
+ # these constant may have the value :unknown.
36
+ #
37
+ # To display the combination for your setup run
38
+ #
39
+ # ruby platform.rb
40
+ #
41
+ module Platform
42
+ os = nil
43
+ impl = nil
44
+ arch = nil
45
+
46
+ if RUBY_PLATFORM =~ /darwin/i
47
+ os = :unix
48
+ impl = :macosx
49
+ elsif RUBY_PLATFORM =~ /linux/i
50
+ os = :unix
51
+ impl = :linux
52
+ elsif RUBY_PLATFORM =~ /freebsd/i
53
+ os = :unix
54
+ impl = :freebsd
55
+ elsif RUBY_PLATFORM =~ /netbsd/i
56
+ os = :unix
57
+ impl = :netbsd
58
+ elsif RUBY_PLATFORM =~ /mswin/i
59
+ os = :win32
60
+ impl = :mswin
61
+ elsif RUBY_PLATFORM =~ /cygwin/i
62
+ os = :unix
63
+ impl = :cygwin
64
+ elsif RUBY_PLATFORM =~ /mingw/i
65
+ os = :win32
66
+ impl = :mingw
67
+ elsif RUBY_PLATFORM =~ /bccwin/i
68
+ os = :win32
69
+ impl = :bccwin
70
+ elsif RUBY_PLATFORM =~ /wince/i
71
+ os = :win32
72
+ impl = :wince
73
+ elsif RUBY_PLATFORM =~ /vms/i
74
+ os = :vms
75
+ impl = :vms
76
+ elsif RUBY_PLATFORM =~ /os2/i
77
+ os = :os2
78
+ impl = :os2 # maybe there is some better choice here?
79
+ else
80
+ os = :unknown
81
+ impl = :unknown
82
+ end
83
+
84
+ # whither AIX, SOLARIS, and the other unixen?
85
+
86
+ if RUBY_PLATFORM =~ /(i\d86)/i
87
+ arch = :x86
88
+ elsif RUBY_PLATFORM =~ /ia64/i
89
+ arch = :ia64
90
+ elsif RUBY_PLATFORM =~ /powerpc/i
91
+ arch = :powerpc
92
+ elsif RUBY_PLATFORM =~ /alpha/i
93
+ arch = :alpha
94
+ else
95
+ arch = :unknown
96
+ end
97
+
98
+ OS = os
99
+ IMPL = impl
100
+ ARCH = arch
101
+ # What about AMD, Turion, Motorola, etc..?
102
+
103
+ end
104
+
105
+ if __FILE__ == $0
106
+ puts "Platform OS=#{Platform::OS}, impl=#{Platform::IMPL}, arch=#{Platform::ARCH}"
107
+ end