airrecord 1.0.6 → 1.0.7

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 53739239320854267f0a3fa6a03b81b5ea733bcca061728f0a0b2337d5d32c8d
4
- data.tar.gz: 4c7d23923d1fc45ff48c3644f83f42598b77878756ef2f41cabd229fb122e61f
3
+ metadata.gz: deb117e05bbf701e4e1e60cf3cccc659a173c7d4f1fc5cb6f80ee72af5603b0e
4
+ data.tar.gz: a4e928fbd33774f2d41508136da24e56eb2687775c2b962912df86e99eb34bdf
5
5
  SHA512:
6
- metadata.gz: f474a334e15a3feeedaa18dcbb5ddc9cc8a3b6ad2707377de076dc821ff4453e2400a39750e03b7cfb73a69d20aea5627c4e9c9aa1474e325a5e625bf6941d1b
7
- data.tar.gz: eb8c7b5d6e66677059ab1fed2d25826280e6f9736d7e775422b8d103ad9dd53982708642782e7cbef3797c58cf95c0cfd712b4f370538b8436e10e1204cc5406
6
+ metadata.gz: 890dbffd8a3489d505db3da5149cefeb85acbee754d0cc39a9ecf15e5d38b145735df895de9a16a747e20a0b92ae533e01a954e21220d0e044beb7e73ddc3c3e
7
+ data.tar.gz: 518f7f4cbc0559bb20931ba39a7c000a5ed632075ebd6ce41ff4555334c5c31251256b1f92105d8cd44b21b93b79e52e6b820ab2f5875bbd26a219dd3334967b
data/CHANGELOG.md CHANGED
@@ -1,3 +1,7 @@
1
+ # 1.0.7
2
+
3
+ * Further Ruby 3 compatibility, in particular with Faraday (#83)
4
+
1
5
  # 1.0.6
2
6
 
3
7
  * Ruby 3 compatibility
data/README.md CHANGED
@@ -255,6 +255,8 @@ tea["Village"] = "Feng Gang"
255
255
  tea.save # persist to Airtable
256
256
  ```
257
257
 
258
+ _Airtable's API doesn't allow you to change attachment's filename. As a workaround you can delete the original attachment and [upload a new one](https://github.com/sirupsen/airrecord#file-uploads) with the original URL and a new filename._
259
+
258
260
  ### Deleting
259
261
 
260
262
  An instantiated record can be deleted through `#destroy`:
data/airrecord.gemspec CHANGED
@@ -1,4 +1,5 @@
1
1
  # coding: utf-8
2
+
2
3
  lib = File.expand_path('../lib', __FILE__)
3
4
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
5
  require 'airrecord/version'
@@ -18,13 +19,13 @@ Gem::Specification.new do |spec|
18
19
  spec.bindir = "exe"
19
20
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
20
21
  spec.require_paths = ["lib"]
21
- spec.required_ruby_version = '>= 2.2'
22
+ spec.required_ruby_version = ">= 2.2"
22
23
 
23
- spec.add_dependency 'faraday', ['>= 0.10', '< 2.0']
24
- spec.add_dependency "net-http-persistent", '>= 2.9'
24
+ spec.add_dependency "faraday", [">= 0.10", "< 2.0"]
25
+ spec.add_dependency "net-http-persistent"
25
26
 
26
27
  spec.add_development_dependency "bundler", "~> 2"
27
- spec.add_development_dependency "rake", "~> 10.0"
28
- spec.add_development_dependency "minitest", "~> 5.0"
29
28
  spec.add_development_dependency "byebug"
29
+ spec.add_development_dependency "minitest", "~> 5.0"
30
+ spec.add_development_dependency "rake", "~> 10.0"
30
31
  end
data/lib/airrecord.rb CHANGED
@@ -7,12 +7,13 @@ require "airrecord/table"
7
7
 
8
8
  module Airrecord
9
9
  extend self
10
+ attr_accessor :api_key, :throttle
11
+
10
12
  Error = Class.new(StandardError)
11
- attr_accessor :api_key
12
- attr_accessor :throttle
13
13
 
14
14
  def throttle?
15
15
  return true if @throttle.nil?
16
+
16
17
  @throttle
17
18
  end
18
19
  end
@@ -23,13 +23,13 @@ module Airrecord
23
23
  "User-Agent" => "Airrecord/#{Airrecord::VERSION}",
24
24
  "X-API-VERSION" => "0.1.0",
25
25
  },
26
- request: { params_encoder: Airrecord::QueryString },
27
- ) { |conn|
26
+ request: { params_encoder: Airrecord::QueryString }
27
+ ) do |conn|
28
28
  if Airrecord.throttle?
29
29
  conn.request :airrecord_rate_limiter, requests_per_second: AIRTABLE_RPS_LIMIT
30
30
  end
31
31
  conn.adapter :net_http_persistent
32
- }
32
+ end
33
33
  end
34
34
 
35
35
  def escape(*args)
@@ -37,6 +37,7 @@ module Airrecord
37
37
  def too_many_requests_in_last_second?
38
38
  return false unless @rps
39
39
  return false unless requests.size >= @rps
40
+
40
41
  window_span < 1.0
41
42
  end
42
43
 
@@ -56,5 +57,5 @@ end
56
57
 
57
58
  Faraday::Request.register_middleware(
58
59
  # Avoid polluting the global middleware namespace with a prefix.
59
- :airrecord_rate_limiter => Airrecord::FaradayRateLimiter
60
+ airrecord_rate_limiter: Airrecord::FaradayRateLimiter
60
61
  )
@@ -25,16 +25,16 @@ module Airrecord
25
25
  end
26
26
 
27
27
  TYPES = {
28
- Array => lambda { |prefix, array|
28
+ Array => lambda do |prefix, array|
29
29
  array.each_with_index.map do |value, index|
30
30
  self[value].call("#{prefix}[#{index}]", value)
31
31
  end
32
- },
33
- Hash => lambda { |prefix, hash|
32
+ end,
33
+ Hash => lambda do |prefix, hash|
34
34
  hash.map do |key, value|
35
35
  self[value].call("#{prefix}[#{key}]", value)
36
36
  end
37
- },
37
+ end
38
38
  }.freeze
39
39
 
40
40
  DEFAULT = lambda do |key, value|
@@ -17,7 +17,7 @@ module Airrecord
17
17
 
18
18
  def has_many(method_name, options)
19
19
  define_method(method_name.to_sym) do
20
- # Get association ids in reverse order, because Airtables UI and API
20
+ # Get association ids in reverse order, because Airtable's UI and API
21
21
  # sort associations in opposite directions. We want to match the UI.
22
22
  ids = (self[options.fetch(:column)] || []).reverse
23
23
  table = Kernel.const_get(options.fetch(:class))
@@ -56,7 +56,7 @@ module Airrecord
56
56
  records(filter: formula).sort_by { |record| or_args.index(record.id) }
57
57
  end
58
58
 
59
- def create(fields, options={})
59
+ def create(fields, options = {})
60
60
  new(fields).tap { |record| record.save(options) }
61
61
  end
62
62
 
@@ -104,7 +104,7 @@ module Airrecord
104
104
  client.handle_error(response.status, parsed_response)
105
105
  end
106
106
  end
107
- alias_method :all, :records
107
+ alias all records
108
108
  end
109
109
 
110
110
  attr_reader :fields, :id, :created_at, :updated_keys
@@ -137,16 +137,17 @@ module Airrecord
137
137
  def []=(key, value)
138
138
  validate_key(key)
139
139
  return if fields[key] == value # no-op
140
+
140
141
  @updated_keys << key
141
142
  fields[key] = value
142
143
  end
143
144
 
144
- def create(options={})
145
+ def create(options = {})
145
146
  raise Error, "Record already exists (record has an id)" unless new_record?
146
147
 
147
148
  body = {
148
149
  fields: serializable_fields,
149
- **options,
150
+ **options
150
151
  }.to_json
151
152
 
152
153
  response = client.connection.post("/v0/#{self.class.base_key}/#{client.escape(self.class.table_name)}", body, { 'Content-Type' => 'application/json' })
@@ -161,9 +162,8 @@ module Airrecord
161
162
  end
162
163
  end
163
164
 
164
- def save(options={})
165
+ def save(options = {})
165
166
  return create(options) if new_record?
166
-
167
167
  return true if @updated_keys.empty?
168
168
 
169
169
  # To avoid trying to update computed fields we *always* use PATCH
@@ -171,7 +171,7 @@ module Airrecord
171
171
  fields: Hash[@updated_keys.map { |key|
172
172
  [key, fields[key]]
173
173
  }],
174
- **options,
174
+ **options
175
175
  }.to_json
176
176
 
177
177
  response = client.connection.patch("/v0/#{self.class.base_key}/#{client.escape(self.class.table_name)}/#{self.id}", body, { 'Content-Type' => 'application/json' })
@@ -205,8 +205,7 @@ module Airrecord
205
205
  self.class == other.class &&
206
206
  serializable_fields == other.serializable_fields
207
207
  end
208
-
209
- alias_method :eql?, :==
208
+ alias eql? ==
210
209
 
211
210
  def hash
212
211
  serializable_fields.hash
@@ -221,6 +220,7 @@ module Airrecord
221
220
 
222
221
  def created_at=(created_at)
223
222
  return unless created_at
223
+
224
224
  @created_at = Time.parse(created_at)
225
225
  end
226
226
 
@@ -230,6 +230,7 @@ module Airrecord
230
230
 
231
231
  def validate_key(key)
232
232
  return true unless key.is_a?(Symbol)
233
+
233
234
  raise(Error, [
234
235
  "Airrecord 1.0 dropped support for Symbols as field names.",
235
236
  "Please use the raw field name, a String, instead.",
@@ -1,3 +1,3 @@
1
1
  module Airrecord
2
- VERSION = "1.0.6"
2
+ VERSION = "1.0.7"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: airrecord
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.6
4
+ version: 1.0.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Simon Eskildsen
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-04-17 00:00:00.000000000 Z
11
+ date: 2021-08-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: faraday
@@ -36,14 +36,14 @@ dependencies:
36
36
  requirements:
37
37
  - - ">="
38
38
  - !ruby/object:Gem::Version
39
- version: '2.9'
39
+ version: '0'
40
40
  type: :runtime
41
41
  prerelease: false
42
42
  version_requirements: !ruby/object:Gem::Requirement
43
43
  requirements:
44
44
  - - ">="
45
45
  - !ruby/object:Gem::Version
46
- version: '2.9'
46
+ version: '0'
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: bundler
49
49
  requirement: !ruby/object:Gem::Requirement
@@ -59,19 +59,19 @@ dependencies:
59
59
  - !ruby/object:Gem::Version
60
60
  version: '2'
61
61
  - !ruby/object:Gem::Dependency
62
- name: rake
62
+ name: byebug
63
63
  requirement: !ruby/object:Gem::Requirement
64
64
  requirements:
65
- - - "~>"
65
+ - - ">="
66
66
  - !ruby/object:Gem::Version
67
- version: '10.0'
67
+ version: '0'
68
68
  type: :development
69
69
  prerelease: false
70
70
  version_requirements: !ruby/object:Gem::Requirement
71
71
  requirements:
72
- - - "~>"
72
+ - - ">="
73
73
  - !ruby/object:Gem::Version
74
- version: '10.0'
74
+ version: '0'
75
75
  - !ruby/object:Gem::Dependency
76
76
  name: minitest
77
77
  requirement: !ruby/object:Gem::Requirement
@@ -87,19 +87,19 @@ dependencies:
87
87
  - !ruby/object:Gem::Version
88
88
  version: '5.0'
89
89
  - !ruby/object:Gem::Dependency
90
- name: byebug
90
+ name: rake
91
91
  requirement: !ruby/object:Gem::Requirement
92
92
  requirements:
93
- - - ">="
93
+ - - "~>"
94
94
  - !ruby/object:Gem::Version
95
- version: '0'
95
+ version: '10.0'
96
96
  type: :development
97
97
  prerelease: false
98
98
  version_requirements: !ruby/object:Gem::Requirement
99
99
  requirements:
100
- - - ">="
100
+ - - "~>"
101
101
  - !ruby/object:Gem::Version
102
- version: '0'
102
+ version: '10.0'
103
103
  description: Airtable client to make Airtable interactions a breeze
104
104
  email:
105
105
  - sirup@sirupsen.com
@@ -143,7 +143,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
143
143
  - !ruby/object:Gem::Version
144
144
  version: '0'
145
145
  requirements: []
146
- rubygems_version: 3.1.4
146
+ rubygems_version: 3.2.15
147
147
  signing_key:
148
148
  specification_version: 4
149
149
  summary: Airtable client