one_inch_punch 0.2.3 → 0.2.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/History.txt CHANGED
@@ -1,6 +1,12 @@
1
+ == 0.2.4 2008-12-17
2
+
3
+ * 1 tiny enhancement:
4
+ * Status can now be retrieved as simple (only the status) or 'full' (status + time)
5
+ * punch command displays status as YAML unless only retrieving simple status for a single project
6
+
1
7
  == 0.2.3 2008-12-11
2
8
 
3
- * 1 enhancements:
9
+ * 1 enhancement:
4
10
  * Logging a message now automatically adds a time
5
11
  * A time can be specified for the log message (with now as a default)
6
12
  * punch command takes options for message logging
data/bin/punch CHANGED
@@ -33,6 +33,8 @@ BANNER
33
33
  "Use the given time to punch in/out") { |time| OPTIONS[:time] = Time.parse(time) }
34
34
  opts.on('-m', '--message [MESSAGE]', String,
35
35
  "Add the given log message when punching in/out") { |message| OPTIONS[:message] = message }
36
+ opts.on('--full',
37
+ "Show full output for the command") { |full| OPTIONS[:full] = true }
36
38
  opts.on("-h", "--help",
37
39
  "Show this help message.") { puts opts; exit }
38
40
  opts.parse!(ARGV)
@@ -55,11 +57,11 @@ Punch.load
55
57
 
56
58
  commands = {
57
59
  'status' => lambda do |project|
58
- result = Punch.status(project)
59
- if project
60
- puts result.inspect
61
- else
60
+ result = Punch.status(project, OPTIONS)
61
+ if project.nil? or OPTIONS[:full]
62
62
  puts result.to_yaml
63
+ else
64
+ puts result.inspect
63
65
  end
64
66
  end,
65
67
  'total' => lambda do |project|
@@ -5,8 +5,8 @@ class Punch
5
5
  @project = project
6
6
  end
7
7
 
8
- def status
9
- self.class.status(project)
8
+ def status(options = {})
9
+ self.class.status(project, options)
10
10
  end
11
11
 
12
12
  def out?
data/lib/punch/version.rb CHANGED
@@ -2,7 +2,7 @@ class Punch
2
2
  module VERSION #:nodoc:
3
3
  MAJOR = 0
4
4
  MINOR = 2
5
- TINY = 3
5
+ TINY = 4
6
6
 
7
7
  STRING = [MAJOR, MINOR, TINY].join('.')
8
8
  end
data/lib/punch.rb CHANGED
@@ -39,14 +39,22 @@ class Punch
39
39
  end
40
40
  end
41
41
 
42
- def status(project = nil)
43
- return data.keys.inject({}) { |hash, project| hash.merge(project => status(project)) } unless project
42
+ def status(project = nil, options = {})
43
+ if project.is_a?(Hash)
44
+ options = project
45
+ project = nil
46
+ end
47
+
48
+ return data.keys.inject({}) { |hash, project| hash.merge(project => status(project, options)) } unless project
44
49
 
45
50
  project_data = data[project]
46
51
  return nil if !project_data or project_data.empty?
47
52
 
48
53
  time_data = project_data.last
49
- time_data['out'] ? 'out' : 'in'
54
+ status = time_data['out'] ? 'out' : 'in'
55
+ return status unless options[:full]
56
+
57
+ { :status => status, :time => time_data[status] }
50
58
  end
51
59
 
52
60
  def out?(project)
@@ -147,12 +147,12 @@ describe 'punch command' do
147
147
  end
148
148
 
149
149
  it 'should get the status for the requested project' do
150
- Punch.should.receive(:status).with(@project)
150
+ Punch.should.receive(:status).with(@project, {})
151
151
  run_command('status', @project)
152
152
  end
153
153
 
154
154
  it 'should get the status for all projects if none given' do
155
- Punch.should.receive(:status).with(nil)
155
+ Punch.should.receive(:status).with(nil, {})
156
156
  run_command('status')
157
157
  end
158
158
 
@@ -170,6 +170,30 @@ describe 'punch command' do
170
170
  run_command('status')
171
171
  end
172
172
 
173
+ it 'should pass a true full option if specified on the command line (with --full)' do
174
+ Punch.should.receive(:status).with(@project, :full => true)
175
+ run_command('status', @project, '--full')
176
+ end
177
+
178
+ it 'should pass a true full option if specified on the command line (with --full) and no project given' do
179
+ Punch.should.receive(:status).with(nil, :full => true)
180
+ run_command('status', '--full')
181
+ end
182
+
183
+ it 'should output the status as YAML if a full option is given' do
184
+ result = 'status data'
185
+ Punch.stub!(:status).and_return(result)
186
+ self.should.receive(:puts).with(result.to_yaml)
187
+ run_command('status', @project, '--full')
188
+ end
189
+
190
+ it 'should output the status as YAML if not project given even if a full option is given' do
191
+ result = 'status data'
192
+ Punch.stub!(:status).and_return(result)
193
+ self.should.receive(:puts).with(result.to_yaml)
194
+ run_command('status', '--full')
195
+ end
196
+
173
197
  it 'should not write the data' do
174
198
  Punch.should.receive(:write).never
175
199
  run_command('status')
@@ -30,13 +30,38 @@ describe Punch, 'instance' do
30
30
  Punch.stub!(:status).and_return(@status)
31
31
  end
32
32
 
33
+ it 'should accept options' do
34
+ lambda { @punch.status(:full => true) }.should.not.raise(ArgumentError)
35
+ end
36
+
37
+ it 'should not require options' do
38
+ lambda { @punch.status }.should.not.raise(ArgumentError)
39
+ end
40
+
33
41
  it 'should delegate to the class' do
34
42
  Punch.should.receive(:status)
35
43
  @punch.status
36
44
  end
37
45
 
38
46
  it 'should pass the project when delegating to the class' do
39
- Punch.should.receive(:status).with(@project)
47
+ Punch.should.receive(:status) do |proj, _|
48
+ proj.should == @project
49
+ end
50
+ @punch.status
51
+ end
52
+
53
+ it 'should pass the options when delegating to the class' do
54
+ options = { :full => true }
55
+ Punch.should.receive(:status) do |_, opts|
56
+ opts.should == options
57
+ end
58
+ @punch.status(options)
59
+ end
60
+
61
+ it 'should pass an empty hash if no options given' do
62
+ Punch.should.receive(:status) do |_, opts|
63
+ opts.should == {}
64
+ end
40
65
  @punch.status
41
66
  end
42
67
 
data/spec/punch_spec.rb CHANGED
@@ -210,6 +210,38 @@ describe Punch do
210
210
  it 'should return the status of all projects if no project name given' do
211
211
  Punch.status.should == { @projects['out'] => 'out', @projects['in'] => 'in' }
212
212
  end
213
+
214
+ it 'should accept options' do
215
+ lambda { Punch.status('proj', :full => true) }.should.not.raise(ArgumentError)
216
+ end
217
+
218
+ describe 'when given a :full option' do
219
+ it 'should return the status and the time of that status if the project is currently punched in' do
220
+ Punch.status(@projects['in'], :full => true).should == { :status => 'in', :time => @now }
221
+ end
222
+
223
+ it 'should return the status and the time of that status if the project is currently punched out' do
224
+ Punch.status(@projects['out'], :full => true).should == { :status => 'out', :time => @now + 12 }
225
+ end
226
+
227
+ it 'should return nil if project does not exist' do
228
+ Punch.status('other project', :full => true).should.be.nil
229
+ end
230
+
231
+ it 'should return the full status if all projects if nil is given as the project' do
232
+ Punch.status(nil, :full => true).should == {
233
+ @projects['out'] => { :status => 'out', :time => @now + 12 },
234
+ @projects['in'] => { :status => 'in', :time => @now }
235
+ }
236
+ end
237
+
238
+ it 'should return the full status if all projects if no project given' do
239
+ Punch.status(:full => true).should == {
240
+ @projects['out'] => { :status => 'out', :time => @now + 12 },
241
+ @projects['in'] => { :status => 'in', :time => @now }
242
+ }
243
+ end
244
+ end
213
245
  end
214
246
 
215
247
  it 'should indicate whether a project is punched out' do
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: one_inch_punch
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.3
4
+ version: 0.2.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Yossef Mendelssohn
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2008-12-11 00:00:00 -06:00
12
+ date: 2008-12-17 00:00:00 -06:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency