module ActsAsShardable::Shard
Public Instance Methods
constantize_class(i)
click to toggle source
# File lib/acts_as_shardable/shard.rb, line 43 def constantize_class(i) class_name = "#{base_class.name.demodulize}_%04d" % i @@sharding_class ||= {} @@sharding_class[class_name] ||= mutex.synchronize do if module_name.const_defined?(class_name, false) module_name.const_get(class_name, false) else Class.new(base_class) do self.table_name = ("#{base_class.base_table_name}_%04d" % i) if base_class.respond_to?(:protobuf_message) self.protobuf_message base_class.protobuf_message # Create a .to_proto method on XXX::ActiveRecord_Relation self.const_get('ActiveRecord_Relation', false).class_exec do def to_proto(*args) msg_class = base_class.name.demodulize.pluralize module_name = base_class.name.deconstantize.constantize module_name::Messages.const_get(msg_class, false).new(msg_class.underscore => map { |r| r.to_proto(*args) }) end end end end.tap { |k| module_name.const_set(class_name, k) } end end end
mod(current, mod:)
click to toggle source
# File lib/acts_as_shardable/shard.rb, line 39 def mod(current, mod:) current % mod end
shard()
click to toggle source
# File lib/acts_as_shardable/shard.rb, line 8 def shard if defined? @attributes shard_value = self.attributes[_class.base_class.shard_method.to_s] if shard_value _class.base_class.sharding(shard_value) else _class end else _class end end
Also aliased as: class
sharding(column)
click to toggle source
# File lib/acts_as_shardable/shard.rb, line 26 def sharding(column) i = case self.shard_method_using when Proc self.shard_method_using.call(column) when Symbol self.send(self.shard_method_using, column, self.shard_args) end constantize_class(i) end
to_proto(*args)
click to toggle source
# File lib/acts_as_shardable/shard.rb, line 58 def to_proto(*args) msg_class = base_class.name.demodulize.pluralize module_name = base_class.name.deconstantize.constantize module_name::Messages.const_get(msg_class, false).new(msg_class.underscore => map { |r| r.to_proto(*args) }) end