stockpot 0.3.1 → 0.4.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a2ed98e155357c764f537d390bdf41db905bb5231e33bb7644639c1f309fde33
4
- data.tar.gz: 0cd8008bef691299dc4c2e50343ef9d98002b9857703ca4f9a1cee55f2eed556
3
+ metadata.gz: e055ab2e9c7448a3a876f2dd91b92abf07f85a934f58a1a06cc1b142fa9a716f
4
+ data.tar.gz: 7fcbed7483835ad4add9288eaf4a6aa93c608829c24b7a762d71d52ff444cd39
5
5
  SHA512:
6
- metadata.gz: 00e9c0c1eea751c8f01bdb925592f904a578dea35aa0430278bd93ec7923c564cd7d787499fb8ce77feb07b7f1aad78d67a68884974640b532428ac381e4aa4b
7
- data.tar.gz: e66ffa80fc4138ca3b01e86ab4012043d7909f9735e877d4cc2391f63e34a2b1de066761eb61cea0e19e134f30165584a2d845f8f65e62653479416783407b78
6
+ metadata.gz: f0057713be313d5d886eb72fbb211e7b1dc9b33e79299fc9c2b58330767f328beac1bac27f35f150f864f0076ca86a448a00f79ae744e16de079005c1ecc71cd
7
+ data.tar.gz: 32a2c201e11616b21bcf4bb9ff61a54d53a9f6bfa1724b62ff970bd97bbf3847b3e5244751623599074d8a2493b000e2b30dd7a3fcd9088044aa68afcd3b60c3
data/README.md CHANGED
@@ -79,7 +79,7 @@ Query for data. Accepts a array of objects that require at least a model name, b
79
79
 
80
80
  #### POST
81
81
 
82
- Create new data. Accepts an object specifying a single model with additional qualifiers.
82
+ Create new data. Accepts an an array of objects specifying a single model with additional qualifiers.
83
83
 
84
84
  * factory (required) - Specify which factory to create a record with.
85
85
  * list (optional) - Specify a count of items to create, default: 1
@@ -87,7 +87,7 @@ Create new data. Accepts an object specifying a single model with additional qua
87
87
  * attributes (optional) - An array of objects allowing for the specification of data to be used when creating records. Array position matches with list order if multiple records are desired.
88
88
 
89
89
  ```javascript
90
- {
90
+ [{
91
91
  factory: "user",
92
92
  traits: ["having_address"],
93
93
  attributes: [{
@@ -96,7 +96,7 @@ Create new data. Accepts an object specifying a single model with additional qua
96
96
  first_name: "Foo",
97
97
  last_name: "Bar"
98
98
  }]
99
- }
99
+ }]
100
100
  ```
101
101
 
102
102
  #### DELETE
@@ -129,7 +129,7 @@ Clears Rails & Redis caches and truncates Active Records databases. No body requ
129
129
  ### `/stockpot/redis`
130
130
 
131
131
  #### GET
132
-
132
+
133
133
  Query for data. Accepts key or field to use to search cache for record.
134
134
 
135
135
  ```javascript
@@ -139,6 +139,10 @@ Query for data. Accepts key or field to use to search cache for record.
139
139
  }
140
140
  ```
141
141
 
142
+ #### GET - Keys
143
+
144
+ Query for all keys within data. No body or argument required.
145
+
142
146
  #### POST - Create new data
143
147
 
144
148
  Accepts an object specifying a key, field, and value to be inserted into Redis cache.
@@ -168,7 +172,7 @@ Cypress.Commands.add("getRecords", args => {
168
172
  ```
169
173
 
170
174
  Our tests can then call this command like this
171
-
175
+
172
176
  ```javascript
173
177
  cy.getRecords([{ model: "user", id: user.id }])
174
178
  .then(res => {
@@ -1,29 +1,25 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "database_cleaner"
4
-
5
3
  module Stockpot
6
4
  class DatabaseCleanerController < MainController
7
5
  # Clean database before, between, and after tests by clearing Rails
8
6
  # and REDIS caches and truncating the active record database.
9
7
  def index
10
- clear_cache
11
- clean_active_record
8
+ clear_cache_and_redis
9
+ clean_database
12
10
  render json: { status: 204 }
13
11
  end
14
12
 
15
13
  private
16
14
 
17
- def clear_cache
18
- DatabaseCleaner[:redis].clean_with(:truncation)
19
- REDIS.flushdb
15
+ def clear_cache_and_redis
16
+ DatabaseCleaner[:redis].clean_with(:deletion)
20
17
  Rails.cache.clear
21
18
  Timecop.return
22
19
  end
23
20
 
24
- def clean_active_record
21
+ def clean_database
25
22
  DatabaseCleaner[:active_record].clean_with(:truncation)
26
- DatabaseCleaner.clean_with(:truncation)
27
23
  end
28
24
  end
29
25
  end
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module Stockpot
3
4
  class HealthzController < MainController
4
5
  def index
@@ -1,25 +1,29 @@
1
1
  # frozen_string_literal: true
2
+
3
+ require "pg"
4
+ require "active_record"
5
+
2
6
  module Stockpot
3
7
  module Helper
4
8
  module Errors
5
9
  def rescue_error(error)
6
- logger = Logger.new(STDERR)
10
+ logger = Logger.new($stderr)
7
11
  logger.warn(error)
8
12
 
9
13
  case error
10
14
  when NameError
11
- return_error(error.to_s, error.backtrace.first(5), :bad_request)
15
+ return_error(error.message, :bad_request, error.backtrace.first(5))
12
16
  when PG::Error
13
- return_error("Postgres error: #{error}", error.backtrace.first(5), :server_error)
14
- when ActiveRecord::RecordInvalid, ActiveRecord::Validations
15
- return_error("ActiveRecord error: #{error}", error.backtrace.first(5), :server_error)
17
+ return_error("Postgres error: #{error.message}", :internal_server_error, error.backtrace.first(5))
18
+ when ActiveRecord::RecordInvalid, ActiveRecord::Validations, ActiveRecord::RecordNotDestroyed
19
+ return_error(%q(In "#{error.record.class}" class: "#{error.message}"), :expectation_failed, error.backtrace.first(5))
16
20
  else
17
- return_error(error.to_s, error.backtrace.first(5),:server_error)
21
+ return_error(error.message, :internal_server_error, error.backtrace.first(5))
18
22
  end
19
23
  end
20
24
 
21
- def return_error(message, backtrace, status)
22
- { json: { error: { status: status, backtrace: backtrace, message: message }}, status: status }
25
+ def return_error(message, status, backtrace = "No backtrace")
26
+ render json: { error: { status: status, backtrace: backtrace, message: message }}, status: status
23
27
  end
24
28
  end
25
29
  end
@@ -1,12 +1,12 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module Stockpot
3
4
  class MainController < ActionController::API
4
5
  include ActiveSupport::Rescuable
5
6
  include Helper::Errors
6
7
 
7
8
  rescue_from StandardError do |exception|
8
- render rescue_error(exception)
9
+ rescue_error(exception)
9
10
  end
10
- # protect_from_forgery with: :exception
11
11
  end
12
12
  end
@@ -1,67 +1,96 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require "factory_bot_rails"
4
+ require "active_record/transactions"
3
5
 
4
6
  module Stockpot
5
7
  class RecordsController < MainController
6
8
  include ActiveSupport::Inflector
7
9
  include ActiveRecord::Transactions
10
+ include Helper::Errors
8
11
 
9
12
  before_action only: %i[index destroy update] do
10
- return_error("You need to provide at least one model name as an argument", 400) if params.dig(:models).blank?
13
+ return_error("You need to provide at least one model name as an argument", 400) if params[:models].blank?
11
14
  end
12
15
  before_action only: %i[create] do
13
- return_error("You need to provide at least one factory name as an argument", 400) if params.dig(:factory).blank?
16
+ return_error("You need to provide at least one factory name as an argument", 400) if params[:factories].blank?
17
+ end
18
+ before_action do
19
+ @response_data = {}
14
20
  end
15
21
 
16
22
  def index
17
- obj = {}
18
23
  models.each_with_index do |element, i|
19
- model = element[:model].to_s
24
+ model = element[:model]
20
25
  class_name = find_correct_class_name(model)
26
+ formatted_model = pluralize(model).camelize(:lower).gsub("::", "")
21
27
 
22
- obj[pluralize(model).camelize(:lower)] = class_name.constantize.where(models[i].except(:model))
28
+ @response_data[formatted_model] = [] unless @response_data.key?(formatted_model)
29
+ @response_data[formatted_model].concat(class_name.constantize.where(models[i].except(:model)))
30
+ @response_data[formatted_model].reverse!.uniq! { |obj| obj["id"] }
23
31
  end
24
-
25
- render json: obj, status: :ok
32
+ render json: @response_data, status: :ok
26
33
  end
27
34
 
28
35
  def create
29
- list = params[:list] || 1
30
36
  ActiveRecord::Base.transaction do
31
- list.times do |n|
32
- all_parameters = [ factory, *traits, attributes(n) ].compact
33
- @factory = FactoryBot.create(*all_parameters)
37
+ factories.each do |element|
38
+ ids = []
39
+ list = element[:list] || 1
40
+ factory = element[:factory]
41
+ traits = element[:traits].map(&:to_sym) if element[:traits].present?
42
+
43
+ list.times do |n|
44
+ attributes = element[:attributes][n].to_h if element[:attributes].present?
45
+ factory_arguments = [ factory, *traits, attributes ].compact
46
+ @factory_instance = FactoryBot.create(*factory_arguments)
47
+ ids << @factory_instance.id
48
+ end
49
+
50
+ factory_name = pluralize(factory).camelize(:lower)
51
+
52
+ @response_data[factory_name] = [] unless @response_data.key?(factory_name)
53
+ @response_data[factory_name].concat(@factory_instance.class.name.constantize.where(id: ids))
34
54
  end
35
55
  end
36
- obj = @factory.class.name.constantize.last(list)
37
-
38
- render json: obj, status: :created
56
+ render json: @response_data, status: :accepted
39
57
  end
40
58
 
41
59
  def destroy
42
- obj = {}
43
60
  ActiveRecord::Base.transaction do
44
61
  models.each_with_index do |element, i|
45
- model = element[:model].to_s
62
+ model = element[:model]
46
63
  class_name = find_correct_class_name(model)
47
- obj[pluralize(model).camelize(:lower)] = class_name.constantize.where(models[i].except(:model)).destroy_all
64
+ formatted_model = pluralize(model).camelize(:lower).gsub("::", "")
65
+
66
+ class_name.constantize.where(models[i].except(:model)).each do |record|
67
+ record.destroy!
68
+ @response_data[formatted_model] = [] unless @response_data.key?(formatted_model)
69
+ @response_data[formatted_model] << record
70
+ end
48
71
  end
49
72
  end
50
-
51
- render json: obj, status: :accepted
73
+ render json: @response_data, status: :accepted
52
74
  end
53
75
 
54
76
  def update
55
- obj = {}
56
77
  ActiveRecord::Base.transaction do
57
78
  models.each_with_index do |element, i|
58
- model = element[:model].to_s
79
+ model = element[:model]
59
80
  class_name = find_correct_class_name(model)
60
81
  update_params = params.permit![:models][i][:update].to_h
61
- obj[pluralize(model).camelize(:lower)] = class_name.constantize.where(models[i].except(:model, :update)).update(update_params)
82
+ attributes_to_search = models[i].except(:model, :update)
83
+ formatted_model = pluralize(model).camelize(:lower).gsub("::", "")
84
+
85
+ class_name.constantize.where(attributes_to_search).each do |record|
86
+ record.update!(update_params)
87
+ @response_data[formatted_model] = [] unless @response_data.key?(formatted_model)
88
+ @response_data[formatted_model] << class_name.constantize.find(record.id)
89
+ @response_data[formatted_model].reverse!.uniq! { |obj| obj["id"] }
90
+ end
62
91
  end
63
92
  end
64
- render json: obj, status: :accepted
93
+ render json: @response_data, status: :accepted
65
94
  end
66
95
 
67
96
  private
@@ -70,29 +99,19 @@ module Stockpot
70
99
  # We are getting the class name from the factory or we default to whatever we send in.
71
100
  # Something to keep in mind "module/class_name".camelize will translate into "Module::ClassName"
72
101
  # which is perfect for namespaces in case there is no factory associated with a specific model
73
- FactoryBot.factories.registered?(model) ? FactoryBot.build_stubbed(model).class.name : model.camelize
74
- end
75
-
76
- def traits
77
- return if params[:traits].blank?
78
-
79
- params[:traits].map(&:to_sym)
80
- end
81
-
82
- def factory
83
- params[:factory].to_sym
84
- end
85
-
86
- # rubocop:disable Naming/UncommunicativeMethodParamName
87
- def attributes(n)
88
- # rubocop:enable Naming/UncommunicativeMethodParamName
89
- return if params[:attributes].blank?
90
-
91
- params.permit![:attributes][n].to_h
102
+ if FactoryBot.factories.registered?(model)
103
+ FactoryBot.factories.find(model).build_class.to_s
104
+ else
105
+ model.camelize
106
+ end
92
107
  end
93
108
 
94
109
  def models
95
110
  params.permit![:models].map(&:to_h)
96
111
  end
112
+
113
+ def factories
114
+ params.permit![:factories].map(&:to_h)
115
+ end
97
116
  end
98
117
  end
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module Stockpot
3
4
  class RedisController < MainController
4
5
  def index
@@ -24,5 +25,11 @@ module Stockpot
24
25
 
25
26
  render json: { status: 201 }
26
27
  end
28
+
29
+ def keys
30
+ record = REDIS.keys
31
+
32
+ render json: record.to_json, status: :ok
33
+ end
27
34
  end
28
35
  end
data/config/routes.rb CHANGED
@@ -8,8 +8,9 @@ Stockpot::Engine.routes.draw do
8
8
 
9
9
  delete "/clean_database", to: "database_cleaner#index"
10
10
 
11
- get "/redis", to: "redis#index"
12
11
  post "/redis", to: "redis#create"
12
+ get "/redis", to: "redis#index"
13
+ get "/redis/keys", to: "redis#keys"
13
14
 
14
15
  get "/healthz", to: "healthz#index"
15
16
  end
@@ -4,11 +4,5 @@ module Stockpot
4
4
  class Engine < ::Rails::Engine
5
5
  isolate_namespace Stockpot
6
6
  config.generators.api_only = true
7
-
8
- config.generators do |generators|
9
- generators.test_framework :rspec
10
- generators.fixture_replacement :factory_bot
11
- generators.factory_bot dir: 'spec/factories'
12
- end
13
7
  end
14
8
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Stockpot
4
- VERSION = "0.3.1"
4
+ VERSION = "0.4.3"
5
5
  end
metadata CHANGED
@@ -1,206 +1,220 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: stockpot
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.1
4
+ version: 0.4.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jayson Smith
8
+ - Brian Herman
9
+ - Derek Campbell
10
+ - Victor Santana
8
11
  autorequire:
9
12
  bindir: bin
10
13
  cert_chain: []
11
- date: 2020-04-06 00:00:00.000000000 Z
14
+ date: 2021-10-26 00:00:00.000000000 Z
12
15
  dependencies:
13
16
  - !ruby/object:Gem::Dependency
14
17
  name: rails
15
18
  requirement: !ruby/object:Gem::Requirement
16
19
  requirements:
17
- - - ">="
20
+ - - "~>"
18
21
  - !ruby/object:Gem::Version
19
- version: 5.2.3
22
+ version: 6.1.4
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
- version: 5.2.3
29
+ version: 6.1.4
27
30
  - !ruby/object:Gem::Dependency
28
31
  name: factory_bot_rails
29
32
  requirement: !ruby/object:Gem::Requirement
30
33
  requirements:
31
34
  - - "~>"
32
35
  - !ruby/object:Gem::Version
33
- version: 5.1.0
36
+ version: 6.2.0
37
+ type: :runtime
38
+ prerelease: false
39
+ version_requirements: !ruby/object:Gem::Requirement
40
+ requirements:
41
+ - - "~>"
42
+ - !ruby/object:Gem::Version
43
+ version: 6.2.0
44
+ - !ruby/object:Gem::Dependency
45
+ name: database_cleaner-active_record
46
+ requirement: !ruby/object:Gem::Requirement
47
+ requirements:
48
+ - - "~>"
49
+ - !ruby/object:Gem::Version
50
+ version: 2.0.1
34
51
  type: :runtime
35
52
  prerelease: false
36
53
  version_requirements: !ruby/object:Gem::Requirement
37
54
  requirements:
38
55
  - - "~>"
39
56
  - !ruby/object:Gem::Version
40
- version: 5.1.0
57
+ version: 2.0.1
41
58
  - !ruby/object:Gem::Dependency
42
- name: database_cleaner
59
+ name: database_cleaner-redis
43
60
  requirement: !ruby/object:Gem::Requirement
44
61
  requirements:
45
62
  - - "~>"
46
63
  - !ruby/object:Gem::Version
47
- version: 1.6.2
64
+ version: 2.0.0
48
65
  type: :runtime
49
66
  prerelease: false
50
67
  version_requirements: !ruby/object:Gem::Requirement
51
68
  requirements:
52
69
  - - "~>"
53
70
  - !ruby/object:Gem::Version
54
- version: 1.6.2
71
+ version: 2.0.0
55
72
  - !ruby/object:Gem::Dependency
56
73
  name: redis
57
74
  requirement: !ruby/object:Gem::Requirement
58
75
  requirements:
59
- - - ">="
76
+ - - "~>"
60
77
  - !ruby/object:Gem::Version
61
- version: 3.3.5
78
+ version: 4.4.0
62
79
  type: :runtime
63
80
  prerelease: false
64
81
  version_requirements: !ruby/object:Gem::Requirement
65
82
  requirements:
66
- - - ">="
83
+ - - "~>"
67
84
  - !ruby/object:Gem::Version
68
- version: 3.3.5
85
+ version: 4.4.0
69
86
  - !ruby/object:Gem::Dependency
70
87
  name: timecop
71
88
  requirement: !ruby/object:Gem::Requirement
72
89
  requirements:
73
90
  - - "~>"
74
91
  - !ruby/object:Gem::Version
75
- version: '0.8'
92
+ version: 0.9.4
76
93
  type: :runtime
77
94
  prerelease: false
78
95
  version_requirements: !ruby/object:Gem::Requirement
79
96
  requirements:
80
97
  - - "~>"
81
98
  - !ruby/object:Gem::Version
82
- version: '0.8'
99
+ version: 0.9.4
83
100
  - !ruby/object:Gem::Dependency
84
101
  name: pry-byebug
85
102
  requirement: !ruby/object:Gem::Requirement
86
103
  requirements:
87
104
  - - "~>"
88
105
  - !ruby/object:Gem::Version
89
- version: '3.7'
106
+ version: '3.9'
90
107
  type: :development
91
108
  prerelease: false
92
109
  version_requirements: !ruby/object:Gem::Requirement
93
110
  requirements:
94
111
  - - "~>"
95
112
  - !ruby/object:Gem::Version
96
- version: '3.7'
113
+ version: '3.9'
97
114
  - !ruby/object:Gem::Dependency
98
- name: rake
115
+ name: pry
99
116
  requirement: !ruby/object:Gem::Requirement
100
117
  requirements:
101
118
  - - "~>"
102
119
  - !ruby/object:Gem::Version
103
- version: '13.0'
104
- - - ">="
105
- - !ruby/object:Gem::Version
106
- version: 13.0.1
120
+ version: 0.13.0
107
121
  type: :development
108
122
  prerelease: false
109
123
  version_requirements: !ruby/object:Gem::Requirement
110
124
  requirements:
111
125
  - - "~>"
112
126
  - !ruby/object:Gem::Version
113
- version: '13.0'
114
- - - ">="
115
- - !ruby/object:Gem::Version
116
- version: 13.0.1
127
+ version: 0.13.0
117
128
  - !ruby/object:Gem::Dependency
118
- name: rspec
129
+ name: rake
119
130
  requirement: !ruby/object:Gem::Requirement
120
131
  requirements:
121
132
  - - "~>"
122
133
  - !ruby/object:Gem::Version
123
- version: '3.9'
134
+ version: 13.0.6
124
135
  type: :development
125
136
  prerelease: false
126
137
  version_requirements: !ruby/object:Gem::Requirement
127
138
  requirements:
128
139
  - - "~>"
129
140
  - !ruby/object:Gem::Version
130
- version: '3.9'
141
+ version: 13.0.6
131
142
  - !ruby/object:Gem::Dependency
132
143
  name: rspec-rails
133
144
  requirement: !ruby/object:Gem::Requirement
134
145
  requirements:
135
146
  - - "~>"
136
147
  - !ruby/object:Gem::Version
137
- version: '3.9'
148
+ version: 5.0.2
138
149
  type: :development
139
150
  prerelease: false
140
151
  version_requirements: !ruby/object:Gem::Requirement
141
152
  requirements:
142
153
  - - "~>"
143
154
  - !ruby/object:Gem::Version
144
- version: '3.9'
155
+ version: 5.0.2
145
156
  - !ruby/object:Gem::Dependency
146
157
  name: spicerack-styleguide
147
158
  requirement: !ruby/object:Gem::Requirement
148
159
  requirements:
149
160
  - - ">="
150
161
  - !ruby/object:Gem::Version
151
- version: 0.21.0
152
- - - "<"
153
- - !ruby/object:Gem::Version
154
- version: '1.0'
162
+ version: 0.26.0.4
155
163
  type: :development
156
164
  prerelease: false
157
165
  version_requirements: !ruby/object:Gem::Requirement
158
166
  requirements:
159
167
  - - ">="
160
168
  - !ruby/object:Gem::Version
161
- version: 0.21.0
162
- - - "<"
163
- - !ruby/object:Gem::Version
164
- version: '1.0'
169
+ version: 0.26.0.4
165
170
  - !ruby/object:Gem::Dependency
166
171
  name: shoulda-matchers
167
172
  requirement: !ruby/object:Gem::Requirement
168
173
  requirements:
169
174
  - - "~>"
170
175
  - !ruby/object:Gem::Version
171
- version: '4.1'
172
- - - ">="
173
- - !ruby/object:Gem::Version
174
- version: 4.1.2
176
+ version: 5.0.0
175
177
  type: :development
176
178
  prerelease: false
177
179
  version_requirements: !ruby/object:Gem::Requirement
178
180
  requirements:
179
181
  - - "~>"
180
182
  - !ruby/object:Gem::Version
181
- version: '4.1'
182
- - - ">="
183
- - !ruby/object:Gem::Version
184
- version: 4.1.2
183
+ version: 5.0.0
185
184
  - !ruby/object:Gem::Dependency
186
185
  name: simplecov
187
186
  requirement: !ruby/object:Gem::Requirement
188
187
  requirements:
189
188
  - - "~>"
190
189
  - !ruby/object:Gem::Version
191
- version: 0.17.1
190
+ version: 0.21.2
191
+ type: :development
192
+ prerelease: false
193
+ version_requirements: !ruby/object:Gem::Requirement
194
+ requirements:
195
+ - - "~>"
196
+ - !ruby/object:Gem::Version
197
+ version: 0.21.2
198
+ - !ruby/object:Gem::Dependency
199
+ name: pg
200
+ requirement: !ruby/object:Gem::Requirement
201
+ requirements:
202
+ - - "~>"
203
+ - !ruby/object:Gem::Version
204
+ version: 1.2.3
192
205
  type: :development
193
206
  prerelease: false
194
207
  version_requirements: !ruby/object:Gem::Requirement
195
208
  requirements:
196
209
  - - "~>"
197
210
  - !ruby/object:Gem::Version
198
- version: 0.17.1
211
+ version: 1.2.3
199
212
  description: 'Exposes a few end points from your app, easily enabling CRUD actions
200
213
  on your database that you can utilize from things like a standalone test suite to
201
214
  set up state. (think: Cypress, Cucumber, etc.)'
202
215
  email:
203
216
  - gh@nes.33mail.com
217
+ - victorfrank.santanalugo@gmail.com
204
218
  executables: []
205
219
  extensions: []
206
220
  extra_rdoc_files: []
@@ -240,8 +254,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
240
254
  - !ruby/object:Gem::Version
241
255
  version: '0'
242
256
  requirements: []
243
- rubyforge_project:
244
- rubygems_version: 2.7.8
257
+ rubygems_version: 3.1.6
245
258
  signing_key:
246
259
  specification_version: 4
247
260
  summary: Makes setting up test data in your Rails database from an external resource