airtable2 0.2.1 → 0.2.3
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 +4 -4
- data/README.md +12 -5
- data/airtable.gemspec +6 -6
- data/lib/airtable/base.rb +13 -10
- data/lib/airtable/client.rb +9 -14
- data/lib/airtable/record.rb +36 -7
- data/lib/airtable/table.rb +32 -20
- data/lib/airtable/version.rb +1 -1
- data/lib/airtable/workspace.rb +20 -0
- data/lib/airtable.rb +1 -2
- metadata +10 -60
- data/docs/Airtable/Base.html +0 -575
- data/docs/Airtable/Client.html +0 -506
- data/docs/Airtable/Error.html +0 -375
- data/docs/Airtable/Record.html +0 -327
- data/docs/Airtable/Resource.html +0 -451
- data/docs/Airtable/Table.html +0 -907
- data/docs/Airtable.html +0 -142
- data/docs/_index.html +0 -189
- data/docs/class_list.html +0 -54
- data/docs/css/common.css +0 -1
- data/docs/css/full_list.css +0 -58
- data/docs/css/style.css +0 -503
- data/docs/file.README.html +0 -169
- data/docs/file_list.html +0 -59
- data/docs/frames.html +0 -22
- data/docs/index.html +0 -169
- data/docs/js/app.js +0 -344
- data/docs/js/full_list.js +0 -242
- data/docs/js/jquery.js +0 -4
- data/docs/method_list.html +0 -270
- data/docs/top-level-namespace.html +0 -110
- data/test/airtable_test.rb +0 -82
- data/test/record_test.rb +0 -23
- data/test/test_helper.rb +0 -15
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 32bae2cc155c84b948c193c8ea5677288ea7123aeded90f6e6121ba196d0a4c7
         | 
| 4 | 
            +
              data.tar.gz: 8efc8479bf004389e25aee1bdc8b88b60dfbc395078dfa4935f4a65afa93bbe4
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 9f0993c56aa18abf1fc80089ebf8b08d377ff70476c04b4df619dd6637a4439bf034a0af2b8f90660244464ceeefc137fd836cd99493b00415ea7108cead000b
         | 
| 7 | 
            +
              data.tar.gz: b1b30151a67ff2ce1f2eb479327ef1a959fa4ca9d671ecd33553d3a75c746f1193010e5d3e1ab457cfbd3ca9e25d385a2c85cc5d850e1a3b2766ddfd65160647
         | 
    
        data/README.md
    CHANGED
    
    | @@ -10,7 +10,7 @@ This is a fork of an abandoned [previous wrapper](https://github.com/nesquena/ai | |
| 10 10 |  | 
| 11 11 | 
             
            Add this line to your application's Gemfile:
         | 
| 12 12 |  | 
| 13 | 
            -
                gem 'airtable2' | 
| 13 | 
            +
                gem 'airtable2'
         | 
| 14 14 |  | 
| 15 15 | 
             
            And then execute:
         | 
| 16 16 |  | 
| @@ -41,12 +41,15 @@ and its tables | |
| 41 41 | 
             
            @tables = @base.tables
         | 
| 42 42 | 
             
            ```
         | 
| 43 43 |  | 
| 44 | 
            -
            and a table's records, so you can navigate the has_many  | 
| 44 | 
            +
            and a table's records, so you can navigate the belongs_to/has_many relationships the way God intended:
         | 
| 45 45 |  | 
| 46 46 | 
             
            ```ruby
         | 
| 47 | 
            -
            @client.bases.first.tables.first.records.first
         | 
| 47 | 
            +
            @record = @client.bases.first.tables.first.records.first
         | 
| 48 | 
            +
            @base = @record.table.base
         | 
| 48 49 | 
             
            ```
         | 
| 49 50 |  | 
| 51 | 
            +
            Note that objects' child records are memoized to avoid unnecessary API calls. If sensitive to stale data, be sure to use the objects instantiated most recently.
         | 
| 52 | 
            +
             | 
| 50 53 | 
             
            ### Manipulating Tables
         | 
| 51 54 |  | 
| 52 55 | 
             
            Create a new table with:
         | 
| @@ -71,10 +74,10 @@ Once you have access to a table from above, we can query a set of records in the | |
| 71 74 |  | 
| 72 75 | 
             
            ### Inserting Records
         | 
| 73 76 |  | 
| 74 | 
            -
            A single record or an array of records can be inserted using the ` | 
| 77 | 
            +
            A single record or an array of records can be inserted using the `create_records` method on a table (max 10 at a time):
         | 
| 75 78 |  | 
| 76 79 | 
             
            ```ruby
         | 
| 77 | 
            -
            @table. | 
| 80 | 
            +
            @table.create_records({ 'Name': 'name value', 'Age': 35 })
         | 
| 78 81 | 
             
            ```
         | 
| 79 82 |  | 
| 80 83 | 
             
            ### Deleting Records
         | 
| @@ -92,6 +95,10 @@ Or as a convenience, you can delete all records with the `dump` method | |
| 92 95 | 
             
            @table.dump
         | 
| 93 96 | 
             
            ```
         | 
| 94 97 |  | 
| 98 | 
            +
            ## Complete documentation
         | 
| 99 | 
            +
             | 
| 100 | 
            +
            YARD-generated documentation is hosted on [GitHub Pages](https://aseroff.github.io/airtable-ruby/).
         | 
| 101 | 
            +
             | 
| 95 102 | 
             
            ## Contributing
         | 
| 96 103 |  | 
| 97 104 | 
             
            1. Fork it ( https://github.com/aseroff/airtable-ruby/fork )
         | 
    
        data/airtable.gemspec
    CHANGED
    
    | @@ -9,19 +9,17 @@ Gem::Specification.new do |spec| | |
| 9 9 | 
             
              spec.version       = Airtable::VERSION
         | 
| 10 10 | 
             
              spec.authors       = ['Andrew Seroff', 'Nathan Esquenazi', 'Alexander Sorokin']
         | 
| 11 11 | 
             
              spec.email         = ['andy@seroff.co']
         | 
| 12 | 
            -
              spec.summary       = ' | 
| 12 | 
            +
              spec.summary       = 'For when Airrecord is just too much.'
         | 
| 13 13 | 
             
              spec.description   = 'Easily connect to airtable data using ruby with access to all of the airtable features.'
         | 
| 14 14 | 
             
              spec.homepage      = 'https://github.com/aseroff/airtable-ruby'
         | 
| 15 15 | 
             
              spec.license       = 'MIT'
         | 
| 16 16 |  | 
| 17 | 
            -
              spec.files         = `git ls-files -z`.split("\x0")
         | 
| 17 | 
            +
              spec.files         = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(docs|test)/}) }
         | 
| 18 18 | 
             
              spec.executables   = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
         | 
| 19 19 | 
             
              spec.require_paths = ['lib']
         | 
| 20 20 |  | 
| 21 21 | 
             
              spec.required_ruby_version = '>= 3.1'
         | 
| 22 | 
            -
              spec.add_dependency ' | 
| 23 | 
            -
              spec.add_dependency 'httparty'
         | 
| 24 | 
            -
              spec.add_dependency 'json'
         | 
| 22 | 
            +
              spec.add_dependency 'httparty', '>= 0.14.0'
         | 
| 25 23 |  | 
| 26 24 | 
             
              spec.add_development_dependency 'bundler'
         | 
| 27 25 | 
             
              spec.add_development_dependency 'minitest'
         | 
| @@ -30,7 +28,9 @@ Gem::Specification.new do |spec| | |
| 30 28 | 
             
              spec.add_development_dependency 'rubocop-md'
         | 
| 31 29 | 
             
              spec.add_development_dependency 'rubocop-minitest'
         | 
| 32 30 | 
             
              spec.add_development_dependency 'rubocop-performance'
         | 
| 31 | 
            +
              spec.add_development_dependency 'rubocop-rake'
         | 
| 33 32 | 
             
              spec.add_development_dependency 'webmock'
         | 
| 34 | 
            -
             | 
| 33 | 
            +
             | 
| 35 34 | 
             
              spec.metadata['rubygems_mfa_required'] = 'true'
         | 
| 35 | 
            +
              spec.metadata['github_repo'] = 'ssh://github.com/aseroff/airtable-ruby'
         | 
| 36 36 | 
             
            end
         | 
    
        data/lib/airtable/base.rb
    CHANGED
    
    | @@ -2,15 +2,15 @@ | |
| 2 2 |  | 
| 3 3 | 
             
            # Object corresponding to an Airtable Base
         | 
| 4 4 | 
             
            class Airtable::Base < Airtable::Resource
         | 
| 5 | 
            -
              def initialize(token, id)
         | 
| 6 | 
            -
                 | 
| 5 | 
            +
              def initialize(token, id, tables = nil)
         | 
| 6 | 
            +
                super(token)
         | 
| 7 7 | 
             
                @id = id
         | 
| 8 | 
            -
                 | 
| 8 | 
            +
                @tables = tables
         | 
| 9 9 | 
             
              end
         | 
| 10 10 |  | 
| 11 | 
            -
              # Expects {name:,description:,fields:[]}
         | 
| 12 | 
            -
              # @see https://airtable.com/developers/web/api/create-table
         | 
| 11 | 
            +
              # @param table_data [Hash] Payload for table creation. Expects {name:,description:,fields:[]}
         | 
| 13 12 | 
             
              # @return [Airtable::Table]
         | 
| 13 | 
            +
              # @see https://airtable.com/developers/web/api/create-table
         | 
| 14 14 | 
             
              def create_table(table_data)
         | 
| 15 15 | 
             
                response = self.class.post("#{base_url}/tables",
         | 
| 16 16 | 
             
                                           body: table_data.to_json).parsed_response
         | 
| @@ -20,17 +20,20 @@ class Airtable::Base < Airtable::Resource | |
| 20 20 | 
             
                Airtable::Table.new @token, @id, response
         | 
| 21 21 | 
             
              end
         | 
| 22 22 |  | 
| 23 | 
            +
              # @return [Array<Airtable::Table>]
         | 
| 23 24 | 
             
              # @see https://airtable.com/developers/web/api/get-base-schema
         | 
| 24 | 
            -
              # @return [Array]<Airtable::Table>
         | 
| 25 25 | 
             
              def tables
         | 
| 26 | 
            -
                 | 
| 26 | 
            +
                @tables ||= begin
         | 
| 27 | 
            +
                  response = self.class.get("#{base_url}/tables")
         | 
| 27 28 |  | 
| 28 | 
            -
             | 
| 29 | 
            +
                  check_and_raise_error(response)
         | 
| 29 30 |  | 
| 30 | 
            -
             | 
| 31 | 
            +
                  response['tables'].map { Airtable::Table.new(@token, @id, _1['id'], _1) }
         | 
| 32 | 
            +
                end
         | 
| 31 33 | 
             
              end
         | 
| 32 34 |  | 
| 33 35 | 
             
              # Instantiate table in base
         | 
| 36 | 
            +
              # @param table_id [String] ID of table
         | 
| 34 37 | 
             
              # @return [Airtable::Table]
         | 
| 35 38 | 
             
              def table(table_id)
         | 
| 36 39 | 
             
                Airtable::Table.new(@token, @id, table_id)
         | 
| @@ -38,6 +41,6 @@ class Airtable::Base < Airtable::Resource | |
| 38 41 |  | 
| 39 42 | 
             
              protected
         | 
| 40 43 |  | 
| 41 | 
            -
              #  | 
| 44 | 
            +
              # Endpoint for bases
         | 
| 42 45 | 
             
              def base_url = "/v0/meta/bases/#{@id}"
         | 
| 43 46 | 
             
            end
         | 
    
        data/lib/airtable/client.rb
    CHANGED
    
    | @@ -2,13 +2,8 @@ | |
| 2 2 |  | 
| 3 3 | 
             
            # Client carrying authorization token
         | 
| 4 4 | 
             
            class Airtable::Client < Airtable::Resource
         | 
| 5 | 
            -
               | 
| 6 | 
            -
                @token = token
         | 
| 7 | 
            -
                self.class.headers({ 'Authorization': "Bearer #{@token}", 'Content-Type': 'application/json' })
         | 
| 8 | 
            -
              end
         | 
| 9 | 
            -
             | 
| 5 | 
            +
              # @return [Array<Airtable::Base>]
         | 
| 10 6 | 
             
              # @see https://airtable.com/developers/web/api/list-bases
         | 
| 11 | 
            -
              # @return [Array]<Airtable::Base>
         | 
| 12 7 | 
             
              def bases
         | 
| 13 8 | 
             
                response = self.class.get('/v0/meta/bases').parsed_response
         | 
| 14 9 |  | 
| @@ -17,22 +12,22 @@ class Airtable::Client < Airtable::Resource | |
| 17 12 | 
             
                response['bases'].map { Airtable::Base.new(@token, _1['id']) }
         | 
| 18 13 | 
             
              end
         | 
| 19 14 |  | 
| 20 | 
            -
              #  | 
| 21 | 
            -
              #  | 
| 22 | 
            -
              # | 
| 23 | 
            -
               | 
| 24 | 
            -
             | 
| 25 | 
            -
               | 
| 26 | 
            -
              # end
         | 
| 15 | 
            +
              # Instantiate workspace
         | 
| 16 | 
            +
              # @param workspace_id [String] ID of workspace
         | 
| 17 | 
            +
              # @return [Airtable::Workspace]
         | 
| 18 | 
            +
              def workspace(workspace_id)
         | 
| 19 | 
            +
                Airtable::Workspace.new(@token, workspace_id)
         | 
| 20 | 
            +
              end
         | 
| 27 21 |  | 
| 28 22 | 
             
              # Instantiate base
         | 
| 23 | 
            +
              # @param base_id [String] ID of base
         | 
| 29 24 | 
             
              # @return [Airtable::Base]
         | 
| 30 25 | 
             
              def base(base_id)
         | 
| 31 26 | 
             
                Airtable::Base.new(@token, base_id)
         | 
| 32 27 | 
             
              end
         | 
| 33 28 |  | 
| 29 | 
            +
              # @return [Hash] User's data based on token
         | 
| 34 30 | 
             
              # @see https://airtable.com/developers/web/api/get-user-id-scopes
         | 
| 35 | 
            -
              # @return [Hash]
         | 
| 36 31 | 
             
              def whoami
         | 
| 37 32 | 
             
                response = self.class.get('/v0/meta/whoami').parsed_response
         | 
| 38 33 |  | 
    
        data/lib/airtable/record.rb
    CHANGED
    
    | @@ -2,15 +2,44 @@ | |
| 2 2 |  | 
| 3 3 | 
             
            # Object corresponding to an Airtable Record
         | 
| 4 4 | 
             
            class Airtable::Record < Airtable::Resource
         | 
| 5 | 
            -
               | 
| 6 | 
            -
             | 
| 7 | 
            -
              def initialize(token, base_id, table_id, api_response)
         | 
| 8 | 
            -
                @token = token
         | 
| 5 | 
            +
              def initialize(token, base_id, table_id, id, data = nil)
         | 
| 6 | 
            +
                super(token)
         | 
| 9 7 | 
             
                @base_id = base_id
         | 
| 10 8 | 
             
                @table_id = table_id
         | 
| 11 | 
            -
                 | 
| 12 | 
            -
             | 
| 9 | 
            +
                @id = id
         | 
| 10 | 
            +
                @data = data
         | 
| 11 | 
            +
              end
         | 
| 12 | 
            +
             | 
| 13 | 
            +
              # Return record data, retrieve if not present
         | 
| 14 | 
            +
              # @return [Hash]
         | 
| 15 | 
            +
              # @see https://airtable.com/developers/web/api/get-record
         | 
| 16 | 
            +
              def data
         | 
| 17 | 
            +
                @data ||= begin
         | 
| 18 | 
            +
                  response = self.class.get(record_url).parsed_response
         | 
| 19 | 
            +
             | 
| 20 | 
            +
                  check_and_raise_error(response)
         | 
| 21 | 
            +
             | 
| 22 | 
            +
                  response
         | 
| 13 23 | 
             
                end
         | 
| 14 | 
            -
                self.class.headers({ 'Authorization': "Bearer #{@token}", 'Content-Type': 'application/json' })
         | 
| 15 24 | 
             
              end
         | 
| 25 | 
            +
             | 
| 26 | 
            +
              # Instantiate record's table
         | 
| 27 | 
            +
              # @return [Airtable::Table]
         | 
| 28 | 
            +
              def table = Airtable::Table.new(token, @base_id, @table_id)
         | 
| 29 | 
            +
             | 
| 30 | 
            +
              # @return [Airtable::Record]
         | 
| 31 | 
            +
              # @see https://airtable.com/developers/web/api/update-record
         | 
| 32 | 
            +
              def update(record_data)
         | 
| 33 | 
            +
                response = self.class.patch(record_url,
         | 
| 34 | 
            +
                                            body: { fields: record_data }.to_json).parsed_response
         | 
| 35 | 
            +
             | 
| 36 | 
            +
                check_and_raise_error(response)
         | 
| 37 | 
            +
             | 
| 38 | 
            +
                Airtable::Record.new @token, @base_id, @table_id, response['id'], response
         | 
| 39 | 
            +
              end
         | 
| 40 | 
            +
             | 
| 41 | 
            +
              protected
         | 
| 42 | 
            +
             | 
| 43 | 
            +
              # Endpoint for records
         | 
| 44 | 
            +
              def record_url = "/v0/#{@base_id}/#{@table_id}/#{@id}"
         | 
| 16 45 | 
             
            end
         | 
    
        data/lib/airtable/table.rb
    CHANGED
    
    | @@ -4,46 +4,55 @@ | |
| 4 4 | 
             
            class Airtable::Table < Airtable::Resource
         | 
| 5 5 | 
             
              attr_reader :name
         | 
| 6 6 |  | 
| 7 | 
            -
              def initialize(token, base_id,  | 
| 8 | 
            -
                 | 
| 7 | 
            +
              def initialize(token, base_id, id, data = nil)
         | 
| 8 | 
            +
                super(token)
         | 
| 9 9 | 
             
                @base_id = base_id
         | 
| 10 | 
            -
                 | 
| 11 | 
            -
             | 
| 12 | 
            -
                end
         | 
| 13 | 
            -
                self.class.headers({ 'Authorization': "Bearer #{@token}", 'Content-Type': 'application/json' })
         | 
| 10 | 
            +
                @id = id
         | 
| 11 | 
            +
                @data = data
         | 
| 14 12 | 
             
              end
         | 
| 15 13 |  | 
| 16 | 
            -
              #  | 
| 14 | 
            +
              # Return table model, retrieve if not present
         | 
| 15 | 
            +
              # @return [Hash]
         | 
| 16 | 
            +
              # @see https://airtable.com/developers/web/api/get-base-schema
         | 
| 17 | 
            +
              def data = @data ||= base.tables.find { _1.id == @id }.data
         | 
| 18 | 
            +
             | 
| 19 | 
            +
              # Instantiate table's base
         | 
| 20 | 
            +
              # @return [Airtable::Base]
         | 
| 21 | 
            +
              def base = Airtable::Base.new(token, @base_id)
         | 
| 22 | 
            +
             | 
| 17 23 | 
             
              # @return [Array<Airtable::Record>]
         | 
| 24 | 
            +
              # @see https://airtable.com/developers/web/api/list-records
         | 
| 18 25 | 
             
              def records
         | 
| 19 | 
            -
                 | 
| 26 | 
            +
                @records ||= begin
         | 
| 27 | 
            +
                  response = self.class.get(table_url)
         | 
| 20 28 |  | 
| 21 | 
            -
             | 
| 29 | 
            +
                  check_and_raise_error(response)
         | 
| 22 30 |  | 
| 23 | 
            -
             | 
| 31 | 
            +
                  response['records'].map { Airtable::Record.new(@token, @base_id, @id, _1['id'], _1) }
         | 
| 32 | 
            +
                end
         | 
| 24 33 | 
             
              end
         | 
| 25 34 |  | 
| 26 35 | 
             
              # Instantiate record in table
         | 
| 27 | 
            -
              # @ | 
| 28 | 
            -
               | 
| 29 | 
            -
             | 
| 30 | 
            -
              end
         | 
| 36 | 
            +
              # @param record_id [String] ID of record
         | 
| 37 | 
            +
              # @return [Airtable::Record]
         | 
| 38 | 
            +
              def record(record_id) = Airtable::Record.new(@token, @base_id, @id, record_id)
         | 
| 31 39 |  | 
| 32 | 
            -
              # @see https://airtable.com/developers/web/api/update-table
         | 
| 33 40 | 
             
              # @return [Airtable::Table]
         | 
| 41 | 
            +
              # @see https://airtable.com/developers/web/api/update-table
         | 
| 34 42 | 
             
              def update(table_data)
         | 
| 35 43 | 
             
                response = self.class.patch("/v0/meta/bases/#{@base_id}/tables/#{@id}",
         | 
| 36 44 | 
             
                                            body: table_data.to_json).parsed_response
         | 
| 37 45 |  | 
| 38 46 | 
             
                check_and_raise_error(response)
         | 
| 39 47 |  | 
| 40 | 
            -
                Airtable::Table.new @token, @base_id, response
         | 
| 48 | 
            +
                Airtable::Table.new @token, @base_id, response['id'], response
         | 
| 41 49 | 
             
              end
         | 
| 42 50 |  | 
| 43 | 
            -
              # @ | 
| 44 | 
            -
              # @see https://airtable.com/developers/web/api/create-records
         | 
| 51 | 
            +
              # @param [Array] Record objects to create
         | 
| 45 52 | 
             
              # @return [Array<Airtable::Record>]
         | 
| 46 | 
            -
               | 
| 53 | 
            +
              # @see https://airtable.com/developers/web/api/create-records
         | 
| 54 | 
            +
              # @note API maximum of 10 records at a time
         | 
| 55 | 
            +
              def create_records(records)
         | 
| 47 56 | 
             
                response = self.class.post(table_url,
         | 
| 48 57 | 
             
                                           body: { records: Array(records).map { |fields| { fields: } } }.to_json).parsed_response
         | 
| 49 58 |  | 
| @@ -52,8 +61,10 @@ class Airtable::Table < Airtable::Resource | |
| 52 61 | 
             
                response['records'].map { Airtable::Record.new(@token, @base_id, @id, _1) }
         | 
| 53 62 | 
             
              end
         | 
| 54 63 |  | 
| 55 | 
            -
              # @ | 
| 64 | 
            +
              # @param [Array] IDs of records to delete
         | 
| 56 65 | 
             
              # @return [Array] Deleted record ids
         | 
| 66 | 
            +
              # @see https://airtable.com/developers/web/api/delete-multiple-records
         | 
| 67 | 
            +
              # @note API maximum of 10 records at a time
         | 
| 57 68 | 
             
              def delete_records(record_ids)
         | 
| 58 69 | 
             
                params = Array(record_ids).compact.map { "records[]=#{_1}" }.join('&')
         | 
| 59 70 | 
             
                response = self.class.delete("#{table_url}?#{params}").parsed_response
         | 
| @@ -73,5 +84,6 @@ class Airtable::Table < Airtable::Resource | |
| 73 84 |  | 
| 74 85 | 
             
              protected
         | 
| 75 86 |  | 
| 87 | 
            +
              # Endpoint for tables
         | 
| 76 88 | 
             
              def table_url = "/v0/#{@base_id}/#{@id}"
         | 
| 77 89 | 
             
            end
         | 
    
        data/lib/airtable/version.rb
    CHANGED
    
    
| @@ -0,0 +1,20 @@ | |
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            # Object corresponding to an Airtable Workspace
         | 
| 4 | 
            +
            class Airtable::Workspace < Airtable::Resource
         | 
| 5 | 
            +
              def initialize(token, id)
         | 
| 6 | 
            +
                super(token)
         | 
| 7 | 
            +
                @id = id
         | 
| 8 | 
            +
              end
         | 
| 9 | 
            +
             | 
| 10 | 
            +
              # @param base_data [Hash] Payload for base
         | 
| 11 | 
            +
              # @see https://airtable.com/developers/web/api/create-base
         | 
| 12 | 
            +
              def create_base(base_data)
         | 
| 13 | 
            +
                response = self.class.post('/v0/meta/bases',
         | 
| 14 | 
            +
                                           body: base_data.merge({ workspaceId: @id }).to_json).parsed_response
         | 
| 15 | 
            +
             | 
| 16 | 
            +
                check_and_raise_error(response)
         | 
| 17 | 
            +
             | 
| 18 | 
            +
                Airtable::Base.new @token, response
         | 
| 19 | 
            +
              end
         | 
| 20 | 
            +
            end
         | 
    
        data/lib/airtable.rb
    CHANGED
    
    | @@ -1,8 +1,6 @@ | |
| 1 1 | 
             
            # frozen_string_literal: true
         | 
| 2 2 |  | 
| 3 3 | 
             
            require 'httparty'
         | 
| 4 | 
            -
            require 'delegate'
         | 
| 5 | 
            -
            require 'active_support/core_ext/hash'
         | 
| 6 4 | 
             
            require 'json'
         | 
| 7 5 |  | 
| 8 6 | 
             
            require 'airtable/version'
         | 
| @@ -10,5 +8,6 @@ require 'airtable/resource' | |
| 10 8 | 
             
            require 'airtable/record'
         | 
| 11 9 | 
             
            require 'airtable/table'
         | 
| 12 10 | 
             
            require 'airtable/base'
         | 
| 11 | 
            +
            require 'airtable/workspace'
         | 
| 13 12 | 
             
            require 'airtable/client'
         | 
| 14 13 | 
             
            require 'airtable/error'
         | 
    
        metadata
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: airtable2
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0.2. | 
| 4 | 
            +
              version: 0.2.3
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Andrew Seroff
         | 
| @@ -10,50 +10,22 @@ authors: | |
| 10 10 | 
             
            autorequire:
         | 
| 11 11 | 
             
            bindir: bin
         | 
| 12 12 | 
             
            cert_chain: []
         | 
| 13 | 
            -
            date: 2024-10- | 
| 13 | 
            +
            date: 2024-10-28 00:00:00.000000000 Z
         | 
| 14 14 | 
             
            dependencies:
         | 
| 15 | 
            -
            - !ruby/object:Gem::Dependency
         | 
| 16 | 
            -
              name: activesupport
         | 
| 17 | 
            -
              requirement: !ruby/object:Gem::Requirement
         | 
| 18 | 
            -
                requirements:
         | 
| 19 | 
            -
                - - ">="
         | 
| 20 | 
            -
                  - !ruby/object:Gem::Version
         | 
| 21 | 
            -
                    version: '0'
         | 
| 22 | 
            -
              type: :runtime
         | 
| 23 | 
            -
              prerelease: false
         | 
| 24 | 
            -
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 25 | 
            -
                requirements:
         | 
| 26 | 
            -
                - - ">="
         | 
| 27 | 
            -
                  - !ruby/object:Gem::Version
         | 
| 28 | 
            -
                    version: '0'
         | 
| 29 15 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 30 16 | 
             
              name: httparty
         | 
| 31 17 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 32 18 | 
             
                requirements:
         | 
| 33 19 | 
             
                - - ">="
         | 
| 34 20 | 
             
                  - !ruby/object:Gem::Version
         | 
| 35 | 
            -
                    version:  | 
| 36 | 
            -
              type: :runtime
         | 
| 37 | 
            -
              prerelease: false
         | 
| 38 | 
            -
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 39 | 
            -
                requirements:
         | 
| 40 | 
            -
                - - ">="
         | 
| 41 | 
            -
                  - !ruby/object:Gem::Version
         | 
| 42 | 
            -
                    version: '0'
         | 
| 43 | 
            -
            - !ruby/object:Gem::Dependency
         | 
| 44 | 
            -
              name: json
         | 
| 45 | 
            -
              requirement: !ruby/object:Gem::Requirement
         | 
| 46 | 
            -
                requirements:
         | 
| 47 | 
            -
                - - ">="
         | 
| 48 | 
            -
                  - !ruby/object:Gem::Version
         | 
| 49 | 
            -
                    version: '0'
         | 
| 21 | 
            +
                    version: 0.14.0
         | 
| 50 22 | 
             
              type: :runtime
         | 
| 51 23 | 
             
              prerelease: false
         | 
| 52 24 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 53 25 | 
             
                requirements:
         | 
| 54 26 | 
             
                - - ">="
         | 
| 55 27 | 
             
                  - !ruby/object:Gem::Version
         | 
| 56 | 
            -
                    version:  | 
| 28 | 
            +
                    version: 0.14.0
         | 
| 57 29 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 58 30 | 
             
              name: bundler
         | 
| 59 31 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| @@ -153,7 +125,7 @@ dependencies: | |
| 153 125 | 
             
                  - !ruby/object:Gem::Version
         | 
| 154 126 | 
             
                    version: '0'
         | 
| 155 127 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 156 | 
            -
              name:  | 
| 128 | 
            +
              name: rubocop-rake
         | 
| 157 129 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 158 130 | 
             
                requirements:
         | 
| 159 131 | 
             
                - - ">="
         | 
| @@ -167,7 +139,7 @@ dependencies: | |
| 167 139 | 
             
                  - !ruby/object:Gem::Version
         | 
| 168 140 | 
             
                    version: '0'
         | 
| 169 141 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 170 | 
            -
              name:  | 
| 142 | 
            +
              name: webmock
         | 
| 171 143 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 172 144 | 
             
                requirements:
         | 
| 173 145 | 
             
                - - ">="
         | 
| @@ -195,27 +167,6 @@ files: | |
| 195 167 | 
             
            - README.md
         | 
| 196 168 | 
             
            - Rakefile
         | 
| 197 169 | 
             
            - airtable.gemspec
         | 
| 198 | 
            -
            - docs/Airtable.html
         | 
| 199 | 
            -
            - docs/Airtable/Base.html
         | 
| 200 | 
            -
            - docs/Airtable/Client.html
         | 
| 201 | 
            -
            - docs/Airtable/Error.html
         | 
| 202 | 
            -
            - docs/Airtable/Record.html
         | 
| 203 | 
            -
            - docs/Airtable/Resource.html
         | 
| 204 | 
            -
            - docs/Airtable/Table.html
         | 
| 205 | 
            -
            - docs/_index.html
         | 
| 206 | 
            -
            - docs/class_list.html
         | 
| 207 | 
            -
            - docs/css/common.css
         | 
| 208 | 
            -
            - docs/css/full_list.css
         | 
| 209 | 
            -
            - docs/css/style.css
         | 
| 210 | 
            -
            - docs/file.README.html
         | 
| 211 | 
            -
            - docs/file_list.html
         | 
| 212 | 
            -
            - docs/frames.html
         | 
| 213 | 
            -
            - docs/index.html
         | 
| 214 | 
            -
            - docs/js/app.js
         | 
| 215 | 
            -
            - docs/js/full_list.js
         | 
| 216 | 
            -
            - docs/js/jquery.js
         | 
| 217 | 
            -
            - docs/method_list.html
         | 
| 218 | 
            -
            - docs/top-level-namespace.html
         | 
| 219 170 | 
             
            - lib/airtable.rb
         | 
| 220 171 | 
             
            - lib/airtable/base.rb
         | 
| 221 172 | 
             
            - lib/airtable/client.rb
         | 
| @@ -224,14 +175,13 @@ files: | |
| 224 175 | 
             
            - lib/airtable/resource.rb
         | 
| 225 176 | 
             
            - lib/airtable/table.rb
         | 
| 226 177 | 
             
            - lib/airtable/version.rb
         | 
| 227 | 
            -
            -  | 
| 228 | 
            -
            - test/record_test.rb
         | 
| 229 | 
            -
            - test/test_helper.rb
         | 
| 178 | 
            +
            - lib/airtable/workspace.rb
         | 
| 230 179 | 
             
            homepage: https://github.com/aseroff/airtable-ruby
         | 
| 231 180 | 
             
            licenses:
         | 
| 232 181 | 
             
            - MIT
         | 
| 233 182 | 
             
            metadata:
         | 
| 234 183 | 
             
              rubygems_mfa_required: 'true'
         | 
| 184 | 
            +
              github_repo: ssh://github.com/aseroff/airtable-ruby
         | 
| 235 185 | 
             
            post_install_message:
         | 
| 236 186 | 
             
            rdoc_options: []
         | 
| 237 187 | 
             
            require_paths:
         | 
| @@ -247,8 +197,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement | |
| 247 197 | 
             
                - !ruby/object:Gem::Version
         | 
| 248 198 | 
             
                  version: '0'
         | 
| 249 199 | 
             
            requirements: []
         | 
| 250 | 
            -
            rubygems_version: 3.5. | 
| 200 | 
            +
            rubygems_version: 3.5.22
         | 
| 251 201 | 
             
            signing_key:
         | 
| 252 202 | 
             
            specification_version: 4
         | 
| 253 | 
            -
            summary:  | 
| 203 | 
            +
            summary: For when Airrecord is just too much.
         | 
| 254 204 | 
             
            test_files: []
         |