workit 0.0.0

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/bin/workit ADDED
@@ -0,0 +1,11 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ $:.unshift(File.join(File.dirname(File.dirname(__FILE__)), 'lib'))
4
+ begin
5
+ require 'rubygems'
6
+ rescue LoadError
7
+ end
8
+
9
+ require 'workit'
10
+
11
+ Workit::MainCommand.run
data/lib/workit.rb ADDED
@@ -0,0 +1,10 @@
1
+ module Workit
2
+ require 'workit/version'
3
+ require 'workit/model'
4
+ require 'workit/abstract_command'
5
+ require 'workit/start_task_command'
6
+
7
+ class MainCommand < Workit::AbstractCommand
8
+ subcommand 'start', 'Start a task', StartTaskCommand
9
+ end
10
+ end
@@ -0,0 +1,13 @@
1
+ require 'clamp'
2
+ require 'workit/version'
3
+
4
+ module Workit
5
+ class AbstractCommand < Clamp::Command
6
+ option ['-v', '--verbose'], :flag, 'be verbose'
7
+
8
+ option '--version', :flag, 'show version' do
9
+ puts "Workit #{Workit::VERSION}"
10
+ exit(0)
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,26 @@
1
+ require 'data_mapper'
2
+ #require 'mpatch/adapter'
3
+ require 'state_machine'
4
+
5
+ module Workit
6
+ module Model
7
+
8
+ require 'workit/model/task'
9
+ require 'workit/model/span'
10
+
11
+ def self.get_sqlite_db
12
+ if ENV['WORKIT_ENV'] == 'test'
13
+ "/tmp/workit_test.db"
14
+ else
15
+ File.expand_path(File.join(ENV['HOME'], '.workit', 'database.db'))
16
+ end
17
+ end
18
+
19
+ def self.setup
20
+ FileUtils.mkdir_p(File.dirname(get_sqlite_db))
21
+ DataMapper.setup(:default, "sqlite://#{get_sqlite_db}")
22
+ DataMapper.finalize
23
+ DataMapper.auto_upgrade!
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,23 @@
1
+ module Workit
2
+ module Model
3
+ class Span
4
+ include DataMapper::Resource
5
+
6
+ property :id, Serial
7
+ property :started_at, DateTime, :required => true
8
+ property :finished_at, DateTime
9
+
10
+ belongs_to :task
11
+
12
+ before :create, :set_started_at
13
+
14
+ def duration
15
+ (self.finished_at || Time.now).to_time.to_i - self.started_at.to_time.to_i
16
+ end
17
+
18
+ def set_started_at
19
+ self.started_at = Time.now
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,35 @@
1
+ module Workit
2
+ module Model
3
+ class Task
4
+ include DataMapper::Resource
5
+
6
+ property :id, Serial
7
+ property :description, String, :required => true
8
+ property :state, String
9
+
10
+ has n, :spans
11
+
12
+ state_machine :state, :initial => :unstarted do
13
+ event :start do
14
+ transition :unstarted => :started
15
+ end
16
+
17
+ before_transition any => :started do |transition|
18
+ self.spans.create(:started_at => Time.now)
19
+ end
20
+ end
21
+
22
+ def self.can_start?
23
+ self.all(:state => 'started').empty?
24
+ end
25
+
26
+ def self.current
27
+ self.first(:state.not => 'finished')
28
+ end
29
+
30
+ def duration
31
+ self.spans.map(&:duration).inject :+
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,21 @@
1
+ require 'workit/abstract_command'
2
+
3
+ module Workit
4
+ class StartTaskCommand < Workit::AbstractCommand
5
+ parameter 'DESCRIPTION ...', 'description of your task', :attribute_name => :description
6
+
7
+ def execute
8
+ Workit::Model.setup
9
+ if Workit::Model::Task.can_start?
10
+ task = Workit::Model::Task.new(:description => description.join(' '))
11
+ if task.save
12
+ task.start!
13
+ puts "Started task '#{task.description}'"
14
+ end
15
+ else
16
+ puts "'#{Workit::Model::Task.current.description}' is not yet finished"
17
+ exit(1)
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,3 @@
1
+ module Workit
2
+ VERSION = '0.0.0'
3
+ end
metadata ADDED
@@ -0,0 +1,180 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: workit
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.0
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Dennis Walters
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2011-09-19 00:00:00.000000000Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: clamp
16
+ requirement: &12583220 !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ~>
20
+ - !ruby/object:Gem::Version
21
+ version: 0.2.3
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: *12583220
25
+ - !ruby/object:Gem::Dependency
26
+ name: data_mapper
27
+ requirement: &12582760 !ruby/object:Gem::Requirement
28
+ none: false
29
+ requirements:
30
+ - - ~>
31
+ - !ruby/object:Gem::Version
32
+ version: 1.1.0
33
+ type: :runtime
34
+ prerelease: false
35
+ version_requirements: *12582760
36
+ - !ruby/object:Gem::Dependency
37
+ name: dm-sqlite-adapter
38
+ requirement: &12582300 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ~>
42
+ - !ruby/object:Gem::Version
43
+ version: 1.1.0
44
+ type: :runtime
45
+ prerelease: false
46
+ version_requirements: *12582300
47
+ - !ruby/object:Gem::Dependency
48
+ name: state_machine
49
+ requirement: &12581840 !ruby/object:Gem::Requirement
50
+ none: false
51
+ requirements:
52
+ - - ~>
53
+ - !ruby/object:Gem::Version
54
+ version: 1.0.1
55
+ type: :runtime
56
+ prerelease: false
57
+ version_requirements: *12581840
58
+ - !ruby/object:Gem::Dependency
59
+ name: rake
60
+ requirement: &12581380 !ruby/object:Gem::Requirement
61
+ none: false
62
+ requirements:
63
+ - - ~>
64
+ - !ruby/object:Gem::Version
65
+ version: 0.9.2
66
+ type: :development
67
+ prerelease: false
68
+ version_requirements: *12581380
69
+ - !ruby/object:Gem::Dependency
70
+ name: rdoc
71
+ requirement: &12580920 !ruby/object:Gem::Requirement
72
+ none: false
73
+ requirements:
74
+ - - ~>
75
+ - !ruby/object:Gem::Version
76
+ version: '3.8'
77
+ type: :development
78
+ prerelease: false
79
+ version_requirements: *12580920
80
+ - !ruby/object:Gem::Dependency
81
+ name: reek
82
+ requirement: &12580460 !ruby/object:Gem::Requirement
83
+ none: false
84
+ requirements:
85
+ - - ~>
86
+ - !ruby/object:Gem::Version
87
+ version: 1.2.8
88
+ type: :development
89
+ prerelease: false
90
+ version_requirements: *12580460
91
+ - !ruby/object:Gem::Dependency
92
+ name: rspec
93
+ requirement: &12580000 !ruby/object:Gem::Requirement
94
+ none: false
95
+ requirements:
96
+ - - ~>
97
+ - !ruby/object:Gem::Version
98
+ version: 2.6.0
99
+ type: :development
100
+ prerelease: false
101
+ version_requirements: *12580000
102
+ - !ruby/object:Gem::Dependency
103
+ name: coco
104
+ requirement: &12579540 !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - ~>
108
+ - !ruby/object:Gem::Version
109
+ version: 0.5.1
110
+ type: :development
111
+ prerelease: false
112
+ version_requirements: *12579540
113
+ - !ruby/object:Gem::Dependency
114
+ name: cucumber
115
+ requirement: &12579080 !ruby/object:Gem::Requirement
116
+ none: false
117
+ requirements:
118
+ - - ~>
119
+ - !ruby/object:Gem::Version
120
+ version: 1.0.2
121
+ type: :development
122
+ prerelease: false
123
+ version_requirements: *12579080
124
+ - !ruby/object:Gem::Dependency
125
+ name: aruba
126
+ requirement: &12578620 !ruby/object:Gem::Requirement
127
+ none: false
128
+ requirements:
129
+ - - ~>
130
+ - !ruby/object:Gem::Version
131
+ version: 0.4.3
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: *12578620
135
+ description:
136
+ email: dwaltersii@gmail.com
137
+ executables:
138
+ - workit
139
+ extensions: []
140
+ extra_rdoc_files: []
141
+ files:
142
+ - bin/workit
143
+ - lib/workit.rb
144
+ - lib/workit/model.rb
145
+ - lib/workit/version.rb
146
+ - lib/workit/model/span.rb
147
+ - lib/workit/model/task.rb
148
+ - lib/workit/abstract_command.rb
149
+ - lib/workit/start_task_command.rb
150
+ homepage: https://github.com/ess/workit
151
+ licenses: []
152
+ post_install_message:
153
+ rdoc_options:
154
+ - --title
155
+ - workit
156
+ - --main
157
+ - README.rdoc
158
+ - -ri
159
+ require_paths:
160
+ - lib
161
+ - lib
162
+ required_ruby_version: !ruby/object:Gem::Requirement
163
+ none: false
164
+ requirements:
165
+ - - ! '>='
166
+ - !ruby/object:Gem::Version
167
+ version: '0'
168
+ required_rubygems_version: !ruby/object:Gem::Requirement
169
+ none: false
170
+ requirements:
171
+ - - ! '>='
172
+ - !ruby/object:Gem::Version
173
+ version: '0'
174
+ requirements: []
175
+ rubyforge_project:
176
+ rubygems_version: 1.8.10
177
+ signing_key:
178
+ specification_version: 3
179
+ summary: A CLI time tracker
180
+ test_files: []