stateful_models 0.0.1 → 0.0.2
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/CHANGELOG.md +13 -0
- data/README.md +1 -1
- data/lib/generators/has_states/install/templates/create_has_states_states.rb.erb +2 -1
- data/lib/has_states/base.rb +41 -0
- data/lib/has_states/state.rb +1 -36
- data/lib/has_states/stateable.rb +5 -4
- data/lib/has_states/version.rb +1 -1
- data/lib/has_states.rb +2 -1
- data/spec/dummy/Gemfile.lock +2 -2
- data/spec/dummy/config/initializers/has_states.rb +42 -0
- data/spec/{generators/tmp/db/migrate/20241223020432_create_has_states_states.rb → dummy/db/migrate/20241223212128_create_has_states_states.rb} +2 -1
- data/spec/dummy/db/schema.rb +22 -22
- data/spec/dummy/log/development.log +117 -0
- data/spec/dummy/log/test.log +1497 -0
- data/spec/dummy/storage/development.sqlite3 +0 -0
- data/spec/dummy/storage/test.sqlite3 +0 -0
- data/spec/{dummy/db/migrate/20241221183116_create_has_states_tables.rb → generators/tmp/db/migrate/20241223213845_create_has_states_states.rb} +4 -5
- data/spec/has_states/state_spec.rb +62 -0
- metadata +5 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 140dacad43c4287b2317ab10567b808c4c6c751715a640d04560ea9396f15b11
|
4
|
+
data.tar.gz: b0590f0190d823fad1693ebec1a65e933d465693ac0ecb2688f045fab2f84474
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c0e603d13345f3c36c68dcea633b2d0d37d1de41d5de961b63f81970b572e90e76a2b2f642c2868a94f1b440400f795d4243490159ed58265ab45770a27cb5d2
|
7
|
+
data.tar.gz: dc8688d4ebc992dc7cf32a92dc17d1bda1c2de58ea6747292fd746b529b3a5fdccbe9295090854b252b6b42689fed613b30821655d2a8deb4462b4daabaa13d5
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,18 @@
|
|
1
1
|
## Released
|
2
2
|
|
3
|
+
## [0.0.2] - 2024-12-23
|
4
|
+
|
5
|
+
### Added
|
6
|
+
- Single Table Inheritance (STI) support for custom state types
|
7
|
+
- Ability to create custom state classes by inheriting from `HasStates::Base`
|
8
|
+
- Default state class `HasStates::State` for basic state management
|
9
|
+
- Example implementation of custom state types in documentation
|
10
|
+
|
11
|
+
### Changed
|
12
|
+
- Refactored base state functionality into `HasStates::Base`
|
13
|
+
- Updated `add_state` method to support custom state classes
|
14
|
+
- Improved test coverage for inheritance and custom state types
|
15
|
+
|
3
16
|
## [0.1.0] - 2024-12-21
|
4
17
|
|
5
18
|
- Initial release
|
data/README.md
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
class CreateHasStatesStates < ActiveRecord::Migration[<%= ActiveRecord::Migration.current_version %>]
|
2
2
|
def change
|
3
3
|
create_table :has_states_states do |t|
|
4
|
+
t.string :type, null: false
|
4
5
|
t.string :state_type
|
5
6
|
t.string :status, null: false
|
6
7
|
|
@@ -8,9 +9,9 @@
|
|
8
9
|
|
9
10
|
t.references :stateable, polymorphic: true, null: false
|
10
11
|
|
11
|
-
t.datetime :completed_at
|
12
12
|
t.timestamps
|
13
13
|
|
14
|
+
t.index %i[type stateable_id]
|
14
15
|
t.index %i[stateable_type stateable_id]
|
15
16
|
end
|
16
17
|
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module HasStates
|
4
|
+
class Base < ActiveRecord::Base
|
5
|
+
self.table_name = 'has_states_states'
|
6
|
+
|
7
|
+
belongs_to :stateable, polymorphic: true
|
8
|
+
|
9
|
+
validate :status_is_configured
|
10
|
+
validate :state_type_is_configured
|
11
|
+
|
12
|
+
after_save :trigger_callbacks, if: :saved_change_to_status?
|
13
|
+
|
14
|
+
private
|
15
|
+
|
16
|
+
def status_is_configured
|
17
|
+
return if HasStates.configuration.valid_status?(
|
18
|
+
stateable_type.constantize,
|
19
|
+
state_type,
|
20
|
+
status
|
21
|
+
)
|
22
|
+
|
23
|
+
errors.add(:status, 'is not configured')
|
24
|
+
end
|
25
|
+
|
26
|
+
def state_type_is_configured
|
27
|
+
return if HasStates.configuration.valid_state_type?(
|
28
|
+
stateable_type.constantize,
|
29
|
+
state_type
|
30
|
+
)
|
31
|
+
|
32
|
+
errors.add(:state_type, 'is not configured')
|
33
|
+
end
|
34
|
+
|
35
|
+
def trigger_callbacks
|
36
|
+
HasStates.configuration.matching_callbacks(self).each do |callback|
|
37
|
+
callback.call(self)
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
data/lib/has_states/state.rb
CHANGED
@@ -1,41 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
module HasStates
|
4
|
-
class State <
|
5
|
-
self.table_name = 'has_states_states'
|
6
|
-
|
7
|
-
belongs_to :stateable, polymorphic: true
|
8
|
-
|
9
|
-
validate :status_is_configured
|
10
|
-
validate :state_type_is_configured
|
11
|
-
|
12
|
-
after_save :trigger_callbacks, if: :saved_change_to_status?
|
13
|
-
|
14
|
-
private
|
15
|
-
|
16
|
-
def status_is_configured
|
17
|
-
return if HasStates.configuration.valid_status?(
|
18
|
-
stateable_type.constantize,
|
19
|
-
state_type,
|
20
|
-
status
|
21
|
-
)
|
22
|
-
|
23
|
-
errors.add(:status, 'is not configured')
|
24
|
-
end
|
25
|
-
|
26
|
-
def state_type_is_configured
|
27
|
-
return if HasStates.configuration.valid_state_type?(
|
28
|
-
stateable_type.constantize,
|
29
|
-
state_type
|
30
|
-
)
|
31
|
-
|
32
|
-
errors.add(:state_type, 'is not configured')
|
33
|
-
end
|
34
|
-
|
35
|
-
def trigger_callbacks
|
36
|
-
HasStates.configuration.matching_callbacks(self).each do |callback|
|
37
|
-
callback.call(self)
|
38
|
-
end
|
39
|
-
end
|
4
|
+
class State < Base
|
40
5
|
end
|
41
6
|
end
|
data/lib/has_states/stateable.rb
CHANGED
@@ -5,14 +5,15 @@ module HasStates
|
|
5
5
|
extend ActiveSupport::Concern
|
6
6
|
|
7
7
|
included do
|
8
|
-
has_many :states, class_name: 'HasStates::
|
9
|
-
|
10
|
-
|
8
|
+
has_many :states, class_name: 'HasStates::Base',
|
9
|
+
as: :stateable,
|
10
|
+
dependent: :destroy
|
11
11
|
end
|
12
12
|
|
13
13
|
# Instance methods for managing states
|
14
|
-
def add_state(type, status: 'pending', metadata: {})
|
14
|
+
def add_state(type, status: 'pending', metadata: {}, state_class: HasStates::State)
|
15
15
|
states.create!(
|
16
|
+
type: state_class.name,
|
16
17
|
state_type: type,
|
17
18
|
status: status,
|
18
19
|
metadata: metadata
|
data/lib/has_states/version.rb
CHANGED
data/lib/has_states.rb
CHANGED
@@ -11,13 +11,14 @@ module HasStates
|
|
11
11
|
def configure
|
12
12
|
yield(configuration)
|
13
13
|
end
|
14
|
-
|
14
|
+
|
15
15
|
def configuration
|
16
16
|
Configuration.instance
|
17
17
|
end
|
18
18
|
end
|
19
19
|
end
|
20
20
|
|
21
|
+
require 'has_states/base'
|
21
22
|
require 'has_states/state'
|
22
23
|
require 'has_states/callback'
|
23
24
|
require 'has_states/stateable'
|
data/spec/dummy/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: ../..
|
3
3
|
specs:
|
4
|
-
|
4
|
+
stateful_models (0.0.1)
|
5
5
|
|
6
6
|
GEM
|
7
7
|
remote: https://rubygems.org/
|
@@ -272,13 +272,13 @@ PLATFORMS
|
|
272
272
|
DEPENDENCIES
|
273
273
|
brakeman
|
274
274
|
debug
|
275
|
-
has_state!
|
276
275
|
kamal
|
277
276
|
puma (>= 5.0)
|
278
277
|
rails (~> 8.0.1)
|
279
278
|
solid_cache
|
280
279
|
solid_queue
|
281
280
|
sqlite3 (>= 2.1)
|
281
|
+
stateful_models!
|
282
282
|
thruster
|
283
283
|
tzinfo-data
|
284
284
|
|
@@ -0,0 +1,42 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
HasStates.configure do |config|
|
4
|
+
# Configure your models and their state types below
|
5
|
+
#
|
6
|
+
# Example configuration:
|
7
|
+
#
|
8
|
+
# config.configure_model User do |model|
|
9
|
+
# # KYC state type with its allowed statuses
|
10
|
+
# model.state_type :kyc do |type|
|
11
|
+
# type.statuses = [
|
12
|
+
# 'pending', # Initial state
|
13
|
+
# 'documents_required', # Waiting for user documents
|
14
|
+
# 'under_review', # Documents being reviewed
|
15
|
+
# 'approved', # KYC process completed successfully
|
16
|
+
# 'rejected' # KYC process failed
|
17
|
+
# ]
|
18
|
+
# end
|
19
|
+
#
|
20
|
+
# # Onboarding state type with different statuses
|
21
|
+
# model.state_type :onboarding do |type|
|
22
|
+
# type.statuses = [
|
23
|
+
# 'pending', # Just started
|
24
|
+
# 'email_verified', # Email verification complete
|
25
|
+
# 'profile_complete', # User filled all required fields
|
26
|
+
# 'completed' # Onboarding finished
|
27
|
+
# ]
|
28
|
+
# end
|
29
|
+
# end
|
30
|
+
#
|
31
|
+
# config.configure_model Company do |model|
|
32
|
+
# model.state_type :verification do |type|
|
33
|
+
# type.statuses = [
|
34
|
+
# 'pending',
|
35
|
+
# 'documents_submitted',
|
36
|
+
# 'under_review',
|
37
|
+
# 'verified',
|
38
|
+
# 'rejected'
|
39
|
+
# ]
|
40
|
+
# end
|
41
|
+
# end
|
42
|
+
end
|
@@ -1,6 +1,7 @@
|
|
1
1
|
class CreateHasStatesStates < ActiveRecord::Migration[8.0]
|
2
2
|
def change
|
3
3
|
create_table :has_states_states do |t|
|
4
|
+
t.string :type, null: false
|
4
5
|
t.string :state_type
|
5
6
|
t.string :status, null: false
|
6
7
|
|
@@ -8,9 +9,9 @@
|
|
8
9
|
|
9
10
|
t.references :stateable, polymorphic: true, null: false
|
10
11
|
|
11
|
-
t.datetime :completed_at
|
12
12
|
t.timestamps
|
13
13
|
|
14
|
+
t.index %i[type stateable_id]
|
14
15
|
t.index %i[stateable_type stateable_id]
|
15
16
|
end
|
16
17
|
end
|
data/spec/dummy/db/schema.rb
CHANGED
@@ -1,5 +1,3 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
1
|
# This file is auto-generated from the current state of the database. Instead
|
4
2
|
# of editing this file, please use the migrations feature of Active Record to
|
5
3
|
# incrementally modify your database, and then regenerate this schema definition.
|
@@ -12,29 +10,31 @@
|
|
12
10
|
#
|
13
11
|
# It's strongly recommended that you check this file into your version control system.
|
14
12
|
|
15
|
-
ActiveRecord::Schema[8.0].define(version:
|
16
|
-
create_table
|
17
|
-
t.string
|
18
|
-
t.datetime
|
19
|
-
t.datetime
|
13
|
+
ActiveRecord::Schema[8.0].define(version: 2024_12_23_212128) do
|
14
|
+
create_table "companies", force: :cascade do |t|
|
15
|
+
t.string "name"
|
16
|
+
t.datetime "created_at", null: false
|
17
|
+
t.datetime "updated_at", null: false
|
20
18
|
end
|
21
19
|
|
22
|
-
create_table
|
23
|
-
t.string
|
24
|
-
t.string
|
25
|
-
t.
|
26
|
-
t.
|
27
|
-
t.
|
28
|
-
t.
|
29
|
-
t.datetime
|
30
|
-
t.datetime
|
31
|
-
t.
|
32
|
-
t.index
|
20
|
+
create_table "has_states_states", force: :cascade do |t|
|
21
|
+
t.string "type", null: false
|
22
|
+
t.string "state_type"
|
23
|
+
t.string "status", null: false
|
24
|
+
t.json "metadata", default: {}, null: false
|
25
|
+
t.string "stateable_type", null: false
|
26
|
+
t.integer "stateable_id", null: false
|
27
|
+
t.datetime "completed_at"
|
28
|
+
t.datetime "created_at", null: false
|
29
|
+
t.datetime "updated_at", null: false
|
30
|
+
t.index ["stateable_type", "stateable_id"], name: "index_has_states_states_on_stateable"
|
31
|
+
t.index ["stateable_type", "stateable_id"], name: "index_has_states_states_on_stateable_type_and_stateable_id"
|
32
|
+
t.index ["type", "stateable_id"], name: "index_has_states_states_on_type_and_stateable_id"
|
33
33
|
end
|
34
34
|
|
35
|
-
create_table
|
36
|
-
t.string
|
37
|
-
t.datetime
|
38
|
-
t.datetime
|
35
|
+
create_table "users", force: :cascade do |t|
|
36
|
+
t.string "name"
|
37
|
+
t.datetime "created_at", null: false
|
38
|
+
t.datetime "updated_at", null: false
|
39
39
|
end
|
40
40
|
end
|
@@ -140,3 +140,120 @@ Migrating to CreateHasStatesTables (20241221183116)
|
|
140
140
|
[1m[36mHasStates::State Load (0.4ms)[0m [1m[34mSELECT "has_states_states".* FROM "has_states_states" WHERE "has_states_states"."stateable_id" = 1 AND "has_states_states"."stateable_type" = 'User' /* loading for pp */ LIMIT 11 /*application='Dummy'*/[0m
|
141
141
|
[1m[36mHasStates::State Exists? (0.3ms)[0m [1m[34mSELECT 1 AS one FROM "has_states_states" WHERE "has_states_states"."stateable_id" = 1 AND "has_states_states"."stateable_type" = 'User' AND "has_states_states"."state_type" = 'kyc' AND "has_states_states"."status" = 'under_review' LIMIT 1 /*application='Dummy'*/[0m
|
142
142
|
[1m[36mHasStates::State Load (0.3ms)[0m [1m[34mSELECT "has_states_states".* FROM "has_states_states" WHERE "has_states_states"."state_type" = 'onboarding' /* loading for pp */ LIMIT 11 /*application='Dummy'*/[0m
|
143
|
+
[1m[36mActiveRecord::SchemaMigration Load (0.1ms)[0m [1m[34mSELECT "schema_migrations"."version" FROM "schema_migrations" ORDER BY "schema_migrations"."version" ASC /*application='Dummy'*/[0m
|
144
|
+
[1m[36mActiveRecord::InternalMetadata Load (0.0ms)[0m [1m[34mSELECT * FROM "ar_internal_metadata" WHERE "ar_internal_metadata"."key" = 'environment' ORDER BY "ar_internal_metadata"."key" ASC LIMIT 1 /*application='Dummy'*/[0m
|
145
|
+
[1m[36mActiveRecord::SchemaMigration Load (0.0ms)[0m [1m[34mSELECT "schema_migrations"."version" FROM "schema_migrations" ORDER BY "schema_migrations"."version" ASC /*application='Dummy'*/[0m
|
146
|
+
[1m[36mActiveRecord::InternalMetadata Load (0.0ms)[0m [1m[34mSELECT * FROM "ar_internal_metadata" WHERE "ar_internal_metadata"."key" = 'environment' ORDER BY "ar_internal_metadata"."key" ASC LIMIT 1 /*application='Dummy'*/[0m
|
147
|
+
[1m[36mActiveRecord::SchemaMigration Load (0.0ms)[0m [1m[34mSELECT "schema_migrations"."version" FROM "schema_migrations" ORDER BY "schema_migrations"."version" ASC /*application='Dummy'*/[0m
|
148
|
+
[1m[36mActiveRecord::InternalMetadata Load (0.0ms)[0m [1m[34mSELECT * FROM "ar_internal_metadata" WHERE "ar_internal_metadata"."key" = 'environment' ORDER BY "ar_internal_metadata"."key" ASC LIMIT 1 /*application='Dummy'*/[0m
|
149
|
+
[1m[35m (0.0ms)[0m [1m[35mDROP TABLE IF EXISTS "companies" /*application='Dummy'*/[0m
|
150
|
+
[1m[35m (5.6ms)[0m [1m[35mCREATE TABLE "companies" ("id" integer PRIMARY KEY AUTOINCREMENT NOT NULL, "name" varchar, "created_at" datetime(6) NOT NULL, "updated_at" datetime(6) NOT NULL) /*application='Dummy'*/[0m
|
151
|
+
[1m[35m (0.0ms)[0m [1m[35mDROP TABLE IF EXISTS "has_states_states" /*application='Dummy'*/[0m
|
152
|
+
[1m[35m (0.1ms)[0m [1m[35mCREATE TABLE "has_states_states" ("id" integer PRIMARY KEY AUTOINCREMENT NOT NULL, "state_type" varchar, "status" varchar NOT NULL, "metadata" json DEFAULT '{}' NOT NULL, "stateable_type" varchar NOT NULL, "stateable_id" integer NOT NULL, "completed_at" datetime(6), "created_at" datetime(6) NOT NULL, "updated_at" datetime(6) NOT NULL) /*application='Dummy'*/[0m
|
153
|
+
[1m[35m (0.1ms)[0m [1m[35mCREATE INDEX "index_has_states_states_on_stateable" ON "has_states_states" ("stateable_type", "stateable_id") /*application='Dummy'*/[0m
|
154
|
+
[1m[35m (0.1ms)[0m [1m[35mCREATE INDEX "index_has_states_states_on_stateable_type_and_stateable_id" ON "has_states_states" ("stateable_type", "stateable_id") /*application='Dummy'*/[0m
|
155
|
+
[1m[35m (0.0ms)[0m [1m[35mDROP TABLE IF EXISTS "users" /*application='Dummy'*/[0m
|
156
|
+
[1m[35m (0.1ms)[0m [1m[35mCREATE TABLE "users" ("id" integer PRIMARY KEY AUTOINCREMENT NOT NULL, "name" varchar, "created_at" datetime(6) NOT NULL, "updated_at" datetime(6) NOT NULL) /*application='Dummy'*/[0m
|
157
|
+
[1m[35m (0.1ms)[0m [1m[35mCREATE TABLE "schema_migrations" ("version" varchar NOT NULL PRIMARY KEY) /*application='Dummy'*/[0m
|
158
|
+
[1m[36mActiveRecord::SchemaMigration Load (0.0ms)[0m [1m[34mSELECT "schema_migrations"."version" FROM "schema_migrations" ORDER BY "schema_migrations"."version" ASC /*application='Dummy'*/[0m
|
159
|
+
[1m[35m (0.0ms)[0m [1m[32mINSERT INTO "schema_migrations" (version) VALUES (20241221183116) /*application='Dummy'*/[0m
|
160
|
+
[1m[35m (0.0ms)[0m [1m[32mINSERT INTO "schema_migrations" (version) VALUES
|
161
|
+
(20241221171423); /*application='Dummy'*/[0m
|
162
|
+
[1m[35m (0.1ms)[0m [1m[35mCREATE TABLE "ar_internal_metadata" ("key" varchar NOT NULL PRIMARY KEY, "value" varchar, "created_at" datetime(6) NOT NULL, "updated_at" datetime(6) NOT NULL) /*application='Dummy'*/[0m
|
163
|
+
[1m[36mActiveRecord::InternalMetadata Load (0.0ms)[0m [1m[34mSELECT * FROM "ar_internal_metadata" WHERE "ar_internal_metadata"."key" = 'environment' ORDER BY "ar_internal_metadata"."key" ASC LIMIT 1 /*application='Dummy'*/[0m
|
164
|
+
[1m[36mActiveRecord::InternalMetadata Create (0.1ms)[0m [1m[32mINSERT INTO "ar_internal_metadata" ("key", "value", "created_at", "updated_at") VALUES ('environment', 'development', '2024-12-23 21:21:52.718796', '2024-12-23 21:21:52.718798') RETURNING "key" /*application='Dummy'*/[0m
|
165
|
+
[1m[36mActiveRecord::InternalMetadata Load (0.0ms)[0m [1m[34mSELECT * FROM "ar_internal_metadata" WHERE "ar_internal_metadata"."key" = 'environment' ORDER BY "ar_internal_metadata"."key" ASC LIMIT 1 /*application='Dummy'*/[0m
|
166
|
+
[1m[36mActiveRecord::InternalMetadata Load (0.0ms)[0m [1m[34mSELECT * FROM "ar_internal_metadata" WHERE "ar_internal_metadata"."key" = 'schema_sha1' ORDER BY "ar_internal_metadata"."key" ASC LIMIT 1 /*application='Dummy'*/[0m
|
167
|
+
[1m[36mActiveRecord::InternalMetadata Create (0.1ms)[0m [1m[32mINSERT INTO "ar_internal_metadata" ("key", "value", "created_at", "updated_at") VALUES ('schema_sha1', '0760f8030e1032ec04330c6d62a7c41acb788447', '2024-12-23 21:21:52.720124', '2024-12-23 21:21:52.720125') RETURNING "key" /*application='Dummy'*/[0m
|
168
|
+
[1m[36mActiveRecord::InternalMetadata Load (0.0ms)[0m [1m[34mSELECT * FROM "ar_internal_metadata" WHERE "ar_internal_metadata"."key" = 'environment' ORDER BY "ar_internal_metadata"."key" ASC LIMIT 1 /*application='Dummy'*/[0m
|
169
|
+
[1m[36mActiveRecord::SchemaMigration Load (0.0ms)[0m [1m[34mSELECT "schema_migrations"."version" FROM "schema_migrations" ORDER BY "schema_migrations"."version" ASC /*application='Dummy'*/[0m
|
170
|
+
Migrating to CreateHasStatesStates (20241223212128)
|
171
|
+
[1m[36mTRANSACTION (0.0ms)[0m [1m[35mBEGIN immediate TRANSACTION /*application='Dummy'*/[0m
|
172
|
+
[1m[35m (0.7ms)[0m [1m[35mCREATE TABLE "has_states_states" ("id" integer PRIMARY KEY AUTOINCREMENT NOT NULL, "type" varchar NOT NULL, "state_type" varchar, "status" varchar NOT NULL, "metadata" json DEFAULT '{}' NOT NULL, "stateable_type" varchar NOT NULL, "stateable_id" integer NOT NULL, "completed_at" datetime(6), "created_at" datetime(6) NOT NULL, "updated_at" datetime(6) NOT NULL) /*application='Dummy'*/[0m
|
173
|
+
[1m[36mTRANSACTION (0.0ms)[0m [1m[31mROLLBACK TRANSACTION /*application='Dummy'*/[0m
|
174
|
+
[1m[36mActiveRecord::InternalMetadata Load (0.1ms)[0m [1m[34mSELECT * FROM "ar_internal_metadata" WHERE "ar_internal_metadata"."key" = 'environment' ORDER BY "ar_internal_metadata"."key" ASC LIMIT 1 /*application='Dummy'*/[0m
|
175
|
+
[1m[36mActiveRecord::SchemaMigration Load (0.0ms)[0m [1m[34mSELECT "schema_migrations"."version" FROM "schema_migrations" ORDER BY "schema_migrations"."version" ASC /*application='Dummy'*/[0m
|
176
|
+
Migrating to CreateHasStatesStates (20241223212128)
|
177
|
+
[1m[36mTRANSACTION (0.0ms)[0m [1m[35mBEGIN immediate TRANSACTION /*application='Dummy'*/[0m
|
178
|
+
[1m[35m (1.0ms)[0m [1m[35mCREATE TABLE "has_states_states" ("id" integer PRIMARY KEY AUTOINCREMENT NOT NULL, "type" varchar NOT NULL, "state_type" varchar, "status" varchar NOT NULL, "metadata" json DEFAULT '{}' NOT NULL, "stateable_type" varchar NOT NULL, "stateable_id" integer NOT NULL, "completed_at" datetime(6), "created_at" datetime(6) NOT NULL, "updated_at" datetime(6) NOT NULL) /*application='Dummy'*/[0m
|
179
|
+
[1m[36mTRANSACTION (0.0ms)[0m [1m[31mROLLBACK TRANSACTION /*application='Dummy'*/[0m
|
180
|
+
[1m[36mActiveRecord::SchemaMigration Load (0.1ms)[0m [1m[34mSELECT "schema_migrations"."version" FROM "schema_migrations" ORDER BY "schema_migrations"."version" ASC /*application='Dummy'*/[0m
|
181
|
+
[1m[36mActiveRecord::SchemaMigration Load (0.0ms)[0m [1m[34mSELECT "schema_migrations"."version" FROM "schema_migrations" ORDER BY "schema_migrations"."version" ASC /*application='Dummy'*/[0m
|
182
|
+
[1m[36mActiveRecord::SchemaMigration Load (0.0ms)[0m [1m[34mSELECT "schema_migrations"."version" FROM "schema_migrations" ORDER BY "schema_migrations"."version" ASC /*application='Dummy'*/[0m
|
183
|
+
[1m[36mActiveRecord::SchemaMigration Load (0.0ms)[0m [1m[34mSELECT "schema_migrations"."version" FROM "schema_migrations" ORDER BY "schema_migrations"."version" ASC /*application='Dummy'*/[0m
|
184
|
+
[1m[36mActiveRecord::InternalMetadata Load (0.0ms)[0m [1m[34mSELECT * FROM "ar_internal_metadata" WHERE "ar_internal_metadata"."key" = 'environment' ORDER BY "ar_internal_metadata"."key" ASC LIMIT 1 /*application='Dummy'*/[0m
|
185
|
+
[1m[36mActiveRecord::SchemaMigration Load (0.0ms)[0m [1m[34mSELECT "schema_migrations"."version" FROM "schema_migrations" ORDER BY "schema_migrations"."version" ASC /*application='Dummy'*/[0m
|
186
|
+
[1m[36mActiveRecord::InternalMetadata Load (0.0ms)[0m [1m[34mSELECT * FROM "ar_internal_metadata" WHERE "ar_internal_metadata"."key" = 'environment' ORDER BY "ar_internal_metadata"."key" ASC LIMIT 1 /*application='Dummy'*/[0m
|
187
|
+
[1m[36mActiveRecord::SchemaMigration Load (0.0ms)[0m [1m[34mSELECT "schema_migrations"."version" FROM "schema_migrations" ORDER BY "schema_migrations"."version" ASC /*application='Dummy'*/[0m
|
188
|
+
[1m[36mActiveRecord::InternalMetadata Load (0.0ms)[0m [1m[34mSELECT * FROM "ar_internal_metadata" WHERE "ar_internal_metadata"."key" = 'environment' ORDER BY "ar_internal_metadata"."key" ASC LIMIT 1 /*application='Dummy'*/[0m
|
189
|
+
[1m[35m (0.1ms)[0m [1m[35mDROP TABLE IF EXISTS "companies" /*application='Dummy'*/[0m
|
190
|
+
[1m[35m (5.6ms)[0m [1m[35mCREATE TABLE "companies" ("id" integer PRIMARY KEY AUTOINCREMENT NOT NULL, "name" varchar, "created_at" datetime(6) NOT NULL, "updated_at" datetime(6) NOT NULL) /*application='Dummy'*/[0m
|
191
|
+
[1m[35m (0.0ms)[0m [1m[35mDROP TABLE IF EXISTS "has_states_states" /*application='Dummy'*/[0m
|
192
|
+
[1m[35m (0.1ms)[0m [1m[35mCREATE TABLE "has_states_states" ("id" integer PRIMARY KEY AUTOINCREMENT NOT NULL, "state_type" varchar, "status" varchar NOT NULL, "metadata" json DEFAULT '{}' NOT NULL, "stateable_type" varchar NOT NULL, "stateable_id" integer NOT NULL, "completed_at" datetime(6), "created_at" datetime(6) NOT NULL, "updated_at" datetime(6) NOT NULL) /*application='Dummy'*/[0m
|
193
|
+
[1m[35m (0.1ms)[0m [1m[35mCREATE INDEX "index_has_states_states_on_stateable" ON "has_states_states" ("stateable_type", "stateable_id") /*application='Dummy'*/[0m
|
194
|
+
[1m[35m (0.1ms)[0m [1m[35mCREATE INDEX "index_has_states_states_on_stateable_type_and_stateable_id" ON "has_states_states" ("stateable_type", "stateable_id") /*application='Dummy'*/[0m
|
195
|
+
[1m[35m (0.0ms)[0m [1m[35mDROP TABLE IF EXISTS "users" /*application='Dummy'*/[0m
|
196
|
+
[1m[35m (0.1ms)[0m [1m[35mCREATE TABLE "users" ("id" integer PRIMARY KEY AUTOINCREMENT NOT NULL, "name" varchar, "created_at" datetime(6) NOT NULL, "updated_at" datetime(6) NOT NULL) /*application='Dummy'*/[0m
|
197
|
+
[1m[35m (0.1ms)[0m [1m[35mCREATE TABLE "schema_migrations" ("version" varchar NOT NULL PRIMARY KEY) /*application='Dummy'*/[0m
|
198
|
+
[1m[36mActiveRecord::SchemaMigration Load (0.0ms)[0m [1m[34mSELECT "schema_migrations"."version" FROM "schema_migrations" ORDER BY "schema_migrations"."version" ASC /*application='Dummy'*/[0m
|
199
|
+
[1m[35m (0.0ms)[0m [1m[32mINSERT INTO "schema_migrations" (version) VALUES (20241221183116) /*application='Dummy'*/[0m
|
200
|
+
[1m[35m (0.0ms)[0m [1m[32mINSERT INTO "schema_migrations" (version) VALUES
|
201
|
+
(20241221171423); /*application='Dummy'*/[0m
|
202
|
+
[1m[35m (0.1ms)[0m [1m[35mCREATE TABLE "ar_internal_metadata" ("key" varchar NOT NULL PRIMARY KEY, "value" varchar, "created_at" datetime(6) NOT NULL, "updated_at" datetime(6) NOT NULL) /*application='Dummy'*/[0m
|
203
|
+
[1m[36mActiveRecord::InternalMetadata Load (0.0ms)[0m [1m[34mSELECT * FROM "ar_internal_metadata" WHERE "ar_internal_metadata"."key" = 'environment' ORDER BY "ar_internal_metadata"."key" ASC LIMIT 1 /*application='Dummy'*/[0m
|
204
|
+
[1m[36mActiveRecord::InternalMetadata Create (0.1ms)[0m [1m[32mINSERT INTO "ar_internal_metadata" ("key", "value", "created_at", "updated_at") VALUES ('environment', 'development', '2024-12-23 21:22:55.418140', '2024-12-23 21:22:55.418143') RETURNING "key" /*application='Dummy'*/[0m
|
205
|
+
[1m[36mActiveRecord::InternalMetadata Load (0.0ms)[0m [1m[34mSELECT * FROM "ar_internal_metadata" WHERE "ar_internal_metadata"."key" = 'environment' ORDER BY "ar_internal_metadata"."key" ASC LIMIT 1 /*application='Dummy'*/[0m
|
206
|
+
[1m[36mActiveRecord::InternalMetadata Load (0.0ms)[0m [1m[34mSELECT * FROM "ar_internal_metadata" WHERE "ar_internal_metadata"."key" = 'schema_sha1' ORDER BY "ar_internal_metadata"."key" ASC LIMIT 1 /*application='Dummy'*/[0m
|
207
|
+
[1m[36mActiveRecord::InternalMetadata Create (0.0ms)[0m [1m[32mINSERT INTO "ar_internal_metadata" ("key", "value", "created_at", "updated_at") VALUES ('schema_sha1', '0760f8030e1032ec04330c6d62a7c41acb788447', '2024-12-23 21:22:55.419477', '2024-12-23 21:22:55.419478') RETURNING "key" /*application='Dummy'*/[0m
|
208
|
+
[1m[36mActiveRecord::InternalMetadata Load (0.0ms)[0m [1m[34mSELECT * FROM "ar_internal_metadata" WHERE "ar_internal_metadata"."key" = 'environment' ORDER BY "ar_internal_metadata"."key" ASC LIMIT 1 /*application='Dummy'*/[0m
|
209
|
+
[1m[36mActiveRecord::SchemaMigration Load (0.0ms)[0m [1m[34mSELECT "schema_migrations"."version" FROM "schema_migrations" ORDER BY "schema_migrations"."version" ASC /*application='Dummy'*/[0m
|
210
|
+
Migrating to CreateHasStatesStates (20241223212128)
|
211
|
+
[1m[36mTRANSACTION (0.0ms)[0m [1m[35mBEGIN immediate TRANSACTION /*application='Dummy'*/[0m
|
212
|
+
[1m[35m (0.6ms)[0m [1m[35mCREATE TABLE "has_states_states" ("id" integer PRIMARY KEY AUTOINCREMENT NOT NULL, "type" varchar NOT NULL, "state_type" varchar, "status" varchar NOT NULL, "metadata" json DEFAULT '{}' NOT NULL, "stateable_type" varchar NOT NULL, "stateable_id" integer NOT NULL, "completed_at" datetime(6), "created_at" datetime(6) NOT NULL, "updated_at" datetime(6) NOT NULL) /*application='Dummy'*/[0m
|
213
|
+
[1m[36mTRANSACTION (0.0ms)[0m [1m[31mROLLBACK TRANSACTION /*application='Dummy'*/[0m
|
214
|
+
[1m[36mActiveRecord::InternalMetadata Load (0.1ms)[0m [1m[34mSELECT * FROM "ar_internal_metadata" WHERE "ar_internal_metadata"."key" = 'environment' ORDER BY "ar_internal_metadata"."key" ASC LIMIT 1 /*application='Dummy'*/[0m
|
215
|
+
[1m[36mActiveRecord::SchemaMigration Load (0.0ms)[0m [1m[34mSELECT "schema_migrations"."version" FROM "schema_migrations" ORDER BY "schema_migrations"."version" ASC /*application='Dummy'*/[0m
|
216
|
+
Migrating to CreateHasStatesStates (20241223212128)
|
217
|
+
[1m[36mTRANSACTION (0.0ms)[0m [1m[35mBEGIN immediate TRANSACTION /*application='Dummy'*/[0m
|
218
|
+
[1m[35m (0.9ms)[0m [1m[35mCREATE TABLE "has_states_states" ("id" integer PRIMARY KEY AUTOINCREMENT NOT NULL, "type" varchar NOT NULL, "state_type" varchar, "status" varchar NOT NULL, "metadata" json DEFAULT '{}' NOT NULL, "stateable_type" varchar NOT NULL, "stateable_id" integer NOT NULL, "completed_at" datetime(6), "created_at" datetime(6) NOT NULL, "updated_at" datetime(6) NOT NULL) /*application='Dummy'*/[0m
|
219
|
+
[1m[36mTRANSACTION (0.0ms)[0m [1m[31mROLLBACK TRANSACTION /*application='Dummy'*/[0m
|
220
|
+
[1m[36mActiveRecord::SchemaMigration Load (0.1ms)[0m [1m[34mSELECT "schema_migrations"."version" FROM "schema_migrations" ORDER BY "schema_migrations"."version" ASC /*application='Dummy'*/[0m
|
221
|
+
[1m[36mActiveRecord::InternalMetadata Load (0.0ms)[0m [1m[34mSELECT * FROM "ar_internal_metadata" WHERE "ar_internal_metadata"."key" = 'environment' ORDER BY "ar_internal_metadata"."key" ASC LIMIT 1 /*application='Dummy'*/[0m
|
222
|
+
[1m[36mActiveRecord::SchemaMigration Load (0.0ms)[0m [1m[34mSELECT "schema_migrations"."version" FROM "schema_migrations" ORDER BY "schema_migrations"."version" ASC /*application='Dummy'*/[0m
|
223
|
+
[1m[36mActiveRecord::InternalMetadata Load (0.0ms)[0m [1m[34mSELECT * FROM "ar_internal_metadata" WHERE "ar_internal_metadata"."key" = 'environment' ORDER BY "ar_internal_metadata"."key" ASC LIMIT 1 /*application='Dummy'*/[0m
|
224
|
+
[1m[36mActiveRecord::SchemaMigration Load (0.0ms)[0m [1m[34mSELECT "schema_migrations"."version" FROM "schema_migrations" ORDER BY "schema_migrations"."version" ASC /*application='Dummy'*/[0m
|
225
|
+
[1m[36mActiveRecord::InternalMetadata Load (0.0ms)[0m [1m[34mSELECT * FROM "ar_internal_metadata" WHERE "ar_internal_metadata"."key" = 'environment' ORDER BY "ar_internal_metadata"."key" ASC LIMIT 1 /*application='Dummy'*/[0m
|
226
|
+
[1m[35m (14.8ms)[0m [1m[35mCREATE TABLE "schema_migrations" ("version" varchar NOT NULL PRIMARY KEY) /*application='Dummy'*/[0m
|
227
|
+
[1m[35m (0.1ms)[0m [1m[35mCREATE TABLE "ar_internal_metadata" ("key" varchar NOT NULL PRIMARY KEY, "value" varchar, "created_at" datetime(6) NOT NULL, "updated_at" datetime(6) NOT NULL) /*application='Dummy'*/[0m
|
228
|
+
[1m[36mActiveRecord::InternalMetadata Load (0.0ms)[0m [1m[34mSELECT * FROM "ar_internal_metadata" WHERE "ar_internal_metadata"."key" = 'environment' ORDER BY "ar_internal_metadata"."key" ASC LIMIT 1 /*application='Dummy'*/[0m
|
229
|
+
[1m[36mActiveRecord::InternalMetadata Create (0.1ms)[0m [1m[32mINSERT INTO "ar_internal_metadata" ("key", "value", "created_at", "updated_at") VALUES ('environment', 'development', '2024-12-23 21:23:59.040610', '2024-12-23 21:23:59.040613') RETURNING "key" /*application='Dummy'*/[0m
|
230
|
+
[1m[36mActiveRecord::SchemaMigration Load (0.0ms)[0m [1m[34mSELECT "schema_migrations"."version" FROM "schema_migrations" ORDER BY "schema_migrations"."version" ASC /*application='Dummy'*/[0m
|
231
|
+
Migrating to CreateTestModels (20241221171423)
|
232
|
+
[1m[36mTRANSACTION (0.0ms)[0m [1m[35mBEGIN immediate TRANSACTION /*application='Dummy'*/[0m
|
233
|
+
[1m[35m (0.8ms)[0m [1m[35mCREATE TABLE "users" ("id" integer PRIMARY KEY AUTOINCREMENT NOT NULL, "name" varchar, "created_at" datetime(6) NOT NULL, "updated_at" datetime(6) NOT NULL) /*application='Dummy'*/[0m
|
234
|
+
[1m[35m (0.1ms)[0m [1m[35mCREATE TABLE "companies" ("id" integer PRIMARY KEY AUTOINCREMENT NOT NULL, "name" varchar, "created_at" datetime(6) NOT NULL, "updated_at" datetime(6) NOT NULL) /*application='Dummy'*/[0m
|
235
|
+
[1m[36mActiveRecord::SchemaMigration Create (0.1ms)[0m [1m[32mINSERT INTO "schema_migrations" ("version") VALUES ('20241221171423') RETURNING "version" /*application='Dummy'*/[0m
|
236
|
+
[1m[36mTRANSACTION (0.0ms)[0m [1m[35mCOMMIT TRANSACTION /*application='Dummy'*/[0m
|
237
|
+
Migrating to CreateHasStatesStates (20241223212128)
|
238
|
+
[1m[36mTRANSACTION (0.0ms)[0m [1m[35mBEGIN immediate TRANSACTION /*application='Dummy'*/[0m
|
239
|
+
[1m[35m (0.5ms)[0m [1m[35mCREATE TABLE "has_states_states" ("id" integer PRIMARY KEY AUTOINCREMENT NOT NULL, "type" varchar NOT NULL, "state_type" varchar, "status" varchar NOT NULL, "metadata" json DEFAULT '{}' NOT NULL, "stateable_type" varchar NOT NULL, "stateable_id" integer NOT NULL, "completed_at" datetime(6), "created_at" datetime(6) NOT NULL, "updated_at" datetime(6) NOT NULL) /*application='Dummy'*/[0m
|
240
|
+
[1m[35m (0.1ms)[0m [1m[35mCREATE INDEX "index_has_states_states_on_stateable" ON "has_states_states" ("stateable_type", "stateable_id") /*application='Dummy'*/[0m
|
241
|
+
[1m[35m (0.0ms)[0m [1m[35mCREATE INDEX "index_has_states_states_on_type_and_stateable_id" ON "has_states_states" ("type", "stateable_id") /*application='Dummy'*/[0m
|
242
|
+
[1m[35m (0.0ms)[0m [1m[35mCREATE INDEX "index_has_states_states_on_stateable_type_and_stateable_id" ON "has_states_states" ("stateable_type", "stateable_id") /*application='Dummy'*/[0m
|
243
|
+
[1m[36mActiveRecord::SchemaMigration Create (0.1ms)[0m [1m[32mINSERT INTO "schema_migrations" ("version") VALUES ('20241223212128') RETURNING "version" /*application='Dummy'*/[0m
|
244
|
+
[1m[36mTRANSACTION (0.1ms)[0m [1m[35mCOMMIT TRANSACTION /*application='Dummy'*/[0m
|
245
|
+
[1m[36mActiveRecord::SchemaMigration Load (0.0ms)[0m [1m[34mSELECT "schema_migrations"."version" FROM "schema_migrations" ORDER BY "schema_migrations"."version" ASC /*application='Dummy'*/[0m
|
246
|
+
[1m[36mUser Load (0.1ms)[0m [1m[34mSELECT "users".* FROM "users" ORDER BY "users"."id" DESC LIMIT 1 /*application='Dummy'*/[0m
|
247
|
+
[1m[36mTRANSACTION (0.1ms)[0m [1m[35mBEGIN immediate TRANSACTION /*application='Dummy'*/[0m
|
248
|
+
[1m[36mUser Create (1.0ms)[0m [1m[32mINSERT INTO "users" ("name", "created_at", "updated_at") VALUES ('Bob', '2024-12-23 21:26:02.330048', '2024-12-23 21:26:02.330048') RETURNING "id" /*application='Dummy'*/[0m
|
249
|
+
[1m[36mTRANSACTION (5.5ms)[0m [1m[35mCOMMIT TRANSACTION /*application='Dummy'*/[0m
|
250
|
+
[1m[36mTRANSACTION (0.0ms)[0m [1m[35mBEGIN immediate TRANSACTION /*application='Dummy'*/[0m
|
251
|
+
[1m[36mHasStates::State Create (0.2ms)[0m [1m[32mINSERT INTO "has_states_states" ("type", "state_type", "status", "metadata", "stateable_type", "stateable_id", "completed_at", "created_at", "updated_at") VALUES ('HasStates::State', 'kyc', 'pending', '{}', 'User', 1, NULL, '2024-12-23 21:27:24.876829', '2024-12-23 21:27:24.876829') RETURNING "id" /*application='Dummy'*/[0m
|
252
|
+
[1m[36mTRANSACTION (0.1ms)[0m [1m[35mCOMMIT TRANSACTION /*application='Dummy'*/[0m
|
253
|
+
[1m[36mTRANSACTION (0.1ms)[0m [1m[35mBEGIN immediate TRANSACTION /*application='Dummy'*/[0m
|
254
|
+
[1m[36mTestState Create (0.6ms)[0m [1m[32mINSERT INTO "has_states_states" ("type", "state_type", "status", "metadata", "stateable_type", "stateable_id", "completed_at", "created_at", "updated_at") VALUES ('TestState', 'kyc', 'pending', '{"foo":"bar"}', 'User', 1, NULL, '2024-12-23 21:31:02.082316', '2024-12-23 21:31:02.082316') RETURNING "id" /*application='Dummy'*/[0m
|
255
|
+
[1m[36mTRANSACTION (0.1ms)[0m [1m[35mCOMMIT TRANSACTION /*application='Dummy'*/[0m
|
256
|
+
[1m[36mUser Load (0.1ms)[0m [1m[34mSELECT "users".* FROM "users" ORDER BY "users"."id" DESC LIMIT 1 /*application='Dummy'*/[0m
|
257
|
+
[1m[36mTRANSACTION (0.1ms)[0m [1m[35mBEGIN immediate TRANSACTION /*application='Dummy'*/[0m
|
258
|
+
[1m[36mKYCState Create (0.6ms)[0m [1m[32mINSERT INTO "has_states_states" ("type", "state_type", "status", "metadata", "stateable_type", "stateable_id", "completed_at", "created_at", "updated_at") VALUES ('KYCState', 'kyc', 'pending', '{"document_type":"passport"}', 'User', 1, NULL, '2024-12-23 21:38:20.849253', '2024-12-23 21:38:20.849253') RETURNING "id" /*application='Dummy'*/[0m
|
259
|
+
[1m[36mTRANSACTION (14.6ms)[0m [1m[35mCOMMIT TRANSACTION /*application='Dummy'*/[0m
|