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 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