Class: DeepPreloader::PolymorphicSpec
- Inherits:
-
AbstractSpec
- Object
- AbstractSpec
- DeepPreloader::PolymorphicSpec
- Defined in:
- lib/deep_preloader/polymorphic_spec.rb
Instance Attribute Summary collapse
-
#specs_by_type ⇒ Object
readonly
Returns the value of attribute specs_by_type.
Class Method Summary collapse
Instance Method Summary collapse
- #==(other) ⇒ Object (also: #eql?)
- #for_type(clazz) ⇒ Object
- #hash ⇒ Object
-
#initialize(specs_by_type = {}) ⇒ PolymorphicSpec
constructor
A new instance of PolymorphicSpec.
- #inspect ⇒ Object
- #merge!(other) ⇒ Object
- #polymorphic? ⇒ Boolean
Constructor Details
#initialize(specs_by_type = {}) ⇒ PolymorphicSpec
Returns a new instance of PolymorphicSpec.
17 18 19 |
# File 'lib/deep_preloader/polymorphic_spec.rb', line 17 def initialize(specs_by_type = {}) @specs_by_type = specs_by_type end |
Instance Attribute Details
#specs_by_type ⇒ Object (readonly)
Returns the value of attribute specs_by_type.
4 5 6 |
# File 'lib/deep_preloader/polymorphic_spec.rb', line 4 def specs_by_type @specs_by_type end |
Class Method Details
.parse(data) ⇒ Object
6 7 8 9 10 11 12 13 14 15 |
# File 'lib/deep_preloader/polymorphic_spec.rb', line 6 def self.parse(data) if data.is_a?(Hash) specs = data.each_with_object({}) do |(k, v), h| h[k.to_s] = DeepPreloader::Spec.parse(v) end self.new(specs) else raise ArgumentError.new("Invalid polymorphic spec: '#{data.inspect}' is not a hash") end end |
Instance Method Details
#==(other) ⇒ Object Also known as: eql?
51 52 53 |
# File 'lib/deep_preloader/polymorphic_spec.rb', line 51 def ==(other) self.class == other.class && self.specs_by_type == other.specs_by_type end |
#for_type(clazz) ⇒ Object
25 26 27 |
# File 'lib/deep_preloader/polymorphic_spec.rb', line 25 def for_type(clazz) specs_by_type[clazz.name] end |
#hash ⇒ Object
47 48 49 |
# File 'lib/deep_preloader/polymorphic_spec.rb', line 47 def hash [self.class, self.specs_by_type].hash end |
#inspect ⇒ Object
57 58 59 |
# File 'lib/deep_preloader/polymorphic_spec.rb', line 57 def inspect "PolySpec#{specs_by_type.inspect}" end |
#merge!(other) ⇒ Object
29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
# File 'lib/deep_preloader/polymorphic_spec.rb', line 29 def merge!(other) case other when nil return when DeepPreloader::PolymorphicSpec other.specs_by_type.each do |k, v| if specs_by_type[k] specs_by_type[k].merge!(v) else specs_by_type[k] = v end end else raise ArgumentError.new("Cannot merge #{other.class.name} into #{self.inspect}") end self end |
#polymorphic? ⇒ Boolean
21 22 23 |
# File 'lib/deep_preloader/polymorphic_spec.rb', line 21 def polymorphic? true end |