Sha256: 4facb7e4a7c87fcf71add2221e30d17f986f5c5e2c8764cf95828cd04c9837aa

Contents?: true

Size: 1.69 KB

Versions: 1

Compression:

Stored size: 1.69 KB

Contents

class AngryMob
  class Target
    class Arguments
      attr_reader :args, :actions

      def initialize(*args,&blk)
        @args = extract_args(args,&blk)
        extract_actions!
      end

      def self.parse(input,&blk)
        case input
        when Arguments
          input
        when Array
          if input.size == 1 && Arguments === input.first
            input.first
          else
            self.new(input,&blk)
          end
        else
          self.new(input,&blk)
        end
      end

      # update args without updating actions too
      def update_preserving_actions(other_args)
        other_args = self.class.parse(other_args)
        @args.deep_update(other_args.args)
        self
      end

      def method_missing(meth,*args,&block)
        @args.send(meth,*args,&block)
      end

      def extract_actions!
        @actions = [ @args.delete('actions'), @args.delete('action') ].norm.map {|s| s.to_s}
      end
      def actions=(array)
        @actions = array.norm.map{|s| s.to_s}
      end

      def extract_args(args,&blk)
        args.flatten!

        case args.size
        when 0,1
          if Hash === args[0]
            new_args = AngryHash.__convert_without_dup(args[0])
            new_args.default_object = new_args
          else
            new_args = AngryHash.new
            new_args.default_object = args[0]
          end

        when 2
          new_args = AngryHash.__convert_without_dup(args[1])
          new_args.default_object = args[0]

        else
          raise ArgumentError, "usage: nickname(default_object, [ :optional_hash_of => opts ])"
        end

        new_args.__eval_as_dsl(&blk) if block_given?

        new_args
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
angry_mob-0.1.0 lib/angry_mob/target/arguments.rb