sfctl 0.0.2 → 1.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/Gemfile.lock +31 -5
- data/LICENSE +22 -0
- data/README.md +5 -0
- data/lib/sfctl/cli.rb +1 -1
- data/lib/sfctl/command.rb +3 -1
- data/lib/sfctl/commands/account/assignments.rb +2 -2
- data/lib/sfctl/commands/account/info.rb +2 -2
- data/lib/sfctl/commands/auth/init.rb +2 -2
- data/lib/sfctl/commands/time.rb +2 -0
- data/lib/sfctl/commands/time/connections/add.rb +85 -10
- data/lib/sfctl/commands/time/connections/get.rb +22 -4
- data/lib/sfctl/commands/time/providers/get.rb +1 -1
- data/lib/sfctl/commands/time/providers/set.rb +31 -5
- data/lib/sfctl/commands/time/sync.rb +42 -101
- data/lib/sfctl/harvest/client.rb +44 -0
- data/lib/sfctl/harvest/sync.rb +80 -0
- data/lib/sfctl/starfish/client.rb +53 -0
- data/lib/sfctl/toggl/client.rb +51 -0
- data/lib/sfctl/toggl/sync.rb +105 -0
- data/lib/sfctl/version.rb +1 -1
- data/sfctl.gemspec +32 -5
- metadata +382 -12
- data/lib/sfctl/starfish.rb +0 -51
- data/lib/sfctl/toggl.rb +0 -49
data/lib/sfctl/starfish.rb
DELETED
@@ -1,51 +0,0 @@
|
|
1
|
-
require 'faraday'
|
2
|
-
require 'json'
|
3
|
-
|
4
|
-
module Sfctl
|
5
|
-
module Starfish
|
6
|
-
def self.conn(endpoint, token)
|
7
|
-
raise 'Before continue please pass endpoint and token.' if endpoint.nil? || token.nil?
|
8
|
-
|
9
|
-
headers = {
|
10
|
-
'Content-Type' => 'application/json',
|
11
|
-
'X-Starfish-Auth' => token
|
12
|
-
}
|
13
|
-
Faraday.new(url: "#{endpoint}/api/v1", headers: headers) do |builder|
|
14
|
-
builder.request :retry
|
15
|
-
builder.adapter :net_http
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
|
-
def self.parsed_response(response)
|
20
|
-
[response.status == 200, JSON.parse(response.body)]
|
21
|
-
end
|
22
|
-
|
23
|
-
def self.check_authorization(endpoint, token)
|
24
|
-
response = conn(endpoint, token).get('profile')
|
25
|
-
response.status == 200
|
26
|
-
end
|
27
|
-
|
28
|
-
def self.account_info(endpoint, token)
|
29
|
-
response = conn(endpoint, token).get('profile')
|
30
|
-
parsed_response(response)
|
31
|
-
end
|
32
|
-
|
33
|
-
def self.account_assignments(endpoint, all, token)
|
34
|
-
api_conn = conn(endpoint, token)
|
35
|
-
response = all ? api_conn.get('assignments?all=1') : api_conn.get('assignments')
|
36
|
-
parsed_response(response)
|
37
|
-
end
|
38
|
-
|
39
|
-
def self.next_report(endpoint, token, assignment_id)
|
40
|
-
api_conn = conn(endpoint, token)
|
41
|
-
response = api_conn.get("assignments/#{assignment_id}/next_report")
|
42
|
-
parsed_response(response)
|
43
|
-
end
|
44
|
-
|
45
|
-
def self.update_next_report(endpoint, token, assignment_id, items)
|
46
|
-
api_conn = conn(endpoint, token)
|
47
|
-
response = api_conn.put("assignments/#{assignment_id}/next_report", JSON.generate(items: items))
|
48
|
-
response.status == 204
|
49
|
-
end
|
50
|
-
end
|
51
|
-
end
|
data/lib/sfctl/toggl.rb
DELETED
@@ -1,49 +0,0 @@
|
|
1
|
-
require 'faraday'
|
2
|
-
require 'json'
|
3
|
-
|
4
|
-
module Sfctl
|
5
|
-
module Toggl
|
6
|
-
DEFAULT_API_PATH = 'api/v8/'.freeze
|
7
|
-
REPORTS_API_PATH = 'reports/api/v2/'.freeze
|
8
|
-
|
9
|
-
def self.conn(token, api = 'default')
|
10
|
-
raise 'Please set toggl provider before continue.' if token.nil?
|
11
|
-
|
12
|
-
api_path = api == 'reports' ? REPORTS_API_PATH : DEFAULT_API_PATH
|
13
|
-
|
14
|
-
headers = { 'Content-Type' => 'application/json' }
|
15
|
-
Faraday.new(url: "https://#{token}:api_token@www.toggl.com/#{api_path}", headers: headers) do |builder|
|
16
|
-
builder.request :retry
|
17
|
-
builder.adapter :net_http
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
def self.parsed_response(response)
|
22
|
-
[response.status == 200, JSON.parse(response.body)]
|
23
|
-
end
|
24
|
-
|
25
|
-
def self.workspaces(token)
|
26
|
-
response = conn(token).get('workspaces')
|
27
|
-
parsed_response(response)
|
28
|
-
end
|
29
|
-
|
30
|
-
def self.workspace_projects(token, workspace_id)
|
31
|
-
response = conn(token).get("workspaces/#{workspace_id}/projects")
|
32
|
-
parsed_response(response)
|
33
|
-
end
|
34
|
-
|
35
|
-
def self.project_tasks(token, project_id)
|
36
|
-
response = conn(token).get("workspaces/#{project_id}/tasks")
|
37
|
-
|
38
|
-
return [] if response.body.length.zero?
|
39
|
-
|
40
|
-
parsed_response(response)
|
41
|
-
end
|
42
|
-
|
43
|
-
def self.time_entries(token, params)
|
44
|
-
params[:user_agent] = 'api_test'
|
45
|
-
response = conn(token, 'reports').get('details', params)
|
46
|
-
parsed_response(response)
|
47
|
-
end
|
48
|
-
end
|
49
|
-
end
|