Class: Deadlift::Base

Inherits:
Object
  • Object
show all
Defined in:
lib/deadlift/base.rb

Defined Under Namespace

Classes: NullResult

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(params) ⇒ Base

Returns a new instance of Base.



26
27
28
29
30
31
# File 'lib/deadlift/base.rb', line 26

def initialize(params)
  klass = self.class
  @params = params
  @barbell = klass.barbell(@params)
  klass.get_default_trainers.each{|trainer| add_trainer(trainer)}
end

Instance Attribute Details

#barbellObject (readonly)

Returns the value of attribute barbell.



3
4
5
# File 'lib/deadlift/base.rb', line 3

def barbell
  @barbell
end

Class Method Details

.barbell(params = {}) ⇒ Object



5
6
7
# File 'lib/deadlift/base.rb', line 5

def self.barbell(params = {})
  Deadlift::Barbell::Default.new(params)
end

.default_trainers(*trainers) ⇒ Object



22
23
24
# File 'lib/deadlift/base.rb', line 22

def self.default_trainers(*trainers)
  @default_trainers = trainers
end

.get_default_trainersObject



18
19
20
# File 'lib/deadlift/base.rb', line 18

def self.get_default_trainers
  Array(@default_trainers)
end

.validate(*messages) ⇒ Object



9
10
11
12
# File 'lib/deadlift/base.rb', line 9

def self.validate(*messages)
  @validations ||= []
  validations.concat messages
end

.validationsObject



14
15
16
# File 'lib/deadlift/base.rb', line 14

def self.validations
  @validations
end

Instance Method Details

#add_trainer(*trainers) ⇒ Object



33
34
35
36
# File 'lib/deadlift/base.rb', line 33

def add_trainer(*trainers)
  self.trainers.concat trainers
  self
end

#barbell_approved?Boolean

Returns:

  • (Boolean)


65
66
67
68
69
70
71
# File 'lib/deadlift/base.rb', line 65

def barbell_approved?
  return false unless barbell.approved?
  Array(self.class.validations).each do |message|
    self.send message
  end
  Array(barbell.errors).empty?
end

#interactionObject



82
83
84
# File 'lib/deadlift/base.rb', line 82

def interaction
  self.class.name.demodulize.underscore.to_sym
end

#perform_and_report_for_valid(&block) ⇒ Object



38
39
40
41
42
43
44
45
# File 'lib/deadlift/base.rb', line 38

def perform_and_report_for_valid(&block)
  if barbell_approved?
    yield
    report :success
  else
    report :failure
  end
end

#performanceObject



73
74
75
# File 'lib/deadlift/base.rb', line 73

def performance
  @performance ||= Deadlift::Performance.new(barbell, result, interaction)
end

#report(type) ⇒ Object



51
52
53
54
55
56
# File 'lib/deadlift/base.rb', line 51

def report(type)
  trainers.each do |trainer|
    trainer.public_send("#{type}", performance)
  end
  nil
end

#report_progress(performance) ⇒ Object



58
59
60
61
62
63
# File 'lib/deadlift/base.rb', line 58

def report_progress(performance)
  trainers.each do |trainer|
    trainer.public_send(:progress, performance)
  end
  nil
end

#resultObject

Override if needed



78
79
80
# File 'lib/deadlift/base.rb', line 78

def result
  NullResult.new
end

#trainersObject



47
48
49
# File 'lib/deadlift/base.rb', line 47

def trainers
  @trainers ||= []
end