Module: Octopus::ShardTracking::ClassMethods
- Defined in:
- lib/octopus/shard_tracking.rb
Instance Method Summary collapse
- #create_sharded_method(name) ⇒ Object
-
#sharded_methods(*methods) ⇒ Object
If the class which includes this module responds to the class method sharded_methods, then automagically alias_method_chain a sharding-friendly version of each of those methods into existence.
Instance Method Details
#create_sharded_method(name) ⇒ Object
15 16 17 18 19 20 21 22 23 24 25 |
# File 'lib/octopus/shard_tracking.rb', line 15 def create_sharded_method(name) name.to_s =~ /([^!?]+)([!?])?/ method, punctuation = [Regexp.last_match[1], Regexp.last_match[2]] with = :"#{method}_with_octopus#{punctuation}" without = :"#{method}_without_octopus#{punctuation}" define_method with do |*args, &block| run_on_shard { send(without, *args, &block) } end alias_method without.to_sym, name.to_sym alias_method name.to_sym, with.to_sym end |
#sharded_methods(*methods) ⇒ Object
If the class which includes this module responds to the class method sharded_methods, then automagically alias_method_chain a sharding-friendly version of each of those methods into existence
11 12 13 |
# File 'lib/octopus/shard_tracking.rb', line 11 def sharded_methods(*methods) methods.each { |m| create_sharded_method(m) } end |