module ActiveDuty::Initializers::ClassMethods

Public Instance Methods

init_with(*args) click to toggle source
# File lib/active_duty/initializers.rb, line 5
def init_with(*args)
  kwargs = args.extract_options!
  if kwargs.empty?
    init_from_ordered(args)
  else
    init_from_kw(kwargs)
  end
end

Private Instance Methods

init_from_kw(args) click to toggle source

Initialize with keyword args.

{ username: :user } will

def initialize(username:)
  @user = username

{ username: [“Bob”, :user] } will

def initialize(username: "Bob")
  @user = username
# File lib/active_duty/initializers.rb, line 73
      def init_from_kw(args)

        initializer_string = []
        args.each do |key, values|
          str = "#{key}:"
          if values.is_a?(Array) && values.size == 2
            if values[0].is_a?(String)
              str += " \"#{values[0]}\""
            else
              str += "#{values[0]}"
            end
          end
          initializer_string << str
        end
        class_eval <<-METHOD, __FILE__, __LINE__ + 1
            def initialize(#{initializer_string.join(', ')})
              #{args.map { |key, values|
          if values.is_a?(Array)
            "instance_variable_set(:\"@#{values[1]}\", #{key}) 
                  self.class.attr_reader :#{values[1]}"
          else
            "instance_variable_set(:\"@#{values}\", #{key}) 
                  self.class.attr_reader :#{values}"
          end
        }.join("\n")
        }
            end
        METHOD
      end
init_from_ordered(args) click to toggle source

initialize from ordered arguments

init_with :username, :password def initialize(username, password)

@username = username
@password = password

init_with [:username], [:password, nil], [:email, “no email”], [:options, {}] def initialize(username, password = nil, email: “no email”, options = {})

@username = username
@password = password
@email = email
@options = options
# File lib/active_duty/initializers.rb, line 29
      def init_from_ordered(args)
        init_string = []
        args.each do |arg|
          str = ""
          if arg.is_a?(Array)
            if arg.size == 2
              if arg[1].is_a?(String)
                str << "#{arg[0]} = \"#{arg[1]}\""
              else
                str << "#{arg[0]} = #{arg[1]}"
              end
            else
              str << "#{arg[0]}"
            end
          else
            str << "#{arg}"
          end
          init_string << str
        end
        class_eval <<-METHOD, __FILE__, __LINE__ + 1
            def initialize(#{init_string.join(', ')})
              #{args.map { |arg|
          if arg.is_a?(Array)
            "instance_variable_set(:\"@#{arg[0]}\", #{arg[0]}) 
                  self.class.attr_reader :#{arg[0]}"
          else
            "instance_variable_set(:\"@#{arg}\", #{arg}) 
                  self.class.attr_reader :#{arg}"
          end
        }.join("\n")
        }
            end
        METHOD
      end