Class: Smartest::FixtureSet
- Inherits:
-
Object
- Object
- Smartest::FixtureSet
- Defined in:
- lib/smartest/fixture_set.rb
Instance Method Summary collapse
- #add_cleanup(&block) ⇒ Object
-
#initialize(fixture_classes, context:, scope: :test, parent: nil) ⇒ FixtureSet
constructor
A new instance of FixtureSet.
- #resolve(name) ⇒ Object
- #resolve_keywords(names) ⇒ Object
- #run_cleanups ⇒ Object
Constructor Details
#initialize(fixture_classes, context:, scope: :test, parent: nil) ⇒ FixtureSet
Returns a new instance of FixtureSet.
5 6 7 8 9 10 11 12 13 14 15 16 |
# File 'lib/smartest/fixture_set.rb', line 5 def initialize(fixture_classes, context:, scope: :test, parent: nil) @fixture_classes = fixture_classes.to_a @context = context @scope = normalize_scope(scope) @parent = parent @cache = {} @setup_errors = {} @cleanups = [] @resolving = [] build_fixture_index end |
Instance Method Details
#add_cleanup(&block) ⇒ Object
52 53 54 55 56 |
# File 'lib/smartest/fixture_set.rb', line 52 def add_cleanup(&block) raise ArgumentError, "cleanup block is required" unless block @cleanups << block end |
#resolve(name) ⇒ Object
25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
# File 'lib/smartest/fixture_set.rb', line 25 def resolve(name) symbol_name = name.to_sym if @resolving.include?(symbol_name) cycle_start = @resolving.index(symbol_name) raise CircularFixtureDependencyError, @resolving[cycle_start..] + [symbol_name] end definition = @definitions[symbol_name] raise FixtureNotFoundError, symbol_name unless definition return resolve_from_parent(symbol_name, definition) unless definition.scope == @scope return @cache[symbol_name] if @cache.key?(symbol_name) raise @setup_errors[symbol_name] if @setup_errors.key?(symbol_name) @resolving << symbol_name dependencies = resolve_keywords(definition.dependencies) @cache[symbol_name] = @instances[symbol_name].instance_exec(**dependencies, &definition.block) rescue Exception => error raise if Smartest.fatal_exception?(error) @setup_errors[symbol_name] = error if definition&.scope == @scope raise ensure @resolving.pop if @resolving.last == symbol_name end |
#resolve_keywords(names) ⇒ Object
18 19 20 21 22 23 |
# File 'lib/smartest/fixture_set.rb', line 18 def resolve_keywords(names) names.to_h do |name| symbol_name = name.to_sym [symbol_name, resolve(symbol_name)] end end |
#run_cleanups ⇒ Object
58 59 60 61 62 63 64 65 66 67 68 69 70 |
# File 'lib/smartest/fixture_set.rb', line 58 def run_cleanups errors = [] @cleanups.reverse_each do |cleanup| cleanup.call rescue Exception => error raise if Smartest.fatal_exception?(error) errors << error end errors end |