opal 0.5.5 → 0.6.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +40 -9
- data/CHANGELOG.md +349 -0
- data/Gemfile +7 -8
- data/README.md +25 -3
- data/Rakefile +4 -2
- data/bin/opal +1 -1
- data/examples/rack/Gemfile +3 -0
- data/examples/rack/app/application.rb +13 -0
- data/examples/rack/app/user.rb +21 -0
- data/examples/rack/config.ru +7 -0
- data/examples/rack/index.html.erb +10 -0
- data/examples/sinatra/Gemfile +4 -0
- data/examples/sinatra/app/application.rb +7 -0
- data/examples/sinatra/config.ru +21 -0
- data/lib/mspec/opal/rake_task.rb +29 -8
- data/lib/mspec/opal/runner.rb +5 -4
- data/lib/opal.rb +1 -0
- data/lib/opal/builder.rb +0 -28
- data/lib/opal/cli.rb +0 -14
- data/lib/opal/compiler.rb +12 -11
- data/lib/opal/fragment.rb +8 -1
- data/lib/opal/nodes/array.rb +1 -1
- data/lib/opal/nodes/base.rb +4 -0
- data/lib/opal/nodes/call.rb +6 -2
- data/lib/opal/nodes/call_special.rb +1 -1
- data/lib/opal/nodes/class.rb +2 -2
- data/lib/opal/nodes/constants.rb +3 -1
- data/lib/opal/nodes/helpers.rb +23 -14
- data/lib/opal/nodes/if.rb +16 -9
- data/lib/opal/nodes/literal.rb +37 -5
- data/lib/opal/nodes/logic.rb +7 -1
- data/lib/opal/nodes/module.rb +2 -2
- data/lib/opal/nodes/scope.rb +13 -2
- data/lib/opal/nodes/top.rb +9 -0
- data/lib/opal/nodes/variables.rb +5 -2
- data/lib/opal/parser.rb +306 -71
- data/lib/opal/parser/grammar.rb +2667 -2775
- data/lib/opal/parser/grammar.y +177 -233
- data/lib/opal/parser/lexer.rb +511 -427
- data/lib/opal/parser/sexp.rb +15 -3
- data/lib/opal/source_map.rb +8 -4
- data/lib/opal/sprockets.rb +4 -0
- data/lib/opal/sprockets/cache_key_fix.rb +17 -0
- data/lib/opal/sprockets/environment.rb +21 -0
- data/lib/opal/sprockets/erb.rb +30 -0
- data/lib/opal/sprockets/processor.rb +127 -0
- data/lib/opal/sprockets/server.rb +166 -0
- data/lib/opal/util.rb +29 -0
- data/lib/opal/version.rb +1 -1
- data/opal.gemspec +1 -1
- data/opal/corelib/array.rb +106 -187
- data/opal/corelib/array/inheritance.rb +113 -0
- data/opal/corelib/basic_object.rb +6 -2
- data/opal/corelib/boolean.rb +4 -0
- data/opal/corelib/class.rb +2 -0
- data/opal/corelib/complex.rb +3 -0
- data/opal/corelib/enumerable.rb +75 -8
- data/opal/corelib/enumerator.rb +2 -0
- data/opal/corelib/error.rb +23 -23
- data/opal/corelib/hash.rb +5 -5
- data/opal/corelib/helpers.rb +51 -16
- data/opal/corelib/io.rb +7 -24
- data/opal/corelib/kernel.rb +23 -11
- data/opal/corelib/module.rb +44 -47
- data/opal/corelib/nil_class.rb +4 -0
- data/opal/corelib/numeric.rb +101 -15
- data/opal/corelib/range.rb +2 -0
- data/opal/corelib/rational.rb +3 -0
- data/opal/corelib/regexp.rb +36 -17
- data/opal/corelib/runtime.js +22 -7
- data/opal/corelib/string.rb +213 -110
- data/opal/corelib/string/inheritance.rb +78 -0
- data/opal/corelib/struct.rb +8 -0
- data/opal/corelib/time.rb +54 -42
- data/opal/corelib/variables.rb +24 -0
- data/opal/opal.rb +5 -27
- data/spec/cli/compiler_spec.rb +136 -0
- data/spec/cli/dependency_resolver_spec.rb +40 -0
- data/spec/cli/lexer_spec.rb +110 -0
- data/spec/cli/parser/alias_spec.rb +26 -0
- data/spec/cli/parser/and_spec.rb +13 -0
- data/spec/cli/parser/attrasgn_spec.rb +28 -0
- data/spec/cli/parser/begin_spec.rb +42 -0
- data/spec/cli/parser/block_spec.rb +12 -0
- data/spec/cli/parser/break_spec.rb +17 -0
- data/spec/cli/parser/call_spec.rb +139 -0
- data/spec/cli/parser/class_spec.rb +35 -0
- data/spec/cli/parser/comments_spec.rb +11 -0
- data/spec/cli/parser/def_spec.rb +61 -0
- data/spec/cli/parser/if_spec.rb +26 -0
- data/spec/cli/parser/iter_spec.rb +59 -0
- data/spec/cli/parser/lambda_spec.rb +64 -0
- data/spec/cli/parser/literal_spec.rb +113 -0
- data/spec/cli/parser/masgn_spec.rb +37 -0
- data/spec/cli/parser/module_spec.rb +27 -0
- data/spec/cli/parser/not_spec.rb +27 -0
- data/spec/cli/parser/op_asgn1_spec.rb +23 -0
- data/spec/cli/parser/op_asgn2_spec.rb +23 -0
- data/spec/cli/parser/or_spec.rb +13 -0
- data/spec/cli/parser/return_spec.rb +17 -0
- data/spec/cli/parser/sclass_spec.rb +21 -0
- data/spec/cli/parser/string_spec.rb +269 -0
- data/spec/cli/parser/super_spec.rb +20 -0
- data/spec/cli/parser/undef_spec.rb +15 -0
- data/spec/cli/parser/unless_spec.rb +13 -0
- data/spec/cli/parser/variables_spec.rb +92 -0
- data/spec/cli/parser/while_spec.rb +15 -0
- data/spec/cli/parser/yield_spec.rb +20 -0
- data/spec/cli/spec_helper.rb +31 -11
- data/spec/opal/core/array/set_range_to_array_spec.rb +7 -0
- data/spec/opal/core/date_spec.rb +122 -0
- data/spec/opal/core/language/predefined_spec.rb +1 -1
- data/spec/opal/core/runtime/operator_call_spec.rb +13 -0
- data/spec/opal/core/runtime/truthy_spec.rb +23 -0
- data/spec/opal/filters/bugs/array.rb +96 -87
- data/spec/opal/filters/bugs/basic_object.rb +9 -0
- data/spec/opal/filters/bugs/class.rb +16 -0
- data/spec/opal/filters/bugs/enumerable.rb +54 -0
- data/spec/opal/filters/bugs/language.rb +37 -3
- data/spec/opal/filters/bugs/math.rb +93 -0
- data/spec/opal/filters/bugs/nil.rb +7 -0
- data/spec/opal/filters/bugs/numeric.rb +19 -0
- data/spec/opal/filters/bugs/opal.rb +12 -0
- data/spec/opal/filters/bugs/regexp.rb +0 -2
- data/spec/opal/filters/bugs/string.rb +317 -19
- data/spec/opal/filters/bugs/struct.rb +29 -0
- data/spec/opal/filters/bugs/time.rb +130 -9
- data/spec/opal/filters/unsupported/encoding.rb +52 -4
- data/spec/opal/filters/unsupported/enumerator.rb +0 -3
- data/spec/opal/filters/unsupported/integer_size.rb +7 -0
- data/spec/opal/filters/unsupported/method_added.rb +10 -0
- data/spec/opal/filters/unsupported/mutable_strings.rb +299 -1
- data/spec/opal/filters/unsupported/private_constants.rb +30 -0
- data/spec/opal/filters/unsupported/private_methods.rb +16 -0
- data/spec/opal/filters/unsupported/random.rb +4 -0
- data/spec/opal/filters/unsupported/tainted.rb +53 -0
- data/spec/opal/filters/unsupported/trusted.rb +5 -0
- data/spec/opal/rubyspecs +167 -234
- data/spec/opal/spec_helper.rb +3 -0
- data/spec/opal/stdlib/promise/error_spec.rb +15 -0
- data/spec/opal/stdlib/promise/rescue_spec.rb +35 -0
- data/spec/opal/stdlib/promise/then_spec.rb +54 -0
- data/spec/opal/stdlib/promise/trace_spec.rb +35 -0
- data/spec/opal/stdlib/promise/value_spec.rb +15 -0
- data/spec/opal/stdlib/promise/when_spec.rb +34 -0
- data/stdlib/base64.rb +152 -0
- data/stdlib/date.rb +82 -49
- data/{opal/corelib → stdlib}/encoding.rb +3 -1
- data/stdlib/erb.rb +0 -1
- data/stdlib/json.rb +10 -26
- data/stdlib/math.rb +370 -0
- data/stdlib/native.rb +40 -33
- data/stdlib/opal-parser.rb +7 -4
- data/stdlib/promise.rb +292 -0
- data/stdlib/strscan.rb +1 -1
- data/stdlib/template.rb +1 -3
- data/stdlib/time.rb +9 -0
- metadata +143 -204
- data/doc/compiler.md +0 -42
- data/doc/compiler_options.md +0 -5
- data/doc/examples/node_http_server.rb +0 -49
- data/doc/external_libraries.md +0 -9
- data/doc/generated_javascript.md +0 -272
- data/doc/home.md +0 -17
- data/doc/method_missing.md +0 -58
- data/doc/static_applications.md +0 -60
- data/doc/using_ruby_from_javascript.md +0 -18
- data/doc/using_sprockets.md +0 -65
- data/spec/opal/core/numeric/abs_spec.rb +0 -12
- data/spec/opal/core/numeric/downto_spec.rb +0 -19
- data/spec/opal/core/numeric/equal_value_spec.rb +0 -9
- data/spec/opal/core/numeric/even_spec.rb +0 -21
- data/spec/opal/core/numeric/magnitude_spec.rb +0 -12
- data/spec/opal/core/numeric/odd_spec.rb +0 -21
- data/spec/opal/core/string/chop_spec.rb +0 -10
- data/spec/opal/core/string/chr_spec.rb +0 -13
- data/spec/opal/core/string/clone_spec.rb +0 -8
- data/spec/opal/core/string/comparison_spec.rb +0 -13
- data/spec/opal/core/string/dup_spec.rb +0 -8
- data/spec/opal/core/string/element_reference_spec.rb +0 -96
- data/spec/opal/core/string/fixtures/classes.rb +0 -49
- data/spec/opal/core/string/format_spec.rb +0 -9
- data/spec/opal/core/string/freeze_spec.rb +0 -15
- data/spec/opal/core/string/gsub_spec.rb +0 -31
- data/spec/opal/core/string/lines_spec.rb +0 -9
- data/spec/opal/core/string/ljust_spec.rb +0 -32
- data/spec/opal/core/string/lstrip_spec.rb +0 -7
- data/spec/opal/core/string/match_spec.rb +0 -49
- data/spec/opal/core/string/next_spec.rb +0 -10
- data/spec/opal/core/string/ord_spec.rb +0 -9
- data/spec/opal/core/string/partition_spec.rb +0 -10
- data/spec/opal/core/string/rindex_spec.rb +0 -50
- data/spec/opal/core/string/rjust_spec.rb +0 -32
- data/spec/opal/core/string/rstrip_spec.rb +0 -7
- data/spec/opal/core/string/scan_spec.rb +0 -66
- data/spec/opal/core/string/slice_spec.rb +0 -74
- data/spec/opal/core/string/split_spec.rb +0 -5
- data/spec/opal/core/string/strip_spec.rb +0 -6
- data/spec/opal/core/string/sub_spec.rb +0 -38
- data/spec/opal/core/string/succ_spec.rb +0 -10
- data/spec/opal/core/string/sum_spec.rb +0 -5
- data/spec/opal/core/string/to_f_spec.rb +0 -14
- data/spec/opal/core/string/to_i_spec.rb +0 -25
- data/spec/opal/core/string/tr_s_spec.rb +0 -31
- data/spec/opal/core/string/tr_spec.rb +0 -31
- data/spec/opal/filters/bugs/parser.rb +0 -10
- data/spec/opal/filters/unsupported/immutable_strings.rb +0 -24
- data/spec/opal/filters/unsupported/string_subclasses.rb +0 -8
- data/spec/opal/parser/alias_spec.rb +0 -26
- data/spec/opal/parser/and_spec.rb +0 -13
- data/spec/opal/parser/array_spec.rb +0 -22
- data/spec/opal/parser/attrasgn_spec.rb +0 -28
- data/spec/opal/parser/begin_spec.rb +0 -42
- data/spec/opal/parser/block_spec.rb +0 -12
- data/spec/opal/parser/break_spec.rb +0 -17
- data/spec/opal/parser/call_spec.rb +0 -131
- data/spec/opal/parser/class_spec.rb +0 -35
- data/spec/opal/parser/const_spec.rb +0 -13
- data/spec/opal/parser/cvar_spec.rb +0 -11
- data/spec/opal/parser/def_spec.rb +0 -61
- data/spec/opal/parser/false_spec.rb +0 -17
- data/spec/opal/parser/file_spec.rb +0 -7
- data/spec/opal/parser/gvar_spec.rb +0 -13
- data/spec/opal/parser/hash_spec.rb +0 -17
- data/spec/opal/parser/heredoc_spec.rb +0 -30
- data/spec/opal/parser/iasgn_spec.rb +0 -9
- data/spec/opal/parser/if_spec.rb +0 -26
- data/spec/opal/parser/int_spec.rb +0 -13
- data/spec/opal/parser/iter_spec.rb +0 -59
- data/spec/opal/parser/ivar_spec.rb +0 -9
- data/spec/opal/parser/lambda_spec.rb +0 -64
- data/spec/opal/parser/lasgn_spec.rb +0 -8
- data/spec/opal/parser/line_spec.rb +0 -8
- data/spec/opal/parser/lvar_spec.rb +0 -38
- data/spec/opal/parser/masgn_spec.rb +0 -37
- data/spec/opal/parser/module_spec.rb +0 -27
- data/spec/opal/parser/nil_spec.rb +0 -17
- data/spec/opal/parser/not_spec.rb +0 -27
- data/spec/opal/parser/nth_ref_spec.rb +0 -13
- data/spec/opal/parser/op_asgn1_spec.rb +0 -23
- data/spec/opal/parser/op_asgn2_spec.rb +0 -23
- data/spec/opal/parser/or_spec.rb +0 -13
- data/spec/opal/parser/parse_spec.rb +0 -66
- data/spec/opal/parser/regexp_spec.rb +0 -16
- data/spec/opal/parser/return_spec.rb +0 -17
- data/spec/opal/parser/sclass_spec.rb +0 -21
- data/spec/opal/parser/self_spec.rb +0 -17
- data/spec/opal/parser/str_spec.rb +0 -107
- data/spec/opal/parser/string_spec.rb +0 -8
- data/spec/opal/parser/super_spec.rb +0 -20
- data/spec/opal/parser/true_spec.rb +0 -17
- data/spec/opal/parser/undef_spec.rb +0 -15
- data/spec/opal/parser/unless_spec.rb +0 -13
- data/spec/opal/parser/while_spec.rb +0 -15
- data/spec/opal/parser/xstr_spec.rb +0 -116
- data/spec/opal/parser/yield_spec.rb +0 -20
data/doc/static_applications.md
DELETED
@@ -1,60 +0,0 @@
|
|
1
|
-
`opal-sprockets` makes it easy to build static opal applications. Opal uses internal load paths to make it easy to handle resolving requirements during building. `opal-sprockets` forms the basis of rails support, so anything you can do there, you can do standalone as well.
|
2
|
-
|
3
|
-
## Overview
|
4
|
-
|
5
|
-
First, install `opal` and `opal-sprockets` by simply adding to a `Gemfile`:
|
6
|
-
|
7
|
-
```ruby
|
8
|
-
# Gemfile
|
9
|
-
|
10
|
-
gem "opal", ">= 0.4.3"
|
11
|
-
gem "opal-sprockets"
|
12
|
-
```
|
13
|
-
|
14
|
-
Next, we want to add our main app code. Keep all opal code inside `app/` directory, and edit `app/application.rb`:
|
15
|
-
|
16
|
-
```ruby
|
17
|
-
# app/application.rb
|
18
|
-
|
19
|
-
require "opal"
|
20
|
-
|
21
|
-
puts "Wow, running opal!"
|
22
|
-
```
|
23
|
-
|
24
|
-
You will notice the `require "opal"` line which will automatically include the opal runtime and corelib into our output, giving us access to the `puts()` method.
|
25
|
-
|
26
|
-
To build this, we need a rake task to load a new opal environment, add our `app/` directory to the load path, and then to build our target file `application.rb` which will be found because it is inside our added load path.
|
27
|
-
|
28
|
-
```ruby
|
29
|
-
# Rakefile
|
30
|
-
|
31
|
-
require 'opal'
|
32
|
-
require 'opal-sprockets'
|
33
|
-
|
34
|
-
desc "Build our app to build.js"
|
35
|
-
task :build do
|
36
|
-
env = Opal::Environment.new
|
37
|
-
env.append_path "app"
|
38
|
-
|
39
|
-
File.open("build.js", "w+") do |out|
|
40
|
-
out << env["application"].to_s
|
41
|
-
end
|
42
|
-
end
|
43
|
-
```
|
44
|
-
|
45
|
-
Now, if you run `rake build` you will get the `build.js` output file with our application compiled, with the opal runtime included as well.
|
46
|
-
|
47
|
-
To run the application, lets create a very simple html file:
|
48
|
-
|
49
|
-
```html
|
50
|
-
<!DOCTYPE html>
|
51
|
-
<html>
|
52
|
-
<head>
|
53
|
-
<script src="build.js"></script>
|
54
|
-
</head>
|
55
|
-
<body>
|
56
|
-
</body>
|
57
|
-
</html>
|
58
|
-
```
|
59
|
-
|
60
|
-
Now, open this html file and check the browsers console. You should see our message printed in the console.
|
@@ -1,18 +0,0 @@
|
|
1
|
-
Accessing classes and methods defined in Opal from the javascript runtime is possible via the Opal js object. The following class:
|
2
|
-
|
3
|
-
```ruby
|
4
|
-
class Foo
|
5
|
-
def bar
|
6
|
-
puts "called bar on class Foo defined in ruby code"
|
7
|
-
end
|
8
|
-
end
|
9
|
-
```
|
10
|
-
|
11
|
-
Can be accessed from javascript like this:
|
12
|
-
|
13
|
-
```javascript
|
14
|
-
Opal.Foo.$new().$bar();
|
15
|
-
// => "called bar on class Foo defined in ruby code"
|
16
|
-
```
|
17
|
-
|
18
|
-
Remember that all ruby methods are prefixed with a '$'.
|
data/doc/using_sprockets.md
DELETED
@@ -1,65 +0,0 @@
|
|
1
|
-
`opal-sprockets` provides a simple `Opal::Server` class to make it easy to get a rack server up and running for trying out opal. This server will automatically recompile ruby sources when they change, meaning you just need to refresh your page to autorun.
|
2
|
-
|
3
|
-
## Getting setup
|
4
|
-
|
5
|
-
Add `opal` and `opal-sprockets` to a `Gemfile`:
|
6
|
-
|
7
|
-
```ruby
|
8
|
-
#Gemfile
|
9
|
-
source 'https://rubygems.org'
|
10
|
-
|
11
|
-
gem 'opal', '>= 0.4.3'
|
12
|
-
gem 'opal-sprockets'
|
13
|
-
```
|
14
|
-
|
15
|
-
And install with `bundle install`.
|
16
|
-
|
17
|
-
We need a directory to hold our opal code, so create `app/` and add a simple demo script to `app/application.rb`:
|
18
|
-
|
19
|
-
```ruby
|
20
|
-
# app/application.rb
|
21
|
-
|
22
|
-
require 'opal'
|
23
|
-
|
24
|
-
puts "hello world"
|
25
|
-
```
|
26
|
-
|
27
|
-
Finally, we need a html page to run, so create `index.html`:
|
28
|
-
|
29
|
-
```html
|
30
|
-
<!doctype html>
|
31
|
-
<html lang="en">
|
32
|
-
<head>
|
33
|
-
<meta charset="utf-8">
|
34
|
-
<title>opal server example</title>
|
35
|
-
<script src="/assets/application.js"></script>
|
36
|
-
</head>
|
37
|
-
<body>
|
38
|
-
</body>
|
39
|
-
</html>
|
40
|
-
```
|
41
|
-
|
42
|
-
## Using Opal::Server
|
43
|
-
|
44
|
-
`Opal::Server` can be run like any rack app, so just add a `config.ru` file:
|
45
|
-
|
46
|
-
```ruby
|
47
|
-
# config.ru
|
48
|
-
|
49
|
-
require 'bundler'
|
50
|
-
Bundler.require
|
51
|
-
|
52
|
-
run Opal::Server.new { |s|
|
53
|
-
s.append_path 'app'
|
54
|
-
|
55
|
-
s.main = 'application'
|
56
|
-
}
|
57
|
-
```
|
58
|
-
|
59
|
-
This rack app simply adds our `app/` directory to opal load path, and sets our main file to `application`, which will be found inside `app/`.
|
60
|
-
|
61
|
-
## Running the app
|
62
|
-
|
63
|
-
Run `bundle exec rackup` and visit the page `http://127.0.0.1:9292` in any browser. Observe the console to see the printed statement.
|
64
|
-
|
65
|
-
You can just change `app/application.rb` and refresh the page to see any changes.
|
@@ -1,19 +0,0 @@
|
|
1
|
-
describe "Numeric#downto [stop] when self and stop are Fixnums" do
|
2
|
-
it "does not yield when stop is greater than self" do
|
3
|
-
result = []
|
4
|
-
5.downto(6) { |x| result << x }
|
5
|
-
result.should == []
|
6
|
-
end
|
7
|
-
|
8
|
-
it "yields once when stop equals self" do
|
9
|
-
result = []
|
10
|
-
5.downto(5) { |x| result << x }
|
11
|
-
result.should == [5]
|
12
|
-
end
|
13
|
-
|
14
|
-
it "yields while decreasing self until it is less than stop" do
|
15
|
-
result = []
|
16
|
-
5.downto(2) { |x| result << x }
|
17
|
-
result.should == [5, 4, 3, 2]
|
18
|
-
end
|
19
|
-
end
|
@@ -1,21 +0,0 @@
|
|
1
|
-
describe "Numeric#even?" do
|
2
|
-
it "is true for zero" do
|
3
|
-
0.even?.should be_true
|
4
|
-
end
|
5
|
-
|
6
|
-
it "is true for even positive Fixnums" do
|
7
|
-
4.even?.should be_true
|
8
|
-
end
|
9
|
-
|
10
|
-
it "is true for even negative Fixnums" do
|
11
|
-
(-4).even?.should be_true
|
12
|
-
end
|
13
|
-
|
14
|
-
it "is false for odd positive Fixnums" do
|
15
|
-
5.even?.should be_false
|
16
|
-
end
|
17
|
-
|
18
|
-
it "is false for odd negative Fixnums" do
|
19
|
-
(-5).even?.should be_false
|
20
|
-
end
|
21
|
-
end
|
@@ -1,12 +0,0 @@
|
|
1
|
-
describe "Numeric#magnitude" do
|
2
|
-
it "returns self's absolute value" do
|
3
|
-
(-100).magnitude.should == 100
|
4
|
-
(100).magnitude.should == 100
|
5
|
-
|
6
|
-
(-0).magnitude.should == 0
|
7
|
-
(0).magnitude.should == 0
|
8
|
-
|
9
|
-
(-42).magnitude.should == 42
|
10
|
-
(42).magnitude.should == 42
|
11
|
-
end
|
12
|
-
end
|
@@ -1,21 +0,0 @@
|
|
1
|
-
describe "Numeric#odd?" do
|
2
|
-
it "is false for zero" do
|
3
|
-
0.odd?.should be_false
|
4
|
-
end
|
5
|
-
|
6
|
-
it "is false for even positive Fixnums" do
|
7
|
-
4.odd?.should be_false
|
8
|
-
end
|
9
|
-
|
10
|
-
it "is false for even negative Fixnums" do
|
11
|
-
(-4).odd?.should be_false
|
12
|
-
end
|
13
|
-
|
14
|
-
it "is true for odd positive Fixnums" do
|
15
|
-
5.odd?.should be_true
|
16
|
-
end
|
17
|
-
|
18
|
-
it "is true for odd negative Fixnums" do
|
19
|
-
(-5).odd?.should be_true
|
20
|
-
end
|
21
|
-
end
|
@@ -1,10 +0,0 @@
|
|
1
|
-
describe "String#chop" do
|
2
|
-
it "returns a new string with the last character removed" do
|
3
|
-
"hello\n".chop.should == "hello"
|
4
|
-
"hello".chop.should == "hell"
|
5
|
-
end
|
6
|
-
|
7
|
-
it "returns an empty string when applied to an empty string" do
|
8
|
-
"".chop.should == ""
|
9
|
-
end
|
10
|
-
end
|
@@ -1,13 +0,0 @@
|
|
1
|
-
describe "String#chr" do
|
2
|
-
it "returns an empty String if self is an empty String" do
|
3
|
-
"".chr.should == ""
|
4
|
-
end
|
5
|
-
|
6
|
-
it "returns a 1-character String" do
|
7
|
-
"glark".chr.size.should == 1
|
8
|
-
end
|
9
|
-
|
10
|
-
it "returns the character at the start of the String" do
|
11
|
-
"Goodbye, world".chr.should == "G"
|
12
|
-
end
|
13
|
-
end
|
@@ -1,13 +0,0 @@
|
|
1
|
-
describe "String#<=>" do
|
2
|
-
it "returns -1 when self is less than other" do
|
3
|
-
("this" <=> "those").should == -1
|
4
|
-
end
|
5
|
-
|
6
|
-
it "returns 0 when self is equal to other" do
|
7
|
-
("yep" <=> "yep").should == 0
|
8
|
-
end
|
9
|
-
|
10
|
-
it "returns 1 when self is greater than other" do
|
11
|
-
("yoddle" <=> "griddle").should == 1
|
12
|
-
end
|
13
|
-
end
|
@@ -1,96 +0,0 @@
|
|
1
|
-
require File.expand_path('../fixtures/classes', __FILE__)
|
2
|
-
|
3
|
-
describe "String#[]" do
|
4
|
-
it "returns the character code of the character at the given index" do
|
5
|
-
"hello"[0].should == "h"
|
6
|
-
"hello"[-1].should == "o"
|
7
|
-
end
|
8
|
-
|
9
|
-
it "returns nil if index is outside of self" do
|
10
|
-
"hello"[20].should == nil
|
11
|
-
"hello"[-20].should == nil
|
12
|
-
|
13
|
-
""[0].should == nil
|
14
|
-
""[-1].should == nil
|
15
|
-
end
|
16
|
-
end
|
17
|
-
|
18
|
-
describe "with index, length" do
|
19
|
-
it "returns the substring starting at the given index with the given length" do
|
20
|
-
"hello there"[0, 0].should == ""
|
21
|
-
"hello there"[0, 1].should == "h"
|
22
|
-
"hello there"[0, 3].should == "hel"
|
23
|
-
"hello there"[0, 6].should == "hello "
|
24
|
-
"hello there"[0, 9].should == "hello the"
|
25
|
-
"hello there"[0, 12].should == "hello there"
|
26
|
-
|
27
|
-
"hello there"[1, 0].should == ""
|
28
|
-
"hello there"[1, 1].should == "e"
|
29
|
-
"hello there"[1, 3].should == "ell"
|
30
|
-
"hello there"[1, 6].should == "ello t"
|
31
|
-
"hello there"[1, 9].should == "ello ther"
|
32
|
-
"hello there"[1, 12].should == "ello there"
|
33
|
-
|
34
|
-
"hello there"[3, 0].should == ""
|
35
|
-
"hello there"[3, 1].should == "l"
|
36
|
-
"hello there"[3, 3].should == "lo "
|
37
|
-
"hello there"[3, 6].should == "lo the"
|
38
|
-
"hello there"[3, 9].should == "lo there"
|
39
|
-
|
40
|
-
"hello there"[4, 0].should == ""
|
41
|
-
"hello there"[4, 3].should == "o t"
|
42
|
-
"hello there"[4, 6].should == "o ther"
|
43
|
-
"hello there"[4, 9].should == "o there"
|
44
|
-
|
45
|
-
"foo"[2, 1].should == "o"
|
46
|
-
"foo"[3, 0].should == ""
|
47
|
-
"foo"[3, 1].should == ""
|
48
|
-
|
49
|
-
""[0, 0].should == ""
|
50
|
-
""[0, 1].should == ""
|
51
|
-
|
52
|
-
"x"[0, 0].should == ""
|
53
|
-
"x"[0, 1].should == "x"
|
54
|
-
"x"[1, 0].should == ""
|
55
|
-
"x"[-1, 1].should == "x"
|
56
|
-
end
|
57
|
-
|
58
|
-
it "returns nil if the offset falls outside of self" do
|
59
|
-
"hello there"[20, 3].should == nil
|
60
|
-
"hello there"[-20, 3].should == nil
|
61
|
-
|
62
|
-
""[1, 0].should == nil
|
63
|
-
""[1, 1].should == nil
|
64
|
-
|
65
|
-
""[2, 0].should == nil
|
66
|
-
""[2, 1].should == nil
|
67
|
-
|
68
|
-
"x"[2, 0].should == nil
|
69
|
-
"x"[2, 1].should == nil
|
70
|
-
|
71
|
-
"x"[-2, 0].should == nil
|
72
|
-
"x"[-2, 1].should == nil
|
73
|
-
end
|
74
|
-
|
75
|
-
describe "with range" do
|
76
|
-
it "returns the substring given by the offsets of the range" do
|
77
|
-
"hello there"[1..1].should == "e"
|
78
|
-
"hello there"[1..3].should == "ell"
|
79
|
-
"hello there"[1...3].should == "el"
|
80
|
-
"hello there"[-4..-2].should == "her"
|
81
|
-
"hello there"[-4...-2].should == "he"
|
82
|
-
"hello there"[5..-1].should == " there"
|
83
|
-
"hello there"[5...-1].should == " ther"
|
84
|
-
|
85
|
-
""[0..0].should == ""
|
86
|
-
|
87
|
-
"x"[0..0].should == "x"
|
88
|
-
"x"[0..1].should == "x"
|
89
|
-
"x"[0...1].should == "x"
|
90
|
-
"x"[0..-1].should == "x"
|
91
|
-
|
92
|
-
"x"[1..1].should == ""
|
93
|
-
"x"[1..-1].should == ""
|
94
|
-
end
|
95
|
-
end
|
96
|
-
end
|
@@ -1,49 +0,0 @@
|
|
1
|
-
class Object
|
2
|
-
# This helper is defined here rather than in MSpec because
|
3
|
-
# it is only used in #unpack specs.
|
4
|
-
def unpack_format(count=nil, repeat=nil)
|
5
|
-
format = "#{instance_variable_get(:@method)}#{count}"
|
6
|
-
format *= repeat if repeat
|
7
|
-
format
|
8
|
-
end
|
9
|
-
end
|
10
|
-
|
11
|
-
module StringSpecs
|
12
|
-
class MyString < String; end
|
13
|
-
class MyArray < Array; end
|
14
|
-
class MyRange < Range; end
|
15
|
-
|
16
|
-
class SubString < String
|
17
|
-
attr_reader :special
|
18
|
-
|
19
|
-
def initialize(str=nil)
|
20
|
-
@special = str
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
|
-
class InitializeString < String
|
25
|
-
attr_reader :ivar
|
26
|
-
|
27
|
-
def initialize(other)
|
28
|
-
super
|
29
|
-
@ivar = 1
|
30
|
-
end
|
31
|
-
|
32
|
-
def initialize_copy(other)
|
33
|
-
ScratchPad.record object_id
|
34
|
-
end
|
35
|
-
end
|
36
|
-
|
37
|
-
module StringModule
|
38
|
-
def repr
|
39
|
-
1
|
40
|
-
end
|
41
|
-
end
|
42
|
-
|
43
|
-
class StringWithRaisingConstructor < String
|
44
|
-
def initialize(str)
|
45
|
-
raise ArgumentError.new('constructor was called') unless str == 'silly:string'
|
46
|
-
self.replace(str)
|
47
|
-
end
|
48
|
-
end
|
49
|
-
end
|