airrecord 1.0.6 → 1.0.7

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