app_rail-airtable 0.4.0 → 0.4.3

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: 5154709a34596c961227e058380aa927b7643df717e67289a6158b43f65b2213
4
- data.tar.gz: 39b53b565d80d517aedc654f04b21f7d64189c4b0b62bd30ec1ea53252e9c1bb
3
+ metadata.gz: f789fb754083245cc062131945cb235ac19070edd2e3ae154e5a233b1533f76b
4
+ data.tar.gz: '08a45094b4ba5b5882a8a1baed2acc39c3345adaa8d8557b8ae2daaa3a2bb96c'
5
5
  SHA512:
6
- metadata.gz: 68bfcd69273296c2eca597bf4bceb3bfefdd41f153d94a020f96e2604e8dcf7426359ea74e4ddcab6197a7ecf3f319dbefe204af1f9471b31cd83d921afaa87c
7
- data.tar.gz: 23ce7443a261f2eb431c42f2904d1b7d31a98c843adb3e601c6d2cc6610a02d15597e4b65bef49dffb4d599df17a07b97bb0550d66b5f4eb122c66141b94a6ab
6
+ metadata.gz: e9bdf986a03d4ce2e00368f7a4ac5048a8b2271778647d1ea27adce3c8b8fa185854e339b2769ee0e0acfce5bfb6dc985cdafc3b4787a8f78fad2da5fdda1681
7
+ data.tar.gz: 995431a75366484398c7d90e1e12a3950ac47c23ca6ebe78b9410320dd17224cf08d401df7f613f60b62dca8458103f506d5ebe3e6d5bb0aea0a60a726cce2dc
data/Gemfile CHANGED
@@ -1,9 +1,11 @@
1
- source "https://rubygems.org"
1
+ # frozen_string_literal: true
2
+
3
+ source 'https://rubygems.org'
2
4
 
3
5
  # Specify your gem's dependencies in app_rail-airtable.gemspec
4
6
  gemspec
5
7
 
6
- gem "rake", "~> 12.0"
7
- gem "rspec", "~> 3.0"
8
- gem "thor"
9
- gem "byebug"
8
+ gem 'byebug'
9
+ gem 'rake', '~> 12.0'
10
+ gem 'rspec', '~> 3.0'
11
+ gem 'thor'
data/Gemfile.lock CHANGED
@@ -1,9 +1,10 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- app_rail-airtable (0.4.0)
4
+ app_rail-airtable (0.4.3)
5
5
  activesupport
6
6
  airrecord
7
+ app_rail-steps
7
8
  bcrypt
8
9
  faraday (~> 2.2)
9
10
  faraday-net_http_persistent (~> 2.0)
@@ -13,23 +14,25 @@ PATH
13
14
  GEM
14
15
  remote: https://rubygems.org/
15
16
  specs:
16
- activesupport (7.0.2.2)
17
+ activesupport (7.0.2.3)
17
18
  concurrent-ruby (~> 1.0, >= 1.0.2)
18
19
  i18n (>= 1.6, < 2)
19
20
  minitest (>= 5.1)
20
21
  tzinfo (~> 2.0)
21
- airrecord (1.0.8)
22
+ airrecord (1.0.9)
22
23
  faraday (>= 0.10, < 3.0)
24
+ faraday-net_http_persistent
23
25
  net-http-persistent
24
- bcrypt (3.1.16)
26
+ app_rail-steps (0.2.0)
27
+ bcrypt (3.1.17)
25
28
  byebug (11.1.3)
26
- concurrent-ruby (1.1.9)
29
+ concurrent-ruby (1.1.10)
27
30
  connection_pool (2.2.5)
28
31
  diff-lcs (1.4.4)
29
32
  faraday (2.2.0)
30
33
  faraday-net_http (~> 2.0)
31
34
  ruby2_keywords (>= 0.0.4)
32
- faraday-net_http (2.0.1)
35
+ faraday-net_http (2.0.2)
33
36
  faraday-net_http_persistent (2.0.1)
34
37
  faraday-net_http
35
38
  net-http-persistent (~> 4.0)
data/Rakefile CHANGED
@@ -1,6 +1,8 @@
1
- require "bundler/gem_tasks"
2
- require "rspec/core/rake_task"
1
+ # frozen_string_literal: true
2
+
3
+ require 'bundler/gem_tasks'
4
+ require 'rspec/core/rake_task'
3
5
 
4
6
  RSpec::Core::RakeTask.new(:spec)
5
7
 
6
- task :default => :spec
8
+ task default: :spec
@@ -1,37 +1,40 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require_relative 'lib/app_rail/airtable/version'
2
4
 
3
5
  Gem::Specification.new do |spec|
4
- spec.name = "app_rail-airtable"
6
+ spec.name = 'app_rail-airtable'
5
7
  spec.version = AppRail::Airtable::VERSION
6
- spec.authors = ["Matt Brooke-Smith"]
7
- spec.email = ["matt@futureworkshops.com"]
8
+ spec.authors = ['Matt Brooke-Smith']
9
+ spec.email = ['matt@futureworkshops.com']
8
10
 
9
- spec.summary = %q{Gem to help building App Rail servers using Airtable as a backend}
10
- spec.homepage = "https://github.com/FutureWorkshops/app_rail-airtable"
11
- spec.license = "MIT"
12
- spec.required_ruby_version = Gem::Requirement.new(">= 2.3.0")
11
+ spec.summary = 'Gem to help building App Rail servers using Airtable as a backend'
12
+ spec.homepage = 'https://github.com/FutureWorkshops/app_rail-airtable'
13
+ spec.license = 'MIT'
14
+ spec.required_ruby_version = Gem::Requirement.new('>= 2.3.0')
13
15
 
14
- spec.metadata["homepage_uri"] = spec.homepage
15
- spec.metadata["source_code_uri"] = "https://github.com/FutureWorkshops/app_rail-airtable"
16
+ spec.metadata['homepage_uri'] = spec.homepage
17
+ spec.metadata['source_code_uri'] = 'https://github.com/FutureWorkshops/app_rail-airtable'
16
18
 
17
19
  # Specify which files should be added to the gem when it is released.
18
20
  # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
19
- spec.files = Dir.chdir(File.expand_path('..', __FILE__)) do
21
+ spec.files = Dir.chdir(File.expand_path(__dir__)) do
20
22
  `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
21
23
  end
22
-
24
+
23
25
  spec.bindir = 'bin'
24
26
  spec.executables << 'ara_generator'
25
-
26
- spec.require_paths = ["lib"]
27
+
28
+ spec.require_paths = ['lib']
29
+ spec.add_dependency 'app_rail-steps'
27
30
  spec.add_dependency 'activesupport'
28
- spec.add_dependency 'sinatra'
29
31
  spec.add_dependency 'airrecord'
32
+ spec.add_dependency 'bcrypt'
30
33
  spec.add_dependency 'faraday', '~> 2.2'
31
34
  spec.add_dependency 'faraday-net_http_persistent', '~> 2.0' # workaround to make Faraday work after upgrading to 2.2.0
35
+ spec.add_dependency 'sinatra'
32
36
  spec.add_dependency 'thor'
33
- spec.add_dependency 'bcrypt'
34
-
35
- spec.add_development_dependency 'rspec'
37
+
36
38
  spec.add_development_dependency 'rack-test'
37
- end
39
+ spec.add_development_dependency 'rspec'
40
+ end
data/bin/ara_generator CHANGED
@@ -1,6 +1,8 @@
1
1
  #!/usr/bin/env ruby
2
- require "bundler/setup"
2
+ # frozen_string_literal: true
3
+
4
+ require 'bundler/setup'
3
5
  require 'app_rail/airtable/generator'
4
6
  require 'byebug'
5
7
 
6
- AppRail::Airtable::Generator.start(ARGV)
8
+ AppRail::Airtable::Generator.start(ARGV)
data/bin/console CHANGED
@@ -1,7 +1,8 @@
1
1
  #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
2
3
 
3
- require "bundler/setup"
4
- require "app_rail/airtable"
4
+ require 'bundler/setup'
5
+ require 'app_rail/airtable'
5
6
 
6
7
  # You can add fixtures and/or initialization code here to make experimenting
7
8
  # with your gem easier. You can also use a different console, if you like.
@@ -10,5 +11,5 @@ require "app_rail/airtable"
10
11
  # require "pry"
11
12
  # Pry.start
12
13
 
13
- require "irb"
14
+ require 'irb'
14
15
  IRB.start(__FILE__)
@@ -1,64 +1,67 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'airrecord'
4
+ require 'app_rail/steps'
2
5
  require 'active_support/core_ext/string/inflections'
3
6
 
4
7
  module AppRail
5
8
  module Airtable
6
9
  class ApplicationRecord < Airrecord::Table
7
10
  include ActiveSupport::Inflector
8
-
11
+ include AppRail::Steps::Displayable
12
+
9
13
  def self.base_key
10
- ENV.fetch("AIRTABLE_BASE_ID")
14
+ ENV.fetch('AIRTABLE_BASE_ID')
11
15
  end
12
-
16
+
13
17
  def self.table_name
14
- self.name.pluralize
18
+ name.pluralize
15
19
  end
16
-
20
+
17
21
  def self.airtable_attr(*attributes)
18
22
  attributes.each do |attribute|
19
23
  define_method(attribute.to_s.snake_case) { self[attribute] }
20
24
  define_method("#{attribute.to_s.snake_case}=") { |value| self[attribute] = value }
21
25
  end
22
26
  end
23
-
27
+
24
28
  # Step utilities
25
29
  def self.ar_list_item(text:, detail_text: nil, image: nil, sf_symbol: nil, material_icon: nil)
26
30
  define_method(:ar_list_item_as_json) do
27
31
  {
28
- id: self.id,
29
- text: method_value(text).to_s,
30
- detailText: method_value(detail_text).to_s,
31
- imageURL: method_value(image),
32
- sfSymbolName: method_value(sf_symbol),
32
+ id: id,
33
+ text: method_value(text).to_s,
34
+ detailText: method_value(detail_text).to_s,
35
+ imageURL: method_value(image),
36
+ sfSymbolName: method_value(sf_symbol),
33
37
  materialIconName: method_value(material_icon)
34
38
  }.compact
35
39
  end
36
40
  end
37
-
41
+
38
42
  def self.ar_stack(text_items:)
39
43
  define_method(:ar_stack_as_json) do
40
- text_items.map{|ti| {type: :text, label: ti, text: self[ti].to_s} }
44
+ text_items.map { |ti| { type: :text, label: ti, text: self[ti].to_s } }
41
45
  end
42
46
  end
43
-
47
+
44
48
  # Customisable behaviour
45
-
49
+
46
50
  # Override to provide custom sorting or filtering for index
47
51
  def self.index(user:)
48
52
  all
49
53
  end
50
-
54
+
51
55
  private
52
-
56
+
53
57
  def method_value(name)
54
58
  send(name) if name.present?
55
59
  end
56
-
60
+
57
61
  # size is either :small, :large or :full
58
62
  def image(name, index: 0, size: :full)
59
- self[name][index]["thumbnails"][size.to_s]["url"] if self[name] && self[name].length > index
63
+ self[name][index]['thumbnails'][size.to_s]['url'] if self[name] && self[name].length > index
60
64
  end
61
-
62
65
  end
63
66
  end
64
- end
67
+ end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'bcrypt'
2
4
  require 'securerandom'
3
5
 
@@ -5,50 +7,50 @@ module AppRail
5
7
  module Airtable
6
8
  module Authenticatable
7
9
  include BCrypt
8
-
10
+
9
11
  def self.included(klass)
10
12
  klass.extend(ClassMethods)
11
13
  klass.prepend(InstanceMethods) # prepends `initialize` instance method in order to take precedence over Airrecord::Table#initialize
12
14
  end
13
-
15
+
14
16
  module ClassMethods
15
17
  def create(email:, password:)
16
- user = new("Email" => email, "Password Hash" => password_hash(password), "Access Token" => next_access_token)
18
+ user = new('Email' => email, 'Password Hash' => password_hash(password), 'Access Token' => next_access_token)
17
19
  user.create
18
20
  user
19
21
  end
20
-
22
+
21
23
  def create_session_as_json(email:, password:)
22
24
  user = find_by_email_and_password(email, password)
23
25
  return nil unless user
24
-
25
- user["Access Token"] = next_access_token
26
+
27
+ user['Access Token'] = next_access_token
26
28
  user.save
27
29
  user&.oauth_session
28
30
  end
29
-
31
+
30
32
  def find_by_email_and_password(email, password)
31
33
  user = all(filter: "{Email} = \"#{email}\"").first
32
34
  user&.valid_password?(password) ? user : nil
33
35
  end
34
36
 
35
37
  def find_by_access_token(access_token)
36
- all(filter: "{Access Token} = \"#{access_token}\"").first
38
+ all(filter: "{Access Token} = \"#{access_token}\"").first
37
39
  end
38
-
40
+
39
41
  def password_hash(password)
40
42
  BCrypt::Password.create(password)
41
- end
42
-
43
+ end
44
+
43
45
  def next_access_token
44
46
  SecureRandom.hex
45
- end
47
+ end
46
48
  end
47
49
 
48
50
  module InstanceMethods
49
51
  def initialize(*args)
50
52
  if (kwargs = args.first) && kwargs.is_a?(Hash) && kwargs.size == 2 && kwargs.key?(:email) && kwargs.key?(:password)
51
- super("Email" => kwargs[:email], "Password Hash" => self.class.password_hash(kwargs[:password]), "Access Token" => self.class.next_access_token)
53
+ super('Email' => kwargs[:email], 'Password Hash' => self.class.password_hash(kwargs[:password]), 'Access Token' => self.class.next_access_token)
52
54
  else
53
55
  super
54
56
  end
@@ -58,14 +60,14 @@ module AppRail
58
60
  def valid_password?(password)
59
61
  BCrypt::Password.new(password_hash) == password
60
62
  end
61
-
63
+
62
64
  def password_hash
63
- self["Password Hash"]
65
+ self['Password Hash']
64
66
  end
65
-
67
+
66
68
  def oauth_session
67
- { access_token: self["Access Token"], scope: :user, refresh_token: "", token_type: :bearer, expires_in: 60000 }
69
+ { access_token: self['Access Token'], scope: :user, refresh_token: '', token_type: :bearer, expires_in: 60_000 }
68
70
  end
69
71
  end
70
72
  end
71
- end
73
+ end
@@ -1,27 +1,30 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module AppRail
2
4
  module Airtable
3
5
  module AuthenticationHelpers
4
6
  def current_user
5
7
  @current_user ||= find_current_user
6
8
  end
7
-
9
+
8
10
  def find_current_user
9
11
  authorization_header && bearer_token ? find_authenticatable_resource(access_token: bearer_token) : nil
10
12
  end
11
-
13
+
12
14
  def bearer_token
13
- authorization_values = authorization_header.split(" ")
15
+ authorization_values = authorization_header.split(' ')
14
16
  return nil unless authorization_values.count > 1
17
+
15
18
  authorization_values[1]
16
19
  end
17
-
20
+
18
21
  def authorization_header
19
- request.env["HTTP_AUTHORIZATION"]
22
+ request.env['HTTP_AUTHORIZATION']
20
23
  end
21
-
24
+
22
25
  def authenticate!
23
26
  halt 401 unless current_user
24
27
  end
25
28
  end
26
29
  end
27
- end
30
+ end
@@ -1,57 +1,57 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'sinatra'
2
4
  require 'json'
3
5
  require 'active_support'
4
6
 
5
7
  # TODO: MBS - move to configure block or other
6
- Airrecord.api_key = ENV.fetch("AIRTABLE_API_KEY")
8
+ Airrecord.api_key = ENV.fetch('AIRTABLE_API_KEY')
7
9
 
8
10
  class Symbol
9
-
10
11
  def pluralize
11
12
  ActiveSupport::Inflector.pluralize(self)
12
13
  end
13
-
14
+
14
15
  def classify
15
- ActiveSupport::Inflector.classify(self)
16
+ ActiveSupport::Inflector.classify(self)
16
17
  end
17
-
18
+
18
19
  def classify_constantize
19
20
  ActiveSupport::Inflector.constantize(classify)
20
21
  end
21
-
22
22
  end
23
23
 
24
24
  module AppRail
25
25
  module Airtable
26
26
  class Sinatra < Sinatra::Base
27
27
  @@authenticated_route = false
28
-
28
+
29
29
  helpers do
30
30
  def request_body_as_json
31
31
  request.body.rewind
32
32
  JSON.parse(request.body.read)
33
33
  end
34
-
34
+
35
35
  def params_and_body_as_json
36
36
  request_body_as_json.merge(params)
37
37
  end
38
38
  end
39
-
40
- def self.authenticatable_resources(name, only: [:index, :show, :create, :update])
41
-
39
+
40
+ def self.authenticatable_resources(name, only: %i[index show create update])
42
41
  # If authentication is used then include the correct helpers
43
42
  # Allowing the routes to use `authenticate!` and `current_user`
44
43
  helpers AppRail::Airtable::AuthenticationHelpers
45
-
44
+
46
45
  resources(name, only: only)
47
-
46
+
48
47
  return unless block_given?
48
+
49
49
  @@authenticated_route = true
50
50
  yield
51
51
  @@authenticated_route = false
52
52
  end
53
53
 
54
- def self.resources(name, only: [:index, :show, :create, :update])
54
+ def self.resources(name, only: %i[index show create update])
55
55
  only = [only] if only.is_a?(Symbol)
56
56
 
57
57
  index_route(name, authenticated_route?) if only.include?(:index)
@@ -59,34 +59,36 @@ module AppRail
59
59
  create_route(name, authenticated_route?) if only.include?(:create)
60
60
  update_route(name, authenticated_route?) if only.include?(:update)
61
61
  end
62
-
62
+
63
63
  def self.index_route(name, authenticated_route)
64
- get "/#{name.to_s}" do
64
+ get "/#{name}" do
65
65
  authenticate! if authenticated_route
66
66
  name.classify_constantize.index(user: authenticated_route ? current_user : nil).map(&:ar_list_item_as_json).to_json
67
67
  end
68
68
  end
69
-
69
+
70
70
  def self.show_route(name, authenticated_route)
71
- get "/#{name.to_s}/:id" do
71
+ get "/#{name}/:id" do
72
72
  authenticate! if authenticated_route
73
73
  name.classify_constantize.find(params['id']).ar_stack_as_json.to_json
74
74
  end
75
75
  end
76
-
76
+
77
77
  def self.create_route(name, authenticated_route)
78
- post "/#{name.to_s}" do
78
+ post "/#{name}" do
79
79
  authenticate! if authenticated_route
80
- as_json = name.classify_constantize.create_as_json(current_user: authenticated_route ? current_user : nil, params: params_and_body_as_json)
81
- [201, as_json.to_json]
80
+ as_json = name.classify_constantize.create_as_json(current_user: authenticated_route ? current_user : nil,
81
+ params: params_and_body_as_json)
82
+ [201, as_json.to_json]
82
83
  end
83
84
  end
84
85
 
85
86
  def self.update_route(name, authenticated_route)
86
- put "/#{name.to_s}/:id" do
87
+ put "/#{name}/:id" do
87
88
  authenticate! if authenticated_route
88
89
  record = name.classify_constantize.find(params['id'])
89
- as_json = record.update_as_json(current_user: authenticated_route ? current_user : nil, params: params_and_body_as_json)
90
+ as_json = record.update_as_json(current_user: authenticated_route ? current_user : nil,
91
+ params: params_and_body_as_json)
90
92
  [200, as_json.to_json]
91
93
  end
92
94
  end
@@ -96,4 +98,4 @@ module AppRail
96
98
  end
97
99
  end
98
100
  end
99
- end
101
+ end
@@ -1,5 +1,7 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class String
2
4
  def snake_case
3
- gsub(" ", "_").underscore
5
+ gsub(' ', '_').underscore
4
6
  end
5
- end
7
+ end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module AppRail
4
4
  module Airtable
5
- VERSION = '0.4.0'
5
+ VERSION = '0.4.3'
6
6
  end
7
7
  end
@@ -1,10 +1,12 @@
1
- require "app_rail/airtable/version"
2
- require "app_rail/airtable/string_ext"
3
- require "app_rail/airtable/application_record"
4
- require "app_rail/airtable/authenticatable"
5
- require "app_rail/airtable/authentication_helpers"
6
- require "app_rail/airtable/sinatra"
7
- require "app_rail/airtable/generator"
1
+ # frozen_string_literal: true
2
+
3
+ require 'app_rail/airtable/version'
4
+ require 'app_rail/airtable/string_ext'
5
+ require 'app_rail/airtable/application_record'
6
+ require 'app_rail/airtable/authenticatable'
7
+ require 'app_rail/airtable/authentication_helpers'
8
+ require 'app_rail/airtable/sinatra'
9
+ require 'app_rail/airtable/generator'
8
10
 
9
11
  module AppRail
10
12
  module Airtable
@@ -6,6 +6,7 @@ git_source(:github) { |repo| "https://github.com/#{repo}.git" }
6
6
  ruby '2.7.4'
7
7
 
8
8
  gem 'app_rail-airtable', '~> 0.4.0'
9
+ gem 'app_rail-steps'
9
10
 
10
11
  group :development do
11
12
  gem 'dotenv'
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  $stdout.sync = true
2
4
 
3
5
  ENV['RACK_ENV'] ||= 'development'
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # This file was generated by the `rspec --init` command. Conventionally, all
2
4
  # specs live under a `spec` directory, which RSpec adds to the `$LOAD_PATH`.
3
5
  # The generated `.rspec` file contains `--require spec_helper` which will cause
@@ -19,9 +21,9 @@ ENV['AIRTABLE_API_KEY'] = 'keyABC123'
19
21
  ENV['AIRTABLE_BASE_ID'] = 'appABC123'
20
22
  ENV['RACK_ENV'] = 'test'
21
23
 
22
- require "rack/test"
23
- require "app_rail/airtable"
24
- require "byebug"
24
+ require 'rack/test'
25
+ require 'app_rail/airtable'
26
+ require 'byebug'
25
27
 
26
28
  require './lib/server'
27
29
 
@@ -56,60 +58,57 @@ RSpec.configure do |config|
56
58
  # triggering implicit auto-inclusion in groups with matching metadata.
57
59
  config.shared_context_metadata_behavior = :apply_to_host_groups
58
60
 
59
- # The settings below are suggested to provide a good initial experience
60
- # with RSpec, but feel free to customize to your heart's content.
61
- =begin
62
- # This allows you to limit a spec run to individual examples or groups
63
- # you care about by tagging them with `:focus` metadata. When nothing
64
- # is tagged with `:focus`, all examples get run. RSpec also provides
65
- # aliases for `it`, `describe`, and `context` that include `:focus`
66
- # metadata: `fit`, `fdescribe` and `fcontext`, respectively.
67
- config.filter_run_when_matching :focus
68
-
69
- # Allows RSpec to persist some state between runs in order to support
70
- # the `--only-failures` and `--next-failure` CLI options. We recommend
71
- # you configure your source control system to ignore this file.
72
- config.example_status_persistence_file_path = "spec/examples.txt"
73
-
74
- # Limits the available syntax to the non-monkey patched syntax that is
75
- # recommended. For more details, see:
76
- # - http://rspec.info/blog/2012/06/rspecs-new-expectation-syntax/
77
- # - http://www.teaisaweso.me/blog/2013/05/27/rspecs-new-message-expectation-syntax/
78
- # - http://rspec.info/blog/2014/05/notable-changes-in-rspec-3/#zero-monkey-patching-mode
79
- config.disable_monkey_patching!
80
-
81
- # This setting enables warnings. It's recommended, but in some cases may
82
- # be too noisy due to issues in dependencies.
83
- config.warnings = true
84
-
85
- # Many RSpec users commonly either run the entire suite or an individual
86
- # file, and it's useful to allow more verbose output when running an
87
- # individual spec file.
88
- if config.files_to_run.one?
89
- # Use the documentation formatter for detailed output,
90
- # unless a formatter has already been configured
91
- # (e.g. via a command-line flag).
92
- config.default_formatter = "doc"
93
- end
94
-
95
- # Print the 10 slowest examples and example groups at the
96
- # end of the spec run, to help surface which specs are running
97
- # particularly slow.
98
- config.profile_examples = 10
99
-
100
- # Run specs in random order to surface order dependencies. If you find an
101
- # order dependency and want to debug it, you can fix the order by providing
102
- # the seed, which is printed after each run.
103
- # --seed 1234
104
- config.order = :random
105
-
106
- # Seed global randomization in this process using the `--seed` CLI option.
107
- # Setting this allows you to use `--seed` to deterministically reproduce
108
- # test failures related to randomization by passing the same `--seed` value
109
- # as the one that triggered the failure.
110
- Kernel.srand config.seed
111
- =end
61
+ # The settings below are suggested to provide a good initial experience
62
+ # with RSpec, but feel free to customize to your heart's content.
63
+ # # This allows you to limit a spec run to individual examples or groups
64
+ # # you care about by tagging them with `:focus` metadata. When nothing
65
+ # # is tagged with `:focus`, all examples get run. RSpec also provides
66
+ # # aliases for `it`, `describe`, and `context` that include `:focus`
67
+ # # metadata: `fit`, `fdescribe` and `fcontext`, respectively.
68
+ # config.filter_run_when_matching :focus
69
+ #
70
+ # # Allows RSpec to persist some state between runs in order to support
71
+ # # the `--only-failures` and `--next-failure` CLI options. We recommend
72
+ # # you configure your source control system to ignore this file.
73
+ # config.example_status_persistence_file_path = "spec/examples.txt"
74
+ #
75
+ # # Limits the available syntax to the non-monkey patched syntax that is
76
+ # # recommended. For more details, see:
77
+ # # - http://rspec.info/blog/2012/06/rspecs-new-expectation-syntax/
78
+ # # - http://www.teaisaweso.me/blog/2013/05/27/rspecs-new-message-expectation-syntax/
79
+ # # - http://rspec.info/blog/2014/05/notable-changes-in-rspec-3/#zero-monkey-patching-mode
80
+ # config.disable_monkey_patching!
81
+ #
82
+ # # This setting enables warnings. It's recommended, but in some cases may
83
+ # # be too noisy due to issues in dependencies.
84
+ # config.warnings = true
85
+ #
86
+ # # Many RSpec users commonly either run the entire suite or an individual
87
+ # # file, and it's useful to allow more verbose output when running an
88
+ # # individual spec file.
89
+ # if config.files_to_run.one?
90
+ # # Use the documentation formatter for detailed output,
91
+ # # unless a formatter has already been configured
92
+ # # (e.g. via a command-line flag).
93
+ # config.default_formatter = "doc"
94
+ # end
95
+ #
96
+ # # Print the 10 slowest examples and example groups at the
97
+ # # end of the spec run, to help surface which specs are running
98
+ # # particularly slow.
99
+ # config.profile_examples = 10
100
+ #
101
+ # # Run specs in random order to surface order dependencies. If you find an
102
+ # # order dependency and want to debug it, you can fix the order by providing
103
+ # # the seed, which is printed after each run.
104
+ # # --seed 1234
105
+ # config.order = :random
106
+ #
107
+ # # Seed global randomization in this process using the `--seed` CLI option.
108
+ # # Setting this allows you to use `--seed` to deterministically reproduce
109
+ # # test failures related to randomization by passing the same `--seed` value
110
+ # # as the one that triggered the failure.
111
+ # Kernel.srand config.seed
112
112
 
113
113
  config.include Rack::Test::Methods
114
-
115
114
  end
metadata CHANGED
@@ -1,17 +1,17 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: app_rail-airtable
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 0.4.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Matt Brooke-Smith
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-02-26 00:00:00.000000000 Z
11
+ date: 2022-04-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: activesupport
14
+ name: app_rail-steps
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - ">="
@@ -25,7 +25,7 @@ dependencies:
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0'
27
27
  - !ruby/object:Gem::Dependency
28
- name: sinatra
28
+ name: activesupport
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - ">="
@@ -52,6 +52,20 @@ dependencies:
52
52
  - - ">="
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: bcrypt
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
55
69
  - !ruby/object:Gem::Dependency
56
70
  name: faraday
57
71
  requirement: !ruby/object:Gem::Requirement
@@ -81,7 +95,7 @@ dependencies:
81
95
  - !ruby/object:Gem::Version
82
96
  version: '2.0'
83
97
  - !ruby/object:Gem::Dependency
84
- name: thor
98
+ name: sinatra
85
99
  requirement: !ruby/object:Gem::Requirement
86
100
  requirements:
87
101
  - - ">="
@@ -95,7 +109,7 @@ dependencies:
95
109
  - !ruby/object:Gem::Version
96
110
  version: '0'
97
111
  - !ruby/object:Gem::Dependency
98
- name: bcrypt
112
+ name: thor
99
113
  requirement: !ruby/object:Gem::Requirement
100
114
  requirements:
101
115
  - - ">="
@@ -109,7 +123,7 @@ dependencies:
109
123
  - !ruby/object:Gem::Version
110
124
  version: '0'
111
125
  - !ruby/object:Gem::Dependency
112
- name: rspec
126
+ name: rack-test
113
127
  requirement: !ruby/object:Gem::Requirement
114
128
  requirements:
115
129
  - - ">="
@@ -123,7 +137,7 @@ dependencies:
123
137
  - !ruby/object:Gem::Version
124
138
  version: '0'
125
139
  - !ruby/object:Gem::Dependency
126
- name: rack-test
140
+ name: rspec
127
141
  requirement: !ruby/object:Gem::Requirement
128
142
  requirements:
129
143
  - - ">="
@@ -136,7 +150,7 @@ dependencies:
136
150
  - - ">="
137
151
  - !ruby/object:Gem::Version
138
152
  version: '0'
139
- description:
153
+ description:
140
154
  email:
141
155
  - matt@futureworkshops.com
142
156
  executables:
@@ -172,7 +186,6 @@ files:
172
186
  - templates/project/.env.tt
173
187
  - templates/project/.gitignore
174
188
  - templates/project/Gemfile
175
- - templates/project/Gemfile.lock
176
189
  - templates/project/app.json
177
190
  - templates/project/config.ru
178
191
  - templates/project/lib/server.rb.tt
@@ -184,7 +197,7 @@ licenses:
184
197
  metadata:
185
198
  homepage_uri: https://github.com/FutureWorkshops/app_rail-airtable
186
199
  source_code_uri: https://github.com/FutureWorkshops/app_rail-airtable
187
- post_install_message:
200
+ post_install_message:
188
201
  rdoc_options: []
189
202
  require_paths:
190
203
  - lib
@@ -199,8 +212,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
199
212
  - !ruby/object:Gem::Version
200
213
  version: '0'
201
214
  requirements: []
202
- rubygems_version: 3.3.6
203
- signing_key:
215
+ rubygems_version: 3.1.6
216
+ signing_key:
204
217
  specification_version: 4
205
218
  summary: Gem to help building App Rail servers using Airtable as a backend
206
219
  test_files: []
@@ -1,96 +0,0 @@
1
- GEM
2
- remote: https://rubygems.org/
3
- specs:
4
- activesupport (6.1.4.1)
5
- concurrent-ruby (~> 1.0, >= 1.0.2)
6
- i18n (>= 1.6, < 2)
7
- minitest (>= 5.1)
8
- tzinfo (~> 2.0)
9
- zeitwerk (~> 2.3)
10
- airrecord (1.0.7)
11
- faraday (>= 0.10, < 2.0)
12
- net-http-persistent
13
- app_rail-airtable (0.4.0)
14
- activesupport
15
- airrecord
16
- bcrypt
17
- sinatra
18
- thor
19
- bcrypt (3.1.16)
20
- byebug (11.1.3)
21
- concurrent-ruby (1.1.9)
22
- connection_pool (2.2.5)
23
- diff-lcs (1.4.4)
24
- dotenv (2.7.6)
25
- faraday (1.8.0)
26
- faraday-em_http (~> 1.0)
27
- faraday-em_synchrony (~> 1.0)
28
- faraday-excon (~> 1.1)
29
- faraday-httpclient (~> 1.0.1)
30
- faraday-net_http (~> 1.0)
31
- faraday-net_http_persistent (~> 1.1)
32
- faraday-patron (~> 1.0)
33
- faraday-rack (~> 1.0)
34
- multipart-post (>= 1.2, < 3)
35
- ruby2_keywords (>= 0.0.4)
36
- faraday-em_http (1.0.0)
37
- faraday-em_synchrony (1.0.0)
38
- faraday-excon (1.1.0)
39
- faraday-httpclient (1.0.1)
40
- faraday-net_http (1.0.1)
41
- faraday-net_http_persistent (1.2.0)
42
- faraday-patron (1.0.0)
43
- faraday-rack (1.0.0)
44
- i18n (1.8.11)
45
- concurrent-ruby (~> 1.0)
46
- minitest (5.14.4)
47
- multipart-post (2.1.1)
48
- mustermann (1.1.1)
49
- ruby2_keywords (~> 0.0.1)
50
- net-http-persistent (4.0.1)
51
- connection_pool (~> 2.2)
52
- rack (2.2.3)
53
- rack-protection (2.1.0)
54
- rack
55
- rack-test (1.1.0)
56
- rack (>= 1.0, < 3)
57
- rspec (3.10.0)
58
- rspec-core (~> 3.10.0)
59
- rspec-expectations (~> 3.10.0)
60
- rspec-mocks (~> 3.10.0)
61
- rspec-core (3.10.1)
62
- rspec-support (~> 3.10.0)
63
- rspec-expectations (3.10.1)
64
- diff-lcs (>= 1.2.0, < 2.0)
65
- rspec-support (~> 3.10.0)
66
- rspec-mocks (3.10.2)
67
- diff-lcs (>= 1.2.0, < 2.0)
68
- rspec-support (~> 3.10.0)
69
- rspec-support (3.10.3)
70
- ruby2_keywords (0.0.5)
71
- sinatra (2.1.0)
72
- mustermann (~> 1.0)
73
- rack (~> 2.2)
74
- rack-protection (= 2.1.0)
75
- tilt (~> 2.0)
76
- thor (1.1.0)
77
- tilt (2.0.10)
78
- tzinfo (2.0.4)
79
- concurrent-ruby (~> 1.0)
80
- zeitwerk (2.5.1)
81
-
82
- PLATFORMS
83
- ruby
84
-
85
- DEPENDENCIES
86
- app_rail-airtable (~> 0.4.0)
87
- byebug
88
- dotenv
89
- rack-test
90
- rspec
91
-
92
- RUBY VERSION
93
- ruby 2.7.4p191
94
-
95
- BUNDLED WITH
96
- 2.1.4