class Pio::Message

Base message class

Public Class Methods

option(name, value: nil, default: nil) click to toggle source
# File lib/pio/message.rb, line 13
def self.option(name, value: nil, default: nil)
  self.options ||= {}
  if value && !value.is_a?(Symbol)
    class_eval { class_attribute name }
    class_eval { __send__("#{name}=", value) }
  end
  self.options.merge! name => { value: value, default: default }
end

Private Instance Methods

parse_options(user_options) click to toggle source

rubocop:disable MethodLength rubocop:disable AbcSize rubocop:disable PerceivedComplexity rubocop:disable CyclomaticComplexity

# File lib/pio/message.rb, line 28
def parse_options(user_options)
  options = {}
  self.class.options.each_pair do |key, attrs|
    if !attrs[:value] && !attrs[:default]
      begin
        options[key] = user_options.fetch(key)
      rescue
        raise "#{key} option is a mandatory"
      end
    elsif attrs[:value] && attrs[:value].is_a?(Symbol)
      options[key] = user_options.fetch(attrs[:value])
    elsif attrs[:value]
      options[key] = user_options[key] || attrs[:value]
    else
      options[key] = user_options[key] || attrs[:default]
    end
  end
  options
end