zweikopf 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
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