togglv9 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,92 @@
1
+ require "simplecov"
2
+ require "coveralls"
3
+ require 'pry'
4
+
5
+ SimpleCov.formatters = [
6
+ SimpleCov::Formatter::HTMLFormatter,
7
+ Coveralls::SimpleCov::Formatter
8
+ ]
9
+ SimpleCov.start
10
+
11
+ require_relative 'togglv9_spec_helper'
12
+ require_relative '../lib/togglv9'
13
+
14
+ # See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration
15
+ RSpec.configure do |config|
16
+ config.filter_run :focus
17
+ config.filter_run_excluding :pro_account unless ENV['TOGGL_PRO_ACCOUNT']
18
+ config.run_all_when_everything_filtered = true
19
+
20
+ config.color = true
21
+ config.tty = true
22
+ config.formatter = :documentation
23
+
24
+ config.order = :random
25
+ Kernel.srand config.seed
26
+
27
+ config.expect_with :rspec do |expectations|
28
+ expectations.include_chain_clauses_in_custom_matcher_descriptions = true
29
+ expectations.syntax = :expect
30
+ end
31
+
32
+ config.mock_with :rspec do |mocks|
33
+ mocks.verify_partial_doubles = true
34
+ end
35
+
36
+ config.before(:suite) do
37
+ toggl = TogglV9::API.new(Testing::API_TOKEN)
38
+ TogglV9SpecHelper.setUp(toggl) # start tests from known state
39
+ end
40
+ end
41
+
42
+ class MockResponse
43
+ # https://github.com/lostisland/faraday/blob/master/lib/faraday/response.rb
44
+
45
+ attr_accessor :status, :headers, :body, :env
46
+
47
+ def initialize(status, headers, body)
48
+ @status = status
49
+ @headers = headers
50
+ @body = body
51
+ end
52
+
53
+ def success?
54
+ @status == 200
55
+ end
56
+ end
57
+
58
+ def mktemp_dir
59
+ dir = File.join(Dir.pwd, "tmp-#{Time.now.to_f}")
60
+ Dir.mkdir(dir)
61
+ dir
62
+ end
63
+
64
+ def file_contains(filename, pattern, maxlen=1000)
65
+ expect(File.exist?(filename))
66
+ contents = File.new(filename).sysread(maxlen)
67
+ expect(contents).to match pattern
68
+ end
69
+
70
+ def file_is_pdf(filename)
71
+ expect(File.exist?(filename))
72
+ first_line = File.foreach(filename).first
73
+ expect(first_line).to eq "%PDF-1.3\n"
74
+ end
75
+
76
+ def file_is_xls(filename)
77
+ expect(File.exist?(filename))
78
+ header = File.new(filename).sysread(8)
79
+ expect(header).to eq ['D0CF11E0A1B11AE1'].pack("H*")
80
+ end
81
+
82
+ class Testing
83
+ API_TOKEN = ENV['TOGGL_API_TOKEN'] || ENV['API_TOKEN'] || '4880adbe1bee9a241fa08070d33bd49f'
84
+ EMAIL = ENV['TOGGL_EMAIL'] || ENV['EMAIL'] || 'togglv9@mailinator.com'
85
+ USERNAME = ENV['TOGGL_USERNAME'] || ENV['USERNAME'] || 'togglv9'
86
+ PASSWORD = ENV['TOGGL_PASSWORD'] || ENV['PASSWORD'] || 'togglv9'
87
+ USER_ID = (ENV['TOGGL_USER_ID'] || ENV['USER_ID'] || 1820939).to_i
88
+
89
+ OTHER_EMAIL = ENV['OTHER_EMAIL'] || 'pr5zwux59w@snkmail.com'
90
+ OTHER_USERNAME = ENV['OTHER_USERNAME'] || 'Pr5zwux59w'
91
+ OTHER_USER_ID = (ENV['OTHER_USER_ID'] || 2450739).to_i
92
+ end
@@ -0,0 +1,75 @@
1
+ # :nocov:
2
+ require_relative '../lib/togglv9'
3
+
4
+ class TogglV9SpecHelper
5
+ include Logging
6
+
7
+ def self.setUp(toggl)
8
+ user = toggl.me(all=true)
9
+ @default_workspace_id = user['default_workspace_id']
10
+
11
+ delete_all_projects(toggl)
12
+ delete_all_clients(toggl)
13
+ delete_all_tags(toggl)
14
+ delete_all_time_entries(toggl)
15
+ delete_all_workspaces(toggl)
16
+ end
17
+
18
+ def self.delete_all_clients(toggl)
19
+ clients = toggl.my_clients
20
+ unless clients.nil?
21
+ client_ids ||= clients.map { |c| c['id'] }
22
+ # logger.debug("Deleting #{client_ids.length} clients")
23
+ client_ids.each do |c_id|
24
+ toggl.delete_client(@default_workspace_id, c_id)
25
+ end
26
+ end
27
+ end
28
+
29
+ def self.delete_all_projects(toggl)
30
+ projects = toggl.projects(@default_workspace_id)
31
+ unless projects.nil?
32
+ project_ids ||= projects.map { |p| p['id'] }
33
+ # logger.debug("Deleting #{project_ids.length} projects")
34
+ return unless project_ids.length > 0
35
+ toggl.delete_projects(@default_workspace_id, project_ids)
36
+ end
37
+ end
38
+
39
+ def self.delete_all_tags(toggl)
40
+ tags = toggl.my_tags
41
+ unless tags.nil?
42
+ tag_ids ||= tags.map { |t| t['id'] }
43
+ # logger.debug("Deleting #{tag_ids.length} tags")
44
+ tag_ids.each do |t_id|
45
+ toggl.delete_tag(@default_workspace_id, t_id)
46
+ end
47
+ end
48
+ end
49
+
50
+ def self.delete_all_time_entries(toggl)
51
+ time_entries = toggl.get_time_entries(
52
+ { :start_date => DateTime.now - 30, :end_date => DateTime.now + 30 } )
53
+ unless time_entries.nil?
54
+ time_entry_ids ||= time_entries.map { |t| t['id'] }
55
+ # logger.debug("Deleting #{time_entry_ids.length} time_entries")
56
+ time_entry_ids.each do |t_id|
57
+ toggl.delete_time_entry(@default_workspace_id, t_id)
58
+ end
59
+ end
60
+ end
61
+
62
+ def self.delete_all_workspaces(toggl)
63
+ user = toggl.me(all=true)
64
+ workspaces = toggl.my_workspaces(user)
65
+ unless workspaces.nil?
66
+ workspace_ids ||= workspaces.map { |w| w['id'] }
67
+ workspace_ids.delete(user['default_workspace_id'])
68
+ # logger.debug("Leaving #{workspace_ids.length} workspaces")
69
+ workspace_ids.each do |w_id|
70
+ toggl.leave_workspace(w_id)
71
+ end
72
+ end
73
+ end
74
+ end
75
+ # :nocov:
data/togglv9.gemspec ADDED
@@ -0,0 +1,34 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'togglv9/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "togglv9"
8
+ spec.version = TogglV9::VERSION
9
+ spec.authors = ["Tomoya Kabe"]
10
+ spec.email = ["limit.usus@gmail.com"]
11
+ spec.summary = %q{Toggl v9 API wrapper (See https://engineering.toggl.com/docs/), originally from kanet77/togglv8}
12
+ spec.homepage = "https://github.com/limitusus/togglv9"
13
+ spec.license = "MIT"
14
+
15
+ spec.files = `git ls-files -z`.split("\x0")
16
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
17
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
18
+ spec.require_paths = ["lib"]
19
+
20
+ spec.requirements << 'A Toggl account (https://toggl.com/)'
21
+
22
+ spec.add_development_dependency "bundler"
23
+ spec.add_development_dependency "rake"
24
+ spec.add_development_dependency "rspec"
25
+ spec.add_development_dependency "rspec-mocks"
26
+ spec.add_development_dependency "fivemat"
27
+ spec.add_development_dependency "coveralls_reborn"
28
+ spec.add_development_dependency "pry"
29
+ # spec.add_development_dependency "awesome_print"
30
+
31
+ spec.add_dependency "logger"
32
+ spec.add_dependency "faraday", '>= 2.0.0'
33
+ spec.add_dependency "oj"
34
+ end
metadata ADDED
@@ -0,0 +1,233 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: togglv9
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Tomoya Kabe
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2024-06-02 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rspec
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rspec-mocks
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: fivemat
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: coveralls_reborn
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: pry
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: logger
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :runtime
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
125
+ - !ruby/object:Gem::Dependency
126
+ name: faraday
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ">="
130
+ - !ruby/object:Gem::Version
131
+ version: 2.0.0
132
+ type: :runtime
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ">="
137
+ - !ruby/object:Gem::Version
138
+ version: 2.0.0
139
+ - !ruby/object:Gem::Dependency
140
+ name: oj
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - ">="
144
+ - !ruby/object:Gem::Version
145
+ version: '0'
146
+ type: :runtime
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - ">="
151
+ - !ruby/object:Gem::Version
152
+ version: '0'
153
+ description:
154
+ email:
155
+ - limit.usus@gmail.com
156
+ executables: []
157
+ extensions: []
158
+ extra_rdoc_files: []
159
+ files:
160
+ - ".gitignore"
161
+ - ".rspec"
162
+ - ".rubocop.yml"
163
+ - Gemfile
164
+ - LICENSE
165
+ - README.md
166
+ - Rakefile
167
+ - lib/logging.rb
168
+ - lib/reportsv2.rb
169
+ - lib/togglv9.rb
170
+ - lib/togglv9/clients.rb
171
+ - lib/togglv9/connection.rb
172
+ - lib/togglv9/dashboard.rb
173
+ - lib/togglv9/project_users.rb
174
+ - lib/togglv9/projects.rb
175
+ - lib/togglv9/tags.rb
176
+ - lib/togglv9/tasks.rb
177
+ - lib/togglv9/time_entries.rb
178
+ - lib/togglv9/togglv9.rb
179
+ - lib/togglv9/users.rb
180
+ - lib/togglv9/version.rb
181
+ - lib/togglv9/workspaces.rb
182
+ - scripts/dump.sh
183
+ - spec/lib/reportsv2_spec.rb
184
+ - spec/lib/togglv9/clients_spec.rb
185
+ - spec/lib/togglv9/dashboard_spec.rb
186
+ - spec/lib/togglv9/projects_spec.rb
187
+ - spec/lib/togglv9/tags_spec.rb
188
+ - spec/lib/togglv9/tasks_spec.rb
189
+ - spec/lib/togglv9/time_entries_spec.rb
190
+ - spec/lib/togglv9/users_spec.rb
191
+ - spec/lib/togglv9/workspaces_spec.rb
192
+ - spec/lib/togglv9_spec.rb
193
+ - spec/spec_helper.rb
194
+ - spec/togglv9_spec_helper.rb
195
+ - togglv9.gemspec
196
+ homepage: https://github.com/limitusus/togglv9
197
+ licenses:
198
+ - MIT
199
+ metadata: {}
200
+ post_install_message:
201
+ rdoc_options: []
202
+ require_paths:
203
+ - lib
204
+ required_ruby_version: !ruby/object:Gem::Requirement
205
+ requirements:
206
+ - - ">="
207
+ - !ruby/object:Gem::Version
208
+ version: '0'
209
+ required_rubygems_version: !ruby/object:Gem::Requirement
210
+ requirements:
211
+ - - ">="
212
+ - !ruby/object:Gem::Version
213
+ version: '0'
214
+ requirements:
215
+ - A Toggl account (https://toggl.com/)
216
+ rubygems_version: 3.2.33
217
+ signing_key:
218
+ specification_version: 4
219
+ summary: Toggl v9 API wrapper (See https://engineering.toggl.com/docs/), originally
220
+ from kanet77/togglv8
221
+ test_files:
222
+ - spec/lib/reportsv2_spec.rb
223
+ - spec/lib/togglv9/clients_spec.rb
224
+ - spec/lib/togglv9/dashboard_spec.rb
225
+ - spec/lib/togglv9/projects_spec.rb
226
+ - spec/lib/togglv9/tags_spec.rb
227
+ - spec/lib/togglv9/tasks_spec.rb
228
+ - spec/lib/togglv9/time_entries_spec.rb
229
+ - spec/lib/togglv9/users_spec.rb
230
+ - spec/lib/togglv9/workspaces_spec.rb
231
+ - spec/lib/togglv9_spec.rb
232
+ - spec/spec_helper.rb
233
+ - spec/togglv9_spec_helper.rb