Sha256: 40f4f40fb6abc9dc712f958f4f6be3ea7e3561551e99ff6a88eabcefbaf26c9c

Contents?: true

Size: 848 Bytes

Versions: 2

Compression:

Stored size: 848 Bytes

Contents

require 'commands/map'
require 'commands/bug'
require 'commands/card'
require 'commands/chore'
require 'commands/feature'

module Commands
  class Start
    COMMAND_MAP = Map.new.merge({
      "bug"     => Commands::Bug,
      "chore"   => Commands::Chore,
      "feature" => Commands::Feature,
      /^\d+$/   => Commands::Card
    })
    
    class << self
      def for(*args)
        identifier = args.shift
        construct_instance_for(identifier, args) || 
          raise(ArgumentError, "Unknown card identifier given: #{identifier}")
      end
      
      private
      
      def construct_instance_for(identifier, args)
        if klass=COMMAND_MAP[identifier]
          instance = klass.new(*args)
          instance.story_id = identifier if instance.respond_to?(:story_id=)
          instance
        end
      end
    end
  end

end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
git-pivotal-tracker-0.9.1 lib/commands/start.rb
git-pivotal-tracker-0.9.0 lib/commands/start.rb