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 CHANGED
@@ -16,7 +16,6 @@ test/tmp
16
16
  test/version_tmp
17
17
  tmp
18
18
  /target
19
- /lib
20
19
  /classes
21
20
  /checkouts
22
21
  pom.xml
@@ -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.create(hash)
11
+ def self.from_ruby(hash, &block)
13
12
  ret = empty.as_transient
14
13
  hash.each do |k, v|
15
- if v.is_a?(::Hash)
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[clj_to_ruby_symbol(k)] = self.from_clj(v)
23
+ ruby_map[Keyword.to_ruby(k)] = self.from_clj(v)
31
24
  else
32
- ruby_map[clj_to_ruby_symbol(k)] = v
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,7 @@
1
+ module Zweikopf
2
+ module Primitive
3
+ def self.is_primitive_type?(obj)
4
+ [String, Fixnum, Integer, Float, TrueClass, FalseClass].include?(obj.class)
5
+ end # self.is_primitive_type?
6
+ end # Primitive
7
+ 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
@@ -1,3 +1,3 @@
1
1
  module Zweikopf
2
- VERSION = "0.0.2"
2
+ VERSION = "0.0.3"
3
3
  end
data/lib/zweikopf.rb CHANGED
@@ -1,6 +1,12 @@
1
- require "zweikopf/hash"
2
1
  require "zweikopf/version"
3
2
 
3
+ require "zweikopf/primitive"
4
+ require "zweikopf/keyword"
5
+ require "zweikopf/hash"
6
+ require "zweikopf/array"
7
+ require "zweikopf/transformer"
8
+
9
+
4
10
  module Zweikopf
5
11
 
6
12
  end
@@ -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.create({:a => 1, :b => 2}).should eql 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.create({:a => 1, :b => {:c => 3, :d =>4}}).should eql 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.create({:a => 1, :b => CustomTransformedEntry.new }) do |ret, k, v|
64
+ Zweikopf::Hash.from_ruby({:a => 1, :b => CustomTransformedEntry.new }) do |v|
65
65
  if v.is_a?(CustomTransformedEntry)
66
- ret.assoc(Zweikopf::Hash.ruby_to_clj_keyword(k.to_s), Zweikopf::Hash.create(v.serializable_hash))
66
+ v.serializable_hash
67
67
  else
68
- ret.assoc(Zweikopf::Hash.ruby_to_clj_keyword(k.to_s), v)
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.2
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