mytime 0.0.2 → 0.0.3
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/README.md +21 -3
- data/lib/mytime.rb +4 -43
- data/lib/mytime/client.rb +15 -4
- data/lib/mytime/config.rb +59 -0
- data/lib/mytime/setup.rb +8 -4
- data/lib/mytime/timesheet.rb +4 -0
- data/lib/mytime/version.rb +1 -1
- data/test/helper.rb +8 -0
- metadata +6 -3
data/README.md
CHANGED
@@ -18,13 +18,31 @@ Or install it yourself as:
|
|
18
18
|
|
19
19
|
## Usage
|
20
20
|
|
21
|
+
To link to your Freshbooks account (you will need your Freshbooks username and API token):
|
22
|
+
|
23
|
+
$ mytime setup
|
24
|
+
|
25
|
+
To initialize mytime in a project directory:
|
26
|
+
|
27
|
+
$ mytime init
|
28
|
+
|
29
|
+
To see project details:
|
30
|
+
|
31
|
+
$ mytime project
|
32
|
+
|
21
33
|
To list log:
|
22
34
|
|
23
|
-
$ mytime
|
35
|
+
$ mytime status
|
36
|
+
|
37
|
+
To submit custom time entry:
|
24
38
|
|
25
|
-
|
39
|
+
$ mytime commit [hrs] [custom_message]
|
40
|
+
$ mytime commit 1.5 "Add an additional note if desired"
|
26
41
|
|
27
|
-
|
42
|
+
To push your git logs from today for a given project:
|
43
|
+
|
44
|
+
$ mytime push [hrs]
|
45
|
+
$ mytime push 4.5
|
28
46
|
|
29
47
|
## Contributing
|
30
48
|
|
data/lib/mytime.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
require "mytime/version"
|
2
2
|
require "mytime/setup"
|
3
|
+
require "mytime/config"
|
3
4
|
require "mytime/client"
|
4
5
|
require "mytime/timesheet"
|
5
6
|
require 'ruby-freshbooks'
|
@@ -36,7 +37,7 @@ module Mytime
|
|
36
37
|
push(args.first)
|
37
38
|
when :project, :detail, :info
|
38
39
|
puts "Project Details:"
|
39
|
-
puts
|
40
|
+
puts Config.details(Dir.pwd).to_yaml
|
40
41
|
when :debug
|
41
42
|
puts init?
|
42
43
|
else
|
@@ -44,54 +45,14 @@ module Mytime
|
|
44
45
|
end
|
45
46
|
end
|
46
47
|
|
47
|
-
# Save a .mytime config file. Overwrites any existing data
|
48
|
-
#
|
49
|
-
# Options:
|
50
|
-
# contents: Required hash of account data to save
|
51
|
-
#
|
52
|
-
def save(contents)
|
53
|
-
File.open(USER_FILE, 'a') do |file|
|
54
|
-
file.write contents.to_yaml
|
55
|
-
end
|
56
|
-
end
|
57
|
-
|
58
|
-
# Add yaml data to the existing .mytime config file
|
59
|
-
#
|
60
|
-
# Options:
|
61
|
-
# contents: Required hash of data to add to config file
|
62
|
-
#
|
63
|
-
def add(contents)
|
64
|
-
data = YAML.load_file USER_FILE
|
65
|
-
merged_data = data.merge(contents)
|
66
|
-
puts merged_data
|
67
|
-
File.open(USER_FILE, 'w') do |file|
|
68
|
-
file.write merged_data.to_yaml
|
69
|
-
end
|
70
|
-
end
|
71
|
-
|
72
|
-
# Return details of .mytime config file
|
73
|
-
#
|
74
|
-
def config_details(path = "")
|
75
|
-
return unless YAML.load_file(USER_FILE)
|
76
|
-
data = YAML.load_file USER_FILE
|
77
|
-
if path == ""
|
78
|
-
data
|
79
|
-
else
|
80
|
-
data.each do |d|
|
81
|
-
project = data.select{|key, hash| hash["project_path"] == path }
|
82
|
-
return project.first[1] if project.any?
|
83
|
-
end
|
84
|
-
end
|
85
|
-
end
|
86
|
-
|
87
48
|
# Check if mytime is setup
|
88
49
|
def setup?
|
89
|
-
|
50
|
+
Config.details.has_key?("account")
|
90
51
|
end
|
91
52
|
|
92
53
|
# Check if mytime is initialized for this project
|
93
54
|
def init?
|
94
|
-
|
55
|
+
Config.details(Dir.pwd).has_key?("project_id")
|
95
56
|
end
|
96
57
|
|
97
58
|
def finish_setup
|
data/lib/mytime/client.rb
CHANGED
@@ -9,7 +9,7 @@ module Mytime
|
|
9
9
|
# project_id: Optional project_id to restrict data returned
|
10
10
|
#
|
11
11
|
def project(project_id = nil)
|
12
|
-
account =
|
12
|
+
account = Config.details
|
13
13
|
c = FreshBooks::Client.new(account["account"], account["token"])
|
14
14
|
if project_id.nil?
|
15
15
|
c.project.list["projects"]
|
@@ -18,6 +18,16 @@ module Mytime
|
|
18
18
|
end
|
19
19
|
end
|
20
20
|
|
21
|
+
# Get task data from client API
|
22
|
+
#
|
23
|
+
# project_id: Required project_id to restrict data returned
|
24
|
+
#
|
25
|
+
def tasks(project_id)
|
26
|
+
account = Config.details
|
27
|
+
c = FreshBooks::Client.new(account["account"], account["token"])
|
28
|
+
c.task.list :project_id => project_id
|
29
|
+
end
|
30
|
+
|
21
31
|
# Submit new time entry to client API
|
22
32
|
#
|
23
33
|
# Option:
|
@@ -25,15 +35,16 @@ module Mytime
|
|
25
35
|
# message: Optional - message to send with time entry
|
26
36
|
#
|
27
37
|
def submit(hours, message = "")
|
28
|
-
|
38
|
+
|
39
|
+
account = Config.details
|
29
40
|
c = FreshBooks::Client.new(account["account"], account["token"])
|
30
|
-
project =
|
41
|
+
project = Config.details(Dir.pwd)
|
31
42
|
entry = c.time_entry.create(
|
32
43
|
:time_entry => {
|
33
44
|
project_id: project["project_id"],
|
34
45
|
task_id: project["task_id"],
|
35
46
|
hours: hours.to_f,
|
36
|
-
notes: message.to_s,
|
47
|
+
notes: message.gsub(/\n/,"\n\n").to_s,
|
37
48
|
date: Date.today.to_s
|
38
49
|
}
|
39
50
|
)
|
@@ -0,0 +1,59 @@
|
|
1
|
+
module Mytime
|
2
|
+
|
3
|
+
module Config
|
4
|
+
extend self
|
5
|
+
|
6
|
+
# Return details of .mytime config file
|
7
|
+
#
|
8
|
+
def details(path = "")
|
9
|
+
begin
|
10
|
+
data = YAML.load_file USER_FILE
|
11
|
+
if path == ""
|
12
|
+
data
|
13
|
+
else
|
14
|
+
data.each do |d|
|
15
|
+
project = data.select{|key, hash| hash["project_path"] == path }
|
16
|
+
return project.first[1] if project.any?
|
17
|
+
end
|
18
|
+
end
|
19
|
+
rescue Exception => e
|
20
|
+
{}
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
# Save a .mytime config file. Overwrites any existing data
|
25
|
+
#
|
26
|
+
# Options:
|
27
|
+
# contents: Required hash of account data to save
|
28
|
+
#
|
29
|
+
def save(contents)
|
30
|
+
begin
|
31
|
+
File.open(USER_FILE, 'a') do |file|
|
32
|
+
file.write contents.to_yaml
|
33
|
+
end
|
34
|
+
rescue
|
35
|
+
puts "Failed saving information! Please try again."
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
# Add yaml data to the existing .mytime config file
|
40
|
+
#
|
41
|
+
# Options:
|
42
|
+
# contents: Required hash of data to add to config file
|
43
|
+
#
|
44
|
+
def add(contents)
|
45
|
+
begin
|
46
|
+
data = YAML.load_file USER_FILE
|
47
|
+
merged_data = data.merge(contents)
|
48
|
+
puts merged_data
|
49
|
+
File.open(USER_FILE, 'w') do |file|
|
50
|
+
file.write merged_data.to_yaml
|
51
|
+
end
|
52
|
+
rescue
|
53
|
+
puts "Failed adding data. Please try again."
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
end
|
58
|
+
|
59
|
+
end
|
data/lib/mytime/setup.rb
CHANGED
@@ -12,7 +12,7 @@ module Mytime
|
|
12
12
|
account = Hash.new
|
13
13
|
account["account"] = "#{account_name}.freshbooks.com"
|
14
14
|
account["token"] = token
|
15
|
-
|
15
|
+
Config.save(account)
|
16
16
|
end
|
17
17
|
|
18
18
|
# Setup .mytime file to include project specific data
|
@@ -25,14 +25,18 @@ module Mytime
|
|
25
25
|
end
|
26
26
|
project_id = STDIN.gets.chomp
|
27
27
|
|
28
|
-
|
29
|
-
|
28
|
+
puts "Choose Task"
|
29
|
+
tasks = Client.tasks(project_id)['tasks']['task']
|
30
|
+
tasks.each do |task|
|
31
|
+
puts "#{task['task_id']}: #{task['name']}"
|
32
|
+
end
|
33
|
+
task_id = STDIN.gets.chomp
|
30
34
|
|
31
35
|
project_details = Hash.new{|h,k| h[k]=Hash.new(&h.default_proc)}
|
32
36
|
project_details[project_id]["project_path"] = Dir.pwd
|
33
37
|
project_details[project_id]["project_id"] = project_id
|
34
38
|
project_details[project_id]["task_id"] = task_id
|
35
|
-
|
39
|
+
Config.add(project_details)
|
36
40
|
end
|
37
41
|
|
38
42
|
# Set configuration variables to values passed in the command line options
|
data/lib/mytime/timesheet.rb
CHANGED
data/lib/mytime/version.rb
CHANGED
data/test/helper.rb
ADDED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mytime
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-
|
12
|
+
date: 2013-02-08 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: ruby-freshbooks
|
@@ -43,10 +43,12 @@ files:
|
|
43
43
|
- bin/mytime
|
44
44
|
- lib/mytime.rb
|
45
45
|
- lib/mytime/client.rb
|
46
|
+
- lib/mytime/config.rb
|
46
47
|
- lib/mytime/setup.rb
|
47
48
|
- lib/mytime/timesheet.rb
|
48
49
|
- lib/mytime/version.rb
|
49
50
|
- mytime.gemspec
|
51
|
+
- test/helper.rb
|
50
52
|
homepage: ''
|
51
53
|
licenses: []
|
52
54
|
post_install_message:
|
@@ -72,4 +74,5 @@ signing_key:
|
|
72
74
|
specification_version: 3
|
73
75
|
summary: MyTime is a simple command line utility for submitting git commit history
|
74
76
|
to a timesheet. Powered by the Freshbooks API.
|
75
|
-
test_files:
|
77
|
+
test_files:
|
78
|
+
- test/helper.rb
|