73 lines
2.0 KiB
Ruby
73 lines
2.0 KiB
Ruby
class LifePex::AchievementDSL::Success
|
|
require_relative "./success/parameter.rb"
|
|
require_relative "./success/setup.rb"
|
|
|
|
include LifePex::AchievementDSL::Dslize
|
|
dslize_input :name
|
|
dslize_input :description
|
|
attr_reader :parameters
|
|
|
|
def initialize(name, &block)
|
|
@name = name
|
|
@parameters = []
|
|
@to_complete = nil
|
|
@description = nil
|
|
instance_eval(&block) if block_given?
|
|
end
|
|
|
|
def parameter(name, type = nil, &block)
|
|
@parameters << Parameter.new(name, type, &block)
|
|
end
|
|
|
|
def to_complete(&block)
|
|
@to_complete = block
|
|
end
|
|
|
|
def get_to_complete
|
|
@to_complete
|
|
end
|
|
|
|
def setup(name, to: 'default', &block)
|
|
Setup.new(self, name, &block)
|
|
# LifePex::AchievementDSL::AVAILABLE_SETUP_SUCCESS[to] ||= {}
|
|
# if block_given?
|
|
# s = Setup.new(self, name, &block)
|
|
# LifePex::AchievementDSL::AVAILABLE_SETUP_SUCCESS[to][name] = s
|
|
# s
|
|
# else
|
|
# LifePex::AchievementDSL::AVAILABLE_SETUP_SUCCESS[to][name]
|
|
# end
|
|
end
|
|
|
|
def static_cast_parameter_value(value: "", type: :String)
|
|
if type == :Integer
|
|
Integer(value)
|
|
elsif type == :Number || type == :Float
|
|
Float(value)
|
|
elsif type == :ArrayOfString
|
|
value.split(',')
|
|
elsif type == :ArrayOfInteger
|
|
raise "Invalid ArrayOfInteger" unless value =~ /^((\d+){1}?,?)*$/
|
|
value.split(',').map(&:to_i)
|
|
elsif type == :ArrayOfNumber
|
|
raise "Invalid ArrayOfNumber" unless value =~ /^((\d+(\.\d+)?){1}?,?)*$/
|
|
value.split(',').map(&:to_f)
|
|
else
|
|
value
|
|
end
|
|
end
|
|
|
|
def format_parameters_hash(parameters)
|
|
parameters.map do |key, value|
|
|
parameter = @parameters.find { |param| param.name == key }
|
|
raise RuntimeError.new "No #{key} parameter found" if parameter.nil?
|
|
begin
|
|
typed_value = static_cast_parameter_value(value: value, type: parameter.type)
|
|
rescue => err
|
|
raise "Invalid value \"#{value}\" for type #{parameter.type} of parameter \"#{parameter.name}\""
|
|
end
|
|
[key, typed_value]
|
|
end.to_h
|
|
end
|
|
end
|