timetree 0.2.0 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -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: