jruby-scala-collections 0.1.3 → 0.1.4
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/README.md +14 -3
- data/ext/dist/collections.jar +0 -0
- data/lib/jruby/scala_support.rb +104 -2
- metadata +111 -16
data/README.md
CHANGED
@@ -14,8 +14,7 @@ With bundler:
|
|
14
14
|
```gem "jruby-scala-collections", ">=0.1.1", require: "jruby/scala_support"```
|
15
15
|
|
16
16
|
Beware that you have to have ```scala-library.jar``` loaded before you
|
17
|
-
load ```jruby/scala_support```. In Rails this generally means it loading in
|
18
|
-
```config/boot.rb```.
|
17
|
+
load ```jruby/scala_support```. In Rails this generally means it loading in ```config/boot.rb```.
|
19
18
|
|
20
19
|
## How do you use it?
|
21
20
|
|
@@ -64,5 +63,17 @@ methods:
|
|
64
63
|
## Disclaimer
|
65
64
|
|
66
65
|
This library was written by Artūras 'arturaz' Šlajus for personal
|
67
|
-
usage.
|
66
|
+
usage.
|
67
|
+
|
68
|
+
## Contributing
|
69
|
+
```#to_scala``` should work pretty well, however Ruby wrappers
|
68
70
|
in ```#from_scala``` may be missing methods. Patches are welcome.
|
71
|
+
jruby-scala-collections uses rubyspec and mspec to test that the behaviour
|
72
|
+
of the Ruby wrappers is correct.
|
73
|
+
Currently only a part of those tests pass. You can contribute by grabbing
|
74
|
+
any of the tests marked as `fails` in `rubyspec/tags/**/*_tags.txt`, marking it as
|
75
|
+
`focus` and implement the needed behaviour.
|
76
|
+
Guard is configured so that `bundle exec guard` runs all tests that have the focus tag.
|
77
|
+
If you want to run all tests that should be working, use `bundle exec mspec -G fails rubyspec`.
|
78
|
+
If you have implemented functionality, run `bundle exec mspec tag rubyspec` to update the list
|
79
|
+
of failing tests and check with a `git diff` that you haven't broken other functionality.
|
data/ext/dist/collections.jar
CHANGED
Binary file
|
data/lib/jruby/scala_support.rb
CHANGED
@@ -69,13 +69,32 @@ module JRuby::ScalaSupport
|
|
69
69
|
end
|
70
70
|
|
71
71
|
def keys
|
72
|
-
@raw.keys.toSeq.from_scala
|
72
|
+
@raw.keys.toSeq.from_scala.to_a
|
73
73
|
end
|
74
74
|
|
75
|
+
def values
|
76
|
+
@raw.values.toSeq.from_scala.to_a
|
77
|
+
end
|
78
|
+
|
79
|
+
def value?(v)
|
80
|
+
values.include?(v)
|
81
|
+
end
|
82
|
+
|
83
|
+
alias_method :has_value?, :value?
|
84
|
+
|
75
85
|
def has_key?(key)
|
76
86
|
@raw.contains(key)
|
77
87
|
end
|
78
88
|
|
89
|
+
alias_method :key?, :has_key?
|
90
|
+
alias_method :member?, :has_key?
|
91
|
+
alias_method :include?, :has_key?
|
92
|
+
|
93
|
+
def key(val)
|
94
|
+
kv = find {|_,v| v == val }
|
95
|
+
kv && kv.first
|
96
|
+
end
|
97
|
+
|
79
98
|
def each
|
80
99
|
if block_given?
|
81
100
|
@raw.foreach do |tuple|
|
@@ -93,19 +112,57 @@ module JRuby::ScalaSupport
|
|
93
112
|
end
|
94
113
|
end
|
95
114
|
|
115
|
+
alias_method :each_pair, :each
|
116
|
+
|
96
117
|
def to_s
|
97
118
|
first = true
|
98
119
|
each_with_object("{") do |(key, value), str|
|
99
120
|
first ? first = false : str << ", "
|
100
|
-
str << "#{key}=>#{value}"
|
121
|
+
str << "#{key.inspect}=>#{value.inspect}"
|
101
122
|
end << "}"
|
102
123
|
end
|
103
124
|
|
125
|
+
alias_method :inspect, :to_s
|
126
|
+
|
104
127
|
def as_json(options=nil)
|
105
128
|
each_with_object({}) do |(key, value), hash|
|
106
129
|
hash[key.as_json(options)] = value.as_json(options)
|
107
130
|
end
|
108
131
|
end
|
132
|
+
|
133
|
+
def eql?(other)
|
134
|
+
return true if self.equal? other
|
135
|
+
|
136
|
+
unless other.kind_of? Hash
|
137
|
+
return false unless other.respond_to? :to_hash
|
138
|
+
return other.eql?(self)
|
139
|
+
end
|
140
|
+
|
141
|
+
return false unless other.size == size
|
142
|
+
|
143
|
+
other.each do |k,v|
|
144
|
+
|
145
|
+
return false unless (entry = real_map.send(:findEntry,k)) && (entry.key.from_scala.eql?(k)) && (item = entry.value)
|
146
|
+
|
147
|
+
# Order of the comparison matters! We must compare our value with
|
148
|
+
# the other Hash's value and not the other way around.
|
149
|
+
return false unless item.eql?(v)
|
150
|
+
end
|
151
|
+
|
152
|
+
true
|
153
|
+
end
|
154
|
+
|
155
|
+
alias_method :==, :eql?
|
156
|
+
|
157
|
+
alias_method :length, :size
|
158
|
+
|
159
|
+
private
|
160
|
+
def real_map
|
161
|
+
case @raw
|
162
|
+
when scala.collection.Map::WithDefault then @raw.send(:underlying)
|
163
|
+
else @raw
|
164
|
+
end
|
165
|
+
end
|
109
166
|
end
|
110
167
|
|
111
168
|
class Immutable
|
@@ -122,6 +179,49 @@ module JRuby::ScalaSupport
|
|
122
179
|
include Common
|
123
180
|
JRuby::ScalaSupport::Common.fake_identity self, Hash
|
124
181
|
|
182
|
+
class << self
|
183
|
+
alias_method :previous_new, :new
|
184
|
+
|
185
|
+
def [](*args)
|
186
|
+
hash = new
|
187
|
+
if args.size == 1
|
188
|
+
obj = args.first
|
189
|
+
case obj
|
190
|
+
when Array, Hash then obj.each {|k,v| hash[k] = v}
|
191
|
+
else
|
192
|
+
raise "Don't yet know what to do with a #{obj.inspect}"
|
193
|
+
end
|
194
|
+
return hash
|
195
|
+
end
|
196
|
+
|
197
|
+
return new if args.empty?
|
198
|
+
|
199
|
+
if args.size & 1 == 1
|
200
|
+
raise ArgumentError, "Expected an even number, got #{args.length}"
|
201
|
+
end
|
202
|
+
|
203
|
+
i = 0
|
204
|
+
total = args.size
|
205
|
+
|
206
|
+
while i < total
|
207
|
+
hash[args[i]] = args[i+1]
|
208
|
+
i += 2
|
209
|
+
end
|
210
|
+
|
211
|
+
hash
|
212
|
+
end
|
213
|
+
|
214
|
+
def new(default_value=nil, &default_block)
|
215
|
+
raise ArgumentError, "You can only provide either a default value or a block" if default_value && default_block
|
216
|
+
h = scala.collection.mutable.HashMap.new
|
217
|
+
if default_block
|
218
|
+
h = h.with_default {|k| default_block.call(h,k) }
|
219
|
+
end
|
220
|
+
h = h.with_default_value(default_value) if default_value
|
221
|
+
previous_new(h)
|
222
|
+
end
|
223
|
+
end
|
224
|
+
|
125
225
|
def []=(key, value)
|
126
226
|
@raw.update(key, value.to_scala)
|
127
227
|
end
|
@@ -365,6 +465,8 @@ class Object
|
|
365
465
|
JRuby::ScalaSupport::Set::Mutable.new(self)
|
366
466
|
when Java::scala.collection.Set, Java::scala.collection.immutable.Set,
|
367
467
|
JRuby::ScalaSupport::Set::Immutable.new(self)
|
468
|
+
when Java::scala.Symbol
|
469
|
+
self.name.to_sym
|
368
470
|
else
|
369
471
|
self
|
370
472
|
end
|
metadata
CHANGED
@@ -1,18 +1,113 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: jruby-scala-collections
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
5
|
-
prerelease:
|
4
|
+
version: 0.1.4
|
5
|
+
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Artūras Šlajus
|
9
|
-
autorequire:
|
9
|
+
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
13
|
-
dependencies:
|
14
|
-
|
15
|
-
|
12
|
+
date: 2013-08-12 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: rspec
|
16
|
+
version_requirements: !ruby/object:Gem::Requirement
|
17
|
+
requirements:
|
18
|
+
- - '>='
|
19
|
+
- !ruby/object:Gem::Version
|
20
|
+
version: '0'
|
21
|
+
none: false
|
22
|
+
requirement: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - '>='
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
none: false
|
28
|
+
prerelease: false
|
29
|
+
type: :development
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: mspec
|
32
|
+
version_requirements: !ruby/object:Gem::Requirement
|
33
|
+
requirements:
|
34
|
+
- - '>='
|
35
|
+
- !ruby/object:Gem::Version
|
36
|
+
version: '0'
|
37
|
+
none: false
|
38
|
+
requirement: !ruby/object:Gem::Requirement
|
39
|
+
requirements:
|
40
|
+
- - '>='
|
41
|
+
- !ruby/object:Gem::Version
|
42
|
+
version: '0'
|
43
|
+
none: false
|
44
|
+
prerelease: false
|
45
|
+
type: :development
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: guard
|
48
|
+
version_requirements: !ruby/object:Gem::Requirement
|
49
|
+
requirements:
|
50
|
+
- - '>='
|
51
|
+
- !ruby/object:Gem::Version
|
52
|
+
version: '0'
|
53
|
+
none: false
|
54
|
+
requirement: !ruby/object:Gem::Requirement
|
55
|
+
requirements:
|
56
|
+
- - '>='
|
57
|
+
- !ruby/object:Gem::Version
|
58
|
+
version: '0'
|
59
|
+
none: false
|
60
|
+
prerelease: false
|
61
|
+
type: :development
|
62
|
+
- !ruby/object:Gem::Dependency
|
63
|
+
name: guard-rspec-jruby
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - '>='
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
none: false
|
70
|
+
requirement: !ruby/object:Gem::Requirement
|
71
|
+
requirements:
|
72
|
+
- - '>='
|
73
|
+
- !ruby/object:Gem::Version
|
74
|
+
version: '0'
|
75
|
+
none: false
|
76
|
+
prerelease: false
|
77
|
+
type: :development
|
78
|
+
- !ruby/object:Gem::Dependency
|
79
|
+
name: guard-bundler
|
80
|
+
version_requirements: !ruby/object:Gem::Requirement
|
81
|
+
requirements:
|
82
|
+
- - '>='
|
83
|
+
- !ruby/object:Gem::Version
|
84
|
+
version: '0'
|
85
|
+
none: false
|
86
|
+
requirement: !ruby/object:Gem::Requirement
|
87
|
+
requirements:
|
88
|
+
- - '>='
|
89
|
+
- !ruby/object:Gem::Version
|
90
|
+
version: '0'
|
91
|
+
none: false
|
92
|
+
prerelease: false
|
93
|
+
type: :development
|
94
|
+
- !ruby/object:Gem::Dependency
|
95
|
+
name: guard-shell
|
96
|
+
version_requirements: !ruby/object:Gem::Requirement
|
97
|
+
requirements:
|
98
|
+
- - '>='
|
99
|
+
- !ruby/object:Gem::Version
|
100
|
+
version: '0'
|
101
|
+
none: false
|
102
|
+
requirement: !ruby/object:Gem::Requirement
|
103
|
+
requirements:
|
104
|
+
- - '>='
|
105
|
+
- !ruby/object:Gem::Version
|
106
|
+
version: '0'
|
107
|
+
none: false
|
108
|
+
prerelease: false
|
109
|
+
type: :development
|
110
|
+
description: Interoperability layer for passing JRuby & Scala collections back and forth. See README.md for more info.
|
16
111
|
email: arturas.slajus@gmail.com
|
17
112
|
executables: []
|
18
113
|
extensions: []
|
@@ -23,26 +118,26 @@ files:
|
|
23
118
|
- ext/dist/collections.jar
|
24
119
|
homepage: http://github.com/arturaz/jruby-scala-collections
|
25
120
|
licenses: []
|
26
|
-
post_install_message:
|
121
|
+
post_install_message:
|
27
122
|
rdoc_options: []
|
28
123
|
require_paths:
|
29
124
|
- lib
|
30
125
|
required_ruby_version: !ruby/object:Gem::Requirement
|
31
|
-
none: false
|
32
126
|
requirements:
|
33
|
-
- -
|
127
|
+
- - '>='
|
34
128
|
- !ruby/object:Gem::Version
|
35
129
|
version: '0'
|
36
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
37
130
|
none: false
|
131
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
38
132
|
requirements:
|
39
|
-
- -
|
133
|
+
- - '>='
|
40
134
|
- !ruby/object:Gem::Version
|
41
135
|
version: '0'
|
136
|
+
none: false
|
42
137
|
requirements: []
|
43
|
-
rubyforge_project:
|
44
|
-
rubygems_version: 1.8.
|
45
|
-
signing_key:
|
138
|
+
rubyforge_project:
|
139
|
+
rubygems_version: 1.8.24
|
140
|
+
signing_key:
|
46
141
|
specification_version: 3
|
47
|
-
summary: Compiled against JRuby 1.6.7/Scala 2.
|
142
|
+
summary: Compiled against JRuby 1.6.7/Scala 2.10.2
|
48
143
|
test_files: []
|