Skip to content

Instantly share code, notes, and snippets.

@nickh
Created August 5, 2011 21:42
Show Gist options
  • Select an option

  • Save nickh/1128589 to your computer and use it in GitHub Desktop.

Select an option

Save nickh/1128589 to your computer and use it in GitHub Desktop.
Moar dynashard class generation fun
diff --git a/lib/dynashard.rb b/lib/dynashard.rb
index 9cdf095..e6ac9ac 100644
--- a/lib/dynashard.rb
+++ b/lib/dynashard.rb
@@ -264,15 +264,10 @@ module Dynashard
# Return a model subclass configured to use a specific shard
def self.sharded_model_class(shard_klass, base_klass)
- subclass_name = base_klass.dynashard_subclass_name
- class_name = "#{shard_klass.name}::#{subclass_name}"
- unless shard_klass.constants.include?(subclass_name.to_sym)
- class_eval <<-EOE, __FILE__, __LINE__
- class #{class_name} < #{base_klass.name}
- include Dynashard::GeneratedModelClass
- end
-EOE
- klass = class_name.constantize
+ subclass = base_klass.dynashard_subclass_name.to_sym
+ unless shard_klass.constants.include?(subclass)
+ klass = shard_klass.const_set(subclass, Class.new(base_klass))
+ klass.send(:include, Dynashard::GeneratedModelClass)
klass.dynashard_klass = shard_klass
klass.connection_handler.dynashard_pool_alias(klass.name, shard_klass.name)
if sharded_table_name = base_klass.dynashard_table_name
@@ -296,7 +291,7 @@ EOE
end
end
end
- class_name.constantize
+ shard_klass.const_get(subclass)
end
def self.shard_constants
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment