Skip to content

Commit

Permalink
refactoring list to a command
Browse files Browse the repository at this point in the history
  • Loading branch information
tenderlove committed May 19, 2010
1 parent 4039769 commit d84fc25
Show file tree
Hide file tree
Showing 4 changed files with 126 additions and 20 deletions.
26 changes: 6 additions & 20 deletions bin/geera
Expand Up @@ -81,30 +81,16 @@ when 'take'
command = Geera::Commands::Take.new login, number, geera, ARGV
command.execute!
when 'show'
puts ticket.inspect
command = Geera::Commands::Show.new login, number, geera, ARGV
command.execute!
when 'filters'
puts "# Your filters"
geera.filters.each do |filter|
puts " * #{filter.name.inspect}"
end
command = Geera::Commands::Filters.new login, number, geera, ARGV
command.execute!
when 'list'
number = (login['filters'] && login['filters'][number]) || number

## Ensure that +number+ is actually a number
begin
number = Integer(number)
rescue ArgumentError
number = geera.filters.find { |f| f.name == number }.id
end

tickets = geera.list number
if(tickets.empty?)
puts "No Tickets found"
else
tickets[0..10].each do |ticket|
puts "#{ticket.key.ljust(8)} #{ticket.summary}"
end
end
command = Geera::Commands::List.new login, number, geera, ARGV
command.execute!
when 'create'
fname = File.join(Dir.tmpdir, 'bug.txt')
File.open(fname, 'wb') do |f|
Expand Down
1 change: 1 addition & 0 deletions lib/geera.rb
Expand Up @@ -9,6 +9,7 @@
require 'geera/commands/take'
require 'geera/commands/show'
require 'geera/commands/filters'
require 'geera/commands/list'

module Geera
VERSION = '1.2.2'
Expand Down
29 changes: 29 additions & 0 deletions lib/geera/commands/list.rb
@@ -0,0 +1,29 @@
module Geera
module Commands
class List < Geera::Commands::Command
def self.handle? command
'list' == command
end

def number
## Ensure that +number+ is actually a number
begin
@number = Integer(super)
rescue ArgumentError
@number = geera.filters.find { |f| f.name == super }.id
end
end

def execute!
tickets = geera.list number
if tickets.empty?
puts "No Tickets found"
else
tickets.first(10).each do |ticket|
puts "#{ticket.key.ljust(8)} #{ticket.summary}"
end
end
end
end
end
end
90 changes: 90 additions & 0 deletions test/commands/test_list.rb
@@ -0,0 +1,90 @@
require "test/unit"
require "geera"
require 'flexmock/test_unit'

module Geera
module Commands
class TestList < Test::Unit::TestCase
FakeTicket = Struct.new(:key, :summary)

def test_handle?
assert List.handle?('list')
end

def test_number_with_name
recorder = Object.new
flexmock(recorder) do |thing|
thing.should_receive(:filters).once.and_return(
[Struct.new(:name, :id).new('foo', 10)]
)
end

cmd = List.new(nil, 'foo', recorder, [])
assert_equal 10, cmd.number
end

def test_number
recorder = Object.new
flexmock(recorder) do |thing|
thing.should_receive(:filters).never
end

cmd = List.new(nil, 10, recorder, [])
assert_equal 10, cmd.number
end

def test_execute!
number = 10

recorder = Object.new
flexmock(recorder) do |thing|
thing.should_receive(:list).with(number).once.and_return([
FakeTicket.new('BZ-123', 'hello'),
FakeTicket.new('BZ-124', 'world'),
])
end

cmd = Class.new(List) {
attr_reader :putses
def initialize *args
super
@putses = []
end

def puts string
@putses << string
end
}.new(nil, number, recorder, [])

cmd.execute!
assert_match(/BZ-123/, cmd.putses.first)
assert_match(/hello/, cmd.putses.first)
assert_match(/BZ-124/, cmd.putses[1])
assert_match(/world/, cmd.putses[1])
end

def test_empty_execute
recorder = Object.new
flexmock(recorder) do |thing|
thing.should_receive(:list).with(10).once.and_return([])
end

cmd = Class.new(List) {
attr_reader :putses
def initialize *args
super
@putses = []
end

def puts string
@putses << string
end
}.new(nil, 10, recorder, [])
cmd.execute!

assert_equal ["No Tickets found"], cmd.putses
end
end
end
end

0 comments on commit d84fc25

Please sign in to comment.