redcord 0.1.3 → 0.1.6

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
  SHA256:
3
- metadata.gz: 9f33907b35b938f14be13d1d20f89f1530d72a28cb55e7e38a53f61743a2bfe5
4
- data.tar.gz: 1297ac81f293f35572a0015782aa621b1d5ba0e3e691ea86abadbdde26ca094a
3
+ metadata.gz: 91184713358e549897cc7d1a544a8f8244b2aa267b623a6af947711219983ce5
4
+ data.tar.gz: d24d9e8f1f5cfa72afc6c4f2bfe64933f8f7278ed3dd7a3a53f4ae026168a732
5
5
  SHA512:
6
- metadata.gz: f4d23f458c6f6de224293010b60f19d7c07199c66eb382e5bd5a7917a429900658bfd42202107c3e72ace588ea526bcf3edb6b56dfeaa7a6b58f3eea4b91dc81
7
- data.tar.gz: d1aa8dedf1dccad372489072405725fe51e3712b634524c73c574130ab8473bab1fefdedfbd47466c956ab7e96e121153798f08a4250b30e7dc30d33039bf801
6
+ metadata.gz: 828c660a25ea131fc013ba261cb3395fbbcc637170f5b8601f68e30f7095cda8f5e3ed5781bcbb0bf39fcec693438953b76b4a106b9fd9966e3c5f3ff6469145
7
+ data.tar.gz: e3a6469ae8778ea5c110922c7324c43e394e273c0392a16524bbe489fd24df4bffca4cd83c7a225430b05ac134e346dad9de64e2514f87caddf249704209961d
@@ -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
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Redcord
4
+ # Raised by Model.find
5
+ class RecordNotFound < StandardError; end
6
+ class InvalidAction < StandardError; end
7
+
8
+ # Raised by Model.where
9
+ class InvalidQuery < StandardError; end
10
+ class AttributeNotIndexed < StandardError; end
11
+ class WrongAttributeType < TypeError; end
12
+ class CustomIndexInvalidQuery < StandardError; end
13
+ class CustomIndexInvalidDesign < StandardError; end
14
+ class RedcordDeletedError < ::Redis::CommandError; end
15
+
16
+ # Raised by shared_by_attribute
17
+ class InvalidAttribute < StandardError; end
18
+ end
@@ -2,13 +2,10 @@
2
2
 
3
3
  # typed: strict
4
4
 
5
+ require 'active_support'
5
6
  require 'active_support/core_ext/array'
6
7
  require 'active_support/core_ext/module'
7
8
 
8
- module Redcord
9
- class InvalidQuery < StandardError; end
10
- end
11
-
12
9
  class Redcord::Relation
13
10
  extend T::Sig
14
11
 
@@ -98,7 +95,7 @@ class Redcord::Relation
98
95
  extract_query_conditions!,
99
96
  index_attrs: model._script_arg_index_attrs,
100
97
  range_index_attrs: model._script_arg_range_index_attrs,
101
- 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] || [],
102
99
  hash_tag: extract_hash_tag!,
103
100
  custom_index_name: custom_index_name
104
101
  )
@@ -222,7 +219,7 @@ class Redcord::Relation
222
219
  select_attrs: select_attrs,
223
220
  index_attrs: model._script_arg_index_attrs,
224
221
  range_index_attrs: model._script_arg_range_index_attrs,
225
- 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] || [],
226
223
  hash_tag: extract_hash_tag!,
227
224
  custom_index_name: custom_index_name
228
225
  )
@@ -238,7 +235,7 @@ class Redcord::Relation
238
235
  extract_query_conditions!,
239
236
  index_attrs: model._script_arg_index_attrs,
240
237
  range_index_attrs: model._script_arg_range_index_attrs,
241
- 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] || [],
242
239
  hash_tag: extract_hash_tag!,
243
240
  custom_index_name: custom_index_name
244
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,
@@ -9,15 +9,15 @@ module Redcord::VacuumHelper
9
9
  sig { params(model: T.class_of(Redcord::Base)).void }
10
10
  def self.vacuum(model)
11
11
  model.class_variable_get(:@@index_attributes).each do |index_attr|
12
- puts "Vacuuming index attribute: #{index_attr}"
12
+ puts "Vacuuming index attribute: #{index_attr} for model: #{model.name}"
13
13
  _vacuum_index_attribute(model, index_attr)
14
14
  end
15
15
  model.class_variable_get(:@@range_index_attributes).each do |range_index_attr|
16
- puts "Vacuuming range index attribute: #{range_index_attr}"
16
+ puts "Vacuuming range index attribute: #{range_index_attr} for model: #{model.name}"
17
17
  _vacuum_range_index_attribute(model, range_index_attr)
18
18
  end
19
19
  model.class_variable_get(:@@custom_index_attributes).keys.each do |index_name|
20
- puts "Vacuuming custom index: #{index_name}"
20
+ puts "Vacuuming custom index: #{index_name} for model: #{model.name}"
21
21
  _vacuum_custom_index(model, index_name)
22
22
  end
23
23
  end
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.3
4
+ version: 0.1.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Chan Zuckerberg Initiative
@@ -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
@@ -220,7 +221,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
220
221
  - !ruby/object:Gem::Version
221
222
  version: '0'
222
223
  requirements: []
223
- rubygems_version: 3.0.8
224
+ rubygems_version: 3.1.6
224
225
  signing_key:
225
226
  specification_version: 4
226
227
  summary: A Ruby ORM like Active Record, but for Redis