zweikopf 0.0.2 → 0.0.3
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/.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
|