timetree 0.2.0 → 1.0.0

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.
@@ -1,5 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'timetree/models/base_model'
4
+
3
5
  module TimeTree
4
6
  # Model for TimeTree color theme.
5
7
  class Label < BaseModel
@@ -1,5 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'timetree/models/base_model'
4
+
3
5
  module TimeTree
4
6
  # Model for TimeTree user.
5
7
  class User < BaseModel
@@ -0,0 +1,256 @@
1
+ # frozen_string_literal: true
2
+
3
+ module TimeTree
4
+ module OAuthApp
5
+ # TimeTree API OAuthApp client.
6
+ class Client < BaseClient
7
+ # @return [String]
8
+ attr_reader :token
9
+
10
+ # @param token [String] a TimeTree's access token.
11
+ def initialize(token = nil)
12
+ @token = token || TimeTree.configuration.oauth_app_token
13
+ check_token
14
+ @http_cmd = HttpCommand.new(API_HOST, self)
15
+ end
16
+
17
+ #
18
+ # Get current user information.
19
+ #
20
+ # @return [TimeTree::User]
21
+ # @raise [TimeTree::ApiError] if the http response status will not success.
22
+ # @since 0.0.1
23
+ def current_user
24
+ res = @http_cmd.get '/user'
25
+ raise ApiError.new(res) if res.status != 200
26
+
27
+ to_model res.body[:data]
28
+ end
29
+
30
+ #
31
+ # Get a single calendar's information.
32
+ #
33
+ # @param cal_id [String] calendar's id.
34
+ # @param include_relationships [Array<symbol>]
35
+ # includes association's object in the response.
36
+ # @return [TimeTree::Calendar]
37
+ # @raise [TimeTree::Error] if the cal_id arg is empty.
38
+ # @raise [TimeTree::ApiError] if the http response status will not success.
39
+ # @since 0.0.1
40
+ def calendar(cal_id, include_relationships: nil)
41
+ check_calendar_id cal_id
42
+ params = relationships_params(include_relationships, Calendar::RELATIONSHIPS)
43
+ res = @http_cmd.get "/calendars/#{cal_id}", params
44
+ raise ApiError.new(res) if res.status != 200
45
+
46
+ to_model(res.body[:data], included: res.body[:included])
47
+ end
48
+
49
+ #
50
+ # Get calendar list that current user can access.
51
+ #
52
+ # @param include_relationships [Array<symbol>]
53
+ # includes association's object in the response.
54
+ # @return [Array<TimeTree::Calendar>]
55
+ # @raise [TimeTree::ApiError] if the http response status will not success.
56
+ # @since 0.0.1
57
+ def calendars(include_relationships: nil)
58
+ params = relationships_params(include_relationships, Calendar::RELATIONSHIPS)
59
+ res = @http_cmd.get '/calendars', params
60
+ raise ApiError.new(res) if res.status != 200
61
+
62
+ included = res.body[:included]
63
+ res.body[:data].map { |item| to_model(item, included: included) }
64
+ end
65
+
66
+ #
67
+ # Get a calendar's label information used in event.
68
+ #
69
+ # @param cal_id [String] calendar's id.
70
+ # @return [Array<TimeTree::Label>]
71
+ # @raise [TimeTree::Error] if the cal_id arg is empty.
72
+ # @raise [TimeTree::ApiError] if the http response status will not success.
73
+ # @since 0.0.1
74
+ def calendar_labels(cal_id)
75
+ check_calendar_id cal_id
76
+ res = @http_cmd.get "/calendars/#{cal_id}/labels"
77
+ raise ApiError.new(res) if res.status != 200
78
+
79
+ res.body[:data].map { |item| to_model(item) }
80
+ end
81
+
82
+ #
83
+ # Get a calendar's member information.
84
+ #
85
+ # @param cal_id [String] calendar's id.
86
+ # @return [Array<TimeTree::User>]
87
+ # @raise [TimeTree::Error] if the cal_id arg is empty.
88
+ # @raise [TimeTree::ApiError] if the http response status will not success.
89
+ # @since 0.0.1
90
+ def calendar_members(cal_id)
91
+ check_calendar_id cal_id
92
+ res = @http_cmd.get "/calendars/#{cal_id}/members"
93
+ raise ApiError.new(res) if res.status != 200
94
+
95
+ res.body[:data].map { |item| to_model item }
96
+ end
97
+
98
+ #
99
+ # Get the event's information.
100
+ #
101
+ # @param cal_id [String] calendar's id.
102
+ # @param event_id [String] event's id.
103
+ # @param include_relationships [Array<symbol>]
104
+ # includes association's object in the response.
105
+ # @return [TimeTree::Event]
106
+ # @raise [TimeTree::Error] if the cal_id arg is empty.
107
+ # @raise [TimeTree::Error] if the event_id arg is empty.
108
+ # @raise [TimeTree::ApiError] if the http response status will not success.
109
+ # @since 0.0.1
110
+ def event(cal_id, event_id, include_relationships: nil)
111
+ check_calendar_id cal_id
112
+ check_event_id event_id
113
+ params = relationships_params(include_relationships, Event::RELATIONSHIPS)
114
+ res = @http_cmd.get "/calendars/#{cal_id}/events/#{event_id}", params
115
+ raise ApiError.new(res) if res.status != 200
116
+
117
+ ev = to_model(res.body[:data], included: res.body[:included])
118
+ ev.calendar_id = cal_id
119
+ ev
120
+ end
121
+
122
+ #
123
+ # Get the events' information after a request date.
124
+ #
125
+ # @param cal_id[String] calendar's id.
126
+ # @param days [Integer] The number of days to get.
127
+ # @param timezone [String] Timezone.
128
+ # @param include_relationships [Array<symbol>]
129
+ # includes association's object in the response.
130
+ # @return [Array<TimeTree::Event>]
131
+ # @raise [TimeTree::Error] if the cal_id arg is empty.
132
+ # @raise [TimeTree::ApiError] if the http response status will not success.
133
+ # @since 0.0.1
134
+ def upcoming_events(cal_id, days: 7, timezone: 'UTC', include_relationships: nil)
135
+ check_calendar_id cal_id
136
+ params = relationships_params(include_relationships, Event::RELATIONSHIPS)
137
+ params.merge!(days: days, timezone: timezone)
138
+ res = @http_cmd.get "/calendars/#{cal_id}/upcoming_events", params
139
+ raise ApiError.new(res) if res.status != 200
140
+
141
+ included = res.body[:included]
142
+ res.body[:data].map do |item|
143
+ ev = to_model(item, included: included)
144
+ ev.calendar_id = cal_id
145
+ ev
146
+ end
147
+ end
148
+
149
+ #
150
+ # Creates an event to the calendar.
151
+ #
152
+ # @param cal_id [String] calendar's id.
153
+ # @param params [Hash] TimeTree request body format.
154
+ # @return [TimeTree::Event]
155
+ # @raise [TimeTree::Error] if the cal_id arg is empty.
156
+ # @raise [TimeTree::ApiError] if the http response status will not success.
157
+ # @since 0.0.1
158
+ def create_event(cal_id, params)
159
+ check_calendar_id cal_id
160
+ res = @http_cmd.post "/calendars/#{cal_id}/events", params
161
+ raise ApiError.new(res) if res.status != 201
162
+
163
+ ev = to_model res.body[:data]
164
+ ev.calendar_id = cal_id
165
+ ev
166
+ end
167
+
168
+ #
169
+ # Updates an event.
170
+ #
171
+ # @param cal_id [String] calendar's id.
172
+ # @param event_id [String] event's id.
173
+ # @param params [Hash]
174
+ # event's information specified in TimeTree request body format.
175
+ # @return [TimeTree::Event]
176
+ # @raise [TimeTree::Error] if the cal_id arg is empty.
177
+ # @raise [TimeTree::Error] if the event_id arg is empty.
178
+ # @raise [TimeTree::ApiError] if the http response status will not success.
179
+ # @since 0.0.1
180
+ def update_event(cal_id, event_id, params)
181
+ check_calendar_id cal_id
182
+ check_event_id event_id
183
+ res = @http_cmd.put "/calendars/#{cal_id}/events/#{event_id}", params
184
+ raise ApiError.new(res) if res.status != 200
185
+
186
+ ev = to_model res.body[:data]
187
+ ev.calendar_id = cal_id
188
+ ev
189
+ end
190
+
191
+ #
192
+ # Deletes an event.
193
+ #
194
+ # @param cal_id [String] calendar's id.
195
+ # @param event_id [String] event's id.
196
+ # @return [true] if the operation succeeded.
197
+ # @raise [TimeTree::Error] if the cal_id arg is empty.
198
+ # @raise [TimeTree::Error] if the event_id arg is empty.
199
+ # @raise [TimeTree::ApiError] if the http response status will not success.
200
+ # @since 0.0.1
201
+ def delete_event(cal_id, event_id)
202
+ check_calendar_id cal_id
203
+ check_event_id event_id
204
+ res = @http_cmd.delete "/calendars/#{cal_id}/events/#{event_id}"
205
+ raise ApiError.new(res) if res.status != 204
206
+
207
+ true
208
+ end
209
+
210
+ #
211
+ # Creates comment to an event.
212
+ #
213
+ # @param cal_id [String] calendar's id.
214
+ # @param event_id [String] event's id.
215
+ # @param params [Hash]
216
+ # comment's information specified in TimeTree request body format.
217
+ # @return [TimeTree::Activity]
218
+ # @raise [TimeTree::Error] if the cal_id arg is empty.
219
+ # @raise [TimeTree::Error] if the event_id arg is empty.
220
+ # @raise [TimeTree::ApiError] if the http response status is not success.
221
+ # @since 0.0.1
222
+ def create_activity(cal_id, event_id, params)
223
+ check_calendar_id cal_id
224
+ check_event_id event_id
225
+ res = @http_cmd.post "/calendars/#{cal_id}/events/#{event_id}/activities", params
226
+ raise ApiError.new(res) if res.status != 201
227
+
228
+ activity = to_model res.body[:data]
229
+ activity.calendar_id = cal_id
230
+ activity.event_id = event_id
231
+ activity
232
+ end
233
+
234
+ def inspect
235
+ limit_info = nil
236
+ if defined?(@ratelimit_limit) && @ratelimit_limit
237
+ limit_info = " ratelimit:#{ratelimit_remaining}/#{ratelimit_limit}"
238
+ end
239
+ if defined?(@ratelimit_reset_at) && @ratelimit_reset_at
240
+ limit_info = "#{limit_info}, reset_at:#{ratelimit_reset_at.strftime('%m/%d %R')}"
241
+ end
242
+ "\#<#{self.class}:#{object_id}#{limit_info}>"
243
+ end
244
+
245
+ private
246
+
247
+ def check_token
248
+ check_required_property(@token, 'token')
249
+ end
250
+
251
+ def check_calendar_id(value)
252
+ check_required_property(value, 'calendar_id')
253
+ end
254
+ end
255
+ end
256
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module TimeTree
4
- VERSION = '0.2.0'
4
+ VERSION = '1.0.0'
5
5
  end
@@ -28,15 +28,14 @@ Gem::Specification.new do |spec|
28
28
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
29
29
  spec.require_paths = ['lib']
30
30
 
31
- spec.add_runtime_dependency 'faraday', '~> 1.0.1'
32
- spec.add_runtime_dependency 'faraday_middleware', '~> 1.0.0'
33
- spec.add_runtime_dependency 'zeitwerk', '~> 2.3.0'
31
+ spec.add_runtime_dependency 'faraday', '>= 1.0.1'
32
+ spec.add_runtime_dependency 'faraday_middleware', '>= 1.0.0'
33
+ spec.add_runtime_dependency 'jwt', '>= 2.2.2'
34
34
 
35
- spec.add_development_dependency 'bundler', '~> 2.0'
36
- spec.add_development_dependency 'codecov', '~> 0.1.17'
37
- spec.add_development_dependency 'minitest', '~> 5.14.0'
38
- spec.add_development_dependency 'minitest-reporters', '~> 1.4.2'
39
- spec.add_development_dependency 'rake', '~> 12.0'
40
- spec.add_development_dependency 'simplecov', '~> 0.18.5'
41
- spec.add_development_dependency 'webmock', '~> 3.7.6'
35
+ spec.add_development_dependency 'bundler'
36
+ spec.add_development_dependency 'codecov'
37
+ spec.add_development_dependency 'minitest'
38
+ spec.add_development_dependency 'rake'
39
+ spec.add_development_dependency 'simplecov'
40
+ spec.add_development_dependency 'webmock'
42
41
  end
metadata CHANGED
@@ -1,155 +1,141 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: timetree
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kenji Koshikawa
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-08-08 00:00:00.000000000 Z
11
+ date: 2020-11-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: faraday
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "~>"
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
19
  version: 1.0.1
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - "~>"
24
+ - - ">="
25
25
  - !ruby/object:Gem::Version
26
26
  version: 1.0.1
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: faraday_middleware
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - "~>"
31
+ - - ">="
32
32
  - !ruby/object:Gem::Version
33
33
  version: 1.0.0
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - "~>"
38
+ - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: 1.0.0
41
41
  - !ruby/object:Gem::Dependency
42
- name: zeitwerk
42
+ name: jwt
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - "~>"
45
+ - - ">="
46
46
  - !ruby/object:Gem::Version
47
- version: 2.3.0
47
+ version: 2.2.2
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - "~>"
52
+ - - ">="
53
53
  - !ruby/object:Gem::Version
54
- version: 2.3.0
54
+ version: 2.2.2
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: bundler
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - "~>"
59
+ - - ">="
60
60
  - !ruby/object:Gem::Version
61
- version: '2.0'
61
+ version: '0'
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - "~>"
66
+ - - ">="
67
67
  - !ruby/object:Gem::Version
68
- version: '2.0'
68
+ version: '0'
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: codecov
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
- - - "~>"
73
+ - - ">="
74
74
  - !ruby/object:Gem::Version
75
- version: 0.1.17
75
+ version: '0'
76
76
  type: :development
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
- - - "~>"
80
+ - - ">="
81
81
  - !ruby/object:Gem::Version
82
- version: 0.1.17
82
+ version: '0'
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: minitest
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
- - - "~>"
87
+ - - ">="
88
88
  - !ruby/object:Gem::Version
89
- version: 5.14.0
89
+ version: '0'
90
90
  type: :development
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
- - - "~>"
94
+ - - ">="
95
95
  - !ruby/object:Gem::Version
96
- version: 5.14.0
97
- - !ruby/object:Gem::Dependency
98
- name: minitest-reporters
99
- requirement: !ruby/object:Gem::Requirement
100
- requirements:
101
- - - "~>"
102
- - !ruby/object:Gem::Version
103
- version: 1.4.2
104
- type: :development
105
- prerelease: false
106
- version_requirements: !ruby/object:Gem::Requirement
107
- requirements:
108
- - - "~>"
109
- - !ruby/object:Gem::Version
110
- version: 1.4.2
96
+ version: '0'
111
97
  - !ruby/object:Gem::Dependency
112
98
  name: rake
113
99
  requirement: !ruby/object:Gem::Requirement
114
100
  requirements:
115
- - - "~>"
101
+ - - ">="
116
102
  - !ruby/object:Gem::Version
117
- version: '12.0'
103
+ version: '0'
118
104
  type: :development
119
105
  prerelease: false
120
106
  version_requirements: !ruby/object:Gem::Requirement
121
107
  requirements:
122
- - - "~>"
108
+ - - ">="
123
109
  - !ruby/object:Gem::Version
124
- version: '12.0'
110
+ version: '0'
125
111
  - !ruby/object:Gem::Dependency
126
112
  name: simplecov
127
113
  requirement: !ruby/object:Gem::Requirement
128
114
  requirements:
129
- - - "~>"
115
+ - - ">="
130
116
  - !ruby/object:Gem::Version
131
- version: 0.18.5
117
+ version: '0'
132
118
  type: :development
133
119
  prerelease: false
134
120
  version_requirements: !ruby/object:Gem::Requirement
135
121
  requirements:
136
- - - "~>"
122
+ - - ">="
137
123
  - !ruby/object:Gem::Version
138
- version: 0.18.5
124
+ version: '0'
139
125
  - !ruby/object:Gem::Dependency
140
126
  name: webmock
141
127
  requirement: !ruby/object:Gem::Requirement
142
128
  requirements:
143
- - - "~>"
129
+ - - ">="
144
130
  - !ruby/object:Gem::Version
145
- version: 3.7.6
131
+ version: '0'
146
132
  type: :development
147
133
  prerelease: false
148
134
  version_requirements: !ruby/object:Gem::Requirement
149
135
  requirements:
150
- - - "~>"
136
+ - - ">="
151
137
  - !ruby/object:Gem::Version
152
- version: 3.7.6
138
+ version: '0'
153
139
  description: Client for accessing TimeTree APIs
154
140
  email:
155
141
  - koshikawa2009@gmail.com
@@ -160,7 +146,7 @@ files:
160
146
  - ".github/workflows/gem-push.yml"
161
147
  - ".github/workflows/test.yml"
162
148
  - ".gitignore"
163
- - ".rubocom.yml"
149
+ - ".rubocop.yml"
164
150
  - CHANGELOG.md
165
151
  - CODE_OF_CONDUCT.md
166
152
  - Gemfile
@@ -171,15 +157,19 @@ files:
171
157
  - bin/setup
172
158
  - lib/timetree.rb
173
159
  - lib/timetree/api_error.rb
174
- - lib/timetree/client.rb
160
+ - lib/timetree/base_client.rb
161
+ - lib/timetree/calendar_app/access_token.rb
162
+ - lib/timetree/calendar_app/client.rb
175
163
  - lib/timetree/configuration.rb
176
164
  - lib/timetree/http_command.rb
177
165
  - lib/timetree/models/activity.rb
166
+ - lib/timetree/models/application.rb
178
167
  - lib/timetree/models/base_model.rb
179
168
  - lib/timetree/models/calendar.rb
180
169
  - lib/timetree/models/event.rb
181
170
  - lib/timetree/models/label.rb
182
171
  - lib/timetree/models/user.rb
172
+ - lib/timetree/oauth_app/client.rb
183
173
  - lib/timetree/version.rb
184
174
  - timetree.gemspec
185
175
  homepage: https://github.com/koshilife/timetree-api-ruby-client
@@ -189,7 +179,7 @@ metadata:
189
179
  homepage_uri: https://github.com/koshilife/timetree-api-ruby-client
190
180
  source_code_uri: https://github.com/koshilife/timetree-api-ruby-client
191
181
  changelog_uri: https://github.com/koshilife/timetree-api-ruby-client/blob/master/CHANGELOG.md
192
- documentation_uri: https://www.rubydoc.info/gems/timetree/0.2.0
182
+ documentation_uri: https://www.rubydoc.info/gems/timetree/1.0.0
193
183
  post_install_message:
194
184
  rdoc_options: []
195
185
  require_paths: