json-streamer 1.1.1 → 1.1.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 9fa1fe76772ac9b1bf8e8b64da2362b13f3d4d5d
4
- data.tar.gz: 723a1e77a3fbed2ff1a387409633d53f852070c9
3
+ metadata.gz: 928cc40a89ddc3be04f541abaed833e0fa89757a
4
+ data.tar.gz: ed5bc1ab4c5b00a6369b76a0e008d86ff7000bb1
5
5
  SHA512:
6
- metadata.gz: '06830de8e7a7bbadd1e3e0db3cfd77cbad559807ae50c2588c3aeb1f1bbd6554cd04abaf590c40eb93862f519d035eade7dc90934eadb200e8a0afdb37ecacb0'
7
- data.tar.gz: 0e443f59c654125a9cba390b9ea12575f437e37f280a303b134a403774d5421a7517f379fba7dd7f92124f38e566f16f289b98e181e35f508ac85d2375a3b20a
6
+ metadata.gz: afaba7db14dea5fe606b04711adcd3c9d04521f4ae4a7c9dc65f1d91debecc7b41c76a733f10c6d3e4bcb95f4690c5379d4ab9ac9d028f0d9ebf835353268298
7
+ data.tar.gz: a31a925947007fba4c4367e3869276f3d818294dc1afaee66f877e7153d034848bb2a87d45d151025570c7576b958e45efc49511d32def4fbd39510b40303bcf
@@ -13,10 +13,9 @@ module Json
13
13
  @file_io = file_io
14
14
  @chunk_size = chunk_size
15
15
 
16
- @current_nesting_level = -1
17
- @current_key = nil
16
+ @current_level = -1
18
17
  @aggregator = {}
19
- @temp_aggregator_keys = {}
18
+ @aggregator_keys = {}
20
19
 
21
20
  @parser.start_object {start_object}
22
21
  @parser.start_array {start_array}
@@ -25,87 +24,115 @@ module Json
25
24
 
26
25
  # Callbacks containing `yield` have to be defined in the method called via block otherwise yield won't work
27
26
  def get(nesting_level:-1, key:nil, yield_values:true)
28
- yield_nesting_level = nesting_level
29
- wanted_key = key
27
+ @yield_level = nesting_level
28
+ @yield_key = key
29
+ @yield_values = yield_values
30
30
 
31
31
  @parser.value do |v|
32
- if @aggregator[@current_nesting_level].kind_of? Array
33
- if yield_values and yield_value?(yield_nesting_level)
34
- yield v
35
- else
36
- @aggregator[@current_nesting_level] << v
37
- end
38
- else
39
- @aggregator[@current_nesting_level][@current_key] = v
40
- if yield_values and yield_value?(yield_nesting_level, wanted_key)
41
- yield v
42
- end
43
- end
32
+ value(v) { |desired_object| yield desired_object }
44
33
  end
45
34
 
46
35
  @parser.end_object do
47
- if yield_object?(yield_nesting_level, wanted_key)
48
- yield @aggregator[@current_nesting_level].clone
49
- @aggregator[@current_nesting_level] = {}
50
- else
51
- merge_up
52
- end
53
-
54
- @current_nesting_level -= 1
36
+ end_level(Hash.new) { |desired_object| yield desired_object }
55
37
  end
56
38
 
57
39
  @parser.end_array do
58
- if yield_object?(yield_nesting_level, wanted_key)
59
- yield @aggregator[@current_nesting_level].clone
60
- @aggregator[@current_nesting_level] = []
61
- else
62
- merge_up
63
- end
64
-
65
- @current_nesting_level -= 1
40
+ end_level(Array.new) { |desired_object| yield desired_object }
66
41
  end
67
42
 
68
- if @file_io
69
- @file_io.each(@chunk_size) do |chunk|
70
- @parser << chunk
71
- end
43
+ @file_io.each(@chunk_size) { |chunk| @parser << chunk } if @file_io
44
+ end
45
+
46
+ def start_object
47
+ new_level(Hash.new)
48
+ end
49
+
50
+ def start_array
51
+ new_level(Array.new)
52
+ end
53
+
54
+ def key(k)
55
+ @current_key = k
56
+ end
57
+
58
+ def value(value)
59
+ reset_current_key if array_level?(@current_level)
60
+ yield value if yield_value?
61
+ add_value(value)
62
+ end
63
+
64
+ def add_value(value)
65
+ if array_level?(@current_level)
66
+ @aggregator[@current_level] << value
67
+ else
68
+ @aggregator[@current_level][@current_key] = value
72
69
  end
73
70
  end
74
71
 
75
- def yield_object?(yield_nesting_level, wanted_key)
76
- @current_nesting_level.eql? yield_nesting_level or (not wanted_key.nil? and wanted_key == @temp_aggregator_keys[@current_nesting_level-1])
72
+ def end_level(type)
73
+ if yield_object?
74
+ yield @aggregator[@current_level].clone
75
+ reset_current_level(type)
76
+ else
77
+ merge_up
78
+ end
79
+
80
+ @current_level -= 1
77
81
  end
78
82
 
79
- def yield_value?(yield_nesting_level, wanted_key = nil)
80
- (@current_nesting_level + 1).eql? yield_nesting_level or (not wanted_key.nil? and wanted_key == @current_key)
83
+ def yield_object?
84
+ @current_level.eql?(@yield_level) or (not @yield_key.nil? and @yield_key == previous_key)
81
85
  end
82
86
 
83
- def start_object
84
- @temp_aggregator_keys[@current_nesting_level] = @current_key
85
- @current_nesting_level += 1
86
- @aggregator[@current_nesting_level] = {}
87
+ def yield_value?
88
+ @yield_values and ((next_level).eql?(@yield_level) or (not @yield_key.nil? and @yield_key == @current_key))
87
89
  end
88
90
 
89
- def start_array
90
- @current_nesting_level += 1
91
- @aggregator[@current_nesting_level] = []
91
+ def new_level(type)
92
+ reset_current_key if array_level?(@current_level)
93
+ set_aggregator_key
94
+ @current_level += 1
95
+ reset_current_level(type)
92
96
  end
93
97
 
94
- def key(k)
95
- @current_key = k
98
+ def reset_current_level(type)
99
+ @aggregator[@current_level] = type
100
+ end
101
+
102
+ def set_aggregator_key
103
+ @aggregator_keys[@current_level] = @current_key
104
+ end
105
+
106
+ def reset_current_key
107
+ @current_key = nil
108
+ end
109
+
110
+ def array_level?(nesting_level)
111
+ @aggregator[nesting_level].is_a?(Array)
96
112
  end
97
113
 
98
114
  def merge_up
99
- return if @current_nesting_level == 0
100
- previous_nesting_level = @current_nesting_level - 1
101
- if @aggregator[previous_nesting_level].kind_of? Array
102
- @aggregator[previous_nesting_level] << @aggregator[@current_nesting_level]
115
+ return if @current_level.zero?
116
+
117
+ if array_level?(previous_level)
118
+ @aggregator[previous_level] << @aggregator[@current_level]
103
119
  else
104
- @aggregator[previous_nesting_level][@temp_aggregator_keys[previous_nesting_level]] = @aggregator[@current_nesting_level]
120
+ @aggregator[previous_level][previous_key] = @aggregator[@current_level]
105
121
  end
106
122
 
107
- @aggregator.delete(@current_nesting_level)
108
- @aggregator
123
+ @aggregator.delete(@current_level)
124
+ end
125
+
126
+ def previous_level
127
+ @current_level - 1
128
+ end
129
+
130
+ def next_level
131
+ @current_level + 1
132
+ end
133
+
134
+ def previous_key
135
+ @aggregator_keys[previous_level]
109
136
  end
110
137
  end
111
138
  end
@@ -1,5 +1,5 @@
1
1
  module Json
2
2
  module Streamer
3
- VERSION = "1.1.1"
3
+ VERSION = "1.1.2"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: json-streamer
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.1
4
+ version: 1.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - thisismydesign