airrecord 1.0.1 → 1.0.6

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: 534c1f26e6248221487da3863fd700cb426b937cf26ece866a56c453f2bb70e9
4
- data.tar.gz: dcfd2eaae567f63143fb2e2a4148faad1fd142bad54a16e3c9791b225c350b08
3
+ metadata.gz: 53739239320854267f0a3fa6a03b81b5ea733bcca061728f0a0b2337d5d32c8d
4
+ data.tar.gz: 4c7d23923d1fc45ff48c3644f83f42598b77878756ef2f41cabd229fb122e61f
5
5
  SHA512:
6
- metadata.gz: ef4e7f2a364a4a489c6eed6f7750855e118afcab19f1511bda87217a252b7d1f0a8bce1669aaf3ced875c4ea76c0629052ea2fbfec2dcf3e10e0320e789ff9d0
7
- data.tar.gz: 2845f143db4a202f050c5382a4b2596296ef725a40004ddc779e35e74d78ba025914c3294411043ddfcbd8351d045368c0dcfdc1bfc87c87dcefe7d6d76bc7ed
6
+ metadata.gz: f474a334e15a3feeedaa18dcbb5ddc9cc8a3b6ad2707377de076dc821ff4453e2400a39750e03b7cfb73a69d20aea5627c4e9c9aa1474e325a5e625bf6941d1b
7
+ data.tar.gz: eb8c7b5d6e66677059ab1fed2d25826280e6f9736d7e775422b8d103ad9dd53982708642782e7cbef3797c58cf95c0cfd712b4f370538b8436e10e1204cc5406
data/.travis.yml CHANGED
@@ -1,4 +1,5 @@
1
1
  sudo: false
2
2
  language: ruby
3
3
  rvm:
4
- - 2.3.3
4
+ - 2.7.2
5
+ - 3.0.0
data/CHANGELOG.md CHANGED
@@ -1,4 +1,31 @@
1
+ # 1.0.6
2
+
3
+ * Ruby 3 compatibility
4
+
5
+ # 1.0.5
6
+
7
+ * Allow Faraday 1.0 (#70)
8
+
9
+ # 1.0.4
10
+
11
+ * Correctly set `created_at` on `#find` (#68)
12
+
13
+ # 1.0.3
14
+
15
+ * Allow passing optional parameters, e.g. `typecast: true`. (#67)
16
+
17
+ # 1.0.2
18
+
19
+ * When a `has_one` or `belongs_to` association is empty, return `nil` instead of
20
+ a blank record (#51)
21
+
22
+ * When a `has_many` association is empty, do not make a network call to the
23
+ associated table
24
+
25
+ * Relax dependency on `net-http-persistent` to allow latest (#57)
26
+
1
27
  # 1.0.1
28
+
2
29
  * Support JRuby 9.0 and CRuby 2.2 (#47)
3
30
  * Fix $stderr warnings in CRurby > 2.3 (#46)
4
31
 
data/README.md CHANGED
@@ -222,6 +222,22 @@ tea.save
222
222
  Note that column names need to match the exact column names in Airtable,
223
223
  otherwise Airrecord will throw an error that no column matches it.
224
224
 
225
+
226
+ If you need to include optional request parameters, such as the `typecast` parameter, these can be passed to either `Table.create` or `#save`.
227
+ This is also supported when updating existing records with the `#save` method.
228
+
229
+ ```ruby
230
+ tea = Tea.create(
231
+ {"Name" => "Feng Gang", "Type" => "Green", "Country" => "China"},
232
+ {"typecast" => true},
233
+ )
234
+
235
+ # Or with the #save method:
236
+ tea = Tea.new({"Name" => "Feng Gang", "Type" => "Green"})
237
+ tea["Name"] = "Feng Gang"
238
+ tea.save("typecast" => true)
239
+ ```
240
+
225
241
  _Earlier versions of airrecord provided methods for snake-cased column names
226
242
  and symbols, however this proved error-prone without a proper schema API from
227
243
  Airtable which has still not been released._
data/airrecord.gemspec CHANGED
@@ -20,10 +20,10 @@ Gem::Specification.new do |spec|
20
20
  spec.require_paths = ["lib"]
21
21
  spec.required_ruby_version = '>= 2.2'
22
22
 
23
- spec.add_dependency 'faraday', '~> 0.10'
24
- spec.add_dependency "net-http-persistent", '~> 2.9'
23
+ spec.add_dependency 'faraday', ['>= 0.10', '< 2.0']
24
+ spec.add_dependency "net-http-persistent", '>= 2.9'
25
25
 
26
- spec.add_development_dependency "bundler", "~> 1.12"
26
+ spec.add_development_dependency "bundler", "~> 2"
27
27
  spec.add_development_dependency "rake", "~> 10.0"
28
28
  spec.add_development_dependency "minitest", "~> 5.0"
29
29
  spec.add_development_dependency "byebug"
@@ -0,0 +1,9 @@
1
+ require 'airrecord'
2
+
3
+ Tea = Airrecord.table(
4
+ ENV["AIRTABLE_TOKEN"],
5
+ "appZJC9q8TBYPDF7j",
6
+ "Teas"
7
+ )
8
+
9
+ p Tea.all
@@ -1,3 +1,5 @@
1
+ require 'rubygems' # For Gem::Version
2
+
1
3
  module Airrecord
2
4
  class Table
3
5
  class << self
@@ -19,7 +21,9 @@ module Airrecord
19
21
  # sort associations in opposite directions. We want to match the UI.
20
22
  ids = (self[options.fetch(:column)] || []).reverse
21
23
  table = Kernel.const_get(options.fetch(:class))
22
- options[:single] ? table.find(ids.first) : table.find_many(ids)
24
+ return table.find_many(ids) unless options[:single]
25
+
26
+ (id = ids.first) ? table.find(id) : nil
23
27
  end
24
28
 
25
29
  define_method("#{method_name}=".to_sym) do |value|
@@ -38,20 +42,22 @@ module Airrecord
38
42
  parsed_response = client.parse(response.body)
39
43
 
40
44
  if response.success?
41
- self.new(parsed_response["fields"], id: id)
45
+ self.new(parsed_response["fields"], id: id, created_at: parsed_response["createdTime"])
42
46
  else
43
47
  client.handle_error(response.status, parsed_response)
44
48
  end
45
49
  end
46
50
 
47
51
  def find_many(ids)
52
+ return [] if ids.empty?
53
+
48
54
  or_args = ids.map { |id| "RECORD_ID() = '#{id}'"}.join(',')
49
55
  formula = "OR(#{or_args})"
50
56
  records(filter: formula).sort_by { |record| or_args.index(record.id) }
51
57
  end
52
58
 
53
- def create(fields)
54
- new(fields).tap { |record| record.save }
59
+ def create(fields, options={})
60
+ new(fields).tap { |record| record.save(options) }
55
61
  end
56
62
 
57
63
  def records(filter: nil, sort: nil, view: nil, offset: nil, paginate: true, fields: nil, max_records: nil, page_size: nil)
@@ -103,10 +109,20 @@ module Airrecord
103
109
 
104
110
  attr_reader :fields, :id, :created_at, :updated_keys
105
111
 
106
- def initialize(fields, id: nil, created_at: nil)
107
- @id = id
108
- self.created_at = created_at
109
- self.fields = fields
112
+ # This is an awkward definition for Ruby 3 to remain backwards compatible.
113
+ # It's easier to read by reading the 2.x definition below.
114
+ if Gem::Version.new(RUBY_VERSION) >= Gem::Version.new("3.0.0")
115
+ def initialize(*one, **two)
116
+ @id = one.first && two.delete(:id)
117
+ self.created_at = one.first && two.delete(:created_at)
118
+ self.fields = one.first || two
119
+ end
120
+ else
121
+ def initialize(fields, id: nil, created_at: nil)
122
+ @id = id
123
+ self.created_at = created_at
124
+ self.fields = fields
125
+ end
110
126
  end
111
127
 
112
128
  def new_record?
@@ -125,10 +141,14 @@ module Airrecord
125
141
  fields[key] = value
126
142
  end
127
143
 
128
- def create
144
+ def create(options={})
129
145
  raise Error, "Record already exists (record has an id)" unless new_record?
130
146
 
131
- body = { fields: serializable_fields }.to_json
147
+ body = {
148
+ fields: serializable_fields,
149
+ **options,
150
+ }.to_json
151
+
132
152
  response = client.connection.post("/v0/#{self.class.base_key}/#{client.escape(self.class.table_name)}", body, { 'Content-Type' => 'application/json' })
133
153
  parsed_response = client.parse(response.body)
134
154
 
@@ -141,8 +161,8 @@ module Airrecord
141
161
  end
142
162
  end
143
163
 
144
- def save
145
- return create if new_record?
164
+ def save(options={})
165
+ return create(options) if new_record?
146
166
 
147
167
  return true if @updated_keys.empty?
148
168
 
@@ -150,7 +170,8 @@ module Airrecord
150
170
  body = {
151
171
  fields: Hash[@updated_keys.map { |key|
152
172
  [key, fields[key]]
153
- }]
173
+ }],
174
+ **options,
154
175
  }.to_json
155
176
 
156
177
  response = client.connection.patch("/v0/#{self.class.base_key}/#{client.escape(self.class.table_name)}/#{self.id}", body, { 'Content-Type' => 'application/json' })
@@ -1,3 +1,3 @@
1
1
  module Airrecord
2
- VERSION = "1.0.1"
2
+ VERSION = "1.0.6"
3
3
  end
metadata CHANGED
@@ -1,41 +1,47 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: airrecord
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.1
4
+ version: 1.0.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Simon Eskildsen
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-11-28 00:00:00.000000000 Z
11
+ date: 2021-04-17 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: '0.10'
20
+ - - "<"
21
+ - !ruby/object:Gem::Version
22
+ version: '2.0'
20
23
  type: :runtime
21
24
  prerelease: false
22
25
  version_requirements: !ruby/object:Gem::Requirement
23
26
  requirements:
24
- - - "~>"
27
+ - - ">="
25
28
  - !ruby/object:Gem::Version
26
29
  version: '0.10'
30
+ - - "<"
31
+ - !ruby/object:Gem::Version
32
+ version: '2.0'
27
33
  - !ruby/object:Gem::Dependency
28
34
  name: net-http-persistent
29
35
  requirement: !ruby/object:Gem::Requirement
30
36
  requirements:
31
- - - "~>"
37
+ - - ">="
32
38
  - !ruby/object:Gem::Version
33
39
  version: '2.9'
34
40
  type: :runtime
35
41
  prerelease: false
36
42
  version_requirements: !ruby/object:Gem::Requirement
37
43
  requirements:
38
- - - "~>"
44
+ - - ">="
39
45
  - !ruby/object:Gem::Version
40
46
  version: '2.9'
41
47
  - !ruby/object:Gem::Dependency
@@ -44,14 +50,14 @@ dependencies:
44
50
  requirements:
45
51
  - - "~>"
46
52
  - !ruby/object:Gem::Version
47
- version: '1.12'
53
+ version: '2'
48
54
  type: :development
49
55
  prerelease: false
50
56
  version_requirements: !ruby/object:Gem::Requirement
51
57
  requirements:
52
58
  - - "~>"
53
59
  - !ruby/object:Gem::Version
54
- version: '1.12'
60
+ version: '2'
55
61
  - !ruby/object:Gem::Dependency
56
62
  name: rake
57
63
  requirement: !ruby/object:Gem::Requirement
@@ -110,6 +116,7 @@ files:
110
116
  - Rakefile
111
117
  - airrecord.gemspec
112
118
  - bin/console
119
+ - bin/production-test.rb
113
120
  - bin/setup
114
121
  - lib/airrecord.rb
115
122
  - lib/airrecord/client.rb
@@ -121,7 +128,7 @@ homepage: https://github.com/sirupsen/airrecord
121
128
  licenses:
122
129
  - MIT
123
130
  metadata: {}
124
- post_install_message:
131
+ post_install_message:
125
132
  rdoc_options: []
126
133
  require_paths:
127
134
  - lib
@@ -136,9 +143,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
136
143
  - !ruby/object:Gem::Version
137
144
  version: '0'
138
145
  requirements: []
139
- rubyforge_project:
140
- rubygems_version: 2.7.6
141
- signing_key:
146
+ rubygems_version: 3.1.4
147
+ signing_key:
142
148
  specification_version: 4
143
149
  summary: Airtable client
144
150
  test_files: []