attio-ruby 0.1.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.
Files changed (48) hide show
  1. checksums.yaml +7 -0
  2. data/.rspec +3 -0
  3. data/.rubocop.yml +164 -0
  4. data/.simplecov +17 -0
  5. data/.yardopts +9 -0
  6. data/CHANGELOG.md +27 -0
  7. data/CONTRIBUTING.md +333 -0
  8. data/INTEGRATION_TEST_STATUS.md +149 -0
  9. data/LICENSE +21 -0
  10. data/README.md +638 -0
  11. data/Rakefile +8 -0
  12. data/attio-ruby.gemspec +61 -0
  13. data/docs/CODECOV_SETUP.md +34 -0
  14. data/examples/basic_usage.rb +149 -0
  15. data/examples/oauth_flow.rb +843 -0
  16. data/examples/oauth_flow_README.md +84 -0
  17. data/examples/typed_records_example.rb +167 -0
  18. data/examples/webhook_server.rb +463 -0
  19. data/lib/attio/api_resource.rb +539 -0
  20. data/lib/attio/builders/name_builder.rb +181 -0
  21. data/lib/attio/client.rb +160 -0
  22. data/lib/attio/errors.rb +126 -0
  23. data/lib/attio/internal/record.rb +359 -0
  24. data/lib/attio/oauth/client.rb +219 -0
  25. data/lib/attio/oauth/scope_validator.rb +162 -0
  26. data/lib/attio/oauth/token.rb +158 -0
  27. data/lib/attio/resources/attribute.rb +332 -0
  28. data/lib/attio/resources/comment.rb +114 -0
  29. data/lib/attio/resources/company.rb +224 -0
  30. data/lib/attio/resources/entry.rb +208 -0
  31. data/lib/attio/resources/list.rb +196 -0
  32. data/lib/attio/resources/meta.rb +113 -0
  33. data/lib/attio/resources/note.rb +213 -0
  34. data/lib/attio/resources/object.rb +66 -0
  35. data/lib/attio/resources/person.rb +294 -0
  36. data/lib/attio/resources/task.rb +147 -0
  37. data/lib/attio/resources/thread.rb +99 -0
  38. data/lib/attio/resources/typed_record.rb +98 -0
  39. data/lib/attio/resources/webhook.rb +224 -0
  40. data/lib/attio/resources/workspace_member.rb +136 -0
  41. data/lib/attio/util/configuration.rb +166 -0
  42. data/lib/attio/util/id_extractor.rb +115 -0
  43. data/lib/attio/util/webhook_signature.rb +175 -0
  44. data/lib/attio/version.rb +6 -0
  45. data/lib/attio/webhook/event.rb +114 -0
  46. data/lib/attio/webhook/signature_verifier.rb +73 -0
  47. data/lib/attio.rb +123 -0
  48. metadata +402 -0
data/lib/attio.rb ADDED
@@ -0,0 +1,123 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "attio/version"
4
+ require_relative "attio/errors"
5
+ require_relative "attio/util/configuration"
6
+ require_relative "attio/util/id_extractor"
7
+ require_relative "attio/client"
8
+ require_relative "attio/api_resource"
9
+ require_relative "attio/internal/record"
10
+ require_relative "attio/resources/object"
11
+ require_relative "attio/resources/typed_record"
12
+ require_relative "attio/resources/person"
13
+ require_relative "attio/resources/company"
14
+ require_relative "attio/resources/attribute"
15
+ require_relative "attio/resources/list"
16
+ require_relative "attio/resources/webhook"
17
+ require_relative "attio/resources/workspace_member"
18
+ require_relative "attio/resources/note"
19
+ require_relative "attio/resources/entry"
20
+ require_relative "attio/resources/task"
21
+ require_relative "attio/resources/comment"
22
+ require_relative "attio/resources/thread"
23
+ require_relative "attio/resources/meta"
24
+ require_relative "attio/util/webhook_signature"
25
+ require_relative "attio/oauth/client"
26
+ require_relative "attio/oauth/token"
27
+ require_relative "attio/oauth/scope_validator"
28
+ require_relative "attio/builders/name_builder"
29
+
30
+ # Attio Ruby SDK
31
+ #
32
+ # The official Ruby client library for the Attio API. This library provides
33
+ # a simple and intuitive interface for interacting with Attio's CRM platform.
34
+ #
35
+ # @example Basic configuration
36
+ # Attio.configure do |config|
37
+ # config.api_key = "your_api_key"
38
+ # end
39
+ #
40
+ # @example Creating a person
41
+ # person = Attio::Person.create(
42
+ # first_name: "John",
43
+ # last_name: "Doe",
44
+ # email: "john@example.com"
45
+ # )
46
+ #
47
+ # @see https://attio.com/docs API Documentation
48
+ # @see https://github.com/attio/attio-ruby GitHub Repository
49
+ module Attio
50
+ # Base error class for all Attio-specific errors
51
+ class Error < StandardError; end
52
+
53
+ # Main entry point for the Attio Ruby client library
54
+ class << self
55
+ # Returns the current configuration object
56
+ #
57
+ # @return [Attio::Util::Configuration] The configuration instance
58
+ def configuration
59
+ @configuration ||= Util::Configuration.new.tap(&:apply_env_vars!)
60
+ end
61
+
62
+ # Configures the Attio client
63
+ #
64
+ # @yield [config] Configuration block
65
+ # @yieldparam config [Attio::Util::Configuration] The configuration object
66
+ #
67
+ # @example
68
+ # Attio.configure do |config|
69
+ # config.api_key = "your_api_key"
70
+ # config.timeout = 30
71
+ # config.debug = true
72
+ # end
73
+ def configure(&)
74
+ configuration.configure(&)
75
+ end
76
+
77
+ # Resets the configuration to defaults
78
+ #
79
+ # @return [nil]
80
+ def reset!
81
+ @configuration = nil
82
+ end
83
+
84
+ # Gets the current API key
85
+ #
86
+ # @return [String, nil] The API key
87
+ def api_key
88
+ configuration.api_key
89
+ end
90
+
91
+ # Sets the API key
92
+ #
93
+ # @param value [String] The API key
94
+ # @return [String] The API key
95
+ def api_key=(value)
96
+ configuration.api_key = value
97
+ end
98
+
99
+ # Gets the API base URL
100
+ #
101
+ # @return [String] The API base URL
102
+ def api_base
103
+ configuration.api_base
104
+ end
105
+
106
+ # Gets the API version
107
+ #
108
+ # @return [String] The API version
109
+ def api_version
110
+ configuration.api_version
111
+ end
112
+
113
+ # Creates a new HTTP client instance
114
+ #
115
+ # @return [Client] The HTTP client
116
+ def client(api_key: nil)
117
+ Client.new(api_key: api_key)
118
+ end
119
+ end
120
+
121
+ # Hide internal implementation details
122
+ private_constant :Internal
123
+ end
metadata ADDED
@@ -0,0 +1,402 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: attio-ruby
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Robert Beene
8
+ bindir: exe
9
+ cert_chain: []
10
+ date: 1980-01-02 00:00:00.000000000 Z
11
+ dependencies:
12
+ - !ruby/object:Gem::Dependency
13
+ name: faraday
14
+ requirement: !ruby/object:Gem::Requirement
15
+ requirements:
16
+ - - "~>"
17
+ - !ruby/object:Gem::Version
18
+ version: '2.0'
19
+ type: :runtime
20
+ prerelease: false
21
+ version_requirements: !ruby/object:Gem::Requirement
22
+ requirements:
23
+ - - "~>"
24
+ - !ruby/object:Gem::Version
25
+ version: '2.0'
26
+ - !ruby/object:Gem::Dependency
27
+ name: faraday-retry
28
+ requirement: !ruby/object:Gem::Requirement
29
+ requirements:
30
+ - - "~>"
31
+ - !ruby/object:Gem::Version
32
+ version: '2.0'
33
+ type: :runtime
34
+ prerelease: false
35
+ version_requirements: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - "~>"
38
+ - !ruby/object:Gem::Version
39
+ version: '2.0'
40
+ - !ruby/object:Gem::Dependency
41
+ name: ostruct
42
+ requirement: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - "~>"
45
+ - !ruby/object:Gem::Version
46
+ version: '0.6'
47
+ type: :runtime
48
+ prerelease: false
49
+ version_requirements: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - "~>"
52
+ - !ruby/object:Gem::Version
53
+ version: '0.6'
54
+ - !ruby/object:Gem::Dependency
55
+ name: bundler
56
+ requirement: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - "~>"
59
+ - !ruby/object:Gem::Version
60
+ version: '2.0'
61
+ type: :development
62
+ prerelease: false
63
+ version_requirements: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - "~>"
66
+ - !ruby/object:Gem::Version
67
+ version: '2.0'
68
+ - !ruby/object:Gem::Dependency
69
+ name: rake
70
+ requirement: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - "~>"
73
+ - !ruby/object:Gem::Version
74
+ version: '13.0'
75
+ type: :development
76
+ prerelease: false
77
+ version_requirements: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - "~>"
80
+ - !ruby/object:Gem::Version
81
+ version: '13.0'
82
+ - !ruby/object:Gem::Dependency
83
+ name: rspec
84
+ requirement: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - "~>"
87
+ - !ruby/object:Gem::Version
88
+ version: '3.12'
89
+ type: :development
90
+ prerelease: false
91
+ version_requirements: !ruby/object:Gem::Requirement
92
+ requirements:
93
+ - - "~>"
94
+ - !ruby/object:Gem::Version
95
+ version: '3.12'
96
+ - !ruby/object:Gem::Dependency
97
+ name: webmock
98
+ requirement: !ruby/object:Gem::Requirement
99
+ requirements:
100
+ - - "~>"
101
+ - !ruby/object:Gem::Version
102
+ version: '3.18'
103
+ type: :development
104
+ prerelease: false
105
+ version_requirements: !ruby/object:Gem::Requirement
106
+ requirements:
107
+ - - "~>"
108
+ - !ruby/object:Gem::Version
109
+ version: '3.18'
110
+ - !ruby/object:Gem::Dependency
111
+ name: simplecov
112
+ requirement: !ruby/object:Gem::Requirement
113
+ requirements:
114
+ - - "~>"
115
+ - !ruby/object:Gem::Version
116
+ version: '0.22'
117
+ type: :development
118
+ prerelease: false
119
+ version_requirements: !ruby/object:Gem::Requirement
120
+ requirements:
121
+ - - "~>"
122
+ - !ruby/object:Gem::Version
123
+ version: '0.22'
124
+ - !ruby/object:Gem::Dependency
125
+ name: simplecov-cobertura
126
+ requirement: !ruby/object:Gem::Requirement
127
+ requirements:
128
+ - - "~>"
129
+ - !ruby/object:Gem::Version
130
+ version: '2.1'
131
+ type: :development
132
+ prerelease: false
133
+ version_requirements: !ruby/object:Gem::Requirement
134
+ requirements:
135
+ - - "~>"
136
+ - !ruby/object:Gem::Version
137
+ version: '2.1'
138
+ - !ruby/object:Gem::Dependency
139
+ name: yard
140
+ requirement: !ruby/object:Gem::Requirement
141
+ requirements:
142
+ - - "~>"
143
+ - !ruby/object:Gem::Version
144
+ version: '0.9'
145
+ type: :development
146
+ prerelease: false
147
+ version_requirements: !ruby/object:Gem::Requirement
148
+ requirements:
149
+ - - "~>"
150
+ - !ruby/object:Gem::Version
151
+ version: '0.9'
152
+ - !ruby/object:Gem::Dependency
153
+ name: redcarpet
154
+ requirement: !ruby/object:Gem::Requirement
155
+ requirements:
156
+ - - "~>"
157
+ - !ruby/object:Gem::Version
158
+ version: '3.6'
159
+ type: :development
160
+ prerelease: false
161
+ version_requirements: !ruby/object:Gem::Requirement
162
+ requirements:
163
+ - - "~>"
164
+ - !ruby/object:Gem::Version
165
+ version: '3.6'
166
+ - !ruby/object:Gem::Dependency
167
+ name: rubocop
168
+ requirement: !ruby/object:Gem::Requirement
169
+ requirements:
170
+ - - "~>"
171
+ - !ruby/object:Gem::Version
172
+ version: '1.50'
173
+ type: :development
174
+ prerelease: false
175
+ version_requirements: !ruby/object:Gem::Requirement
176
+ requirements:
177
+ - - "~>"
178
+ - !ruby/object:Gem::Version
179
+ version: '1.50'
180
+ - !ruby/object:Gem::Dependency
181
+ name: rubocop-rspec
182
+ requirement: !ruby/object:Gem::Requirement
183
+ requirements:
184
+ - - "~>"
185
+ - !ruby/object:Gem::Version
186
+ version: '2.20'
187
+ type: :development
188
+ prerelease: false
189
+ version_requirements: !ruby/object:Gem::Requirement
190
+ requirements:
191
+ - - "~>"
192
+ - !ruby/object:Gem::Version
193
+ version: '2.20'
194
+ - !ruby/object:Gem::Dependency
195
+ name: rubocop-performance
196
+ requirement: !ruby/object:Gem::Requirement
197
+ requirements:
198
+ - - "~>"
199
+ - !ruby/object:Gem::Version
200
+ version: '1.17'
201
+ type: :development
202
+ prerelease: false
203
+ version_requirements: !ruby/object:Gem::Requirement
204
+ requirements:
205
+ - - "~>"
206
+ - !ruby/object:Gem::Version
207
+ version: '1.17'
208
+ - !ruby/object:Gem::Dependency
209
+ name: standard
210
+ requirement: !ruby/object:Gem::Requirement
211
+ requirements:
212
+ - - "~>"
213
+ - !ruby/object:Gem::Version
214
+ version: '1.28'
215
+ type: :development
216
+ prerelease: false
217
+ version_requirements: !ruby/object:Gem::Requirement
218
+ requirements:
219
+ - - "~>"
220
+ - !ruby/object:Gem::Version
221
+ version: '1.28'
222
+ - !ruby/object:Gem::Dependency
223
+ name: benchmark-ips
224
+ requirement: !ruby/object:Gem::Requirement
225
+ requirements:
226
+ - - "~>"
227
+ - !ruby/object:Gem::Version
228
+ version: '2.12'
229
+ type: :development
230
+ prerelease: false
231
+ version_requirements: !ruby/object:Gem::Requirement
232
+ requirements:
233
+ - - "~>"
234
+ - !ruby/object:Gem::Version
235
+ version: '2.12'
236
+ - !ruby/object:Gem::Dependency
237
+ name: pry
238
+ requirement: !ruby/object:Gem::Requirement
239
+ requirements:
240
+ - - "~>"
241
+ - !ruby/object:Gem::Version
242
+ version: '0.14'
243
+ type: :development
244
+ prerelease: false
245
+ version_requirements: !ruby/object:Gem::Requirement
246
+ requirements:
247
+ - - "~>"
248
+ - !ruby/object:Gem::Version
249
+ version: '0.14'
250
+ - !ruby/object:Gem::Dependency
251
+ name: pry-byebug
252
+ requirement: !ruby/object:Gem::Requirement
253
+ requirements:
254
+ - - "~>"
255
+ - !ruby/object:Gem::Version
256
+ version: '3.10'
257
+ type: :development
258
+ prerelease: false
259
+ version_requirements: !ruby/object:Gem::Requirement
260
+ requirements:
261
+ - - "~>"
262
+ - !ruby/object:Gem::Version
263
+ version: '3.10'
264
+ - !ruby/object:Gem::Dependency
265
+ name: dotenv
266
+ requirement: !ruby/object:Gem::Requirement
267
+ requirements:
268
+ - - "~>"
269
+ - !ruby/object:Gem::Version
270
+ version: '2.8'
271
+ type: :development
272
+ prerelease: false
273
+ version_requirements: !ruby/object:Gem::Requirement
274
+ requirements:
275
+ - - "~>"
276
+ - !ruby/object:Gem::Version
277
+ version: '2.8'
278
+ - !ruby/object:Gem::Dependency
279
+ name: timecop
280
+ requirement: !ruby/object:Gem::Requirement
281
+ requirements:
282
+ - - "~>"
283
+ - !ruby/object:Gem::Version
284
+ version: '0.9'
285
+ type: :development
286
+ prerelease: false
287
+ version_requirements: !ruby/object:Gem::Requirement
288
+ requirements:
289
+ - - "~>"
290
+ - !ruby/object:Gem::Version
291
+ version: '0.9'
292
+ - !ruby/object:Gem::Dependency
293
+ name: bundle-audit
294
+ requirement: !ruby/object:Gem::Requirement
295
+ requirements:
296
+ - - "~>"
297
+ - !ruby/object:Gem::Version
298
+ version: '0.1'
299
+ type: :development
300
+ prerelease: false
301
+ version_requirements: !ruby/object:Gem::Requirement
302
+ requirements:
303
+ - - "~>"
304
+ - !ruby/object:Gem::Version
305
+ version: '0.1'
306
+ - !ruby/object:Gem::Dependency
307
+ name: brakeman
308
+ requirement: !ruby/object:Gem::Requirement
309
+ requirements:
310
+ - - "~>"
311
+ - !ruby/object:Gem::Version
312
+ version: '6.0'
313
+ type: :development
314
+ prerelease: false
315
+ version_requirements: !ruby/object:Gem::Requirement
316
+ requirements:
317
+ - - "~>"
318
+ - !ruby/object:Gem::Version
319
+ version: '6.0'
320
+ description: A comprehensive Ruby client library for the Attio CRM API with OAuth
321
+ support, type safety, and extensive test coverage
322
+ email:
323
+ - robert@ismly.com
324
+ executables: []
325
+ extensions: []
326
+ extra_rdoc_files: []
327
+ files:
328
+ - ".rspec"
329
+ - ".rubocop.yml"
330
+ - ".simplecov"
331
+ - ".yardopts"
332
+ - CHANGELOG.md
333
+ - CONTRIBUTING.md
334
+ - INTEGRATION_TEST_STATUS.md
335
+ - LICENSE
336
+ - README.md
337
+ - Rakefile
338
+ - attio-ruby.gemspec
339
+ - docs/CODECOV_SETUP.md
340
+ - examples/basic_usage.rb
341
+ - examples/oauth_flow.rb
342
+ - examples/oauth_flow_README.md
343
+ - examples/typed_records_example.rb
344
+ - examples/webhook_server.rb
345
+ - lib/attio.rb
346
+ - lib/attio/api_resource.rb
347
+ - lib/attio/builders/name_builder.rb
348
+ - lib/attio/client.rb
349
+ - lib/attio/errors.rb
350
+ - lib/attio/internal/record.rb
351
+ - lib/attio/oauth/client.rb
352
+ - lib/attio/oauth/scope_validator.rb
353
+ - lib/attio/oauth/token.rb
354
+ - lib/attio/resources/attribute.rb
355
+ - lib/attio/resources/comment.rb
356
+ - lib/attio/resources/company.rb
357
+ - lib/attio/resources/entry.rb
358
+ - lib/attio/resources/list.rb
359
+ - lib/attio/resources/meta.rb
360
+ - lib/attio/resources/note.rb
361
+ - lib/attio/resources/object.rb
362
+ - lib/attio/resources/person.rb
363
+ - lib/attio/resources/task.rb
364
+ - lib/attio/resources/thread.rb
365
+ - lib/attio/resources/typed_record.rb
366
+ - lib/attio/resources/webhook.rb
367
+ - lib/attio/resources/workspace_member.rb
368
+ - lib/attio/util/configuration.rb
369
+ - lib/attio/util/id_extractor.rb
370
+ - lib/attio/util/webhook_signature.rb
371
+ - lib/attio/version.rb
372
+ - lib/attio/webhook/event.rb
373
+ - lib/attio/webhook/signature_verifier.rb
374
+ homepage: https://github.com/rbeene/attio_ruby
375
+ licenses:
376
+ - MIT
377
+ metadata:
378
+ allowed_push_host: https://rubygems.org
379
+ homepage_uri: https://github.com/rbeene/attio_ruby
380
+ source_code_uri: https://github.com/rbeene/attio_ruby
381
+ changelog_uri: https://github.com/rbeene/attio_ruby/blob/main/CHANGELOG.md
382
+ documentation_uri: https://rubydoc.info/gems/attio-ruby
383
+ bug_tracker_uri: https://github.com/rbeene/attio_ruby/issues
384
+ rubygems_mfa_required: 'true'
385
+ rdoc_options: []
386
+ require_paths:
387
+ - lib
388
+ required_ruby_version: !ruby/object:Gem::Requirement
389
+ requirements:
390
+ - - ">="
391
+ - !ruby/object:Gem::Version
392
+ version: 3.4.0
393
+ required_rubygems_version: !ruby/object:Gem::Requirement
394
+ requirements:
395
+ - - ">="
396
+ - !ruby/object:Gem::Version
397
+ version: '0'
398
+ requirements: []
399
+ rubygems_version: 3.6.8
400
+ specification_version: 4
401
+ summary: Ruby client library for the Attio API
402
+ test_files: []