rtt 0.0.0.7 → 0.0.0.8
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/Manifest +34 -2
- data/README.rdoc +17 -5
- data/Rakefile +2 -2
- data/USAGE.txt +47 -9
- data/db/rtt.sqlite3 +0 -0
- data/db/rtt2.sqlite3 +0 -0
- data/db/test.sqlite3 +0 -0
- data/lib/rtt.rb +75 -31
- data/lib/rtt/client.rb +17 -0
- data/lib/rtt/{cmd_line_interpreter.rb → cmd_line_parser.rb} +53 -13
- data/lib/rtt/interactive_configurator.rb +162 -0
- data/lib/rtt/project.rb +21 -2
- data/lib/rtt/query_builder.rb +5 -3
- data/lib/rtt/report_generator.rb +70 -50
- data/lib/rtt/storage.rb +1 -1
- data/lib/rtt/task.rb +9 -1
- data/lib/rtt/user.rb +12 -1
- data/rtt.gemspec +10 -7
- data/spec/lib/rtt_spec.rb +5 -5
- data/todo.txt +1 -0
- data/vendor/highline-1.5.2/CHANGELOG +227 -0
- data/vendor/highline-1.5.2/INSTALL +41 -0
- data/vendor/highline-1.5.2/LICENSE +7 -0
- data/vendor/highline-1.5.2/README +63 -0
- data/vendor/highline-1.5.2/Rakefile +82 -0
- data/vendor/highline-1.5.2/TODO +6 -0
- data/vendor/highline-1.5.2/examples/ansi_colors.rb +38 -0
- data/vendor/highline-1.5.2/examples/asking_for_arrays.rb +18 -0
- data/vendor/highline-1.5.2/examples/basic_usage.rb +75 -0
- data/vendor/highline-1.5.2/examples/color_scheme.rb +32 -0
- data/vendor/highline-1.5.2/examples/limit.rb +12 -0
- data/vendor/highline-1.5.2/examples/menus.rb +65 -0
- data/vendor/highline-1.5.2/examples/overwrite.rb +19 -0
- data/vendor/highline-1.5.2/examples/page_and_wrap.rb +322 -0
- data/vendor/highline-1.5.2/examples/password.rb +7 -0
- data/vendor/highline-1.5.2/examples/trapping_eof.rb +22 -0
- data/vendor/highline-1.5.2/examples/using_readline.rb +17 -0
- data/vendor/highline-1.5.2/lib/highline.rb +758 -0
- data/vendor/highline-1.5.2/lib/highline/color_scheme.rb +120 -0
- data/vendor/highline-1.5.2/lib/highline/compatibility.rb +17 -0
- data/vendor/highline-1.5.2/lib/highline/import.rb +43 -0
- data/vendor/highline-1.5.2/lib/highline/menu.rb +395 -0
- data/vendor/highline-1.5.2/lib/highline/question.rb +463 -0
- data/vendor/highline-1.5.2/lib/highline/system_extensions.rb +240 -0
- data/vendor/highline-1.5.2/setup.rb +1360 -0
- data/vendor/highline-1.5.2/test/tc_color_scheme.rb +56 -0
- data/vendor/highline-1.5.2/test/tc_highline.rb +823 -0
- data/vendor/highline-1.5.2/test/tc_import.rb +54 -0
- data/vendor/highline-1.5.2/test/tc_menu.rb +429 -0
- data/vendor/highline-1.5.2/test/ts_all.rb +15 -0
- metadata +65 -15
- data/lib/rtt/user_configurator.rb +0 -24
data/Manifest
CHANGED
|
@@ -5,21 +5,53 @@ Rakefile
|
|
|
5
5
|
USAGE.txt
|
|
6
6
|
bin/rtt
|
|
7
7
|
db/rtt.sqlite3
|
|
8
|
+
db/rtt2.sqlite3
|
|
8
9
|
db/test.sqlite3
|
|
9
10
|
lib/rtt.rb
|
|
10
11
|
lib/rtt/client.rb
|
|
11
|
-
lib/rtt/
|
|
12
|
+
lib/rtt/cmd_line_parser.rb
|
|
12
13
|
lib/rtt/hash_extensions.rb
|
|
14
|
+
lib/rtt/interactive_configurator.rb
|
|
13
15
|
lib/rtt/project.rb
|
|
14
16
|
lib/rtt/query_builder.rb
|
|
15
17
|
lib/rtt/report_generator.rb
|
|
16
18
|
lib/rtt/storage.rb
|
|
17
19
|
lib/rtt/task.rb
|
|
18
20
|
lib/rtt/user.rb
|
|
19
|
-
lib/rtt/user_configurator.rb
|
|
20
21
|
log/rtt.sqlite3
|
|
21
22
|
rtt.gemspec
|
|
22
23
|
spec/datamapper_spec_helper.rb
|
|
23
24
|
spec/lib/rtt/task_spec.rb
|
|
24
25
|
spec/lib/rtt_spec.rb
|
|
25
26
|
tasks/rtt.rake
|
|
27
|
+
todo.txt
|
|
28
|
+
vendor/highline-1.5.2/CHANGELOG
|
|
29
|
+
vendor/highline-1.5.2/INSTALL
|
|
30
|
+
vendor/highline-1.5.2/LICENSE
|
|
31
|
+
vendor/highline-1.5.2/README
|
|
32
|
+
vendor/highline-1.5.2/Rakefile
|
|
33
|
+
vendor/highline-1.5.2/TODO
|
|
34
|
+
vendor/highline-1.5.2/examples/ansi_colors.rb
|
|
35
|
+
vendor/highline-1.5.2/examples/asking_for_arrays.rb
|
|
36
|
+
vendor/highline-1.5.2/examples/basic_usage.rb
|
|
37
|
+
vendor/highline-1.5.2/examples/color_scheme.rb
|
|
38
|
+
vendor/highline-1.5.2/examples/limit.rb
|
|
39
|
+
vendor/highline-1.5.2/examples/menus.rb
|
|
40
|
+
vendor/highline-1.5.2/examples/overwrite.rb
|
|
41
|
+
vendor/highline-1.5.2/examples/page_and_wrap.rb
|
|
42
|
+
vendor/highline-1.5.2/examples/password.rb
|
|
43
|
+
vendor/highline-1.5.2/examples/trapping_eof.rb
|
|
44
|
+
vendor/highline-1.5.2/examples/using_readline.rb
|
|
45
|
+
vendor/highline-1.5.2/lib/highline.rb
|
|
46
|
+
vendor/highline-1.5.2/lib/highline/color_scheme.rb
|
|
47
|
+
vendor/highline-1.5.2/lib/highline/compatibility.rb
|
|
48
|
+
vendor/highline-1.5.2/lib/highline/import.rb
|
|
49
|
+
vendor/highline-1.5.2/lib/highline/menu.rb
|
|
50
|
+
vendor/highline-1.5.2/lib/highline/question.rb
|
|
51
|
+
vendor/highline-1.5.2/lib/highline/system_extensions.rb
|
|
52
|
+
vendor/highline-1.5.2/setup.rb
|
|
53
|
+
vendor/highline-1.5.2/test/tc_color_scheme.rb
|
|
54
|
+
vendor/highline-1.5.2/test/tc_highline.rb
|
|
55
|
+
vendor/highline-1.5.2/test/tc_import.rb
|
|
56
|
+
vendor/highline-1.5.2/test/tc_menu.rb
|
|
57
|
+
vendor/highline-1.5.2/test/ts_all.rb
|
data/README.rdoc
CHANGED
|
@@ -10,11 +10,11 @@ If no <task-name> is specified the last paused one is activated, otherwise a tas
|
|
|
10
10
|
|
|
11
11
|
Then to stop the timer, you can do:
|
|
12
12
|
|
|
13
|
-
$ rtt stop
|
|
13
|
+
$ rtt stop | pause | resume (if there is a paused task)
|
|
14
14
|
|
|
15
15
|
Also, by just typying: 'rtt start', without specifying the task, it would default to the previous task.
|
|
16
16
|
|
|
17
|
-
If you start a task with the same name as one already stored for the very same day, then
|
|
17
|
+
If you start a task with the same name as one already stored for the very same day, then both task will be merged (suming the time of each one of those).
|
|
18
18
|
|
|
19
19
|
Installation
|
|
20
20
|
------------
|
|
@@ -23,12 +23,18 @@ Installation
|
|
|
23
23
|
|
|
24
24
|
After installing the gem you will need to setup some basic information of yours (data to be printed in the reports). With the following command:
|
|
25
25
|
|
|
26
|
-
$ rtt user <user-nick-name>
|
|
26
|
+
$ rtt configure user [<user-nick-name>]
|
|
27
27
|
|
|
28
28
|
Then you will be prompt for First name, Last name, country, city, e-mail, site, etc. Information that will be used to fill-in the reports.
|
|
29
29
|
|
|
30
30
|
The only required field is the Nickname, which identifies the user.
|
|
31
31
|
|
|
32
|
+
To configure the current Project and Client you can use an analogous command:
|
|
33
|
+
|
|
34
|
+
$ rtt configure project | rtt configure client
|
|
35
|
+
|
|
36
|
+
After which, you'll be prompted for the attributes for those models.
|
|
37
|
+
|
|
32
38
|
How to start a task?
|
|
33
39
|
--------------------
|
|
34
40
|
|
|
@@ -37,15 +43,17 @@ $ rtt '<task-name>' ( or the more explicit way: 'rtt start <task-name>')
|
|
|
37
43
|
|
|
38
44
|
That simple!
|
|
39
45
|
|
|
46
|
+
Note: This command will create a task for the current configured user, project and client.
|
|
47
|
+
|
|
40
48
|
More about the API
|
|
41
49
|
------------------
|
|
42
50
|
|
|
43
|
-
|
|
51
|
+
To change the current project. You can do this:
|
|
44
52
|
|
|
45
53
|
$ rtt project <project-name>
|
|
46
54
|
..
|
|
47
55
|
|
|
48
|
-
Anagolous, you can
|
|
56
|
+
Anagolous, you can change the current Client by typing:
|
|
49
57
|
|
|
50
58
|
$ rtt client <client-name>
|
|
51
59
|
|
|
@@ -72,6 +80,10 @@ $ PROJECT=SomeProject rtt report
|
|
|
72
80
|
|
|
73
81
|
This will generate a report for the project 'SomeProject'.
|
|
74
82
|
|
|
83
|
+
$ FROM=20-01-2010 TO=25-01-2010 CLIENT=SomeClient rtt report
|
|
84
|
+
|
|
85
|
+
The output for this command will produce a report only for the task started after 20th of January and before 25th of January and also that were produced for the client called 'SomeClient'.
|
|
86
|
+
|
|
75
87
|
Questions/Comments
|
|
76
88
|
------------------
|
|
77
89
|
|
data/Rakefile
CHANGED
|
@@ -3,13 +3,13 @@ require 'echoe'
|
|
|
3
3
|
|
|
4
4
|
# PACKAGING ============================================================
|
|
5
5
|
|
|
6
|
-
Echoe.new('rtt', '0.0.0.
|
|
6
|
+
Echoe.new('rtt', '0.0.0.8') do |p|
|
|
7
7
|
p.description = 'RTT is a tool for tracking time'
|
|
8
8
|
p.url = 'http://github.com/marklazz/rtt'
|
|
9
9
|
p.author = 'Marcelo Giorgi'
|
|
10
10
|
p.email = 'marklazz.uy@gmail.com'
|
|
11
11
|
p.ignore_pattern = [ 'tmp/*', 'script/*', '*.sh' ]
|
|
12
|
-
p.runtime_dependencies = [ ['highline', ">= 1.5.2"], ['activesupport', '>= 2.3.0'], ['prawn', '>= 0.8.0'], '
|
|
12
|
+
p.runtime_dependencies = [ ['highline', ">= 1.5.2"], ['activesupport', '>= 2.3.0'], ['prawn', '>= 0.8.0'], ['dm-core', '>= 1.0.0'], [ 'dm-migrations', '>= 1.0.0'], 'dm-sqlite-adapter' ]
|
|
13
13
|
p.development_dependencies = [ 'spec' ]
|
|
14
14
|
end
|
|
15
15
|
|
data/USAGE.txt
CHANGED
|
@@ -1,13 +1,51 @@
|
|
|
1
|
+
|
|
1
2
|
RTT is a tool for tracking time. It's primary extend is to be used from command line.
|
|
3
|
+
=====================================================================================
|
|
2
4
|
|
|
3
5
|
Usage:
|
|
4
6
|
|
|
5
|
-
rtt start <task-name>
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
rtt
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
rtt
|
|
7
|
+
- rtt start <task-name> | rtt <task-name>
|
|
8
|
+
|
|
9
|
+
Starts a new task (or existing task with that name) for the current project/client/user.
|
|
10
|
+
|
|
11
|
+
- rtt pause
|
|
12
|
+
|
|
13
|
+
Pauses the current task.
|
|
14
|
+
|
|
15
|
+
- rtt resume
|
|
16
|
+
|
|
17
|
+
Resumes the last paused task.
|
|
18
|
+
|
|
19
|
+
- rtt stop
|
|
20
|
+
|
|
21
|
+
Stops the current task.
|
|
22
|
+
|
|
23
|
+
- rtt user <nickname>
|
|
24
|
+
|
|
25
|
+
Changes the current user. If there is no user with the nickname specified it ask for user information interactivly.
|
|
26
|
+
|
|
27
|
+
- rtt client <client-name>
|
|
28
|
+
|
|
29
|
+
Sets the current client with with name specified (creates one client if there no client stored with that name).
|
|
30
|
+
|
|
31
|
+
- rtt project <project-name>
|
|
32
|
+
|
|
33
|
+
Sets the current project with the specified name.
|
|
34
|
+
|
|
35
|
+
- rtt rename <new-name-current-task>
|
|
36
|
+
|
|
37
|
+
Rename current task
|
|
38
|
+
|
|
39
|
+
- CLIENT=some_client rtt list | CLIENT=some_client PROJECT=some_project rtt list | PROJECT=some_project rtt list
|
|
40
|
+
|
|
41
|
+
List all tasks created for the filters provided.
|
|
42
|
+
|
|
43
|
+
- rtt report <filename>
|
|
44
|
+
|
|
45
|
+
Generates a report to be stored on on the path specified.
|
|
46
|
+
|
|
47
|
+
- rtt configure (client|project|user|task)
|
|
48
|
+
|
|
49
|
+
Allows to change properties of current objects.
|
|
50
|
+
|
|
51
|
+
Enjoy!
|
data/db/rtt.sqlite3
CHANGED
|
Binary file
|
data/db/rtt2.sqlite3
ADDED
|
Binary file
|
data/db/test.sqlite3
CHANGED
|
Binary file
|
data/lib/rtt.rb
CHANGED
|
@@ -10,22 +10,44 @@ module Rtt
|
|
|
10
10
|
|
|
11
11
|
class << self
|
|
12
12
|
|
|
13
|
-
include
|
|
13
|
+
include CmdLineParser
|
|
14
14
|
include QueryBuilder
|
|
15
15
|
include ReportGenerator
|
|
16
16
|
include Storage
|
|
17
17
|
|
|
18
|
+
def update_task(name, conditions)
|
|
19
|
+
extend(InteractiveConfigurator)
|
|
20
|
+
configure_task(name, conditions)
|
|
21
|
+
end
|
|
22
|
+
|
|
18
23
|
def current_user
|
|
19
|
-
User.first :active => true
|
|
24
|
+
active = User.first :active => true
|
|
25
|
+
return active if active.present?
|
|
26
|
+
User.find_or_create_active
|
|
20
27
|
end
|
|
21
28
|
|
|
22
|
-
def
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
user.activate
|
|
29
|
+
def delete(options = {})
|
|
30
|
+
if current_task && options.blank?
|
|
31
|
+
current_task.destroy
|
|
26
32
|
else
|
|
27
|
-
|
|
33
|
+
require 'ruby-debug'; debugger;
|
|
34
|
+
|
|
35
|
+
query(options).map(&:destroy)
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def set_user(nickname = nil, configure = false)
|
|
40
|
+
user = if nickname.blank?
|
|
41
|
+
current_user
|
|
42
|
+
else
|
|
43
|
+
User.first(:nickname => nickname)
|
|
44
|
+
end
|
|
45
|
+
current_user.deactivate if current_user
|
|
46
|
+
if user.blank? || configure
|
|
47
|
+
extend(InteractiveConfigurator)
|
|
28
48
|
configure_user(nickname)
|
|
49
|
+
else
|
|
50
|
+
user.activate
|
|
29
51
|
end
|
|
30
52
|
end
|
|
31
53
|
|
|
@@ -49,10 +71,10 @@ module Rtt
|
|
|
49
71
|
# Rtt.list :from => '2010-5-3', :to => '2010-5-20'
|
|
50
72
|
#
|
|
51
73
|
def list options = {}
|
|
52
|
-
|
|
53
|
-
|
|
74
|
+
say 'Task List'
|
|
75
|
+
say '========='
|
|
54
76
|
query(options).each do |task|
|
|
55
|
-
|
|
77
|
+
say "Name: #{task.name} || Client: #{task.client.name} || Project: #{task.project.name} || User: #{task.user.nickname} || Elapsed time: #{task.duration} #{'[ACTIVE]' if task.active} \n"
|
|
56
78
|
end
|
|
57
79
|
end
|
|
58
80
|
|
|
@@ -72,17 +94,39 @@ module Rtt
|
|
|
72
94
|
# Usage
|
|
73
95
|
#
|
|
74
96
|
# set_client name
|
|
75
|
-
def set_client
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
97
|
+
def set_client(name = nil, configure = false)
|
|
98
|
+
if name.blank? || configure
|
|
99
|
+
extend(InteractiveConfigurator)
|
|
100
|
+
configure_client(name)
|
|
101
|
+
else
|
|
102
|
+
raise ParametersNotMatchCommandSignatureError if name.blank?
|
|
103
|
+
deactivate_current_client if current_client
|
|
104
|
+
client = client(name)
|
|
105
|
+
unless client.active
|
|
106
|
+
client.activate
|
|
107
|
+
else
|
|
108
|
+
client.save
|
|
109
|
+
end
|
|
110
|
+
end
|
|
79
111
|
end
|
|
80
112
|
|
|
81
|
-
def set_project
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
113
|
+
def set_project(project_name = nil, client_name = nil, configure = false)
|
|
114
|
+
if project_name.blank? || configure
|
|
115
|
+
extend(InteractiveConfigurator)
|
|
116
|
+
configure_project(project_name, client_name)
|
|
117
|
+
else
|
|
118
|
+
raise ParametersNotMatchCommandSignatureError if project_name.blank?
|
|
119
|
+
deactivate_current_project if current_project
|
|
120
|
+
client = client(client_name) unless client_name.nil?
|
|
121
|
+
project = Project.first_or_create :name => project_name
|
|
122
|
+
project.client = client
|
|
123
|
+
project.description = project_name
|
|
124
|
+
unless project.active
|
|
125
|
+
project.activate
|
|
126
|
+
else
|
|
127
|
+
project.save
|
|
128
|
+
end
|
|
129
|
+
end
|
|
86
130
|
end
|
|
87
131
|
|
|
88
132
|
# Starts a new timer. It stops the current task if there is any.
|
|
@@ -104,6 +148,18 @@ module Rtt
|
|
|
104
148
|
current_task.stop if current_task
|
|
105
149
|
end
|
|
106
150
|
|
|
151
|
+
def current_client
|
|
152
|
+
Client.first :active => true
|
|
153
|
+
end
|
|
154
|
+
|
|
155
|
+
def current_project
|
|
156
|
+
Project.first :active => true
|
|
157
|
+
end
|
|
158
|
+
|
|
159
|
+
def current_task
|
|
160
|
+
Task.first :active => true
|
|
161
|
+
end
|
|
162
|
+
|
|
107
163
|
private
|
|
108
164
|
|
|
109
165
|
def client(name)
|
|
@@ -121,17 +177,5 @@ module Rtt
|
|
|
121
177
|
project.active = false
|
|
122
178
|
project.save
|
|
123
179
|
end
|
|
124
|
-
|
|
125
|
-
def current_client
|
|
126
|
-
Client.first :active => true
|
|
127
|
-
end
|
|
128
|
-
|
|
129
|
-
def current_project
|
|
130
|
-
Project.first :active => true
|
|
131
|
-
end
|
|
132
|
-
|
|
133
|
-
def current_task
|
|
134
|
-
Task.first :active => true
|
|
135
|
-
end
|
|
136
180
|
end
|
|
137
181
|
end
|
data/lib/rtt/client.rb
CHANGED
|
@@ -12,14 +12,31 @@ module Rtt
|
|
|
12
12
|
property :active, Boolean, :default => false
|
|
13
13
|
has n, :projects #, :through => Resource
|
|
14
14
|
|
|
15
|
+
before :create do |client|
|
|
16
|
+
client.active = true if Client.all.length == 0
|
|
17
|
+
true
|
|
18
|
+
end
|
|
19
|
+
|
|
15
20
|
def self.default
|
|
16
21
|
first_or_create :active => true
|
|
17
22
|
end
|
|
18
23
|
|
|
24
|
+
def self.current_active?
|
|
25
|
+
first :active => true
|
|
26
|
+
end
|
|
27
|
+
|
|
19
28
|
def activate
|
|
29
|
+
deactivate_all
|
|
20
30
|
self.active = true
|
|
21
31
|
self.save
|
|
22
32
|
self
|
|
23
33
|
end
|
|
34
|
+
|
|
35
|
+
def deactivate_all
|
|
36
|
+
Client.all.each do |client|
|
|
37
|
+
client.active = false
|
|
38
|
+
client.save
|
|
39
|
+
end
|
|
40
|
+
end
|
|
24
41
|
end
|
|
25
42
|
end
|
|
@@ -2,18 +2,28 @@
|
|
|
2
2
|
module Rtt
|
|
3
3
|
class Command
|
|
4
4
|
attr_accessor :name, :optional
|
|
5
|
+
|
|
6
|
+
def next_optional
|
|
7
|
+
optional.shift if optional.present?
|
|
8
|
+
end
|
|
9
|
+
end
|
|
10
|
+
class ConfigureCommand < Command
|
|
11
|
+
NUMBER_OF_PARAM_REQUIRED = 1
|
|
12
|
+
end
|
|
13
|
+
class DeleteCommand < Command
|
|
14
|
+
NUMBER_OF_PARAM_REQUIRED = 0
|
|
5
15
|
end
|
|
6
16
|
class PauseCommand < Command
|
|
7
17
|
NUMBER_OF_PARAM_REQUIRED = 0
|
|
8
18
|
end
|
|
9
19
|
class SetProjectCommand < Command
|
|
10
|
-
NUMBER_OF_PARAM_REQUIRED =
|
|
20
|
+
NUMBER_OF_PARAM_REQUIRED = 0
|
|
11
21
|
end
|
|
12
22
|
class SetUserCommand < Command
|
|
13
23
|
NUMBER_OF_PARAM_REQUIRED = 0
|
|
14
24
|
end
|
|
15
25
|
class SetClientCommand < Command
|
|
16
|
-
NUMBER_OF_PARAM_REQUIRED =
|
|
26
|
+
NUMBER_OF_PARAM_REQUIRED = 0
|
|
17
27
|
end
|
|
18
28
|
class StartCommand < Command
|
|
19
29
|
NUMBER_OF_PARAM_REQUIRED = 0
|
|
@@ -32,8 +42,9 @@ module Rtt
|
|
|
32
42
|
end
|
|
33
43
|
class CommandNotFoundError < StandardError; end
|
|
34
44
|
class TaskNotStartedError < StandardError; end
|
|
45
|
+
class ParametersNotMatchCommandSignatureError < StandardError; end
|
|
35
46
|
|
|
36
|
-
module
|
|
47
|
+
module CmdLineParser
|
|
37
48
|
|
|
38
49
|
COMMAND_MAPPING = {
|
|
39
50
|
:project => SetProjectCommand,
|
|
@@ -45,7 +56,9 @@ module Rtt
|
|
|
45
56
|
:list => QueryCommand,
|
|
46
57
|
:pause => PauseCommand,
|
|
47
58
|
:resume => StartCommand,
|
|
48
|
-
:user => SetUserCommand
|
|
59
|
+
:user => SetUserCommand,
|
|
60
|
+
:delete => DeleteCommand,
|
|
61
|
+
:configure => ConfigureCommand
|
|
49
62
|
}
|
|
50
63
|
|
|
51
64
|
def capture(arguments)
|
|
@@ -55,8 +68,14 @@ module Rtt
|
|
|
55
68
|
klazz = COMMAND_MAPPING[operation]
|
|
56
69
|
if arguments.length >= klazz::NUMBER_OF_PARAM_REQUIRED
|
|
57
70
|
command = klazz.new
|
|
58
|
-
|
|
59
|
-
|
|
71
|
+
first_argument = arguments.shift
|
|
72
|
+
if /^--.*$/.match(first_argument)
|
|
73
|
+
command.name = nil
|
|
74
|
+
command.optional = [first_argument]
|
|
75
|
+
else
|
|
76
|
+
command.name = first_argument
|
|
77
|
+
command.optional = arguments if arguments.present?
|
|
78
|
+
end
|
|
60
79
|
Array(command)
|
|
61
80
|
end
|
|
62
81
|
elsif operation.present?
|
|
@@ -71,7 +90,7 @@ module Rtt
|
|
|
71
90
|
end
|
|
72
91
|
|
|
73
92
|
def env_filters
|
|
74
|
-
[ 'client', 'project' ].inject({}) do |filters, key|
|
|
93
|
+
[ 'date', 'nickname', 'from', 'to', 'client', 'project' ].inject({}) do |filters, key|
|
|
75
94
|
filters[key.to_sym] = env_variable(key) if env_variable(key).present?
|
|
76
95
|
filters
|
|
77
96
|
end
|
|
@@ -83,7 +102,7 @@ module Rtt
|
|
|
83
102
|
|
|
84
103
|
def execute(cmds)
|
|
85
104
|
cmds.each { |cmd| execute_single(cmd) }
|
|
86
|
-
|
|
105
|
+
say "Operation(s) succeded."
|
|
87
106
|
rescue => e
|
|
88
107
|
handle_error(e)
|
|
89
108
|
end
|
|
@@ -91,12 +110,14 @@ module Rtt
|
|
|
91
110
|
def execute_single(cmd)
|
|
92
111
|
case cmd
|
|
93
112
|
when SetProjectCommand
|
|
94
|
-
client = cmd.optional if cmd.optional.present?
|
|
113
|
+
client = cmd.optional.shift if cmd.optional.present? && (/^--.*$/.match(cmd.optional.first)).blank?
|
|
95
114
|
set_project(cmd.name, client)
|
|
96
115
|
when SetClientCommand
|
|
97
116
|
set_client(cmd.name)
|
|
98
117
|
when StartCommand
|
|
99
118
|
start(cmd.name)
|
|
119
|
+
when RenameCommand
|
|
120
|
+
rename(cmd.name)
|
|
100
121
|
when PauseCommand
|
|
101
122
|
if current_task.present?
|
|
102
123
|
pause
|
|
@@ -112,6 +133,25 @@ module Rtt
|
|
|
112
133
|
list(env_filters)
|
|
113
134
|
when SetUserCommand
|
|
114
135
|
set_user(cmd.name)
|
|
136
|
+
when DeleteCommand
|
|
137
|
+
delete(env_filters)
|
|
138
|
+
when ConfigureCommand
|
|
139
|
+
case cmd.name.downcase
|
|
140
|
+
when 'task'
|
|
141
|
+
update_task(cmd.optional, env_filters)
|
|
142
|
+
when 'project'
|
|
143
|
+
name = cmd.next_optional
|
|
144
|
+
client = cmd.next_optional
|
|
145
|
+
set_project(name, client, true)
|
|
146
|
+
when 'client'
|
|
147
|
+
name = cmd.next_optional
|
|
148
|
+
set_client(name, true)
|
|
149
|
+
when 'user'
|
|
150
|
+
name = cmd.next_optional
|
|
151
|
+
set_user(name, true)
|
|
152
|
+
else
|
|
153
|
+
raise CommandNotFoundError
|
|
154
|
+
end
|
|
115
155
|
else
|
|
116
156
|
raise CommandNotFoundError
|
|
117
157
|
end
|
|
@@ -122,18 +162,18 @@ module Rtt
|
|
|
122
162
|
when CommandNotFoundError
|
|
123
163
|
return puts_usage
|
|
124
164
|
when TaskNotStartedError
|
|
125
|
-
|
|
165
|
+
say "There is no active task. Pause is not valid at this point."
|
|
126
166
|
end
|
|
127
167
|
end
|
|
128
168
|
|
|
129
169
|
def puts_usage
|
|
130
|
-
|
|
170
|
+
say('')
|
|
131
171
|
File.open(File.join( File.dirname(__FILE__), '..', '..', "USAGE.txt")) do |file|
|
|
132
172
|
while content = file.gets
|
|
133
|
-
|
|
173
|
+
say content
|
|
134
174
|
end
|
|
135
175
|
end
|
|
136
|
-
|
|
176
|
+
say('')
|
|
137
177
|
end
|
|
138
178
|
end
|
|
139
179
|
end
|