Module: TestBench::Fixture::Actuate::Object

Defined in:
lib/test_bench/fixture/actuate/object.rb

Constant Summary collapse

ModuleError =
::Class.new(RuntimeError)

Class Method Summary collapse

Class Method Details

.assure_included(object, mod) ⇒ Object



37
38
39
40
41
# File 'lib/test_bench/fixture/actuate/object.rb', line 37

def self.assure_included(object, mod)
  if not object.is_a?(mod)
    raise ModuleError, "Object doesn't include module -- #{mod.inspect}"
  end
end

.call(object, *modules, session: nil, &block_actuator) ⇒ Object



7
8
9
10
11
12
13
# File 'lib/test_bench/fixture/actuate/object.rb', line 7

def self.call(object, *modules, session: nil, &block_actuator)
  extend(object, *modules)

  Session.configure(object, session:, attr_name: :test_session)

  block_actuator.(object)
end

.extend(object, *modules) ⇒ Object



15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# File 'lib/test_bench/fixture/actuate/object.rb', line 15

def self.extend(object, *modules)
  if modules.empty?
    fixture_modules = fixture_modules(object)
  else
    fixture_modules = modules.map do |mod|
      assure_included(object, mod)

      fixture_module(mod)
    end
  end

  if fixture_modules.empty?
    raise ModuleError, "No Fixture modules found -- #{object.inspect}"
  end

  fixture_modules.each do |fixture_module|
    object.extend(fixture_module)
  end

  object.extend(Fixture)
end

.fixture_module(object) ⇒ Object



60
61
62
63
64
65
66
67
68
# File 'lib/test_bench/fixture/actuate/object.rb', line 60

def self.fixture_module(object)
  if not fixture_module?(object)
    raise ModuleError, "Couldn't resolve a Fixture module -- #{object.inspect}"
  end

  target = fixture_module_target(object)

  target.const_get(:Fixture, false)
end

.fixture_module?(object) ⇒ Boolean

Returns:

  • (Boolean)


70
71
72
73
74
# File 'lib/test_bench/fixture/actuate/object.rb', line 70

def self.fixture_module?(object)
  target = fixture_module_target(object)

  target.const_defined?(:Fixture, false)
end

.fixture_module_target(object) ⇒ Object



76
77
78
79
80
81
82
# File 'lib/test_bench/fixture/actuate/object.rb', line 76

def self.fixture_module_target(object)
  if object.is_a?(Module)
    object
  else
    object.class
  end
end

.fixture_modules(object) ⇒ Object



43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
# File 'lib/test_bench/fixture/actuate/object.rb', line 43

def self.fixture_modules(object)
  fixture_modules = []

  targets = included_modules(object)

  targets << object

  targets.select do |target|
    if fixture_module?(target)
      fixture_module = fixture_module(target)
      fixture_modules << fixture_module
    end
  end

  fixture_modules
end

.included_modules(object) ⇒ Object



84
85
86
87
# File 'lib/test_bench/fixture/actuate/object.rb', line 84

def self.included_modules(object)
  modules = (object.class.included_modules | object.singleton_class.included_modules) - ::Object.included_modules
  modules.sort_by(&:name)
end