Module: Onceler::BasicHelpers::ClassMethods

Defined in:
lib/onceler/basic_helpers.rb

Instance Method Summary collapse

Instance Method Details

#after(*args, &block) ⇒ Object



81
82
83
84
85
86
87
88
89
# File 'lib/onceler/basic_helpers.rb', line 81

def after(*args, &block)
  scope = args.first
  case scope
  when :record, :reset
    onceler(create_own: true).hooks[:after][scope] << block
  else
    super
  end
end

#around(*args) ⇒ Object



91
92
93
94
95
96
97
98
99
100
101
102
# File 'lib/onceler/basic_helpers.rb', line 91

def around(*args, &)
  scope = args.first
  case scope
  when *once_scopes
    around_once(&)
  when :once_and_each
    around_once(&)
    around(:each, &)
  else
    super
  end
end

#around_once(&block) ⇒ Object



34
35
36
37
# File 'lib/onceler/basic_helpers.rb', line 34

def around_once(&block)
  onceler(create_own: true).add_around(block)
  add_onceler_hooks!
end

#before(*args, &block) ⇒ Object



69
70
71
72
73
74
75
76
77
78
79
# File 'lib/onceler/basic_helpers.rb', line 69

def before(*args, &block)
  scope = args.first
  case scope
  when :record, :reset
    onceler(create_own: true).hooks[:before][scope] << block
  when *once_scopes
    before_once(&block)
  else
    super
  end
end

#before_once(&block) ⇒ Object



39
40
41
42
# File 'lib/onceler/basic_helpers.rb', line 39

def before_once(&block)
  onceler(create_own: true) << block
  add_onceler_hooks!
end

#let_once(name, &block) ⇒ Object

Raises:

  • (ArgumentError)


17
18
19
20
21
22
23
24
25
# File 'lib/onceler/basic_helpers.rb', line 17

def let_once(name, &block)
  raise ArgumentError, "wrong number of arguments (0 for 1)" if name.nil?
  raise "#let or #subject called without a block" if block.nil?

  onceler(create_own: true)[name] = block
  add_onceler_hooks!
  @current_let_once = name
  define_method(name) { onceler[name] }
end

#once_scopesObject



44
45
46
# File 'lib/onceler/basic_helpers.rb', line 44

def once_scopes
  [:once]
end

#onceler(create_own: false) ⇒ Object



104
105
106
107
108
109
110
# File 'lib/onceler/basic_helpers.rb', line 104

def onceler(create_own: false)
  if create_own
    @onceler ||= Recorder.new(self)
  else
    @onceler || parent_onceler
  end
end

#parent_oncelerObject



112
113
114
115
116
# File 'lib/onceler/basic_helpers.rb', line 112

def parent_onceler
  return unless superclass.respond_to?(:onceler)

  superclass.onceler
end

#subject_once(name = nil) ⇒ Object

TODO: NamedSubjectPreventSuper



28
29
30
31
32
# File 'lib/onceler/basic_helpers.rb', line 28

def subject_once(name = nil, &)
  name ||= :subject
  let_once(name, &)
  alias_method :subject, name if name != :subject
end