dynameek 0.3.3 → 0.3.4

Sign up to get free protection for your applications and to get access to all the features.
@@ -22,17 +22,46 @@ module Dynameek
22
22
  when :datetime
23
23
  value.to_time.to_f
24
24
  when :binary
25
- if value.is_a?(Hash) && value.default_proc
26
- value = value.clone
27
- value.default = nil
28
- end
29
-
25
+ dump_safe(value)
30
26
  Marshal.dump(value)
31
27
  else
32
28
  value
33
29
  end
34
30
  end
35
-
31
+ StackFrame = Struct.new(:current, :index)
32
+
33
+ def dump_safe(obj)
34
+ return obj if(!obj.is_a?(Hash) && !obj.is_a?(Array))
35
+ make_safe = lambda do |thing|
36
+ if thing.is_a?(Hash)
37
+ #thing.default_proc = nil
38
+ thing.default = nil
39
+ end
40
+ end
41
+ stack = []
42
+ safe = obj
43
+ stack.push(StackFrame.new(safe, 0))
44
+
45
+ while(current_frame = stack.pop)
46
+ current = current_frame.current
47
+ index = current_frame.index
48
+ obj = current.is_a?(Hash) ? current[current.keys[index]] : current[index]
49
+ make_safe.call(obj)
50
+ if index - 1 < current.size
51
+ # Re-add current enumerable if still elements to check
52
+ stack.push(StackFrame.new(current, index + 1))
53
+ end
54
+ if obj.is_a?(Hash) || obj.is_a?(Array)
55
+ #If obj is enumerable add to stack
56
+ stack.push(StackFrame.new(obj, 0))
57
+ end
58
+ end
59
+ safe
60
+ end
61
+
62
+
63
+
64
+
36
65
  def index_table_exists?
37
66
  !index_table.nil? && index_table.exists?
38
67
  end
@@ -1,3 +1,3 @@
1
1
  module Dynameek
2
- VERSION = "0.3.3"
2
+ VERSION = "0.3.4"
3
3
  end
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: dynameek
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.3.3
5
+ version: 0.3.4
6
6
  platform: ruby
7
7
  authors:
8
8
  - Max Dupenois
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2013-04-12 00:00:00 Z
13
+ date: 2013-04-15 00:00:00 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: aws-sdk