zweikopf 0.0.1 → 0.0.2

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/lib/zweikopf/hash.rb CHANGED
@@ -13,9 +13,11 @@ module Zweikopf
13
13
  ret = empty.as_transient
14
14
  hash.each do |k, v|
15
15
  if v.is_a?(::Hash)
16
- ret = ret.assoc(Keyword.intern(k.to_s), self.create(v))
16
+ ret = ret.assoc(ruby_to_clj_keyword(k.to_s), self.create(v))
17
+ elsif block_given?
18
+ ret = yield(ret, k, v)
17
19
  else
18
- ret = ret.assoc(Keyword.intern(k.to_s), v)
20
+ ret = ret.assoc(ruby_to_clj_keyword(k.to_s), v)
19
21
  end
20
22
  end
21
23
  ret.persistent
@@ -33,6 +35,10 @@ module Zweikopf
33
35
  end
34
36
  end # self.from_clj
35
37
 
38
+ def self.ruby_to_clj_keyword(keyword)
39
+ Keyword.intern(keyword.to_s)
40
+ end # self.ruby_to_clj_keyword(keyword)
41
+
36
42
  def self.clj_to_ruby_symbol(keyword)
37
43
  keyword.to_s.gsub(/:/, "").to_sym
38
44
  end # self.clj_to_ruby_symbol
@@ -1,3 +1,3 @@
1
1
  module Zweikopf
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
@@ -45,6 +45,32 @@ describe Zweikopf::Hash do
45
45
  Zweikopf::Hash.create({:a => 1, :b => {:c => 3, :d =>4}}).should eql hash
46
46
  end
47
47
  end
48
+
49
+ context "given a data structure that requires custom transformations" do
50
+
51
+ #
52
+ # Environment
53
+ #
54
+
55
+ class CustomTransformedEntry
56
+ def serializable_hash
57
+ {:c => 3, :d => 4}
58
+ end
59
+ end
60
+
61
+ let(:hash) { load_fixture(:clj_deep_hash1) }
62
+
63
+ it "creates a Clojure hash with given block" do
64
+ Zweikopf::Hash.create({:a => 1, :b => CustomTransformedEntry.new }) do |ret, k, v|
65
+ if v.is_a?(CustomTransformedEntry)
66
+ ret.assoc(Zweikopf::Hash.ruby_to_clj_keyword(k.to_s), Zweikopf::Hash.create(v.serializable_hash))
67
+ else
68
+ ret.assoc(Zweikopf::Hash.ruby_to_clj_keyword(k.to_s), v)
69
+ end
70
+ end.should eql hash
71
+ end
72
+
73
+ end
48
74
  end
49
75
 
50
76
  describe :from_clj do
data/zweikopf.gemspec CHANGED
@@ -5,7 +5,7 @@ Gem::Specification.new do |gem|
5
5
  gem.authors = ["Oleksandr Petrov"]
6
6
  gem.email = ["oleksandr.petrov@gmail.com"]
7
7
  gem.description = %q{Rubygem for jruby/clojure interop}
8
- gem.summary = %q{It's good, try it out!}
8
+ gem.summary = %q{Its good, try it out!}
9
9
  gem.homepage = ""
10
10
 
11
11
  gem.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: zweikopf
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.0.1
5
+ version: 0.0.2
6
6
  platform: ruby
7
7
  authors:
8
8
  - Oleksandr Petrov
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2012-07-17 00:00:00 Z
13
+ date: 2012-07-18 00:00:00 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: rake
@@ -93,7 +93,7 @@ rubyforge_project:
93
93
  rubygems_version: 1.8.24
94
94
  signing_key:
95
95
  specification_version: 3
96
- summary: It's good, try it out!
96
+ summary: Its good, try it out!
97
97
  test_files:
98
98
  - spec/fixtures/clj_array1.clj
99
99
  - spec/fixtures/clj_deep_hash1.clj