redcord 0.1.4 → 0.2.0

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
  SHA256:
3
- metadata.gz: 134041206308ab5d1cb967dca5b5985b2bdd6b9c058601d7040d75d1119a2c98
4
- data.tar.gz: d04f590786ab4cd9251ac32f5eea7d11e8103c448916c4aaee290db177370eca
3
+ metadata.gz: c343794236cfb0990142a2200625066bd176b3f57cdfbf4336e752a568796621
4
+ data.tar.gz: d4dff503e7bf52756ea884be7179a2b7a0b004ab5c93d8af24a8fa7bee953e76
5
5
  SHA512:
6
- metadata.gz: 374deab010a1f6b40e038adae19b4a7dee5485c5e17ff3a7e8fc92a4e839a2e9835166acd9b6369e7b628e206c1a280e943a28c040172d107c147d3be158fa8b
7
- data.tar.gz: 28279ab008fcf6ba226d574250f882f35b05b69fc968794430c3d992c69fd686ec9c2f3fa7821aa6227426c7a027fda07c6e929624a533058c4a396c975f1140
6
+ metadata.gz: 78d24a7abea242512ad8943c19b50ad363ee320204c3e56d386f6b408e4d11c508dd35f724490963546817f87c53a2b38cb496035bd1b1a4e0c078b78503c1ff
7
+ data.tar.gz: a3660d9cb64af06ae210e1885be8de10e9285edea5671252204caea07eda43c0b7fc899a29f5d5975c1cc2c216abd61345b6211a9e83dffdc3920e45704d42d0
@@ -3,15 +3,8 @@
3
3
  # typed: strict
4
4
 
5
5
  require 'sorbet-coerce'
6
-
7
6
  require 'redcord/relation'
8
7
 
9
- module Redcord
10
- # Raised by Model.find
11
- class RecordNotFound < StandardError; end
12
- class InvalidAction < StandardError; end
13
- end
14
-
15
8
  module Redcord::Actions
16
9
  extend T::Sig
17
10
  extend T::Helpers
@@ -171,6 +164,13 @@ module Redcord::Actions
171
164
  )
172
165
  end
173
166
  end
167
+ # TODO: break down Redis::CommandError further by parsing the error message
168
+ rescue Redis::CommandError => e
169
+ if e.message.include?('has been deleted')
170
+ raise Redcord::RedcordDeletedError.new(e)
171
+ else
172
+ raise e
173
+ end
174
174
  end
175
175
 
176
176
  sig { returns(T::Boolean) }
@@ -179,7 +179,6 @@ module Redcord::Actions
179
179
 
180
180
  true
181
181
  rescue Redis::CommandError
182
- # TODO: break down Redis::CommandError by parsing the error message
183
182
  false
184
183
  end
185
184
 
@@ -213,6 +212,13 @@ module Redcord::Actions
213
212
  )
214
213
  end
215
214
  end
215
+ # TODO: break down Redis::CommandError further by parsing the error message
216
+ rescue Redis::CommandError => e
217
+ if e.message.include?('has been deleted')
218
+ raise Redcord::RedcordDeletedError.new(e)
219
+ else
220
+ raise e
221
+ end
216
222
  end
217
223
 
218
224
  sig { params(args: T::Hash[Symbol, T.untyped]).returns(T::Boolean) }
@@ -221,7 +227,6 @@ module Redcord::Actions
221
227
 
222
228
  true
223
229
  rescue Redis::CommandError
224
- # TODO: break down Redis::CommandError by parsing the error message
225
230
  false
226
231
  end
227
232
 
@@ -1,9 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  # typed: strict
4
- module Redcord
5
- class InvalidAttribute < StandardError; end
6
- end
7
4
 
8
5
  module Redcord::Attribute
9
6
  extend T::Sig
@@ -37,7 +34,7 @@ module Redcord::Attribute
37
34
  klass.include(InstanceMethods)
38
35
  klass.class_variable_set(:@@index_attributes, Set.new)
39
36
  klass.class_variable_set(:@@range_index_attributes, Set.new)
40
- klass.class_variable_set(:@@custom_index_attributes, Hash.new { |h, k| h[k] = [] })
37
+ klass.class_variable_set(:@@custom_index_attributes, Hash.new)
41
38
  klass.class_variable_set(:@@ttl, nil)
42
39
  klass.class_variable_set(:@@shard_by_attribute, nil)
43
40
  end
@@ -13,16 +13,16 @@ class Redcord::ConnectionPool
13
13
  # Avoid method_missing when possible for better performance
14
14
  methods = Set.new(Redcord::Redis.instance_methods(false) + Redis.instance_methods(false))
15
15
  methods.each do |method_name|
16
- define_method method_name do |*args, &blk|
16
+ define_method method_name do |*args, **kwargs, &blk|
17
17
  @connection_pool.with do |redis|
18
- redis.send(method_name, *args, &blk)
18
+ redis.send(method_name, *args, **kwargs, &blk)
19
19
  end
20
20
  end
21
21
  end
22
22
 
23
- def method_missing(method_name, *args, &blk)
23
+ def method_missing(method_name, *args, **kwargs, &blk)
24
24
  @connection_pool.with do |redis|
25
- redis.send(method_name, *args, &blk)
25
+ redis.send(method_name, *args, **kwargs, &blk)
26
26
  end
27
27
  end
28
28
  end
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Redcord
4
+ class RedcordError < StandardError; end
5
+
6
+ # Raised by Model.find
7
+ class RecordNotFound < RedcordError; end
8
+ class InvalidAction < RedcordError; end
9
+
10
+ # Raised by Model.where
11
+ class InvalidQuery < RedcordError; end
12
+ class AttributeNotIndexed < RedcordError; end
13
+ class WrongAttributeType < TypeError; end
14
+ class CustomIndexInvalidQuery < RedcordError; end
15
+ class CustomIndexInvalidDesign < RedcordError; end
16
+ class RedcordDeletedError < ::Redis::CommandError; end
17
+
18
+ # Raised by shared_by_attribute
19
+ class InvalidAttribute < RedcordError; end
20
+ end
@@ -48,7 +48,7 @@ module Redcord::Migration::Index
48
48
  sig { params(model: T.class_of(Redcord::Base), key: String).void }
49
49
  def _del_zset(model, key)
50
50
  # ZPOPMIN might not be avaliable on old redis servers
51
- model.redis.zscan_each(match: key) do |id, _|
51
+ model.redis.zscan_each(key) do |id, _|
52
52
  model.redis.zrem(key, id)
53
53
  end
54
54
 
@@ -6,10 +6,6 @@ require 'active_support'
6
6
  require 'active_support/core_ext/array'
7
7
  require 'active_support/core_ext/module'
8
8
 
9
- module Redcord
10
- class InvalidQuery < StandardError; end
11
- end
12
-
13
9
  class Redcord::Relation
14
10
  extend T::Sig
15
11
 
@@ -99,7 +95,7 @@ class Redcord::Relation
99
95
  extract_query_conditions!,
100
96
  index_attrs: model._script_arg_index_attrs,
101
97
  range_index_attrs: model._script_arg_range_index_attrs,
102
- custom_index_attrs: model._script_arg_custom_index_attrs[custom_index_name],
98
+ custom_index_attrs: model._script_arg_custom_index_attrs[custom_index_name] || [],
103
99
  hash_tag: extract_hash_tag!,
104
100
  custom_index_name: custom_index_name
105
101
  )
@@ -223,7 +219,7 @@ class Redcord::Relation
223
219
  select_attrs: select_attrs,
224
220
  index_attrs: model._script_arg_index_attrs,
225
221
  range_index_attrs: model._script_arg_range_index_attrs,
226
- custom_index_attrs: model._script_arg_custom_index_attrs[custom_index_name],
222
+ custom_index_attrs: model._script_arg_custom_index_attrs[custom_index_name] || [],
227
223
  hash_tag: extract_hash_tag!,
228
224
  custom_index_name: custom_index_name
229
225
  )
@@ -239,7 +235,7 @@ class Redcord::Relation
239
235
  extract_query_conditions!,
240
236
  index_attrs: model._script_arg_index_attrs,
241
237
  range_index_attrs: model._script_arg_range_index_attrs,
242
- custom_index_attrs: model._script_arg_custom_index_attrs[custom_index_name],
238
+ custom_index_attrs: model._script_arg_custom_index_attrs[custom_index_name] || [],
243
239
  hash_tag: extract_hash_tag!,
244
240
  custom_index_name: custom_index_name
245
241
  )
@@ -4,14 +4,6 @@
4
4
 
5
5
  require 'redcord/range_interval'
6
6
 
7
- module Redcord
8
- # Raised by Model.where
9
- class AttributeNotIndexed < StandardError; end
10
- class WrongAttributeType < TypeError; end
11
- class CustomIndexInvalidQuery < StandardError; end
12
- class CustomIndexInvalidDesign < StandardError; end
13
- end
14
-
15
7
  # This module defines various helper methods on Redcord for serialization
16
8
  # between the Ruby client and Redis server.
17
9
  module Redcord::Serializer
@@ -81,7 +73,7 @@ module Redcord::Serializer
81
73
  attr_keys.each do |attr_key|
82
74
  next if attr_key == shard_by_attribute
83
75
 
84
- if !custom_index_attributes.empty?
76
+ if !custom_index_attributes.nil? && !custom_index_attributes.empty?
85
77
  if !custom_index_attributes.include?(attr_key)
86
78
  raise(
87
79
  Redcord::AttributeNotIndexed,
data/lib/redcord.rb CHANGED
@@ -32,6 +32,7 @@ module Redcord
32
32
  end
33
33
 
34
34
  require 'redcord/base'
35
+ require 'redcord/errors'
35
36
  require 'redcord/migration'
36
37
  require 'redcord/migration/migrator'
37
38
  require 'redcord/migration/version'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: redcord
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.4
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Chan Zuckerberg Initiative
@@ -123,35 +123,35 @@ dependencies:
123
123
  - !ruby/object:Gem::Version
124
124
  version: 0.4.4704
125
125
  - !ruby/object:Gem::Dependency
126
- name: codecov
126
+ name: rspec
127
127
  requirement: !ruby/object:Gem::Requirement
128
128
  requirements:
129
- - - ">="
129
+ - - "~>"
130
130
  - !ruby/object:Gem::Version
131
- version: '0'
131
+ version: '3.2'
132
132
  type: :development
133
133
  prerelease: false
134
134
  version_requirements: !ruby/object:Gem::Requirement
135
135
  requirements:
136
- - - ">="
136
+ - - "~>"
137
137
  - !ruby/object:Gem::Version
138
- version: '0'
138
+ version: '3.2'
139
139
  - !ruby/object:Gem::Dependency
140
- name: rspec
140
+ name: simplecov
141
141
  requirement: !ruby/object:Gem::Requirement
142
142
  requirements:
143
- - - "~>"
143
+ - - ">="
144
144
  - !ruby/object:Gem::Version
145
- version: '3.2'
145
+ version: '0'
146
146
  type: :development
147
147
  prerelease: false
148
148
  version_requirements: !ruby/object:Gem::Requirement
149
149
  requirements:
150
- - - "~>"
150
+ - - ">="
151
151
  - !ruby/object:Gem::Version
152
- version: '3.2'
152
+ version: '0'
153
153
  - !ruby/object:Gem::Dependency
154
- name: simplecov
154
+ name: simplecov-cobertura
155
155
  requirement: !ruby/object:Gem::Requirement
156
156
  requirements:
157
157
  - - ">="
@@ -177,6 +177,7 @@ files:
177
177
  - lib/redcord/base.rb
178
178
  - lib/redcord/configurations.rb
179
179
  - lib/redcord/connection_pool.rb
180
+ - lib/redcord/errors.rb
180
181
  - lib/redcord/logger.rb
181
182
  - lib/redcord/lua_script_reader.rb
182
183
  - lib/redcord/migration.rb
@@ -213,7 +214,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
213
214
  requirements:
214
215
  - - ">="
215
216
  - !ruby/object:Gem::Version
216
- version: 2.5.0
217
+ version: 2.7.0
217
218
  required_rubygems_version: !ruby/object:Gem::Requirement
218
219
  requirements:
219
220
  - - ">="