json-streamer 1.1.1 → 1.1.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.
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