app_rail-airtable 0.4.3 → 0.4.4

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: f789fb754083245cc062131945cb235ac19070edd2e3ae154e5a233b1533f76b
4
- data.tar.gz: '08a45094b4ba5b5882a8a1baed2acc39c3345adaa8d8557b8ae2daaa3a2bb96c'
3
+ metadata.gz: 9bdf887a34ccfd9c7954686766bab870a20c4374aa5f88a7e8e11a01d62430a4
4
+ data.tar.gz: b835884ff719353097b0d70277c52b1bda4bc5bf9ed23008ee9b0005bce1354c
5
5
  SHA512:
6
- metadata.gz: e9bdf986a03d4ce2e00368f7a4ac5048a8b2271778647d1ea27adce3c8b8fa185854e339b2769ee0e0acfce5bfb6dc985cdafc3b4787a8f78fad2da5fdda1681
7
- data.tar.gz: 995431a75366484398c7d90e1e12a3950ac47c23ca6ebe78b9410320dd17224cf08d401df7f613f60b62dca8458103f506d5ebe3e6d5bb0aea0a60a726cce2dc
6
+ metadata.gz: a0c589cae34adf401da10ef37daa174ff9eec6e8a9c5b93c5bc632059e52f41be0e685001ae3d9fe29e837678adf1709c7509cabb5dbe37af1f7438a5780afcb
7
+ data.tar.gz: e48ced1c4155d951decd90d83a38c371e4d50a135a29320c21f723ede9a4e535561fe302faf68b9a3a0256aa89e8f957c77e36f2096431f35551c6f132a618c2
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- app_rail-airtable (0.4.3)
4
+ app_rail-airtable (0.4.4)
5
5
  activesupport
6
6
  airrecord
7
7
  app_rail-steps
@@ -14,16 +14,16 @@ PATH
14
14
  GEM
15
15
  remote: https://rubygems.org/
16
16
  specs:
17
- activesupport (7.0.2.3)
17
+ activesupport (7.0.2.4)
18
18
  concurrent-ruby (~> 1.0, >= 1.0.2)
19
19
  i18n (>= 1.6, < 2)
20
20
  minitest (>= 5.1)
21
21
  tzinfo (~> 2.0)
22
- airrecord (1.0.9)
23
- faraday (>= 0.10, < 3.0)
22
+ airrecord (1.0.10)
23
+ faraday (>= 1.0, < 3.0)
24
24
  faraday-net_http_persistent
25
25
  net-http-persistent
26
- app_rail-steps (0.2.0)
26
+ app_rail-steps (0.2.9)
27
27
  bcrypt (3.1.17)
28
28
  byebug (11.1.3)
29
29
  concurrent-ruby (1.1.10)
@@ -26,9 +26,9 @@ Gem::Specification.new do |spec|
26
26
  spec.executables << 'ara_generator'
27
27
 
28
28
  spec.require_paths = ['lib']
29
- spec.add_dependency 'app_rail-steps'
30
29
  spec.add_dependency 'activesupport'
31
30
  spec.add_dependency 'airrecord'
31
+ spec.add_dependency 'app_rail-steps'
32
32
  spec.add_dependency 'bcrypt'
33
33
  spec.add_dependency 'faraday', '~> 2.2'
34
34
  spec.add_dependency 'faraday-net_http_persistent', '~> 2.0' # workaround to make Faraday work after upgrading to 2.2.0
@@ -6,6 +6,8 @@ require 'securerandom'
6
6
  module AppRail
7
7
  module Airtable
8
8
  module Authenticatable
9
+ class AlreadyExistsError < StandardError; end
10
+
9
11
  include BCrypt
10
12
 
11
13
  def self.included(klass)
@@ -15,6 +17,8 @@ module AppRail
15
17
 
16
18
  module ClassMethods
17
19
  def create(email:, password:)
20
+ raise AlreadyExistsError if find_by_email(email)
21
+
18
22
  user = new('Email' => email, 'Password Hash' => password_hash(password), 'Access Token' => next_access_token)
19
23
  user.create
20
24
  user
@@ -30,10 +34,14 @@ module AppRail
30
34
  end
31
35
 
32
36
  def find_by_email_and_password(email, password)
33
- user = all(filter: "{Email} = \"#{email}\"").first
37
+ user = find_by_email(email)
34
38
  user&.valid_password?(password) ? user : nil
35
39
  end
36
40
 
41
+ def find_by_email(email)
42
+ all(filter: "{Email} = \"#{email}\"").first
43
+ end
44
+
37
45
  def find_by_access_token(access_token)
38
46
  all(filter: "{Access Token} = \"#{access_token}\"").first
39
47
  end
@@ -12,6 +12,10 @@ class Symbol
12
12
  ActiveSupport::Inflector.pluralize(self)
13
13
  end
14
14
 
15
+ def singularize
16
+ ActiveSupport::Inflector.singularize(self)
17
+ end
18
+
15
19
  def classify
16
20
  ActiveSupport::Inflector.classify(self)
17
21
  end
@@ -77,9 +81,13 @@ module AppRail
77
81
  def self.create_route(name, authenticated_route)
78
82
  post "/#{name}" do
79
83
  authenticate! if authenticated_route
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]
84
+ begin
85
+ as_json = name.classify_constantize.create_as_json(current_user: authenticated_route ? current_user : nil,
86
+ params: params_and_body_as_json)
87
+ [201, as_json.to_json]
88
+ rescue AppRail::Airtable::Authenticatable::AlreadyExistsError
89
+ [422, { error: "#{name.singularize} already exists" }]
90
+ end
83
91
  end
84
92
  end
85
93
 
@@ -2,6 +2,6 @@
2
2
 
3
3
  module AppRail
4
4
  module Airtable
5
- VERSION = '0.4.3'
5
+ VERSION = '0.4.4'
6
6
  end
7
7
  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.3
4
+ version: 0.4.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Matt Brooke-Smith
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-04-18 00:00:00.000000000 Z
11
+ date: 2022-04-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: app_rail-steps
14
+ name: activesupport
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: activesupport
28
+ name: airrecord
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - ">="
@@ -39,7 +39,7 @@ dependencies:
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
41
  - !ruby/object:Gem::Dependency
42
- name: airrecord
42
+ name: app_rail-steps
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - ">="