toggl_api 0.0.2
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.
- checksums.yaml +7 -0
- data/.gitignore +17 -0
- data/Gemfile +4 -0
- data/LICENSE +20 -0
- data/LICENSE.txt +22 -0
- data/README.md +48 -0
- data/Rakefile +1 -0
- data/lib/toggl_api.rb +7 -0
- data/lib/toggl_api/api/client.rb +42 -0
- data/lib/toggl_api/api/project.rb +46 -0
- data/lib/toggl_api/api/project_user.rb +38 -0
- data/lib/toggl_api/api/tag.rb +24 -0
- data/lib/toggl_api/api/task.rb +38 -0
- data/lib/toggl_api/api/time_entry.rb +73 -0
- data/lib/toggl_api/api/user.rb +46 -0
- data/lib/toggl_api/api/workspace.rb +36 -0
- data/lib/toggl_api/api/workspace_user.rb +32 -0
- data/lib/toggl_api/base.rb +39 -0
- data/lib/toggl_api/error.rb +8 -0
- data/lib/toggl_api/report.rb +30 -0
- data/lib/toggl_api/request.rb +100 -0
- data/lib/toggl_api/version.rb +3 -0
- data/test/base_test.rb +38 -0
- data/test/fixtures/authentication.json +44 -0
- data/test/fixtures/bulk_update_tasks.json +24 -0
- data/test/fixtures/bulk_update_time_entries.json +29 -0
- data/test/fixtures/client.json +11 -0
- data/test/fixtures/client_projects.json +21 -0
- data/test/fixtures/clients.json +15 -0
- data/test/fixtures/create_client.json +8 -0
- data/test/fixtures/create_project.json +13 -0
- data/test/fixtures/create_project_user.json +0 -0
- data/test/fixtures/create_tag.json +7 -0
- data/test/fixtures/create_task.json +10 -0
- data/test/fixtures/create_time_entry.json +13 -0
- data/test/fixtures/invite_users_to_workspace.json +12 -0
- data/test/fixtures/project.json +13 -0
- data/test/fixtures/project_users.json +18 -0
- data/test/fixtures/relations_of_workspace_and_user.json +22 -0
- data/test/fixtures/report_failure.json +8 -0
- data/test/fixtures/report_success.json +6 -0
- data/test/fixtures/reset_api_token.json +2 -0
- data/test/fixtures/signup.json +19 -0
- data/test/fixtures/start_time_entry.json +13 -0
- data/test/fixtures/stop_time_entry.json +13 -0
- data/test/fixtures/task.json +10 -0
- data/test/fixtures/time_entries.json +24 -0
- data/test/fixtures/time_entry.json +15 -0
- data/test/fixtures/update_client.json +9 -0
- data/test/fixtures/update_project.json +12 -0
- data/test/fixtures/update_project_user.json +0 -0
- data/test/fixtures/update_tag.json +7 -0
- data/test/fixtures/update_task.json +13 -0
- data/test/fixtures/update_time_entry.json +15 -0
- data/test/fixtures/update_user.json +31 -0
- data/test/fixtures/update_workspace_user.json +9 -0
- data/test/fixtures/workspace_clients.json +19 -0
- data/test/fixtures/workspace_projects.json +21 -0
- data/test/fixtures/workspace_tasks.json +29 -0
- data/test/fixtures/workspace_users.json +47 -0
- data/test/fixtures/workspaces.json +12 -0
- data/test/helper.rb +10 -0
- data/test/test_client.rb +51 -0
- data/test/test_project.rb +94 -0
- data/test/test_report.rb +53 -0
- data/test/test_tag.rb +30 -0
- data/test/test_task.rb +51 -0
- data/test/test_time_entry.rb +69 -0
- data/test/test_user.rb +53 -0
- data/test/test_workspace.rb +72 -0
- data/toggl_api.gemspec +30 -0
- metadata +260 -0
checksums.yaml
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
---
|
|
2
|
+
SHA1:
|
|
3
|
+
metadata.gz: 7c85d613997879ceca21022bec6c8cf78a0e9938
|
|
4
|
+
data.tar.gz: 463fdeecfe329b23d3a1a742db36f75df98fbe55
|
|
5
|
+
SHA512:
|
|
6
|
+
metadata.gz: 8acad8db1ca172e743b2b21e50374b5b4fe226ea39165c89ce71b548471533849e6910a7f6600c5b2cf3b3d8b23a77e64539c407b7e14882c82ecf80371f19a5
|
|
7
|
+
data.tar.gz: 6c0d282164bc046e159c4ce1e6f8eacbdc9f41594ca5a64037ff77f131b6f98a6b7d319a711a60727c6124091d7fd0c3d5ed19b296e82139b848995fec940ba9
|
data/.gitignore
ADDED
data/Gemfile
ADDED
data/LICENSE
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
The MIT License (MIT)
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2013 Kang Wen
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
|
6
|
+
this software and associated documentation files (the "Software"), to deal in
|
|
7
|
+
the Software without restriction, including without limitation the rights to
|
|
8
|
+
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
|
9
|
+
the Software, and to permit persons to whom the Software is furnished to do so,
|
|
10
|
+
subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
|
17
|
+
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
|
18
|
+
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
|
19
|
+
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
|
20
|
+
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/LICENSE.txt
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
Copyright (c) 2013 Kang Wen
|
|
2
|
+
|
|
3
|
+
MIT License
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
|
6
|
+
a copy of this software and associated documentation files (the
|
|
7
|
+
"Software"), to deal in the Software without restriction, including
|
|
8
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
|
9
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
|
10
|
+
permit persons to whom the Software is furnished to do so, subject to
|
|
11
|
+
the following conditions:
|
|
12
|
+
|
|
13
|
+
The above copyright notice and this permission notice shall be
|
|
14
|
+
included in all copies or substantial portions of the Software.
|
|
15
|
+
|
|
16
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
17
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
18
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
19
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
|
20
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
|
21
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
|
22
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
Toggl API Ruby Client
|
|
2
|
+
=======
|
|
3
|
+
# TogglApi
|
|
4
|
+
|
|
5
|
+
A Ruby interface to the [Toggl](https://github.com/toggl/toggl_api_docs/blob/master/toggl_api.md) and [Reports](https://github.com/toggl/toggl_api_docs/blob/master/reports.md) API
|
|
6
|
+
|
|
7
|
+
## Installation
|
|
8
|
+
|
|
9
|
+
Add this line to your application's Gemfile:
|
|
10
|
+
|
|
11
|
+
gem 'toggl_api'
|
|
12
|
+
|
|
13
|
+
And then execute:
|
|
14
|
+
|
|
15
|
+
$ bundle
|
|
16
|
+
|
|
17
|
+
Or install it yourself as:
|
|
18
|
+
|
|
19
|
+
$ gem install toggl_api
|
|
20
|
+
|
|
21
|
+
## Usage
|
|
22
|
+
|
|
23
|
+
### Base Api
|
|
24
|
+
|
|
25
|
+
base = Toggl::Base.new "2a9800b95ef1d8d2b61d630f5df448f8"
|
|
26
|
+
|
|
27
|
+
base.me(true) ##will return current user data with related data, default is false
|
|
28
|
+
|
|
29
|
+
base.time_entries(Date.today) ##return today's entries
|
|
30
|
+
|
|
31
|
+
entries = base.time_entries(Date.today - 1, Date.today) ##return yesterday's entries
|
|
32
|
+
entries.first.description ##get description for the first entry
|
|
33
|
+
|
|
34
|
+
### Report Api
|
|
35
|
+
|
|
36
|
+
report = Toggl::Report.new "2a9800b95ef1d8d2b61d630f5df448f8"
|
|
37
|
+
|
|
38
|
+
report.weekly('wid')
|
|
39
|
+
report.details('wid')
|
|
40
|
+
report.summary('wid')
|
|
41
|
+
|
|
42
|
+
## Contributing
|
|
43
|
+
|
|
44
|
+
1. Fork it
|
|
45
|
+
2. Create your feature branch (`git checkout -b my-new-feature`)
|
|
46
|
+
3. Commit your changes (`git commit -am 'Add some feature'`)
|
|
47
|
+
4. Push to the branch (`git push origin my-new-feature`)
|
|
48
|
+
5. Create new Pull Request
|
data/Rakefile
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
require "bundler/gem_tasks"
|
data/lib/toggl_api.rb
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
module Toggl
|
|
2
|
+
module Api
|
|
3
|
+
module Client
|
|
4
|
+
|
|
5
|
+
#*name*: The name of the client (string, required, unique in workspace)
|
|
6
|
+
#*wid*: workspace ID, where the client will be used (integer, required)
|
|
7
|
+
# notes: Notes for the client (string, not required)
|
|
8
|
+
# hrate: The hourly rate for this client (float, not required, available only for pro workspaces)
|
|
9
|
+
# cur: The name of the client's currency (string, not required, available only for pro workspaces)
|
|
10
|
+
# at: timestamp that is sent in the response, indicates the time client was last updated
|
|
11
|
+
|
|
12
|
+
def create_client(name, wid,options={})
|
|
13
|
+
post "/clients", {"client" => {"name"=>name,"wid"=>wid}.merge(options)}
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def get_client(cid)
|
|
17
|
+
get "/clients/#{cid}"
|
|
18
|
+
end
|
|
19
|
+
alias :client :get_client
|
|
20
|
+
|
|
21
|
+
def get_clients
|
|
22
|
+
get "/clients"
|
|
23
|
+
end
|
|
24
|
+
alias :clients :get_clients
|
|
25
|
+
|
|
26
|
+
def get_client_projects(cid,active=true)
|
|
27
|
+
get "clients/#{cid}/projects",{:active => active}
|
|
28
|
+
end
|
|
29
|
+
alias :client_projects :get_client_projects
|
|
30
|
+
|
|
31
|
+
def update_client(cid,options)
|
|
32
|
+
options = Hashie::Mash.new options
|
|
33
|
+
put "/clients/#{cid}", (options.key?(:client) ? options : {:client => options})
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def delete_client(cid)
|
|
37
|
+
delete "/clients/#{cid}"
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
module Toggl
|
|
2
|
+
module Api
|
|
3
|
+
module Project
|
|
4
|
+
|
|
5
|
+
# *name*: The name of the project (string, required, unique for client and workspace)
|
|
6
|
+
# *wid*: workspace ID, where the project will be saved (integer, required)
|
|
7
|
+
# cid: client ID(integer, not required)
|
|
8
|
+
# active: whether the project is archived or not (boolean, by default true)
|
|
9
|
+
# is_private: whether project is accessible for only project users or for all workspace users (boolean, default true)
|
|
10
|
+
# template: whether the project can be used as a template (boolean, not required)
|
|
11
|
+
# template_id: id of the template project used on current project's creation
|
|
12
|
+
# billable: whether the project is billable or not (boolean, default true, available only for pro workspaces)
|
|
13
|
+
# auto_estimates: whether the esitamated hours is calculated based on task esimations or is fixed manually(boolean, default false, not required, premium functionality)
|
|
14
|
+
# estimated_hours: if auto_estimates is true then the sum of task estimations is returned, otherwise user inserted hours (integer, not required, premium functionality)
|
|
15
|
+
# at: timestamp that is sent in the response for PUT, indicates the time task was last updated
|
|
16
|
+
|
|
17
|
+
def create_project(name, wid, options={})
|
|
18
|
+
post "/projects", {"project" =>{"name"=>name,"wid"=>wid}.merge(options)}
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def update_project(pid, option)
|
|
22
|
+
options = Hashie::Mash.new options
|
|
23
|
+
put "/projects/#{pid}", (options.key?(:project) ? options : {:project => options})
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def get_project(pid)
|
|
27
|
+
get "/projects/#{pid}"
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
alias :project :get_project
|
|
31
|
+
|
|
32
|
+
def get_project_users(pid)
|
|
33
|
+
get "/projects/#{pid}/project_users"
|
|
34
|
+
end
|
|
35
|
+
alias :project_users :get_project_users
|
|
36
|
+
|
|
37
|
+
def delete_project(pid)
|
|
38
|
+
pid = pid.join(',') if pid.is_a?(Array)
|
|
39
|
+
delete "/projects/#{pid}"
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
alias :bulk_delete_projects :delete_project
|
|
43
|
+
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
end
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
module Toggl
|
|
2
|
+
module Api
|
|
3
|
+
module ProjectUser
|
|
4
|
+
|
|
5
|
+
# *pid*: project ID (integer, required)
|
|
6
|
+
# *uid*: user ID, who is added to the project (integer, required)
|
|
7
|
+
# wid: workspace ID, where the project belongs to (integer, not-required, project's workspace id is used)
|
|
8
|
+
# manager: admin rights for this project (boolean, default false)
|
|
9
|
+
# rate: hourly rate for the project user (float, not-required, only for pro workspaces) in the currency of the project's client or in workspace default currency.
|
|
10
|
+
# at: timestamp that is sent in the response, indicates when the project user was last updated
|
|
11
|
+
#
|
|
12
|
+
# #Workspace id (wid), project id (pid) and user id (uid) can't be changed on update.
|
|
13
|
+
|
|
14
|
+
def create_project_user(pid,uids,options={})
|
|
15
|
+
uids = uids.join(',') if uids.is_a? Array
|
|
16
|
+
post "/project_users", {"project_user"=>{"pid"=>pid,"uid"=>uids,"fields"=>"fullname"}.merge(options)}
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
alias :bulk_create_project_users :create_project_user
|
|
20
|
+
|
|
21
|
+
def update_project_user(uids, options)
|
|
22
|
+
options = Hashie::Mash.new options
|
|
23
|
+
options.merge!({"fields" => "fullname"})
|
|
24
|
+
uids = uids.join(',') if uids.is_a? Array
|
|
25
|
+
put "/project_users/#{uids}", (options.key?(:project_user) ? options : {:project_user => options})
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
alias :bulk_update_project_users :update_project_user
|
|
29
|
+
|
|
30
|
+
def delete_project_user(uids)
|
|
31
|
+
uids = uids.join(',') if uids.is_a? Array
|
|
32
|
+
delete "/project_users/#{uids}"
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
alias :bulk_delete_project_users :delete_project_user
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
module Toggl
|
|
2
|
+
module Api
|
|
3
|
+
module Tag
|
|
4
|
+
|
|
5
|
+
# *name*: The name of the tag (string, required, unique in workspace)
|
|
6
|
+
# *wid*: workspace ID, where the tag will be used (integer, required)
|
|
7
|
+
|
|
8
|
+
def create_tag(name,wid)
|
|
9
|
+
post "/tags", {"tag" => {"name" => name,"wid" =>wid}}
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
#tag wid can't be changed.
|
|
13
|
+
#only name can be updated
|
|
14
|
+
def update_tag_name(tag_id, name)
|
|
15
|
+
put "/tags/#{tag_id}", {"tag" => {"name" => name}}
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def delete_tag(tag_id)
|
|
19
|
+
delete "/tags/#{tag_id}"
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
module Toggl
|
|
2
|
+
module Api
|
|
3
|
+
module Task
|
|
4
|
+
|
|
5
|
+
# *name*: The name of the task (string, required, unique in project)
|
|
6
|
+
# *pid*: project ID for the task (integer, required)
|
|
7
|
+
# wid: workspace ID, where the task will be saved (integer, project's workspace id is used when not supplied)
|
|
8
|
+
# uid: user ID, to whom the task is assigned to (integer, not required)
|
|
9
|
+
# estimated_seconds: estimated duration of task in seconds (integer, not required)
|
|
10
|
+
# active: whether the task is done or not (boolean, by default true)
|
|
11
|
+
# at: timestamp that is sent in the response for PUT, indicates the time task was last updated
|
|
12
|
+
|
|
13
|
+
def create_task(name, pid, options={})
|
|
14
|
+
post "/tasks", {"tag" => {"name" => name,"pid" =>pid}.merge(options)}
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def get_task(tid)
|
|
18
|
+
get "/tasks/#{tid}"
|
|
19
|
+
end
|
|
20
|
+
alias :task :get_task
|
|
21
|
+
|
|
22
|
+
def update_task(tids, options)
|
|
23
|
+
options = Hashie::Mash.new options
|
|
24
|
+
tids = tids.join(',') if tids.is_a?(Array)
|
|
25
|
+
put "/tasks/#{tids}",(options.key?(:task) ? options : {:task => options})
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
alias :bulk_update_tasks :update_task
|
|
29
|
+
|
|
30
|
+
def delete_task(tid)
|
|
31
|
+
tids = tids.join(',') if tids.is_a?(Array)
|
|
32
|
+
delete "/tasks/#{tids}"
|
|
33
|
+
end
|
|
34
|
+
alias :bulk_delete_tasks :delete_task
|
|
35
|
+
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
module Toggl
|
|
2
|
+
module Api
|
|
3
|
+
module TimeEntry
|
|
4
|
+
|
|
5
|
+
# *description*: (string, required)
|
|
6
|
+
# *wid*: workspace ID (integer, required if pid or tid not supplied)
|
|
7
|
+
# *pid*: project ID (integer, not required)
|
|
8
|
+
# *tid*: task ID (integer, not required)
|
|
9
|
+
# *start*: time entry start time (string, required, ISO 8601 date and time)
|
|
10
|
+
# *duration*: time entry duration in seconds. If the time entry is currently running, the duration attribute contains a negative value, denoting the start of the time entry in seconds since epoch (Jan 1 1970). The correct duration can be calculated as current_time + duration, where current_time is the current time in seconds since epoch. (integer, required)
|
|
11
|
+
# *created_with*: the name of your client app (string, required)
|
|
12
|
+
# stop: time entry stop time (string, not required, ISO 8601 date and time)
|
|
13
|
+
# billable: (boolean, not required, default false, available for pro workspaces)
|
|
14
|
+
# tags: a list of tag names (array of strings, not required)
|
|
15
|
+
# duronly: should Toggl show the start and stop time of this time entry? (boolean, not required)
|
|
16
|
+
# at: timestamp that is sent in the response, indicates the time item was last updated
|
|
17
|
+
|
|
18
|
+
def create_time_entry(options)
|
|
19
|
+
options = options.merge({:created_with => "Toggl Api Ruby Gem #{Toggl::VERSION}"})
|
|
20
|
+
post "/time_entries", (options.key?(:time_entry) ? options : {:time_entry => options})
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def start_time_entry(options)
|
|
24
|
+
options = Hashie::Mash.new options
|
|
25
|
+
post "/time_entries/start", (options.key?(:time_entry) ? options : {:time_entry => options})
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def stop_time_entry(tid)
|
|
29
|
+
put "/time_entries/#{tid}/stop"
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def get_time_entry(tid)
|
|
33
|
+
get "/time_entries/#{tid}"
|
|
34
|
+
end
|
|
35
|
+
alias :time_entry :get_time_entry
|
|
36
|
+
|
|
37
|
+
def iso8601_date(date)
|
|
38
|
+
case date
|
|
39
|
+
when Time,Date
|
|
40
|
+
iso = date.to_datetime.iso8601
|
|
41
|
+
when String
|
|
42
|
+
iso = DateTime.parse(date).iso8601
|
|
43
|
+
else
|
|
44
|
+
raise ArgumentError, "Can't convert #{date.class} to ISO-8601 Date/Time"
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
#default return last 9 days time entries
|
|
49
|
+
def get_time_entries(start_date=nil, end_date=nil)
|
|
50
|
+
options = Hash.new
|
|
51
|
+
options["start_date"] = iso8601_date(start_date) if start_date
|
|
52
|
+
options["end_date"] = iso8601_date(end_date) if end_date
|
|
53
|
+
get "/time_entries", options
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
alias :time_entries :get_time_entries
|
|
57
|
+
|
|
58
|
+
def update_time_entry(tid,options)
|
|
59
|
+
tid = tid.join(",") if tid.is_a? Array
|
|
60
|
+
options = Hashie::Mash.new options
|
|
61
|
+
put "/time_entries/#{tid}", (options.key?(:time_entry) ? options : {:time_entry => options})
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
alias :bulk_update_time_entries :update_time_entry
|
|
65
|
+
|
|
66
|
+
def delete_time_entry(tid)
|
|
67
|
+
delete "/time_entries/#{tid}"
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
module Toggl
|
|
2
|
+
module Api
|
|
3
|
+
module User
|
|
4
|
+
|
|
5
|
+
#pass related_data as true to all related data
|
|
6
|
+
def me(related_data=false)
|
|
7
|
+
get "/me",{:with_related_data => related_data }
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
# You can update the following user fields:
|
|
11
|
+
# fullname: string
|
|
12
|
+
# email: string, valid email
|
|
13
|
+
# send_product_emails: boolean
|
|
14
|
+
# send_weekly_report: boolean
|
|
15
|
+
# send_timer_notifications: boolean
|
|
16
|
+
# store_start_and_stop_time: boolean
|
|
17
|
+
# beginning_of_week: integer, in the range of 0-6
|
|
18
|
+
# timezone: string, IANA TZ timezones
|
|
19
|
+
# timeofday_format: string, two formats are supported:
|
|
20
|
+
# "H:mm" for 24-hour format
|
|
21
|
+
# "h:mm A" for 12-hour format (AM/PM)
|
|
22
|
+
# date_format: string, possible values: "YYYY-MM-DD", "DD.MM.YYYY", "DD-MM-YYYY", "MM/DD/YYYY", "DD/MM/YYYY", "MM-DD-YYYY"
|
|
23
|
+
#
|
|
24
|
+
# To change password you have to have the following fields:
|
|
25
|
+
# current_password: string
|
|
26
|
+
# password: string
|
|
27
|
+
def update_me(options={})
|
|
28
|
+
options = Hashie::Mash.new options
|
|
29
|
+
put "/me", (options.key?(:user) ? options : {:user => options})
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
# *email*: a valid email for the user whose account is created (string, required)
|
|
33
|
+
# *password*: password at least 6 characters long (string, required)
|
|
34
|
+
# *timezone*: for example "Etc/UTC" (string, required)
|
|
35
|
+
# *created_with*: in free form, name of the app that signed the user app (string, required)
|
|
36
|
+
def signup(email, password, timezone, created_with="Toggl Api Ruby Gem #{Toggl::VERSION}")
|
|
37
|
+
post "/signups",{"user" => {"email" => email,"password" => "password","timezone" => timezone,"created_with" => created_with}}
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def reset_token
|
|
41
|
+
post "/reset_token"
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
end
|