attio 0.1.1

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 (89) hide show
  1. checksums.yaml +7 -0
  2. data/.codecov.yml +52 -0
  3. data/.github/CODEOWNERS +28 -0
  4. data/.github/ISSUE_TEMPLATE/bug_report.md +40 -0
  5. data/.github/ISSUE_TEMPLATE/feature_request.md +28 -0
  6. data/.github/dependabot.yml +54 -0
  7. data/.github/pull_request_template.md +40 -0
  8. data/.github/workflows/ci.yml +112 -0
  9. data/.github/workflows/dependabot-auto-merge.yml +45 -0
  10. data/.github/workflows/pr_checks.yml +145 -0
  11. data/.github/workflows/release.yml +147 -0
  12. data/.gitignore +10 -0
  13. data/.rspec +4 -0
  14. data/.rubocop.yml +133 -0
  15. data/.yardopts +18 -0
  16. data/CHANGELOG.md +34 -0
  17. data/CODE_OF_CONDUCT.md +37 -0
  18. data/CONTRIBUTING.md +280 -0
  19. data/Gemfile +17 -0
  20. data/Gemfile.lock +127 -0
  21. data/LICENSE.txt +21 -0
  22. data/README.md +292 -0
  23. data/Rakefile +57 -0
  24. data/SECURITY.md +59 -0
  25. data/attio.gemspec +34 -0
  26. data/bin/console +14 -0
  27. data/bin/setup +8 -0
  28. data/danger/Dangerfile +121 -0
  29. data/docs/.nojekyll +0 -0
  30. data/docs/Attio/AuthenticationError.html +152 -0
  31. data/docs/Attio/Client.html +1373 -0
  32. data/docs/Attio/ConnectionPool/TimeoutError.html +148 -0
  33. data/docs/Attio/ConnectionPool.html +944 -0
  34. data/docs/Attio/Error.html +152 -0
  35. data/docs/Attio/HttpClient/ConnectionError.html +152 -0
  36. data/docs/Attio/HttpClient/TimeoutError.html +152 -0
  37. data/docs/Attio/HttpClient.html +1329 -0
  38. data/docs/Attio/Logger.html +747 -0
  39. data/docs/Attio/NotFoundError.html +152 -0
  40. data/docs/Attio/RateLimitError.html +152 -0
  41. data/docs/Attio/RequestLogger.html +780 -0
  42. data/docs/Attio/Resources/Attributes.html +508 -0
  43. data/docs/Attio/Resources/Base.html +624 -0
  44. data/docs/Attio/Resources/Lists.html +1002 -0
  45. data/docs/Attio/Resources/Objects.html +415 -0
  46. data/docs/Attio/Resources/Records.html +1465 -0
  47. data/docs/Attio/Resources/Users.html +415 -0
  48. data/docs/Attio/Resources/Workspaces.html +324 -0
  49. data/docs/Attio/Resources.html +141 -0
  50. data/docs/Attio/RetryHandler.html +1023 -0
  51. data/docs/Attio/ServerError.html +152 -0
  52. data/docs/Attio/ValidationError.html +152 -0
  53. data/docs/Attio.html +397 -0
  54. data/docs/SETUP.md +117 -0
  55. data/docs/_index.html +378 -0
  56. data/docs/class_list.html +54 -0
  57. data/docs/css/common.css +1 -0
  58. data/docs/css/full_list.css +58 -0
  59. data/docs/css/style.css +503 -0
  60. data/docs/example.rb +119 -0
  61. data/docs/file.CHANGELOG.html +124 -0
  62. data/docs/file.README.html +371 -0
  63. data/docs/file_list.html +64 -0
  64. data/docs/frames.html +22 -0
  65. data/docs/index.html +371 -0
  66. data/docs/js/app.js +344 -0
  67. data/docs/js/full_list.js +242 -0
  68. data/docs/js/jquery.js +4 -0
  69. data/docs/method_list.html +750 -0
  70. data/docs/top-level-namespace.html +110 -0
  71. data/lib/attio/client.rb +118 -0
  72. data/lib/attio/connection_pool.rb +69 -0
  73. data/lib/attio/errors.rb +9 -0
  74. data/lib/attio/http_client.rb +100 -0
  75. data/lib/attio/logger.rb +110 -0
  76. data/lib/attio/resources/attributes.rb +26 -0
  77. data/lib/attio/resources/base.rb +55 -0
  78. data/lib/attio/resources/lists.rb +56 -0
  79. data/lib/attio/resources/objects.rb +20 -0
  80. data/lib/attio/resources/records.rb +158 -0
  81. data/lib/attio/resources/users.rb +20 -0
  82. data/lib/attio/resources/workspaces.rb +13 -0
  83. data/lib/attio/retry_handler.rb +70 -0
  84. data/lib/attio/version.rb +3 -0
  85. data/lib/attio.rb +60 -0
  86. data/run_tests.rb +52 -0
  87. data/test_basic.rb +51 -0
  88. data/test_typhoeus.rb +31 -0
  89. metadata +160 -0
data/docs/index.html ADDED
@@ -0,0 +1,371 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>
7
+ File: README
8
+
9
+ &mdash; Attio Ruby Client Documentation
10
+
11
+ </title>
12
+
13
+ <link rel="stylesheet" href="css/style.css" type="text/css" />
14
+
15
+ <link rel="stylesheet" href="css/common.css" type="text/css" />
16
+
17
+ <script type="text/javascript">
18
+ pathId = "README";
19
+ relpath = '';
20
+ </script>
21
+
22
+
23
+ <script type="text/javascript" charset="utf-8" src="js/jquery.js"></script>
24
+
25
+ <script type="text/javascript" charset="utf-8" src="js/app.js"></script>
26
+
27
+
28
+ </head>
29
+ <body>
30
+ <div class="nav_wrap">
31
+ <iframe id="nav" src="class_list.html?1"></iframe>
32
+ <div id="resizer"></div>
33
+ </div>
34
+
35
+ <div id="main" tabindex="-1">
36
+ <div id="header">
37
+ <div id="menu">
38
+
39
+ <a href="_index.html">Index</a> &raquo;
40
+ <span class="title">File: README</span>
41
+
42
+ </div>
43
+
44
+ <div id="search">
45
+
46
+ <a class="full_list_link" id="class_list_link"
47
+ href="class_list.html">
48
+
49
+ <svg width="24" height="24">
50
+ <rect x="0" y="4" width="24" height="4" rx="1" ry="1"></rect>
51
+ <rect x="0" y="12" width="24" height="4" rx="1" ry="1"></rect>
52
+ <rect x="0" y="20" width="24" height="4" rx="1" ry="1"></rect>
53
+ </svg>
54
+ </a>
55
+
56
+ </div>
57
+ <div class="clear"></div>
58
+ </div>
59
+
60
+ <div id="content"><div id='filecontents'><h1 id="attio-ruby-client">Attio Ruby Client</h1>
61
+
62
+ <p><a href="https://your-username.github.io/attio-ruby"><img src="https://img.shields.io/badge/docs-yard-blue.svg" alt="Documentation"></a>
63
+ <a href="https://badge.fury.io/rb/attio"><img src="https://badge.fury.io/rb/attio.svg" alt="Gem Version"></a></p>
64
+
65
+ <p>Official Ruby client for the <a href="https://developers.attio.com/">Attio CRM API</a>. This library provides easy access to the Attio API, allowing you to manage records, objects, lists, and more.</p>
66
+
67
+ <h2 id="installation">Installation</h2>
68
+
69
+ <p>Add this line to your application&#39;s Gemfile:</p>
70
+
71
+ <pre class="code ruby"><code class="ruby"><span class='id identifier rubyid_gem'>gem</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>attio</span><span class='tstring_end'>&#39;</span></span>
72
+ </code></pre>
73
+
74
+ <p>And then execute:</p>
75
+
76
+ <pre class="code ruby"><code class="ruby">$ bundle install
77
+ </code></pre>
78
+
79
+ <p>Or install it yourself as:</p>
80
+
81
+ <pre class="code ruby"><code class="ruby">$ gem install attio
82
+ </code></pre>
83
+
84
+ <h2 id="quick-start">Quick Start</h2>
85
+
86
+ <pre class="code ruby"><code class="ruby"><span class='id identifier rubyid_require'>require</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>attio</span><span class='tstring_end'>&#39;</span></span>
87
+
88
+ <span class='comment'># Initialize the client with your API key
89
+ </span><span class='id identifier rubyid_client'>client</span> <span class='op'>=</span> <span class='const'><span class='object_link'><a href="Attio.html" title="Attio (module)">Attio</a></span></span><span class='period'>.</span><span class='id identifier rubyid_client'><span class='object_link'><a href="Attio.html#client-class_method" title="Attio.client (method)">client</a></span></span><span class='lparen'>(</span><span class='label'>api_key:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>your-api-key-here</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span>
90
+
91
+ <span class='comment'># List people records
92
+ </span><span class='id identifier rubyid_people'>people</span> <span class='op'>=</span> <span class='id identifier rubyid_client'>client</span><span class='period'>.</span><span class='id identifier rubyid_records'>records</span><span class='period'>.</span><span class='id identifier rubyid_list'>list</span><span class='lparen'>(</span><span class='label'>object:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>people</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span> <span class='label'>limit:</span> <span class='int'>10</span><span class='rparen'>)</span>
93
+
94
+ <span class='comment'># Create a new person
95
+ </span><span class='id identifier rubyid_person'>person</span> <span class='op'>=</span> <span class='id identifier rubyid_client'>client</span><span class='period'>.</span><span class='id identifier rubyid_records'>records</span><span class='period'>.</span><span class='id identifier rubyid_create'>create</span><span class='lparen'>(</span>
96
+ <span class='label'>object:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>people</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
97
+ <span class='label'>data:</span> <span class='lbrace'>{</span>
98
+ <span class='label'>name:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>Jane Doe</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
99
+ <span class='label'>email:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>jane@example.com</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
100
+ <span class='label'>phone:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>+1-555-0123</span><span class='tstring_end'>&#39;</span></span>
101
+ <span class='rbrace'>}</span>
102
+ <span class='rparen'>)</span>
103
+
104
+ <span class='comment'># Get a specific person
105
+ </span><span class='id identifier rubyid_person'>person</span> <span class='op'>=</span> <span class='id identifier rubyid_client'>client</span><span class='period'>.</span><span class='id identifier rubyid_records'>records</span><span class='period'>.</span><span class='id identifier rubyid_get'>get</span><span class='lparen'>(</span><span class='label'>object:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>people</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span> <span class='label'>id:</span> <span class='id identifier rubyid_person'>person</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>id</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span><span class='rparen'>)</span>
106
+
107
+ <span class='comment'># Update a person
108
+ </span><span class='id identifier rubyid_updated_person'>updated_person</span> <span class='op'>=</span> <span class='id identifier rubyid_client'>client</span><span class='period'>.</span><span class='id identifier rubyid_records'>records</span><span class='period'>.</span><span class='id identifier rubyid_update'>update</span><span class='lparen'>(</span>
109
+ <span class='label'>object:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>people</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
110
+ <span class='label'>id:</span> <span class='id identifier rubyid_person'>person</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>id</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span><span class='comma'>,</span>
111
+ <span class='label'>data:</span> <span class='lbrace'>{</span> <span class='label'>name:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>Jane Smith</span><span class='tstring_end'>&#39;</span></span> <span class='rbrace'>}</span>
112
+ <span class='rparen'>)</span>
113
+
114
+ <span class='comment'># Delete a person
115
+ </span><span class='id identifier rubyid_client'>client</span><span class='period'>.</span><span class='id identifier rubyid_records'>records</span><span class='period'>.</span><span class='id identifier rubyid_delete'>delete</span><span class='lparen'>(</span><span class='label'>object:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>people</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span> <span class='label'>id:</span> <span class='id identifier rubyid_person'>person</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>id</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span><span class='rparen'>)</span>
116
+ </code></pre>
117
+
118
+ <h2 id="usage">Usage</h2>
119
+
120
+ <h3 id="client-configuration">Client Configuration</h3>
121
+
122
+ <pre class="code ruby"><code class="ruby"><span class='comment'># Basic client with default timeout (30 seconds)
123
+ </span><span class='id identifier rubyid_client'>client</span> <span class='op'>=</span> <span class='const'><span class='object_link'><a href="Attio.html" title="Attio (module)">Attio</a></span></span><span class='period'>.</span><span class='id identifier rubyid_client'><span class='object_link'><a href="Attio.html#client-class_method" title="Attio.client (method)">client</a></span></span><span class='lparen'>(</span><span class='label'>api_key:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>your-api-key</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span>
124
+
125
+ <span class='comment'># Client with custom timeout
126
+ </span><span class='id identifier rubyid_client'>client</span> <span class='op'>=</span> <span class='const'><span class='object_link'><a href="Attio.html" title="Attio (module)">Attio</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="Attio/Client.html" title="Attio::Client (class)">Client</a></span></span><span class='period'>.</span><span class='id identifier rubyid_new'><span class='object_link'><a href="Attio/Client.html#initialize-instance_method" title="Attio::Client#initialize (method)">new</a></span></span><span class='lparen'>(</span><span class='label'>api_key:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>your-api-key</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span> <span class='label'>timeout:</span> <span class='int'>60</span><span class='rparen'>)</span>
127
+ </code></pre>
128
+
129
+ <h3 id="working-with-records">Working with Records</h3>
130
+
131
+ <h4 id="listing-records">Listing Records</h4>
132
+
133
+ <pre class="code ruby"><code class="ruby"><span class='comment'># List all people
134
+ </span><span class='id identifier rubyid_people'>people</span> <span class='op'>=</span> <span class='id identifier rubyid_client'>client</span><span class='period'>.</span><span class='id identifier rubyid_records'>records</span><span class='period'>.</span><span class='id identifier rubyid_list'>list</span><span class='lparen'>(</span><span class='label'>object:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>people</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span>
135
+
136
+ <span class='comment'># List with filters
137
+ </span><span class='id identifier rubyid_filtered_people'>filtered_people</span> <span class='op'>=</span> <span class='id identifier rubyid_client'>client</span><span class='period'>.</span><span class='id identifier rubyid_records'>records</span><span class='period'>.</span><span class='id identifier rubyid_list'>list</span><span class='lparen'>(</span>
138
+ <span class='label'>object:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>people</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
139
+ <span class='label'>filters:</span> <span class='lbrace'>{</span>
140
+ <span class='label'>name:</span> <span class='lbrace'>{</span> <span class='label'>contains:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>John</span><span class='tstring_end'>&#39;</span></span> <span class='rbrace'>}</span><span class='comma'>,</span>
141
+ <span class='label'>company:</span> <span class='lbrace'>{</span> <span class='label'>target_object:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>companies</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span> <span class='label'>target_record_id:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>company-123</span><span class='tstring_end'>&#39;</span></span> <span class='rbrace'>}</span>
142
+ <span class='rbrace'>}</span><span class='comma'>,</span>
143
+ <span class='label'>limit:</span> <span class='int'>50</span>
144
+ <span class='rparen'>)</span>
145
+
146
+ <span class='comment'># List with sorting
147
+ </span><span class='id identifier rubyid_sorted_people'>sorted_people</span> <span class='op'>=</span> <span class='id identifier rubyid_client'>client</span><span class='period'>.</span><span class='id identifier rubyid_records'>records</span><span class='period'>.</span><span class='id identifier rubyid_list'>list</span><span class='lparen'>(</span>
148
+ <span class='label'>object:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>people</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
149
+ <span class='label'>sorts:</span> <span class='lbracket'>[</span><span class='lbrace'>{</span> <span class='label'>field:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>created_at</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span> <span class='label'>direction:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>desc</span><span class='tstring_end'>&#39;</span></span> <span class='rbrace'>}</span><span class='rbracket'>]</span><span class='comma'>,</span>
150
+ <span class='label'>limit:</span> <span class='int'>25</span>
151
+ <span class='rparen'>)</span>
152
+ </code></pre>
153
+
154
+ <h4 id="creating-records">Creating Records</h4>
155
+
156
+ <pre class="code ruby"><code class="ruby"><span class='comment'># Create a person
157
+ </span><span class='id identifier rubyid_person'>person</span> <span class='op'>=</span> <span class='id identifier rubyid_client'>client</span><span class='period'>.</span><span class='id identifier rubyid_records'>records</span><span class='period'>.</span><span class='id identifier rubyid_create'>create</span><span class='lparen'>(</span>
158
+ <span class='label'>object:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>people</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
159
+ <span class='label'>data:</span> <span class='lbrace'>{</span>
160
+ <span class='label'>name:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>John Doe</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
161
+ <span class='label'>email:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>john@example.com</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
162
+ <span class='label'>phone:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>+1-555-0123</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
163
+ <span class='label'>company:</span> <span class='lbrace'>{</span>
164
+ <span class='label'>target_object:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>companies</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
165
+ <span class='label'>target_record_id:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>company-123</span><span class='tstring_end'>&#39;</span></span>
166
+ <span class='rbrace'>}</span>
167
+ <span class='rbrace'>}</span>
168
+ <span class='rparen'>)</span>
169
+
170
+ <span class='comment'># Create a company
171
+ </span><span class='id identifier rubyid_company'>company</span> <span class='op'>=</span> <span class='id identifier rubyid_client'>client</span><span class='period'>.</span><span class='id identifier rubyid_records'>records</span><span class='period'>.</span><span class='id identifier rubyid_create'>create</span><span class='lparen'>(</span>
172
+ <span class='label'>object:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>companies</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
173
+ <span class='label'>data:</span> <span class='lbrace'>{</span>
174
+ <span class='label'>name:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>Acme Corp</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
175
+ <span class='label'>domain:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>acme.com</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
176
+ <span class='label'>industry:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>Technology</span><span class='tstring_end'>&#39;</span></span>
177
+ <span class='rbrace'>}</span>
178
+ <span class='rparen'>)</span>
179
+ </code></pre>
180
+
181
+ <h4 id="updating-records">Updating Records</h4>
182
+
183
+ <pre class="code ruby"><code class="ruby"><span class='comment'># Update a person&#39;s email
184
+ </span><span class='id identifier rubyid_client'>client</span><span class='period'>.</span><span class='id identifier rubyid_records'>records</span><span class='period'>.</span><span class='id identifier rubyid_update'>update</span><span class='lparen'>(</span>
185
+ <span class='label'>object:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>people</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
186
+ <span class='label'>id:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>person-123</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
187
+ <span class='label'>data:</span> <span class='lbrace'>{</span> <span class='label'>email:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>newemail@example.com</span><span class='tstring_end'>&#39;</span></span> <span class='rbrace'>}</span>
188
+ <span class='rparen'>)</span>
189
+
190
+ <span class='comment'># Update multiple fields
191
+ </span><span class='id identifier rubyid_client'>client</span><span class='period'>.</span><span class='id identifier rubyid_records'>records</span><span class='period'>.</span><span class='id identifier rubyid_update'>update</span><span class='lparen'>(</span>
192
+ <span class='label'>object:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>people</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
193
+ <span class='label'>id:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>person-123</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
194
+ <span class='label'>data:</span> <span class='lbrace'>{</span>
195
+ <span class='label'>name:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>John Smith</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
196
+ <span class='label'>phone:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>+1-555-9999</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
197
+ <span class='label'>notes:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>Updated contact information</span><span class='tstring_end'>&#39;</span></span>
198
+ <span class='rbrace'>}</span>
199
+ <span class='rparen'>)</span>
200
+ </code></pre>
201
+
202
+ <h3 id="working-with-other-resources">Working with Other Resources</h3>
203
+
204
+ <h4 id="objects">Objects</h4>
205
+
206
+ <pre class="code ruby"><code class="ruby"><span class='comment'># List all object types
207
+ </span><span class='id identifier rubyid_objects'>objects</span> <span class='op'>=</span> <span class='id identifier rubyid_client'>client</span><span class='period'>.</span><span class='id identifier rubyid_objects'>objects</span><span class='period'>.</span><span class='id identifier rubyid_list'>list</span>
208
+
209
+ <span class='comment'># Get a specific object schema
210
+ </span><span class='id identifier rubyid_people_object'>people_object</span> <span class='op'>=</span> <span class='id identifier rubyid_client'>client</span><span class='period'>.</span><span class='id identifier rubyid_objects'>objects</span><span class='period'>.</span><span class='id identifier rubyid_get'>get</span><span class='lparen'>(</span><span class='label'>id:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>people</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span>
211
+ </code></pre>
212
+
213
+ <h4 id="lists">Lists</h4>
214
+
215
+ <pre class="code ruby"><code class="ruby"><span class='comment'># List all lists
216
+ </span><span class='id identifier rubyid_lists'>lists</span> <span class='op'>=</span> <span class='id identifier rubyid_client'>client</span><span class='period'>.</span><span class='id identifier rubyid_lists'>lists</span><span class='period'>.</span><span class='id identifier rubyid_list'>list</span>
217
+
218
+ <span class='comment'># Get entries from a specific list
219
+ </span><span class='id identifier rubyid_entries'>entries</span> <span class='op'>=</span> <span class='id identifier rubyid_client'>client</span><span class='period'>.</span><span class='id identifier rubyid_lists'>lists</span><span class='period'>.</span><span class='id identifier rubyid_entries'>entries</span><span class='lparen'>(</span><span class='label'>id:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>list-123</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span>
220
+ </code></pre>
221
+
222
+ <h4 id="workspaces">Workspaces</h4>
223
+
224
+ <pre class="code ruby"><code class="ruby"><span class='comment'># List workspaces
225
+ </span><span class='id identifier rubyid_workspaces'>workspaces</span> <span class='op'>=</span> <span class='id identifier rubyid_client'>client</span><span class='period'>.</span><span class='id identifier rubyid_workspaces'>workspaces</span><span class='period'>.</span><span class='id identifier rubyid_list'>list</span>
226
+
227
+ <span class='comment'># Get current workspace
228
+ </span><span class='id identifier rubyid_workspace'>workspace</span> <span class='op'>=</span> <span class='id identifier rubyid_client'>client</span><span class='period'>.</span><span class='id identifier rubyid_workspaces'>workspaces</span><span class='period'>.</span><span class='id identifier rubyid_get'>get</span>
229
+ </code></pre>
230
+
231
+ <h4 id="attributes">Attributes</h4>
232
+
233
+ <pre class="code ruby"><code class="ruby"><span class='comment'># List attributes for an object
234
+ </span><span class='id identifier rubyid_attributes'>attributes</span> <span class='op'>=</span> <span class='id identifier rubyid_client'>client</span><span class='period'>.</span><span class='id identifier rubyid_attributes'>attributes</span><span class='period'>.</span><span class='id identifier rubyid_list'>list</span><span class='lparen'>(</span><span class='label'>object:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>people</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span>
235
+
236
+ <span class='comment'># Create a custom attribute
237
+ </span><span class='id identifier rubyid_attribute'>attribute</span> <span class='op'>=</span> <span class='id identifier rubyid_client'>client</span><span class='period'>.</span><span class='id identifier rubyid_attributes'>attributes</span><span class='period'>.</span><span class='id identifier rubyid_create'>create</span><span class='lparen'>(</span>
238
+ <span class='label'>object:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>people</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
239
+ <span class='label'>data:</span> <span class='lbrace'>{</span>
240
+ <span class='label'>title:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>Custom Field</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
241
+ <span class='label'>api_slug:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>custom_field</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
242
+ <span class='label'>type:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>text</span><span class='tstring_end'>&#39;</span></span>
243
+ <span class='rbrace'>}</span>
244
+ <span class='rparen'>)</span>
245
+ </code></pre>
246
+
247
+ <h4 id="users">Users</h4>
248
+
249
+ <pre class="code ruby"><code class="ruby"><span class='comment'># List workspace users
250
+ </span><span class='id identifier rubyid_users'>users</span> <span class='op'>=</span> <span class='id identifier rubyid_client'>client</span><span class='period'>.</span><span class='id identifier rubyid_users'>users</span><span class='period'>.</span><span class='id identifier rubyid_list'>list</span>
251
+
252
+ <span class='comment'># Get current user
253
+ </span><span class='id identifier rubyid_user'>user</span> <span class='op'>=</span> <span class='id identifier rubyid_client'>client</span><span class='period'>.</span><span class='id identifier rubyid_users'>users</span><span class='period'>.</span><span class='id identifier rubyid_me'>me</span>
254
+ </code></pre>
255
+
256
+ <h3 id="error-handling">Error Handling</h3>
257
+
258
+ <p>The client will raise appropriate exceptions for different error conditions:</p>
259
+
260
+ <pre class="code ruby"><code class="ruby"><span class='kw'>begin</span>
261
+ <span class='id identifier rubyid_client'>client</span><span class='period'>.</span><span class='id identifier rubyid_records'>records</span><span class='period'>.</span><span class='id identifier rubyid_get'>get</span><span class='lparen'>(</span><span class='label'>object:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>people</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span> <span class='label'>id:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>invalid-id</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span>
262
+ <span class='kw'>rescue</span> <span class='const'><span class='object_link'><a href="Attio.html" title="Attio (module)">Attio</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="Attio/NotFoundError.html" title="Attio::NotFoundError (class)">NotFoundError</a></span></span> <span class='op'>=&gt;</span> <span class='id identifier rubyid_e'>e</span>
263
+ <span class='id identifier rubyid_puts'>puts</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Record not found: </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_e'>e</span><span class='period'>.</span><span class='id identifier rubyid_message'>message</span><span class='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></span>
264
+ <span class='kw'>rescue</span> <span class='const'><span class='object_link'><a href="Attio.html" title="Attio (module)">Attio</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="Attio/AuthenticationError.html" title="Attio::AuthenticationError (class)">AuthenticationError</a></span></span> <span class='op'>=&gt;</span> <span class='id identifier rubyid_e'>e</span>
265
+ <span class='id identifier rubyid_puts'>puts</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Authentication failed: </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_e'>e</span><span class='period'>.</span><span class='id identifier rubyid_message'>message</span><span class='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></span>
266
+ <span class='kw'>rescue</span> <span class='const'><span class='object_link'><a href="Attio.html" title="Attio (module)">Attio</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="Attio/RateLimitError.html" title="Attio::RateLimitError (class)">RateLimitError</a></span></span> <span class='op'>=&gt;</span> <span class='id identifier rubyid_e'>e</span>
267
+ <span class='id identifier rubyid_puts'>puts</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Rate limit exceeded. Retry after: </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_e'>e</span><span class='period'>.</span><span class='id identifier rubyid_retry_after'>retry_after</span><span class='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></span>
268
+ <span class='kw'>rescue</span> <span class='const'><span class='object_link'><a href="Attio.html" title="Attio (module)">Attio</a></span></span><span class='op'>::</span><span class='const'>APIError</span> <span class='op'>=&gt;</span> <span class='id identifier rubyid_e'>e</span>
269
+ <span class='id identifier rubyid_puts'>puts</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>API error: </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_e'>e</span><span class='period'>.</span><span class='id identifier rubyid_message'>message</span><span class='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></span>
270
+ <span class='kw'>end</span>
271
+ </code></pre>
272
+
273
+ <h2 id="configuration-options">Configuration Options</h2>
274
+
275
+ <table><thead>
276
+ <tr>
277
+ <th>Option</th>
278
+ <th>Type</th>
279
+ <th>Default</th>
280
+ <th>Description</th>
281
+ </tr>
282
+ </thead><tbody>
283
+ <tr>
284
+ <td><code>api_key</code></td>
285
+ <td>String</td>
286
+ <td>Required</td>
287
+ <td>Your Attio API key</td>
288
+ </tr>
289
+ <tr>
290
+ <td><code>timeout</code></td>
291
+ <td>Integer</td>
292
+ <td>30</td>
293
+ <td>Request timeout in seconds</td>
294
+ </tr>
295
+ </tbody></table>
296
+
297
+ <h2 id="api-coverage">API Coverage</h2>
298
+
299
+ <p>This client supports all major Attio API endpoints:</p>
300
+
301
+ <ul>
302
+ <li>✅ Records (CRUD operations, querying)</li>
303
+ <li>✅ Objects (list, get schema)</li>
304
+ <li>✅ Lists (list, get entries)</li>
305
+ <li>✅ Workspaces (list, get current)</li>
306
+ <li>✅ Attributes (list, create, update)</li>
307
+ <li>✅ Users (list, get current user)</li>
308
+ </ul>
309
+
310
+ <h2 id="development">Development</h2>
311
+
312
+ <p>After checking out the repo, run <code>bin/setup</code> to install dependencies. You can also run <code>bin/console</code> for an interactive prompt that will allow you to experiment.</p>
313
+
314
+ <h3 id="running-tests">Running Tests</h3>
315
+
316
+ <pre class="code bash"><code class="bash">bundle exec rspec
317
+ </code></pre>
318
+
319
+ <h3 id="generating-documentation">Generating Documentation</h3>
320
+
321
+ <pre class="code bash"><code class="bash"># Generate YARD documentation
322
+ bundle exec rake docs:generate
323
+
324
+ # Open documentation in browser
325
+ bundle exec rake docs:open
326
+
327
+ # Serve documentation locally
328
+ bundle exec rake docs:serve
329
+ </code></pre>
330
+
331
+ <h3 id="code-coverage">Code Coverage</h3>
332
+
333
+ <pre class="code bash"><code class="bash">bundle exec rake coverage:report
334
+ </code></pre>
335
+
336
+ <h2 id="contributing">Contributing</h2>
337
+
338
+ <p>Bug reports and pull requests are welcome on GitHub at <a href="https://github.com/your-username/attio-ruby">https://github.com/your-username/attio-ruby</a>.</p>
339
+
340
+ <ol>
341
+ <li>Fork the repository</li>
342
+ <li>Create your feature branch (<code>git checkout -b my-new-feature</code>)</li>
343
+ <li>Make your changes and add tests</li>
344
+ <li>Ensure all tests pass (<code>bundle exec rspec</code>)</li>
345
+ <li>Commit your changes (<code>git commit -am &#39;Add some feature&#39;</code>)</li>
346
+ <li>Push to the branch (<code>git push origin my-new-feature</code>)</li>
347
+ <li>Create a new Pull Request</li>
348
+ </ol>
349
+
350
+ <h2 id="license">License</h2>
351
+
352
+ <p>The gem is available as open source under the terms of the <a href="https://opensource.org/licenses/MIT">MIT License</a>.</p>
353
+
354
+ <h2 id="support">Support</h2>
355
+
356
+ <ul>
357
+ <li>📖 <a href="https://developers.attio.com/">API Documentation</a></li>
358
+ <li>🐛 <a href="https://github.com/your-username/attio-ruby/issues">Issues</a></li>
359
+ <li>💬 <a href="https://github.com/your-username/attio-ruby/discussions">Discussions</a></li>
360
+ </ul>
361
+ </div></div>
362
+
363
+ <div id="footer">
364
+ Generated on Mon Aug 11 11:26:43 2025 by
365
+ <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
366
+ 0.9.37 (ruby-3.4.5).
367
+ </div>
368
+
369
+ </div>
370
+ </body>
371
+ </html>