osteele-ropenlaszlo 0.5.1

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGES ADDED
@@ -0,0 +1,41 @@
1
+ = Change Log
2
+
3
+ == Version 0.5.1 (2009/03/22)
4
+ * update for compatibility with OpenLaszlo 4.x
5
+ * move to github
6
+
7
+ == Version 0.5 (2009/03/22)
8
+ * update for compatibility with OpenLaszlo 4.x
9
+ * move to github
10
+
11
+ == Version 0.4.1 (2006/01/25)
12
+ * bug fix: don't use popen on Windows
13
+ * bug fix: default LPS_HOME from OPENLASZLO_HOME
14
+ * added note about OpenLaszlo windows bug
15
+
16
+ == Version 0.4.0 (2006/01/19)
17
+ * new feature: command-line compiler detects compilation warnings
18
+ * bug fix: command-line compilation in qualified directory places object in same directory
19
+ * improve rdoc
20
+ * refactored unit tests
21
+
22
+ == Version 0.3.0 (2006/01/16)
23
+ * New feature: compilation errors and warnings
24
+ * Bug fix: --output doesn't exist; --dir does
25
+ * refactored test case setup
26
+ * fixed test case directory
27
+ * Rakefile: added rdoc task
28
+ * Updated installation instructions
29
+ * Fixed rdoc formatting errors
30
+
31
+ == Version 0.2.0 (2006/01/11)
32
+ * Released as gem
33
+ * Moved to rubyforge
34
+ * Added doc directory
35
+ * Added test directory
36
+ * Added examples directory
37
+
38
+ == Version 0.1.0 (2006/01/04)
39
+ * Initial release
40
+ * Published to osteele.com
41
+ * Announced on weblog.openlaszlo.org
data/MIT-LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ Copyright (c) 2006-2009 by Oliver Steele
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
21
+
data/README.rdoc ADDED
@@ -0,0 +1,61 @@
1
+ = ROpenLaszlo: Interface to the OpenLaszlo compiler
2
+
3
+ ROpenLaszo is a Ruby interface to the OpenLaszlo[openlaszlo.org] compiler. It allows you to compile Open<tt></tt>Laszlo programs from within Ruby, in order to integrate Open<tt></tt>Laszlo development into Rake or Rails applications.
4
+
5
+ If you are using Open<tt></tt>Laszlo with Ruby on Rails, you probably want the {OpenLaszlo Rails plugin}[laszlo-plugin.rubyforge.org] as well.
6
+
7
+ OpenLaszlo[openlaszlo.org] programs are written in XML with embedded JavaScript, and compiled into Flash (swf) binary files, or DHTML. (As of this writing, the DHTML target is in pre-beta form.) The APIs in this library make it easy for Ruby code to invoke the Open<tt></tt>Laszlo compiler. For example, if hello.lzx contains the following text:
8
+ <canvas>
9
+ <window>
10
+ <button>Hello, World!</button>
11
+ </window>
12
+ </canvas>
13
+ then the following Ruby code can be used to create a file 'hello.swf' which can be executed in a browser or placed on a web site:
14
+ require 'rubygems'
15
+ require 'ropenlaszlo'
16
+ OpenLaszlo::compile 'hello.lzx'
17
+
18
+ You can turn this snippet into a Rake task that will compile any Open<tt></tt>Laszlo source file:
19
+ rule '.swf' => '.lzx' do |t|
20
+ puts "Compiling #{t.source} => #{t.name}" if verbose
21
+ OpenLaszlo::compile t.source, :output => t.name
22
+ end
23
+
24
+ == Requirements
25
+
26
+ * {OpenLaszlo 3.1 or later}[openlaszlo.org]
27
+ * Ruby -v 1.8.2 or later (untested in earlier versions)
28
+ * RubyGems[rubygems.rubyforge.org]
29
+
30
+ == Installation
31
+
32
+ 0:: Download and install the {OpenLaszlo SDK}[openlaszlo.org]
33
+
34
+ 1: Install this gem
35
+ $ gem install osteele-ropenlaszlo -s http://gems.github.com
36
+
37
+ 2:: Set your +OPENLASZLO_HOME+ environment variable to the directory that contains the {OpenLaszlo SDK}[openlaszlo.org]. If the following prints something, you've got it right:
38
+ grep Laszlo "$OPENLASZLO_HOME/README.txt"
39
+
40
+ 3:: (Optional) Set your +OPENLASZLO_URL+ environment variable to the web location of the Open<tt></tt>Laszlo server; for example, <tt>http</tt><tt>://localhost:8080/lps-3.1</tt>. If you omit this step, the module will use the command line compiler, which is slower but is not limited to compiling files inside of +OPENLASZLO_HOME+.
41
+
42
+ <b>Note:</b> The command-line compiler is broken in the Windows version of Open<tt></tt>Laszlo 3.1.1. If you are running Windows, step (3) is required. ({OpenLaszlo bug 1428}[http://www.openlaszlo.org/jira/browse/LPP-1428])
43
+
44
+ == Additional Resources
45
+
46
+ * The {OpenLaszlo web site}[openlaszlo.org] is a rich source of information about the Open<tt></tt>Laszlo platform. It includes links to the wiki, mailing lists, and forums.
47
+
48
+ * The {Laszlo on Rails}[groups.google.com/group/laszlo-on-rails] news group discusses the integration of Open<tt></tt>Laszlo with Ruby on Rails.
49
+
50
+ * The {OpenLaszlo Rails plugin}[laszlo-plugin.rubyforge.org] provides generators and scaffolding for using Open<tt></tt>Laszlo with Ruby on Rails.
51
+
52
+ * {This OpenLaszlo Blog entry}[weblog.openlaszlo.org/archives/2006/01/deploying-openlaszlo-applications-with-rake/] has additional information and some examples of using ROpenLaszlo in a Rakefile.
53
+
54
+ * The RubyForge project page is here[http://rubyforge.org/projects/ropenlaszlo/].
55
+
56
+ == License
57
+
58
+ ROpenLaszlo is copyright (c) 2006 - 2009 by Oliver Steele. It is
59
+ open-source software, and may be redistributed under the terms of the
60
+ MIT license. The text of this licence is included in the ROpenLaszlo
61
+ distribution.
data/TODO ADDED
@@ -0,0 +1,21 @@
1
+ = ROpenLaszlo Project -- To Do List
2
+
3
+ == Features
4
+ * Add rake task file
5
+ * Compile server: allow use of proxy?
6
+ * Compile server: temporarily copy files into webapp directory
7
+ * compile_string
8
+ * Dependency tracking
9
+ * query compiler version
10
+
11
+ == Unit Tests
12
+ * Compiler parameters
13
+ * Missing source file
14
+ * Unreachable server
15
+ * Invalid OPENLASZLO_HOME
16
+
17
+ == Corners
18
+ * invalid parameters
19
+ * server isn't running
20
+ * thinks lps-dev/foo is in lps/ directory
21
+
data/lib/compiler.rb ADDED
@@ -0,0 +1,255 @@
1
+ # Author:: Oliver Steele
2
+ # Copyright:: Copyright (c) 2005-2006 Oliver Steele. All rights reserved.
3
+ # License:: Ruby License.
4
+
5
+ # == module OpenLaszlo
6
+ #
7
+ # This module contains utility methods for compiling
8
+ # OpenLaszlo[openlaszlo.org] programs.
9
+ #
10
+ # Example:
11
+ # # Set up the environment to use the compile server. The OpenLaszlo server
12
+ # # must be running in order at this location in order for this to work.
13
+ # ENV['OPENLASZLO_HOME'] = '/Applications/OpenLaszlo Server 3.1'
14
+ # ENV['OPENLASZLO_URL'] = 'http://localhost:8080/lps-3.1'
15
+ #
16
+ # require 'openlaszlo'
17
+ # # Create a file 'hello.swf' in the current directory:
18
+ # OpenLaszlo::compile 'hello.lzx'
19
+ #
20
+ # See OpenLaszlo.compile for additional documentation.
21
+ #
22
+ module OpenLaszlo
23
+ class CompilationError < StandardError; end
24
+
25
+ # This class implements a bridge to the compile server.
26
+ #
27
+ # If you don't need multiple compilers, you can use the methods in
28
+ # the OpenLaszlo module instead.
29
+ #
30
+ # CompileServer is faster than CommandLineCompiler, but can only compile
31
+ # files in the same directory as the Open<tt></tt>Laszlo SDK.
32
+ class CompileServer
33
+ # Options:
34
+ # * <tt>:openlaszlo_home</tt> - filesystem location of the Open<tt></tt>Laszlo SDK. Defaults to ENV['OPENLASZLO_HOME']
35
+ # * <tt>:server_uri</tt> - the URI of the server. Defaults to ENV['OPENLASZLO_URL'] if this is specified, otherwise to 'http://localhost:8080/lps-dev'.
36
+ def initialize(options={})
37
+ @home = options[:home] || ENV['OPENLASZLO_HOME']
38
+ dirs = Dir[File.join(@home, 'Server', 'lps-*', 'WEB-INF')]
39
+ @home = File.dirname(dirs.first) if dirs.any?
40
+ @base_url = options[:server_uri] || ENV['OPENLASZLO_URL'] || 'http://localhost:8080/lps-dev'
41
+ end
42
+
43
+ # Invokes the Open<tt></tt>Laszlo server-based compiler on
44
+ # +source_file+. +source_file+ must be inside the home directory
45
+ # of the server.
46
+ #
47
+ # Options:
48
+ # * <tt>:format</tt> - request type (default 'swf')
49
+ # See OpenLaszlo.compile for a description of +options+.
50
+ def compile(source_file, options={})
51
+ mtime = File.mtime source_file
52
+ runtime = options[:runtime] || 'swf8'
53
+ output = options[:output] || "#{File.expand_path(File.join(File.dirname(source_file), File.basename(source_file, '.lzx')))}.lzr=#{runtime}.swf"
54
+ compile_object(source_file, output, options)
55
+ results = request_metadata_for(source_file, options)
56
+ raise "Race condition: #{source_file} was modified during compilation" if mtime != File.mtime(source_file)
57
+ results[:output] = output
58
+ raise CompilationError.new(results[:error]) if results[:error]
59
+ return results
60
+ end
61
+
62
+ private
63
+ def compile_object(source_file, object, options={})
64
+ options = {}.update(options).update(:output => object)
65
+ request(source_file, options)
66
+ end
67
+
68
+ def request_metadata_for(source_file, options={})
69
+ results = {}
70
+ options = {}.update(options).update(:format => 'canvas-xml', :output => nil)
71
+ text = request(source_file, options)
72
+ if text =~ %r{<warnings>(.*?)</warnings>}m
73
+ results[:warnings] = $1.scan(%r{<error>\s*(.*?)\s*</error>}m).map{|w|w.first}
74
+ elsif text !~ %r{<canvas>} && text =~ %r{<pre>Error:\s*(.*?)\s*</pre>}m
75
+ results[:error] = $1
76
+ end
77
+ return results
78
+ end
79
+
80
+ def request(source_file, options={})
81
+ output = options[:output]
82
+ require 'net/http'
83
+ require 'uri'
84
+ # assert that pathname is relative to LPS home:
85
+ absolute_path = File.expand_path(source_file)
86
+ raise "#{absolute_path} isn't inside #{@home}" unless absolute_path.index(@home) == 0
87
+ server_relative_path = absolute_path[@home.length..-1]
88
+ # FIXME: this doesn't handle quoting; use recursive File.split instead
89
+ # FIXME: should encode the url, for filenames that include '/'
90
+ server_relative_path.gsub(File::Separator, '/')
91
+ options = {
92
+ :lzr => options[:runtime],
93
+ :debug => options[:debug],
94
+ :lzproxied => options.fetch(:proxied, false),
95
+ :lzt => options[:format] || 'swf'}
96
+ query = options.map{|k,v|"#{k}=#{v}" unless v.nil?}.compact.join('&')
97
+ url = "#{@base_url}#{server_relative_path}"
98
+ url += "?#{query}" unless query.empty?
99
+ Net::HTTP.get_response URI.parse(url) do |response|
100
+ case response
101
+ when Net::HTTPOK
102
+ if output
103
+ File.open(output, 'w') do |f|
104
+ response.read_body do |segment|
105
+ f << segment
106
+ end
107
+ end
108
+ else
109
+ return response.body
110
+ end
111
+ else
112
+ response.value # for effect: raises error
113
+ end
114
+ end
115
+ end
116
+ end
117
+
118
+ # This class implements a bridge to the command-line compiler.
119
+ #
120
+ # If you don't need multiple compilers, you can use the methods in
121
+ # the OpenLaszlo module instead.
122
+ #
123
+ # CommandLineCompiler is slower than CompileServer, but,
124
+ # unlike the server, it can compile files in any location.
125
+ class CommandLineCompiler
126
+ # Creates a new compiler.
127
+ #
128
+ # Options are:
129
+ # * <tt>:compiler_script</tt> - the path to the shell script that
130
+ # invokes the compiler. This defaults to a standard location inside
131
+ # the value specified by :home.
132
+ # * <tt>:openlaszlo_home</tt> - the home directory of the Open<tt></tt>Laszlo SDK.
133
+ # This defaults to ENV['OPENLASZLO_HOME'].
134
+ def initialize(options={})
135
+ @lzc = options[:compiler_script]
136
+ unless @lzc
137
+ home = options[:openlaszlo_home] || ENV['OPENLASZLO_HOME']
138
+ raise ":compiler_script or :openlaszlo_home must be specified" unless home
139
+ search = bin_directories.map{|f| File.join(home, f, 'lzc')}
140
+ found = search.select{|f| File.exists? f}
141
+ raise "couldn't find bin/lzc in #{bin_directories.join(' or ')}" if found.empty?
142
+ @lzc = found.first
143
+ @lzc += '.bat' if windows?
144
+ end
145
+ end
146
+
147
+ # Invokes the OpenLaszlo command-line compiler on +source_file+.
148
+ #
149
+ # See OpenLaszlo.compile for a description of +options+.
150
+ def compile(source_file, options={})
151
+ runtime = options[:runtime] || 'swf8'
152
+ output_suffix = ".lzr=#{runtime}.swf"
153
+ default_output = File.join(File.dirname(source_file),
154
+ File.basename(source_file, '.lzx') + output_suffix)
155
+ output = options[:output] || default_output
156
+ raise "#{source_file} and #{output} do not have the same basename." unless File.basename(source_file, '.lzx') == File.basename(output, output_suffix)
157
+ args = []
158
+ args << '--runtime=#{options[:runtime]}' if options[:runtime]
159
+ args << '--debug' if options[:debug]
160
+ args << '--profile' if options[:profile]
161
+ args << "--dir '#{File.dirname output}'" unless File.dirname(source_file) == File.dirname(output)
162
+ args << source_file
163
+ command = "\"#{@lzc}\" #{args.join(' ')}"
164
+ ENV['LPS_HOME'] ||= ENV['OPENLASZLO_HOME']
165
+ begin
166
+ #raise NotImplementedError --- for testing Windows
167
+ require "open3"
168
+ # The compiler writes errors to stdout, warnings to stderr
169
+ stdin, stdout, stderr = Open3.popen3(command)
170
+ errors = stdout.read
171
+ warnings = stderr.readlines
172
+ warnings.shift if warnings.first and warnings.first =~ /^Compiling:/
173
+ rescue NotImplementedError
174
+ # Windows doesn't have popen
175
+ errors = `#{command}`
176
+ warnings = []
177
+ end
178
+ errors.gsub!(/^\d+\s+/, '') # work around a bug in OpenLaszlo 3.1
179
+ if errors =~ /^Compilation errors occurred:\n/
180
+ raise CompilationError.new($'.strip)
181
+ end
182
+ results = {:output => output, :warnings => warnings}
183
+ return results
184
+ end
185
+
186
+ private
187
+
188
+ # Locations in which to look for the lzc script, relative to OPENLASZLO_HOME
189
+ def bin_directories
190
+ [# binary distro location
191
+ 'bin',
192
+ # source distro location
193
+ 'WEB-INF/lps/server/bin'
194
+ ]
195
+ end
196
+
197
+ def windows?
198
+ RUBY_PLATFORM =~ /win/ and not RUBY_PLATFORM =~ /darwin/
199
+ end
200
+ end
201
+
202
+ # Returns the default compiler. Use the server-based compiler if it's
203
+ # available, since it's so much faster.
204
+ def self.compiler
205
+ return @compiler if @compiler
206
+ return @compiler = CompileServer.new if ENV['OPENLASZLO_URL'] and ENV['OPENLASZLO_HOME']
207
+ return @compiler = CommandLineCompiler.new if ENV['OPENLASZLO_HOME']
208
+ raise <<EOF
209
+ Couldn\'t find an OpenLaszlo compiler.
210
+
211
+ To use the compile server (recommended), set ENV['OPENLASZLO_URL'] and ENV['OPENLASZLO_HOME'].
212
+
213
+ To use the command-line compiler, set ENV['OPENLASZLO_HOME'].
214
+ EOF
215
+ end
216
+
217
+ # Sets the default compiler for future invocations of OpenLaszlo.compile.
218
+ def self.compiler=(compiler)
219
+ @compiler = compiler
220
+ end
221
+
222
+ # Compile an OpenLaszlo source file.
223
+ #
224
+ # Examples:
225
+ # require 'openlaszlo'
226
+ # OpenLaszlo::compile 'hello.lzx'
227
+ # OpenLaszlo::compile 'hello.lzx', :debug => true
228
+ # OpenLaszlo::compile 'hello.lzx', :runtime => 'swf8'
229
+ # OpenLaszlo::compile 'hello.lzx', {:runtime => 'swf8', :debug => true}
230
+ # OpenLaszlo::compile 'hello.lzx', :output => 'hello-world.swf'
231
+ #
232
+ # Options are:
233
+ # * <tt>:debug</tt> - debug mode (default false)
234
+ # * <tt>:output</tt> - specify the name and location for the output file (default = <tt>input_file.sub(/\.lzx$/, '.swf')</tt>)
235
+ # * <tt>:proxied</tt> - is application proxied (default true)
236
+ # * <tt>:runtime</tt> - runtime (default swf7)
237
+ #
238
+ # See CompileServer.compile and CommandLineCompiler.compile for
239
+ # additional options that are specific to the compilation methods in
240
+ # those classes.
241
+ def self.compile(source_file, options={})
242
+ return compiler.compile source_file, options
243
+ end
244
+
245
+ def self.make_html(source_file, options={}) #:nodoc:
246
+ raise 'not really supported, for now'
247
+ options = {
248
+ :format => 'html-object',
249
+ :output => File.basename(source_file, '.lzx')+'.html'}.update(options)
250
+ compiler.compile(source_file, options)
251
+ source_file = options[:output]
252
+ s = open(source_file).read
253
+ open(source_file, 'w') {|f| f.write s.gsub!(/\.lzx\?lzt=swf&amp;/, '.lzx.swf?')}
254
+ end
255
+ end
@@ -0,0 +1,5 @@
1
+ # Author:: Oliver Steele
2
+ # Copyright:: Copyright (c) 2005-2006 Oliver Steele. All rights reserved.
3
+ # License:: Ruby License.
4
+
5
+ require 'compiler'
@@ -0,0 +1,2 @@
1
+ <!-- This doesn't have a close tag, so it will fail compilation. -->
2
+ <canvas
@@ -0,0 +1 @@
1
+ <canvas unknown-attribute="value"/>
@@ -0,0 +1,144 @@
1
+ $:.unshift File.dirname(__FILE__) + "/../lib"
2
+
3
+ require 'test/unit'
4
+ require 'ropenlaszlo'
5
+ require 'fileutils'
6
+ require File.join(File.dirname(__FILE__), 'test_utils.rb')
7
+
8
+ include FileUtils
9
+
10
+ REQUIRED_ENV_VALUES = %w{OPENLASZLO_HOME OPENLASZLO_HOME}
11
+ unless REQUIRED_ENV_VALUES.reject {|w| ENV[w]}.empty?
12
+ raise "These environment variables must be set: #{REQUIRED_ENV_VALUES}.join(', ')"
13
+ end
14
+
15
+ module CompilerTestHelper
16
+ def self.included(base)
17
+ base.send(:include, InstanceMethods)
18
+ end
19
+
20
+ private
21
+ def testfile_pathname(file)
22
+ return File.expand_path(file, File.dirname(__FILE__))
23
+ end
24
+
25
+ def assert_same_file(a, b)
26
+ assert_equal File.expand_path(a), File.expand_path(b)
27
+ end
28
+
29
+ def compile(file, output=nil, options={})
30
+ file = testfile_pathname(file)
31
+ output ||= File.join(File.dirname(file), File.basename(file, '.lzx')+'.lzr=swf8.swf')
32
+ rm_f output
33
+ raise "Unable to remove output file: #{output}" if File.exists?(output)
34
+ begin
35
+ result = OpenLaszlo::compile(file, *options)
36
+ assert_same_file output, result[:output]
37
+ assert File.exists?(output), "#{output} does not exist"
38
+ return result
39
+ ensure
40
+ rm_f output
41
+ end
42
+ end
43
+
44
+ # Tests that are shared between CompilerServerTest and
45
+ # CommandLineCompilerTest.
46
+ module InstanceMethods
47
+ def test_compilation
48
+ result = compile 'test.lzx'
49
+ end
50
+
51
+ def test_compilation_warning
52
+ result = compile 'compilation-warning.lzx'
53
+ assert_instance_of Array, result[:warnings]
54
+ assert_equal 1, result[:warnings].length
55
+ assert_match /^compilation-warning.lzx:1:36/, result[:warnings].first
56
+ end
57
+
58
+ def test_compilation_error
59
+ ex = (compile 'compilation-error.lzx' rescue $!)
60
+ assert_instance_of OpenLaszlo::CompilationError, ex
61
+ assert_match /^compilation-error.lzx:3:1: XML document structures must start and end within the same entity\./, ex.message
62
+ end
63
+ end
64
+ end
65
+
66
+ class CompileServerTest < Test::Unit::TestCase
67
+ include CompilerTestHelper
68
+
69
+ def setup
70
+ OpenLaszlo::compiler = nil
71
+ home = ENV['OPENLASZLO_HOME']
72
+ dirs = Dir[File.join(home, 'Server', 'lps-*', 'WEB-INF')]
73
+ home = File.dirname(dirs.first) if dirs.any?
74
+ @test_dir = File.join(home, 'tmp/ropenlaszlo-tests')
75
+ mkdir_p @test_dir
76
+ end
77
+
78
+ def teardown
79
+ OpenLaszlo::compiler = nil
80
+ rm_rf @test_dir
81
+ end
82
+
83
+ private
84
+ alias :saved_compile :compile
85
+
86
+ def compile(file, output=nil, options={})
87
+ raise "unimplemented" if output
88
+ file = testfile_pathname file
89
+ server_local_file = File.join(@test_dir, File.basename(file))
90
+ cp file, server_local_file
91
+ begin
92
+ saved_compile(server_local_file, output, options)
93
+ ensure
94
+ rm_f server_local_file
95
+ end
96
+ end
97
+ end
98
+
99
+ class CommandLineCompilerTest < Test::Unit::TestCase
100
+ include CompilerTestHelper
101
+
102
+ def setup
103
+ OpenLaszlo::compiler = nil
104
+ callcc do |exit|
105
+ resume = nil
106
+ ENV.with_bindings 'OPENLASZLO_URL' => nil do
107
+ resume = callcc do |continue|
108
+ @teardown = continue
109
+ exit.call
110
+ end
111
+ end
112
+ resume.call
113
+ end
114
+ end
115
+
116
+ def teardown
117
+ OpenLaszlo::compiler = nil
118
+ callcc do |continue| @teardown.call(continue) end
119
+ end
120
+ end
121
+
122
+ class CompilerFacadeTest < Test::Unit::TestCase
123
+ def setup
124
+ raise "ENV['OPENLASZLO_URL'] must be set" unless ENV['OPENLASZLO_URL']
125
+ raise "ENV['OPENLASZLO_HOME'] must be set" unless ENV['OPENLASZLO_HOME']
126
+ OpenLaszlo::compiler = nil
127
+ end
128
+
129
+ def test_select_server
130
+ assert_instance_of OpenLaszlo::CompileServer, OpenLaszlo::compiler
131
+ end
132
+
133
+ def test_select_commandline
134
+ ENV.with_bindings 'OPENLASZLO_URL' => nil do
135
+ assert_instance_of OpenLaszlo::CommandLineCompiler, OpenLaszlo::compiler
136
+ end
137
+ end
138
+
139
+ def test_missing_home
140
+ ENV.with_bindings 'OPENLASZLO_HOME' => nil do
141
+ assert_raise(RuntimeError) do OpenLaszlo::compiler end
142
+ end
143
+ end
144
+ end
data/test/test.lzx ADDED
@@ -0,0 +1 @@
1
+ <canvas/>
@@ -0,0 +1,25 @@
1
+ # Author:: Oliver Steele
2
+ # Copyright:: Copyright (c) 2005-2006 Oliver Steele. All rights reserved.
3
+ # License:: Ruby License.
4
+
5
+ class << ENV
6
+ # Execute a block, restoring the bindings for +keys+ at the end.
7
+ # NOT thread-safe!
8
+ def with_saved_bindings keys, &block
9
+ saved_bindings = Hash[*keys.map {|k| [k, ENV[k]]}.flatten]
10
+ begin
11
+ block.call
12
+ ensure
13
+ ENV.update saved_bindings
14
+ end
15
+ end
16
+
17
+ # Execute a block with the temporary bindings in +bindings+.
18
+ # Doesn't remove keys; simply sets them to nil.
19
+ def with_bindings bindings, &block
20
+ with_saved_bindings bindings.keys do
21
+ ENV.update bindings
22
+ return block.call
23
+ end
24
+ end
25
+ end
metadata ADDED
@@ -0,0 +1,71 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: osteele-ropenlaszlo
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.5.1
5
+ platform: ruby
6
+ authors:
7
+ - Oliver Steele
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2009-03-22 00:00:00 -07:00
13
+ default_executable:
14
+ dependencies: []
15
+
16
+ description: ROpenLaszlo is an interface to the OpenLaszlo compiler.
17
+ email: steele@osteele.com
18
+ executables: []
19
+
20
+ extensions: []
21
+
22
+ extra_rdoc_files:
23
+ - README.rdoc
24
+ - MIT-LICENSE
25
+ - CHANGES
26
+ - TODO
27
+ files:
28
+ - lib/compiler.rb
29
+ - lib/ropenlaszlo.rb
30
+ - test/compilation-error.lzx
31
+ - test/compilation-warning.lzx
32
+ - test/compiler_test.rb
33
+ - test/test.lzx
34
+ - test/test_utils.rb
35
+ - README.rdoc
36
+ - MIT-LICENSE
37
+ - CHANGES
38
+ - TODO
39
+ has_rdoc: true
40
+ homepage: http://github.com/osteele/ropenlaszlo
41
+ post_install_message:
42
+ rdoc_options:
43
+ - --title
44
+ - "ROpenLaszlo: Ruby interface to the OpenLaszlo compiler"
45
+ - --exclude
46
+ - test/.*
47
+ - --inline-source
48
+ - --charset=UTF-8
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: ropenlaszlo
66
+ rubygems_version: 1.2.0
67
+ signing_key:
68
+ specification_version: 2
69
+ summary: Ruby interface to the OpenLaszlo compiler.
70
+ test_files: []
71
+