Module: Factory
- Defined in:
- lib/factory.rb,
lib/factory/version.rb
Overview
The Factory mixin provides a robust Factory implementation. Overrides are automatically registered upon sub-classing. Manual override and disables are available if auto-registration does not result in the desired factory overrides. Manual overrides are available at the class and global granularities. Method arguments can be passed in as strings or symbols so that overrides can be set even before classes have been defined.
Defined Under Namespace
Modules: ClassMethods Classes: OverrideList
Constant Summary collapse
- VERSION =
'1.0.0'
Class Method Summary collapse
-
.[](base_class) ⇒ Object
Accessor which returns the factory override of
base_class
. -
.create_override_list(klass, parent = nil) ⇒ Object
Registers a class in the factory by creating it an OverrideList.
-
.disable_override(overridden_class, overriding_class) ⇒ Object
Used to manually disable class specific override class.
-
.enable_override(overridden_class, overriding_class) ⇒ Object
Used to manually enable class specific override class.
-
.global_disable_override(overriding_class) ⇒ Object
Used to manually disable a class from overriding any ancestors.
-
.global_override_disables ⇒ Object
Accessor which returns the @global_override_disables array.
-
.included(klass) ⇒ Object
Include callback which adds class methods to the including class.
-
.inherited_override(parent, sub_class) ⇒ Object
Adds inherited overrides up the chain of ancestors.
-
.override_list(klass) ⇒ Object
Returns an OverrideList for
klass
or creates it if it does not already exist. -
.print_overrides(silent = false) ⇒ Object
Prints a summary of the Factory override configuration.
-
.remove_global_disable_override(overriding_class) ⇒ Object
Used to cancel a previous
global_disable_override
. -
.reset_overrides ⇒ Object
Used for testing purposes.
Class Method Details
.[](base_class) ⇒ Object
Accessor which returns the factory override of base_class
.
194 195 196 197 198 199 |
# File 'lib/factory.rb', line 194 def self.[] base_class if @override_lists[base_class.to_s].nil? raise "class called #{base_class} is not registered with the factory." end eval @override_lists[base_class.to_s].get_override end |
.create_override_list(klass, parent = nil) ⇒ Object
Registers a class in the factory by creating it an OverrideList.
139 140 141 142 143 144 |
# File 'lib/factory.rb', line 139 def self.create_override_list klass, parent=nil #:nodoc: parent = parent.to_s unless parent.nil? @override_lists[klass.to_s] ||= OverrideList.new(klass.to_s) @override_lists[klass.to_s].parent ||= parent return @override_lists[klass.to_s] end |
.disable_override(overridden_class, overriding_class) ⇒ Object
Used to manually disable class specific override class.
179 180 181 |
# File 'lib/factory.rb', line 179 def self.disable_override overridden_class, overriding_class Factory.override_list(overridden_class.to_s).remove_override overriding_class.to_s end |
.enable_override(overridden_class, overriding_class) ⇒ Object
Used to manually enable class specific override class.
174 175 176 |
# File 'lib/factory.rb', line 174 def self.enable_override overridden_class, overriding_class Factory.override_list(overridden_class).add_override overriding_class.to_s end |
.global_disable_override(overriding_class) ⇒ Object
Used to manually disable a class from overriding any ancestors.
184 185 186 |
# File 'lib/factory.rb', line 184 def self.global_disable_override overriding_class @global_override_disables << overriding_class.to_s end |
.global_override_disables ⇒ Object
Accessor which returns the @global_override_disables array.
161 162 163 |
# File 'lib/factory.rb', line 161 def self.global_override_disables #:nodoc: @global_override_disables.dup end |
.included(klass) ⇒ Object
Include callback which adds class methods to the including class.
96 97 98 99 |
# File 'lib/factory.rb', line 96 def self.included klass #:nodoc: Factory.create_override_list klass klass.extend Factory::ClassMethods end |
.inherited_override(parent, sub_class) ⇒ Object
Adds inherited overrides up the chain of ancestors.
147 148 149 150 151 152 153 |
# File 'lib/factory.rb', line 147 def self.inherited_override parent, sub_class #:nodoc: override_list = @override_lists[parent.to_s] override_list.add_inherited_override sub_class.to_s if override_list.parent Factory.inherited_override override_list.parent, sub_class.to_s end end |
.override_list(klass) ⇒ Object
Returns an OverrideList for klass
or creates it if it does not already exist.
156 157 158 |
# File 'lib/factory.rb', line 156 def self.override_list klass #:nodoc: @override_lists[klass.to_s] ||= Factory.create_override_list(klass.to_s) end |
.print_overrides(silent = false) ⇒ Object
Prints a summary of the Factory override configuration. Returns the summary as a string. The summary will not be printed if silent
is true.
203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 |
# File 'lib/factory.rb', line 203 def self.print_overrides silent=false s = <<-TXT ******************************** Factory Overrides ******************************** Global Factory Override Disables: #{@global_override_disables.empty? ? 'None' : @global_override_disables.join(', ')} TXT @override_lists.each_value {|ovr_list| s += ovr_list.to_s } puts s unless silent return s end |
.remove_global_disable_override(overriding_class) ⇒ Object
Used to cancel a previous global_disable_override
.
189 190 191 |
# File 'lib/factory.rb', line 189 def self.remove_global_disable_override overriding_class @global_override_disables.delete overriding_class.to_s end |
.reset_overrides ⇒ Object
Used for testing purposes. Resets all manual override arrays.
166 167 168 169 170 171 |
# File 'lib/factory.rb', line 166 def self.reset_overrides #:nodoc: @global_override_disables.clear @override_lists.each_value do |ovr_list| ovr_list.reset_overrides end end |