Class: Igniter::Extensions::Contracts::Language::ScalePack::Definition
- Inherits:
-
Object
- Object
- Igniter::Extensions::Contracts::Language::ScalePack::Definition
- Defined in:
- lib/igniter/extensions/contracts/language/scale_pack.rb
Instance Method Summary collapse
- #add(value) ⇒ Object
- #clamp(min, max) ⇒ Object
- #divide_by(value) ⇒ Object
-
#initialize(name:, source_name:) ⇒ Definition
constructor
A new instance of Definition.
- #multiply_by(value) ⇒ Object
- #resolve(source_value) ⇒ Object
- #round(precision = 0) ⇒ Object
- #subtract(value) ⇒ Object
- #validate! ⇒ Object
Constructor Details
#initialize(name:, source_name:) ⇒ Definition
Returns a new instance of Definition.
52 53 54 55 56 |
# File 'lib/igniter/extensions/contracts/language/scale_pack.rb', line 52 def initialize(name:, source_name:) @name = name.to_sym @source_name = source_name.to_sym @steps = [] end |
Instance Method Details
#add(value) ⇒ Object
68 69 70 |
# File 'lib/igniter/extensions/contracts/language/scale_pack.rb', line 68 def add(value) add_step(:add, value) end |
#clamp(min, max) ⇒ Object
76 77 78 79 80 81 82 |
# File 'lib/igniter/extensions/contracts/language/scale_pack.rb', line 76 def clamp(min, max) minimum = Float(min) maximum = Float(max) raise ArgumentError, "scale :#{@name} clamp min cannot exceed max" if minimum > maximum @steps << { operation: :clamp, min: minimum, max: maximum } end |
#divide_by(value) ⇒ Object
58 59 60 61 62 |
# File 'lib/igniter/extensions/contracts/language/scale_pack.rb', line 58 def divide_by(value) raise ArgumentError, "scale :#{@name} divide_by cannot use zero" if Float(value).zero? add_step(:divide_by, value) end |
#multiply_by(value) ⇒ Object
64 65 66 |
# File 'lib/igniter/extensions/contracts/language/scale_pack.rb', line 64 def multiply_by(value) add_step(:multiply_by, value) end |
#resolve(source_value) ⇒ Object
92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 |
# File 'lib/igniter/extensions/contracts/language/scale_pack.rb', line 92 def resolve(source_value) current = Float(source_value) trace = [] @steps.each do |step| before = current current = apply_step(current, step) trace << step.merge(before: before, after: current) end { value: current, source: @source_name, source_value: source_value, steps: trace.freeze } rescue ArgumentError, TypeError { value: 0.0, source: @source_name, source_value: source_value, error: :invalid_numeric_source, steps: trace.freeze } end |
#round(precision = 0) ⇒ Object
84 85 86 |
# File 'lib/igniter/extensions/contracts/language/scale_pack.rb', line 84 def round(precision = 0) @steps << { operation: :round, precision: Integer(precision) } end |
#subtract(value) ⇒ Object
72 73 74 |
# File 'lib/igniter/extensions/contracts/language/scale_pack.rb', line 72 def subtract(value) add_step(:subtract, value) end |
#validate! ⇒ Object
88 89 90 |
# File 'lib/igniter/extensions/contracts/language/scale_pack.rb', line 88 def validate! raise ArgumentError, "scale :#{@name} requires at least one step" if @steps.empty? end |