zweikopf 0.0.2 → 0.0.3
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +0 -1
- data/lib/zweikopf/array.rb +13 -0
- data/lib/zweikopf/hash.rb +4 -18
- data/lib/zweikopf/keyword.rb +15 -0
- data/lib/zweikopf/primitive.rb +7 -0
- data/lib/zweikopf/transformer.rb +21 -0
- data/lib/zweikopf/version.rb +1 -1
- data/lib/zweikopf.rb +7 -1
- data/spec/zweikopf/hash_spec.rb +9 -7
- metadata +5 -1
data/.gitignore
CHANGED
@@ -0,0 +1,13 @@
|
|
1
|
+
java_import "clojure.lang.PersistentVector"
|
2
|
+
|
3
|
+
module Zweikopf
|
4
|
+
module Array
|
5
|
+
|
6
|
+
def self.from_ruby(arr)
|
7
|
+
PersistentVector.create(arr.inject([]) do |acc, v|
|
8
|
+
acc<< Zweikopf::Transformer.from_ruby(v)
|
9
|
+
end)
|
10
|
+
end # to_persistent_vector
|
11
|
+
|
12
|
+
end # Array
|
13
|
+
end # Zweikopf
|
data/lib/zweikopf/hash.rb
CHANGED
@@ -1,6 +1,5 @@
|
|
1
1
|
java_import "clojure.lang.PersistentHashMap"
|
2
2
|
java_import "clojure.lang.PersistentArrayMap"
|
3
|
-
java_import "clojure.lang.Keyword"
|
4
3
|
java_import "java.util.Map"
|
5
4
|
|
6
5
|
module Zweikopf
|
@@ -9,16 +8,10 @@ module Zweikopf
|
|
9
8
|
PersistentHashMap::EMPTY
|
10
9
|
end
|
11
10
|
|
12
|
-
def self.
|
11
|
+
def self.from_ruby(hash, &block)
|
13
12
|
ret = empty.as_transient
|
14
13
|
hash.each do |k, v|
|
15
|
-
|
16
|
-
ret = ret.assoc(ruby_to_clj_keyword(k.to_s), self.create(v))
|
17
|
-
elsif block_given?
|
18
|
-
ret = yield(ret, k, v)
|
19
|
-
else
|
20
|
-
ret = ret.assoc(ruby_to_clj_keyword(k.to_s), v)
|
21
|
-
end
|
14
|
+
ret = ret.assoc(Keyword.from_ruby(k.to_s), Zweikopf::Transformer.from_ruby(v, &block))
|
22
15
|
end
|
23
16
|
ret.persistent
|
24
17
|
end
|
@@ -27,20 +20,13 @@ module Zweikopf
|
|
27
20
|
{}.tap do |ruby_map|
|
28
21
|
clj_hash.each do |k, v|
|
29
22
|
if v.is_a?(PersistentHashMap) || v.is_a?(PersistentArrayMap)
|
30
|
-
ruby_map[
|
23
|
+
ruby_map[Keyword.to_ruby(k)] = self.from_clj(v)
|
31
24
|
else
|
32
|
-
ruby_map[
|
25
|
+
ruby_map[Keyword.to_ruby(k)] = v
|
33
26
|
end
|
34
27
|
end
|
35
28
|
end
|
36
29
|
end # self.from_clj
|
37
30
|
|
38
|
-
def self.ruby_to_clj_keyword(keyword)
|
39
|
-
Keyword.intern(keyword.to_s)
|
40
|
-
end # self.ruby_to_clj_keyword(keyword)
|
41
|
-
|
42
|
-
def self.clj_to_ruby_symbol(keyword)
|
43
|
-
keyword.to_s.gsub(/:/, "").to_sym
|
44
|
-
end # self.clj_to_ruby_symbol
|
45
31
|
end
|
46
32
|
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
java_import "clojure.lang.Keyword"
|
2
|
+
|
3
|
+
module Zweikopf
|
4
|
+
module Keyword
|
5
|
+
|
6
|
+
def self.from_ruby(keyword)
|
7
|
+
::Keyword.intern(keyword.to_s)
|
8
|
+
end # self.from_ruby
|
9
|
+
|
10
|
+
def self.to_ruby(keyword)
|
11
|
+
keyword.to_s.gsub(/:/, "").to_sym
|
12
|
+
end # self.to_ruby
|
13
|
+
|
14
|
+
end # Keyword
|
15
|
+
end # Zweikopf
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module Zweikopf
|
2
|
+
module Transformer
|
3
|
+
|
4
|
+
def self.from_ruby(obj, &block)
|
5
|
+
if Primitive.is_primitive_type?(obj)
|
6
|
+
obj
|
7
|
+
elsif obj.is_a?(::Hash)
|
8
|
+
Hash.from_ruby(obj, &block)
|
9
|
+
elsif obj.is_a?(::Array)
|
10
|
+
Array.from_ruby(obj, &block)
|
11
|
+
elsif obj.is_a?(::Symbol)
|
12
|
+
Keyword.from_ruby(obj)
|
13
|
+
elsif !block.nil?
|
14
|
+
from_ruby(yield(obj))
|
15
|
+
else
|
16
|
+
obj
|
17
|
+
end
|
18
|
+
end # self.from_ruby
|
19
|
+
|
20
|
+
end # Transformer
|
21
|
+
end # Zweikopf
|
data/lib/zweikopf/version.rb
CHANGED
data/lib/zweikopf.rb
CHANGED
data/spec/zweikopf/hash_spec.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
require 'spec_helper'
|
2
|
-
|
2
|
+
java_import 'clojure.lang.Util'
|
3
3
|
describe Zweikopf::Hash do
|
4
4
|
describe :empty do
|
5
5
|
let(:empty_hash) { load_fixture(:empty_hash) }
|
@@ -25,7 +25,7 @@ describe Zweikopf::Hash do
|
|
25
25
|
#
|
26
26
|
|
27
27
|
it "creates a Clojure hash" do
|
28
|
-
Zweikopf::Hash.
|
28
|
+
Zweikopf::Hash.from_ruby({:a => 1, :b => 2}).should eql hash
|
29
29
|
end
|
30
30
|
end
|
31
31
|
|
@@ -42,7 +42,7 @@ describe Zweikopf::Hash do
|
|
42
42
|
#
|
43
43
|
|
44
44
|
it "creates a Clojure hash" do
|
45
|
-
Zweikopf::Hash.
|
45
|
+
Zweikopf::Hash.from_ruby({:a => 1, :b => {:c => 3, :d =>4}}).should eql hash
|
46
46
|
end
|
47
47
|
end
|
48
48
|
|
@@ -61,11 +61,11 @@ describe Zweikopf::Hash do
|
|
61
61
|
let(:hash) { load_fixture(:clj_deep_hash1) }
|
62
62
|
|
63
63
|
it "creates a Clojure hash with given block" do
|
64
|
-
Zweikopf::Hash.
|
64
|
+
Zweikopf::Hash.from_ruby({:a => 1, :b => CustomTransformedEntry.new }) do |v|
|
65
65
|
if v.is_a?(CustomTransformedEntry)
|
66
|
-
|
66
|
+
v.serializable_hash
|
67
67
|
else
|
68
|
-
|
68
|
+
v
|
69
69
|
end
|
70
70
|
end.should eql hash
|
71
71
|
end
|
@@ -121,8 +121,10 @@ describe Zweikopf::Hash do
|
|
121
121
|
#
|
122
122
|
|
123
123
|
it "creates a Ruby array" do
|
124
|
-
|
124
|
+
Zweikopf::Array.from_ruby([:a, 1, :b, 2, :c, 3]).should eql(clj_array)
|
125
125
|
end
|
126
126
|
end
|
127
|
+
|
128
|
+
|
127
129
|
end
|
128
130
|
end
|
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: zweikopf
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 0.0.
|
5
|
+
version: 0.0.3
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Oleksandr Petrov
|
@@ -53,7 +53,11 @@ files:
|
|
53
53
|
- Rakefile
|
54
54
|
- deps/clojure-1.4.0.jar
|
55
55
|
- lib/zweikopf.rb
|
56
|
+
- lib/zweikopf/array.rb
|
56
57
|
- lib/zweikopf/hash.rb
|
58
|
+
- lib/zweikopf/keyword.rb
|
59
|
+
- lib/zweikopf/primitive.rb
|
60
|
+
- lib/zweikopf/transformer.rb
|
57
61
|
- lib/zweikopf/version.rb
|
58
62
|
- project.clj
|
59
63
|
- spec/fixtures/clj_array1.clj
|