nose 0.1.0pre5 → 0.1.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/lib/nose/cost.rb +7 -7
- data/lib/nose/indexes.rb +3 -2
- data/lib/nose/model/entity.rb +1 -1
- data/lib/nose/model/fields.rb +21 -10
- data/lib/nose/plans.rb +1 -1
- data/lib/nose/plans/execution_plan.rb +1 -1
- data/lib/nose/plans/query_planner.rb +1 -1
- data/lib/nose/plans/update_planner.rb +3 -3
- data/lib/nose/random.rb +2 -2
- data/lib/nose/schema.rb +2 -1
- data/lib/nose/search.rb +1 -1
- data/lib/nose/search/problem.rb +2 -1
- data/lib/nose/serialize.rb +3 -3
- data/lib/nose/util.rb +2 -2
- data/models/eac.rb +3 -3
- data/models/ebay.rb +2 -2
- data/models/rubis.rb +10 -10
- metadata +69 -70
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 4104b913e3d80c2b02480929ab4689cf58fa16801214e064c8e6fb5562507997
|
4
|
+
data.tar.gz: 65da94fc536524e82c9d0b6c5f0b21dbb09ec9ce54a8735b8368c1afde0e2df3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b763ec409386c46522e090e8e9466dbb5e32b9b01f5bea23e20b6c6a739dd0a89ff91fa5b2cbae1d3719a5a90eba1b7975517e5851106eb1891ec8a722d5dce9
|
7
|
+
data.tar.gz: 39a4647647c7df4cd5db4f58a74e3aa1ba5691ae069d1788844b419d20c6c7276448408c89902203ebaf2c0ddb4ca73303153c3c041dd4375f58b0d8c63b26fb
|
data/lib/nose/cost.rb
CHANGED
@@ -13,7 +13,7 @@ module NoSE
|
|
13
13
|
end
|
14
14
|
|
15
15
|
# The cost of filtering intermediate results
|
16
|
-
# @return [
|
16
|
+
# @return [Integer]
|
17
17
|
def filter_cost(_step)
|
18
18
|
# Assume this has no cost and the cost is captured in the fact that we
|
19
19
|
# have to retrieve more data earlier. All this does is skip records.
|
@@ -21,14 +21,14 @@ module NoSE
|
|
21
21
|
end
|
22
22
|
|
23
23
|
# The cost of limiting a result set
|
24
|
-
# @return [
|
24
|
+
# @return [Integer]
|
25
25
|
def limit_cost(_step)
|
26
26
|
# This is basically free since we just discard data
|
27
27
|
0
|
28
28
|
end
|
29
29
|
|
30
30
|
# The cost of sorting a set of results
|
31
|
-
# @return [
|
31
|
+
# @return [Integer]
|
32
32
|
def sort_cost(_step)
|
33
33
|
# TODO: Find some estimate of sort cost
|
34
34
|
# This could be partially captured by the fact that sort + limit
|
@@ -37,25 +37,25 @@ module NoSE
|
|
37
37
|
end
|
38
38
|
|
39
39
|
# The cost of performing a lookup via an index
|
40
|
-
# @return [
|
40
|
+
# @return [Integer]
|
41
41
|
def index_lookup_cost(_step)
|
42
42
|
fail NotImplementedError, 'Must be implemented in a subclass'
|
43
43
|
end
|
44
44
|
|
45
45
|
# The cost of performing a deletion from an index
|
46
|
-
# @return [
|
46
|
+
# @return [Integer]
|
47
47
|
def delete_cost(_step)
|
48
48
|
fail NotImplementedError, 'Must be implemented in a subclass'
|
49
49
|
end
|
50
50
|
|
51
51
|
# The cost of performing an insert into an index
|
52
|
-
# @return [
|
52
|
+
# @return [Integer]
|
53
53
|
def insert_cost(_step)
|
54
54
|
fail NotImplementedError, 'Must be implemented in a subclass'
|
55
55
|
end
|
56
56
|
|
57
57
|
# This is here for debugging purposes because we need a cost
|
58
|
-
# @return [
|
58
|
+
# @return [Integer]
|
59
59
|
def pruned_cost(_step)
|
60
60
|
0
|
61
61
|
end
|
data/lib/nose/indexes.rb
CHANGED
@@ -7,7 +7,8 @@ module NoSE
|
|
7
7
|
:entries, :entry_size, :size, :hash_count, :per_hash_count,
|
8
8
|
:graph
|
9
9
|
|
10
|
-
def initialize(hash_fields, order_fields, extra, graph,
|
10
|
+
def initialize(hash_fields, order_fields, extra, graph,
|
11
|
+
saved_key: nil)
|
11
12
|
order_set = order_fields.to_set
|
12
13
|
@hash_fields = hash_fields.to_set
|
13
14
|
@order_fields = order_fields.delete_if { |e| hash_fields.include? e }
|
@@ -189,7 +190,7 @@ module NoSE
|
|
189
190
|
# @return [Index]
|
190
191
|
def simple_index
|
191
192
|
Index.new [id_field], [], fields.values - [id_field],
|
192
|
-
QueryGraph::Graph.from_path([id_field]), name
|
193
|
+
QueryGraph::Graph.from_path([id_field]), saved_key: name
|
193
194
|
end
|
194
195
|
end
|
195
196
|
|
data/lib/nose/model/entity.rb
CHANGED
data/lib/nose/model/fields.rb
CHANGED
@@ -34,7 +34,7 @@ module NoSE
|
|
34
34
|
alias eql? ==
|
35
35
|
|
36
36
|
# Hash by entity and name
|
37
|
-
# @return [
|
37
|
+
# @return [Integer]
|
38
38
|
def hash
|
39
39
|
@hash ||= id.hash
|
40
40
|
end
|
@@ -104,8 +104,20 @@ module NoSE
|
|
104
104
|
method_name = child_class.name.sub(method_regex, '\1')
|
105
105
|
EntityDSL.send :define_method, method_name,
|
106
106
|
(proc do |*args|
|
107
|
-
send
|
108
|
-
|
107
|
+
entity = send :instance_variable_get, :@entity
|
108
|
+
|
109
|
+
# XXX This is necessary since passing a hash of
|
110
|
+
# keyword arguments as the last argument is
|
111
|
+
# now deprecated
|
112
|
+
if args.last.is_a? Hash
|
113
|
+
hash_args = args.last
|
114
|
+
args.pop
|
115
|
+
else
|
116
|
+
hash_args = {}
|
117
|
+
end
|
118
|
+
|
119
|
+
field = child_class.new(*args, **hash_args)
|
120
|
+
entity.send :<<, field
|
109
121
|
end)
|
110
122
|
end
|
111
123
|
private_class_method :add_field_method
|
@@ -122,13 +134,13 @@ module NoSE
|
|
122
134
|
end
|
123
135
|
|
124
136
|
# Parse an Integer from the provided parameter
|
125
|
-
# @return [
|
137
|
+
# @return [Integer]
|
126
138
|
def self.value_from_string(string)
|
127
139
|
string.to_i
|
128
140
|
end
|
129
141
|
|
130
142
|
# Random numbers up to the given size
|
131
|
-
# @return [
|
143
|
+
# @return [Integer]
|
132
144
|
def random_value
|
133
145
|
rand(@cardinality)
|
134
146
|
end
|
@@ -167,8 +179,7 @@ module NoSE
|
|
167
179
|
|
168
180
|
# Field holding a float
|
169
181
|
class FloatField < Field
|
170
|
-
|
171
|
-
TYPE = Fixnum
|
182
|
+
TYPE = Float
|
172
183
|
|
173
184
|
def initialize(name, **options)
|
174
185
|
super(name, 8, **options)
|
@@ -203,7 +214,7 @@ module NoSE
|
|
203
214
|
# A random string of the correct length
|
204
215
|
# @return [String]
|
205
216
|
def random_value
|
206
|
-
Faker::Lorem.characters(@size)
|
217
|
+
Faker::Lorem.characters(number: @size)
|
207
218
|
end
|
208
219
|
end
|
209
220
|
|
@@ -237,7 +248,7 @@ module NoSE
|
|
237
248
|
next_year = DateTime.now.next_year
|
238
249
|
next_year = next_year.new_offset(Rational(0, 24))
|
239
250
|
|
240
|
-
Faker::Time.
|
251
|
+
Faker::Time.between_dates from: prev_year, to: next_year
|
241
252
|
end
|
242
253
|
end
|
243
254
|
|
@@ -284,7 +295,7 @@ module NoSE
|
|
284
295
|
|
285
296
|
# The number of entities associated with the foreign key,
|
286
297
|
# or a manually set cardinality
|
287
|
-
# @return [
|
298
|
+
# @return [Integer]
|
288
299
|
def cardinality
|
289
300
|
@entity.count || super
|
290
301
|
end
|
data/lib/nose/plans.rb
CHANGED
@@ -50,7 +50,7 @@ module NoSE
|
|
50
50
|
end
|
51
51
|
|
52
52
|
# The weight of this query for a given workload
|
53
|
-
# @return [
|
53
|
+
# @return [Integer]
|
54
54
|
def weight
|
55
55
|
return 1 if @workload.nil?
|
56
56
|
|
@@ -145,13 +145,13 @@ module NoSE
|
|
145
145
|
end
|
146
146
|
|
147
147
|
# The cost of performing the update on this index
|
148
|
-
# @return [
|
148
|
+
# @return [Integer]
|
149
149
|
def update_cost
|
150
150
|
@update_steps.sum_by(&:cost)
|
151
151
|
end
|
152
152
|
|
153
153
|
# The cost is the sum of all the query costs plus the update costs
|
154
|
-
# @return [
|
154
|
+
# @return [Integer]
|
155
155
|
def cost
|
156
156
|
@query_plans.sum_by(&:cost) + update_cost
|
157
157
|
end
|
data/lib/nose/random.rb
CHANGED
@@ -353,7 +353,7 @@ module NoSE
|
|
353
353
|
end
|
354
354
|
|
355
355
|
# Return the next valid random number
|
356
|
-
# @return [
|
356
|
+
# @return [Integer]
|
357
357
|
def rand
|
358
358
|
if @valid
|
359
359
|
@valid = false
|
@@ -367,7 +367,7 @@ module NoSE
|
|
367
367
|
end
|
368
368
|
|
369
369
|
# Return a random number for the given distribution
|
370
|
-
# @return [Array<
|
370
|
+
# @return [Array<Integer>]
|
371
371
|
def self.gaussian(mean, stddev)
|
372
372
|
theta = 2 * Math::PI * rand
|
373
373
|
rho = Math.sqrt(-2 * Math.log(1 - rand))
|
data/lib/nose/schema.rb
CHANGED
@@ -39,7 +39,8 @@ module NoSE
|
|
39
39
|
dsl = IndexDSL.new(self)
|
40
40
|
dsl.instance_eval(&block) if block_given?
|
41
41
|
index = Index.new dsl.hash_fields, dsl.order_fields, dsl.extra,
|
42
|
-
QueryGraph::Graph.from_path(dsl.path_keys),
|
42
|
+
QueryGraph::Graph.from_path(dsl.path_keys),
|
43
|
+
saved_key: key
|
43
44
|
@indexes[index.key] = index
|
44
45
|
end
|
45
46
|
|
data/lib/nose/search.rb
CHANGED
@@ -88,7 +88,6 @@ module NoSE
|
|
88
88
|
|
89
89
|
result.workload = @workload
|
90
90
|
result.plans_from_trees trees
|
91
|
-
result.cost_model = @cost_model
|
92
91
|
|
93
92
|
# Select the relevant update plans
|
94
93
|
update_plans = update_plans.values.flatten(1).select do |plan|
|
@@ -99,6 +98,7 @@ module NoSE
|
|
99
98
|
end
|
100
99
|
result.update_plans = update_plans
|
101
100
|
|
101
|
+
result.cost_model = @cost_model
|
102
102
|
result.validate
|
103
103
|
|
104
104
|
result
|
data/lib/nose/search/problem.rb
CHANGED
data/lib/nose/serialize.rb
CHANGED
@@ -114,7 +114,7 @@ module NoSE
|
|
114
114
|
|
115
115
|
Index.new f.call(fragment['hash_fields']),
|
116
116
|
f.call(fragment['order_fields']),
|
117
|
-
f.call(fragment['extra']), graph, fragment['key']
|
117
|
+
f.call(fragment['extra']), graph, saved_key: fragment['key']
|
118
118
|
end
|
119
119
|
end
|
120
120
|
|
@@ -251,7 +251,7 @@ module NoSE
|
|
251
251
|
property :cardinality, exec_context: :decorator
|
252
252
|
|
253
253
|
# The estimated hash cardinality at this step in the plan
|
254
|
-
# @return [
|
254
|
+
# @return [Integer]
|
255
255
|
def hash_cardinality
|
256
256
|
state = represented.instance_variable_get(:@state)
|
257
257
|
state.hash_cardinality if state.is_a?(Plans::QueryState)
|
@@ -326,7 +326,7 @@ module NoSE
|
|
326
326
|
property :type, exec_context: :decorator
|
327
327
|
|
328
328
|
# The estimated cardinality of entities being updated
|
329
|
-
# @return [
|
329
|
+
# @return [Integer]
|
330
330
|
def cardinality
|
331
331
|
state = represented.instance_variable_get(:@state)
|
332
332
|
state.cardinality unless state.nil?
|
data/lib/nose/util.rb
CHANGED
@@ -150,7 +150,7 @@ module Subtype
|
|
150
150
|
# Convert camel case class names to an array
|
151
151
|
# @return [Array<String>]
|
152
152
|
def name_array(cls)
|
153
|
-
frozen_name = cls.name
|
153
|
+
frozen_name = cls.name.dup
|
154
154
|
frozen_name.gsub!(/^.*::/, '')
|
155
155
|
frozen_name.gsub!('ID', 'Id')
|
156
156
|
frozen_name.freeze
|
@@ -166,7 +166,7 @@ end
|
|
166
166
|
# Simple helper class to facilitate cardinality estimates
|
167
167
|
class Cardinality
|
168
168
|
# Update the cardinality based on filtering implicit to the index
|
169
|
-
# @return [
|
169
|
+
# @return [Integer]
|
170
170
|
def self.filter(cardinality, eq_filter, range_filter)
|
171
171
|
filtered = (range_filter.nil? ? 1.0 : 0.1) * cardinality
|
172
172
|
filtered *= eq_filter.map do |field|
|
data/models/eac.rb
CHANGED
@@ -34,11 +34,11 @@ NoSE::Model.new do
|
|
34
34
|
end) * 5_000
|
35
35
|
|
36
36
|
HasOne 'player', 'sessions',
|
37
|
-
'Session' => 'Player'
|
37
|
+
{'Session' => 'Player'}
|
38
38
|
|
39
39
|
HasOne 'server', 'sessions',
|
40
|
-
'Session' => 'Server'
|
40
|
+
{'Session' => 'Server'}
|
41
41
|
|
42
42
|
HasOne 'session', 'states',
|
43
|
-
'PlayerState' => 'Session'
|
43
|
+
{'PlayerState' => 'Session'}
|
44
44
|
end
|
data/models/ebay.rb
CHANGED
data/models/rubis.rb
CHANGED
@@ -64,34 +64,34 @@ NoSE::Model.new do
|
|
64
64
|
end) * 40_000
|
65
65
|
|
66
66
|
HasOne 'region', 'users',
|
67
|
-
'users' => 'regions'
|
67
|
+
{'users' => 'regions'}
|
68
68
|
|
69
69
|
HasOne 'seller', 'items_sold',
|
70
|
-
'items' => 'users'
|
70
|
+
{'items' => 'users'}
|
71
71
|
|
72
72
|
HasOne 'category', 'items',
|
73
|
-
'items' => 'categories'
|
73
|
+
{'items' => 'categories'}
|
74
74
|
|
75
75
|
HasOne 'user', 'bids',
|
76
|
-
'bids' => 'users'
|
76
|
+
{'bids' => 'users'}
|
77
77
|
|
78
78
|
HasOne 'item', 'bids',
|
79
|
-
'bids' => 'items'
|
79
|
+
{'bids' => 'items'}
|
80
80
|
|
81
81
|
HasOne 'from_user', 'comments_sent',
|
82
|
-
'comments' => 'users'
|
82
|
+
{'comments' => 'users'}
|
83
83
|
|
84
84
|
HasOne 'to_user', 'comments_received',
|
85
|
-
'comments' => 'users'
|
85
|
+
{'comments' => 'users'}
|
86
86
|
|
87
87
|
HasOne 'item', 'comments',
|
88
|
-
'comments' => 'items'
|
88
|
+
{'comments' => 'items'}
|
89
89
|
|
90
90
|
HasOne 'buyer', 'bought_now',
|
91
|
-
'buynow' => 'users'
|
91
|
+
{'buynow' => 'users'}
|
92
92
|
|
93
93
|
HasOne 'item', 'bought_now',
|
94
|
-
'buynow' => 'items'
|
94
|
+
{'buynow' => 'items'}
|
95
95
|
end
|
96
96
|
|
97
97
|
# rubocop:enable all
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: nose
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Michael Mior
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2020-07-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: faker
|
@@ -16,20 +16,20 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version:
|
19
|
+
version: 2.3.0
|
20
20
|
- - ">="
|
21
21
|
- !ruby/object:Gem::Version
|
22
|
-
version: 1.
|
22
|
+
version: 1.7.0
|
23
23
|
type: :runtime
|
24
24
|
prerelease: false
|
25
25
|
version_requirements: !ruby/object:Gem::Requirement
|
26
26
|
requirements:
|
27
27
|
- - "~>"
|
28
28
|
- !ruby/object:Gem::Version
|
29
|
-
version:
|
29
|
+
version: 2.3.0
|
30
30
|
- - ">="
|
31
31
|
- !ruby/object:Gem::Version
|
32
|
-
version: 1.
|
32
|
+
version: 1.7.0
|
33
33
|
- !ruby/object:Gem::Dependency
|
34
34
|
name: formatador
|
35
35
|
requirement: !ruby/object:Gem::Requirement
|
@@ -50,108 +50,108 @@ dependencies:
|
|
50
50
|
requirements:
|
51
51
|
- - "~>"
|
52
52
|
- !ruby/object:Gem::Version
|
53
|
-
version: 2.
|
53
|
+
version: 2.8.0
|
54
54
|
- - ">="
|
55
55
|
- !ruby/object:Gem::Version
|
56
|
-
version: 2.
|
56
|
+
version: 2.8.0
|
57
57
|
type: :runtime
|
58
58
|
prerelease: false
|
59
59
|
version_requirements: !ruby/object:Gem::Requirement
|
60
60
|
requirements:
|
61
61
|
- - "~>"
|
62
62
|
- !ruby/object:Gem::Version
|
63
|
-
version: 2.
|
63
|
+
version: 2.8.0
|
64
64
|
- - ">="
|
65
65
|
- !ruby/object:Gem::Version
|
66
|
-
version: 2.
|
66
|
+
version: 2.8.0
|
67
67
|
- !ruby/object:Gem::Dependency
|
68
68
|
name: logging
|
69
69
|
requirement: !ruby/object:Gem::Requirement
|
70
70
|
requirements:
|
71
71
|
- - "~>"
|
72
72
|
- !ruby/object:Gem::Version
|
73
|
-
version: 2.
|
73
|
+
version: 2.2.0
|
74
74
|
- - ">="
|
75
75
|
- !ruby/object:Gem::Version
|
76
|
-
version: 2.
|
76
|
+
version: 2.2.0
|
77
77
|
type: :runtime
|
78
78
|
prerelease: false
|
79
79
|
version_requirements: !ruby/object:Gem::Requirement
|
80
80
|
requirements:
|
81
81
|
- - "~>"
|
82
82
|
- !ruby/object:Gem::Version
|
83
|
-
version: 2.
|
83
|
+
version: 2.2.0
|
84
84
|
- - ">="
|
85
85
|
- !ruby/object:Gem::Version
|
86
|
-
version: 2.
|
86
|
+
version: 2.2.0
|
87
87
|
- !ruby/object:Gem::Dependency
|
88
88
|
name: mipper
|
89
89
|
requirement: !ruby/object:Gem::Requirement
|
90
90
|
requirements:
|
91
91
|
- - "~>"
|
92
92
|
- !ruby/object:Gem::Version
|
93
|
-
version: 0.0
|
93
|
+
version: 0.1.0
|
94
94
|
type: :runtime
|
95
95
|
prerelease: false
|
96
96
|
version_requirements: !ruby/object:Gem::Requirement
|
97
97
|
requirements:
|
98
98
|
- - "~>"
|
99
99
|
- !ruby/object:Gem::Version
|
100
|
-
version: 0.0
|
100
|
+
version: 0.1.0
|
101
101
|
- !ruby/object:Gem::Dependency
|
102
102
|
name: parallel
|
103
103
|
requirement: !ruby/object:Gem::Requirement
|
104
104
|
requirements:
|
105
105
|
- - "~>"
|
106
106
|
- !ruby/object:Gem::Version
|
107
|
-
version: 1.
|
107
|
+
version: 1.17.0
|
108
108
|
- - ">="
|
109
109
|
- !ruby/object:Gem::Version
|
110
|
-
version: 1.
|
110
|
+
version: 1.11.0
|
111
111
|
type: :runtime
|
112
112
|
prerelease: false
|
113
113
|
version_requirements: !ruby/object:Gem::Requirement
|
114
114
|
requirements:
|
115
115
|
- - "~>"
|
116
116
|
- !ruby/object:Gem::Version
|
117
|
-
version: 1.
|
117
|
+
version: 1.17.0
|
118
118
|
- - ">="
|
119
119
|
- !ruby/object:Gem::Version
|
120
|
-
version: 1.
|
120
|
+
version: 1.11.0
|
121
121
|
- !ruby/object:Gem::Dependency
|
122
122
|
name: parslet
|
123
123
|
requirement: !ruby/object:Gem::Requirement
|
124
124
|
requirements:
|
125
125
|
- - "~>"
|
126
126
|
- !ruby/object:Gem::Version
|
127
|
-
version: 1.
|
127
|
+
version: 1.8.0
|
128
128
|
- - ">="
|
129
129
|
- !ruby/object:Gem::Version
|
130
|
-
version: 1.
|
130
|
+
version: 1.8.0
|
131
131
|
type: :runtime
|
132
132
|
prerelease: false
|
133
133
|
version_requirements: !ruby/object:Gem::Requirement
|
134
134
|
requirements:
|
135
135
|
- - "~>"
|
136
136
|
- !ruby/object:Gem::Version
|
137
|
-
version: 1.
|
137
|
+
version: 1.8.0
|
138
138
|
- - ">="
|
139
139
|
- !ruby/object:Gem::Version
|
140
|
-
version: 1.
|
140
|
+
version: 1.8.0
|
141
141
|
- !ruby/object:Gem::Dependency
|
142
142
|
name: pg
|
143
143
|
requirement: !ruby/object:Gem::Requirement
|
144
144
|
requirements:
|
145
145
|
- - "~>"
|
146
146
|
- !ruby/object:Gem::Version
|
147
|
-
version: 0.
|
147
|
+
version: 0.20.0
|
148
148
|
type: :runtime
|
149
149
|
prerelease: false
|
150
150
|
version_requirements: !ruby/object:Gem::Requirement
|
151
151
|
requirements:
|
152
152
|
- - "~>"
|
153
153
|
- !ruby/object:Gem::Version
|
154
|
-
version: 0.
|
154
|
+
version: 0.20.0
|
155
155
|
- !ruby/object:Gem::Dependency
|
156
156
|
name: pickup
|
157
157
|
requirement: !ruby/object:Gem::Requirement
|
@@ -172,21 +172,21 @@ dependencies:
|
|
172
172
|
requirements:
|
173
173
|
- - "~>"
|
174
174
|
- !ruby/object:Gem::Version
|
175
|
-
version: 0.
|
175
|
+
version: 0.12.2
|
176
176
|
type: :runtime
|
177
177
|
prerelease: false
|
178
178
|
version_requirements: !ruby/object:Gem::Requirement
|
179
179
|
requirements:
|
180
180
|
- - "~>"
|
181
181
|
- !ruby/object:Gem::Version
|
182
|
-
version: 0.
|
182
|
+
version: 0.12.2
|
183
183
|
- !ruby/object:Gem::Dependency
|
184
184
|
name: rake
|
185
185
|
requirement: !ruby/object:Gem::Requirement
|
186
186
|
requirements:
|
187
187
|
- - "~>"
|
188
188
|
- !ruby/object:Gem::Version
|
189
|
-
version: 12.
|
189
|
+
version: 12.3.2
|
190
190
|
- - ">="
|
191
191
|
- !ruby/object:Gem::Version
|
192
192
|
version: 12.0.0
|
@@ -196,7 +196,7 @@ dependencies:
|
|
196
196
|
requirements:
|
197
197
|
- - "~>"
|
198
198
|
- !ruby/object:Gem::Version
|
199
|
-
version: 12.
|
199
|
+
version: 12.3.2
|
200
200
|
- - ">="
|
201
201
|
- !ruby/object:Gem::Version
|
202
202
|
version: 12.0.0
|
@@ -266,27 +266,27 @@ dependencies:
|
|
266
266
|
requirements:
|
267
267
|
- - "~>"
|
268
268
|
- !ruby/object:Gem::Version
|
269
|
-
version:
|
269
|
+
version: 5.22.0
|
270
270
|
- - ">="
|
271
271
|
- !ruby/object:Gem::Version
|
272
|
-
version: 4.
|
272
|
+
version: 4.46.0
|
273
273
|
type: :runtime
|
274
274
|
prerelease: false
|
275
275
|
version_requirements: !ruby/object:Gem::Requirement
|
276
276
|
requirements:
|
277
277
|
- - "~>"
|
278
278
|
- !ruby/object:Gem::Version
|
279
|
-
version:
|
279
|
+
version: 5.22.0
|
280
280
|
- - ">="
|
281
281
|
- !ruby/object:Gem::Version
|
282
|
-
version: 4.
|
282
|
+
version: 4.46.0
|
283
283
|
- !ruby/object:Gem::Dependency
|
284
284
|
name: smarter_csv
|
285
285
|
requirement: !ruby/object:Gem::Requirement
|
286
286
|
requirements:
|
287
287
|
- - "~>"
|
288
288
|
- !ruby/object:Gem::Version
|
289
|
-
version: 1.
|
289
|
+
version: 1.2.6
|
290
290
|
- - ">="
|
291
291
|
- !ruby/object:Gem::Version
|
292
292
|
version: 1.1.0
|
@@ -296,7 +296,7 @@ dependencies:
|
|
296
296
|
requirements:
|
297
297
|
- - "~>"
|
298
298
|
- !ruby/object:Gem::Version
|
299
|
-
version: 1.
|
299
|
+
version: 1.2.6
|
300
300
|
- - ">="
|
301
301
|
- !ruby/object:Gem::Version
|
302
302
|
version: 1.1.0
|
@@ -306,7 +306,7 @@ dependencies:
|
|
306
306
|
requirements:
|
307
307
|
- - "~>"
|
308
308
|
- !ruby/object:Gem::Version
|
309
|
-
version: 3.
|
309
|
+
version: 3.2.3
|
310
310
|
- - ">="
|
311
311
|
- !ruby/object:Gem::Version
|
312
312
|
version: 3.1.0
|
@@ -316,7 +316,7 @@ dependencies:
|
|
316
316
|
requirements:
|
317
317
|
- - "~>"
|
318
318
|
- !ruby/object:Gem::Version
|
319
|
-
version: 3.
|
319
|
+
version: 3.2.3
|
320
320
|
- - ">="
|
321
321
|
- !ruby/object:Gem::Version
|
322
322
|
version: 3.1.0
|
@@ -326,7 +326,7 @@ dependencies:
|
|
326
326
|
requirements:
|
327
327
|
- - "~>"
|
328
328
|
- !ruby/object:Gem::Version
|
329
|
-
version: 2.
|
329
|
+
version: 2.10.0
|
330
330
|
- - ">="
|
331
331
|
- !ruby/object:Gem::Version
|
332
332
|
version: 2.4.0
|
@@ -336,7 +336,7 @@ dependencies:
|
|
336
336
|
requirements:
|
337
337
|
- - "~>"
|
338
338
|
- !ruby/object:Gem::Version
|
339
|
-
version: 2.
|
339
|
+
version: 2.10.0
|
340
340
|
- - ">="
|
341
341
|
- !ruby/object:Gem::Version
|
342
342
|
version: 2.4.0
|
@@ -346,14 +346,14 @@ dependencies:
|
|
346
346
|
requirements:
|
347
347
|
- - "~>"
|
348
348
|
- !ruby/object:Gem::Version
|
349
|
-
version: 0.
|
349
|
+
version: 0.20.0
|
350
350
|
type: :development
|
351
351
|
prerelease: false
|
352
352
|
version_requirements: !ruby/object:Gem::Requirement
|
353
353
|
requirements:
|
354
354
|
- - "~>"
|
355
355
|
- !ruby/object:Gem::Version
|
356
|
-
version: 0.
|
356
|
+
version: 0.20.0
|
357
357
|
- !ruby/object:Gem::Dependency
|
358
358
|
name: memory_profiler
|
359
359
|
requirement: !ruby/object:Gem::Requirement
|
@@ -374,7 +374,7 @@ dependencies:
|
|
374
374
|
requirements:
|
375
375
|
- - "~>"
|
376
376
|
- !ruby/object:Gem::Version
|
377
|
-
version: 3.
|
377
|
+
version: 3.7.0
|
378
378
|
- - ">="
|
379
379
|
- !ruby/object:Gem::Version
|
380
380
|
version: 3.4.0
|
@@ -384,7 +384,7 @@ dependencies:
|
|
384
384
|
requirements:
|
385
385
|
- - "~>"
|
386
386
|
- !ruby/object:Gem::Version
|
387
|
-
version: 3.
|
387
|
+
version: 3.7.0
|
388
388
|
- - ">="
|
389
389
|
- !ruby/object:Gem::Version
|
390
390
|
version: 3.4.0
|
@@ -394,14 +394,14 @@ dependencies:
|
|
394
394
|
requirements:
|
395
395
|
- - "~>"
|
396
396
|
- !ruby/object:Gem::Version
|
397
|
-
version: 0.
|
397
|
+
version: 1.0.0
|
398
398
|
type: :development
|
399
399
|
prerelease: false
|
400
400
|
version_requirements: !ruby/object:Gem::Requirement
|
401
401
|
requirements:
|
402
402
|
- - "~>"
|
403
403
|
- !ruby/object:Gem::Version
|
404
|
-
version: 0.
|
404
|
+
version: 1.0.0
|
405
405
|
- !ruby/object:Gem::Dependency
|
406
406
|
name: pry-stack_explorer
|
407
407
|
requirement: !ruby/object:Gem::Requirement
|
@@ -436,47 +436,47 @@ dependencies:
|
|
436
436
|
requirements:
|
437
437
|
- - "~>"
|
438
438
|
- !ruby/object:Gem::Version
|
439
|
-
version: 3.
|
439
|
+
version: 3.8.0
|
440
440
|
- - ">="
|
441
441
|
- !ruby/object:Gem::Version
|
442
|
-
version: 3.
|
442
|
+
version: 3.8.0
|
443
443
|
type: :development
|
444
444
|
prerelease: false
|
445
445
|
version_requirements: !ruby/object:Gem::Requirement
|
446
446
|
requirements:
|
447
447
|
- - "~>"
|
448
448
|
- !ruby/object:Gem::Version
|
449
|
-
version: 3.
|
449
|
+
version: 3.8.0
|
450
450
|
- - ">="
|
451
451
|
- !ruby/object:Gem::Version
|
452
|
-
version: 3.
|
452
|
+
version: 3.8.0
|
453
453
|
- !ruby/object:Gem::Dependency
|
454
454
|
name: rspec-core
|
455
455
|
requirement: !ruby/object:Gem::Requirement
|
456
456
|
requirements:
|
457
457
|
- - "~>"
|
458
458
|
- !ruby/object:Gem::Version
|
459
|
-
version: 3.
|
459
|
+
version: 3.8.0
|
460
460
|
- - ">="
|
461
461
|
- !ruby/object:Gem::Version
|
462
|
-
version: 3.
|
462
|
+
version: 3.8.0
|
463
463
|
type: :development
|
464
464
|
prerelease: false
|
465
465
|
version_requirements: !ruby/object:Gem::Requirement
|
466
466
|
requirements:
|
467
467
|
- - "~>"
|
468
468
|
- !ruby/object:Gem::Version
|
469
|
-
version: 3.
|
469
|
+
version: 3.8.0
|
470
470
|
- - ">="
|
471
471
|
- !ruby/object:Gem::Version
|
472
|
-
version: 3.
|
472
|
+
version: 3.8.0
|
473
473
|
- !ruby/object:Gem::Dependency
|
474
474
|
name: rspec-collection_matchers
|
475
475
|
requirement: !ruby/object:Gem::Requirement
|
476
476
|
requirements:
|
477
477
|
- - "~>"
|
478
478
|
- !ruby/object:Gem::Version
|
479
|
-
version: 1.
|
479
|
+
version: 1.2.0
|
480
480
|
- - ">="
|
481
481
|
- !ruby/object:Gem::Version
|
482
482
|
version: 1.1.0
|
@@ -486,7 +486,7 @@ dependencies:
|
|
486
486
|
requirements:
|
487
487
|
- - "~>"
|
488
488
|
- !ruby/object:Gem::Version
|
489
|
-
version: 1.
|
489
|
+
version: 1.2.0
|
490
490
|
- - ">="
|
491
491
|
- !ruby/object:Gem::Version
|
492
492
|
version: 1.1.0
|
@@ -496,14 +496,14 @@ dependencies:
|
|
496
496
|
requirements:
|
497
497
|
- - "~>"
|
498
498
|
- !ruby/object:Gem::Version
|
499
|
-
version: 0.
|
499
|
+
version: 0.18.0
|
500
500
|
type: :development
|
501
501
|
prerelease: false
|
502
502
|
version_requirements: !ruby/object:Gem::Requirement
|
503
503
|
requirements:
|
504
504
|
- - "~>"
|
505
505
|
- !ruby/object:Gem::Version
|
506
|
-
version: 0.
|
506
|
+
version: 0.18.0
|
507
507
|
- !ruby/object:Gem::Dependency
|
508
508
|
name: scrutinizer-ocular
|
509
509
|
requirement: !ruby/object:Gem::Requirement
|
@@ -530,14 +530,14 @@ dependencies:
|
|
530
530
|
requirements:
|
531
531
|
- - "~>"
|
532
532
|
- !ruby/object:Gem::Version
|
533
|
-
version: 0.
|
533
|
+
version: 0.17.0
|
534
534
|
type: :development
|
535
535
|
prerelease: false
|
536
536
|
version_requirements: !ruby/object:Gem::Requirement
|
537
537
|
requirements:
|
538
538
|
- - "~>"
|
539
539
|
- !ruby/object:Gem::Version
|
540
|
-
version: 0.
|
540
|
+
version: 0.17.0
|
541
541
|
- !ruby/object:Gem::Dependency
|
542
542
|
name: yard
|
543
543
|
requirement: !ruby/object:Gem::Requirement
|
@@ -572,21 +572,21 @@ dependencies:
|
|
572
572
|
requirements:
|
573
573
|
- - "~>"
|
574
574
|
- !ruby/object:Gem::Version
|
575
|
-
version: 0.
|
575
|
+
version: 0.5.2
|
576
576
|
type: :runtime
|
577
577
|
prerelease: false
|
578
578
|
version_requirements: !ruby/object:Gem::Requirement
|
579
579
|
requirements:
|
580
580
|
- - "~>"
|
581
581
|
- !ruby/object:Gem::Version
|
582
|
-
version: 0.
|
582
|
+
version: 0.5.2
|
583
583
|
- !ruby/object:Gem::Dependency
|
584
584
|
name: pry-rescue
|
585
585
|
requirement: !ruby/object:Gem::Requirement
|
586
586
|
requirements:
|
587
587
|
- - "~>"
|
588
588
|
- !ruby/object:Gem::Version
|
589
|
-
version: 1.
|
589
|
+
version: 1.5.0
|
590
590
|
- - ">="
|
591
591
|
- !ruby/object:Gem::Version
|
592
592
|
version: 1.4.0
|
@@ -596,7 +596,7 @@ dependencies:
|
|
596
596
|
requirements:
|
597
597
|
- - "~>"
|
598
598
|
- !ruby/object:Gem::Version
|
599
|
-
version: 1.
|
599
|
+
version: 1.5.0
|
600
600
|
- - ">="
|
601
601
|
- !ruby/object:Gem::Version
|
602
602
|
version: 1.4.0
|
@@ -606,14 +606,14 @@ dependencies:
|
|
606
606
|
requirements:
|
607
607
|
- - "~>"
|
608
608
|
- !ruby/object:Gem::Version
|
609
|
-
version: 0.
|
609
|
+
version: 0.8.0
|
610
610
|
type: :development
|
611
611
|
prerelease: false
|
612
612
|
version_requirements: !ruby/object:Gem::Requirement
|
613
613
|
requirements:
|
614
614
|
- - "~>"
|
615
615
|
- !ruby/object:Gem::Version
|
616
|
-
version: 0.
|
616
|
+
version: 0.8.0
|
617
617
|
description:
|
618
618
|
email: mmior@uwaterloo.ca
|
619
619
|
executables: []
|
@@ -702,12 +702,11 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
702
702
|
version: '0'
|
703
703
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
704
704
|
requirements:
|
705
|
-
- - "
|
705
|
+
- - ">="
|
706
706
|
- !ruby/object:Gem::Version
|
707
|
-
version:
|
707
|
+
version: '0'
|
708
708
|
requirements: []
|
709
|
-
|
710
|
-
rubygems_version: 2.5.2
|
709
|
+
rubygems_version: 3.1.2
|
711
710
|
signing_key:
|
712
711
|
specification_version: 4
|
713
712
|
summary: Schema design for NoSQL applications
|