app_rail-airtable 0.4.2 → 0.4.5

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: 8833767e5aaef630b9844c1c3ac80add7a97c138275cfbe5552e558828c35259
4
- data.tar.gz: 9e2b370dafcbd5afe8b962827eb9fc1fc766b99ad44bf6e05b4f538fa984f189
3
+ metadata.gz: 28964042f95bd7532166f56c9f95550573038d02bf9097eeff287698a2dd261d
4
+ data.tar.gz: 64ddc07fb9c729ae38940e0111346465bee157ee600a69265b47f9ab4163c51e
5
5
  SHA512:
6
- metadata.gz: 420520ee23ebf384020c12a666ab03a59e2078dcf28ec6dd6961f8a040e15f329cc85af0e766d5604b16ee2fd79da8109485cd21f280786bccb81924bd062e86
7
- data.tar.gz: e38daf7b1a1cac662e314fd256a8fbcdcb84d96cb2963aa22f17cdf5639384e2ff9365e7e1e61b542fe169a27081b17f258bce90c4807e821f52594d9e727741
6
+ metadata.gz: 05efe59ea2696590acf285e0c641f5c1ef42961f42b46aaed2c316d449ef797e06d3f9f15a14488ee4385e29028609bac35e67dcca41fdb6fa44edc35f51a346
7
+ data.tar.gz: e28840bfed651fee92759cf4102157b7a45472c0bb87b7a0d1e8bafe81afce034b2e8db3e6090045063b01d3c990e8e369ce8d682c5f7fc988e776801968cd0f
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- app_rail-airtable (0.4.2)
4
+ app_rail-airtable (0.4.5)
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
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'airrecord'
4
- require 'app_rail-steps'
4
+ require 'app_rail/steps'
5
5
  require 'active_support/core_ext/string/inflections'
6
6
 
7
7
  module AppRail
@@ -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" }.to_json]
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.2'
5
+ VERSION = '0.4.5'
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.2
4
+ version: 0.4.5
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
  - - ">="