stateful_models 0.0.1

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.
Files changed (75) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +6 -0
  3. data/LICENSE.txt +21 -0
  4. data/README.md +181 -0
  5. data/lib/generators/has_states/install/install_generator.rb +25 -0
  6. data/lib/generators/has_states/install/templates/create_has_states_states.rb.erb +17 -0
  7. data/lib/generators/has_states/install/templates/initializer.rb.erb +42 -0
  8. data/lib/has_states/callback.rb +58 -0
  9. data/lib/has_states/configuration/model_configuration.rb +48 -0
  10. data/lib/has_states/configuration/state_type_configuration.rb +15 -0
  11. data/lib/has_states/configuration.rb +83 -0
  12. data/lib/has_states/railtie.rb +8 -0
  13. data/lib/has_states/state.rb +41 -0
  14. data/lib/has_states/stateable.rb +22 -0
  15. data/lib/has_states/version.rb +5 -0
  16. data/lib/has_states.rb +24 -0
  17. data/spec/dummy/Gemfile +40 -0
  18. data/spec/dummy/Gemfile.lock +286 -0
  19. data/spec/dummy/README.md +24 -0
  20. data/spec/dummy/Rakefile +8 -0
  21. data/spec/dummy/app/controllers/application_controller.rb +4 -0
  22. data/spec/dummy/app/jobs/application_job.rb +9 -0
  23. data/spec/dummy/app/models/application_record.rb +5 -0
  24. data/spec/dummy/app/models/company.rb +3 -0
  25. data/spec/dummy/app/models/user.rb +3 -0
  26. data/spec/dummy/bin/brakeman +9 -0
  27. data/spec/dummy/bin/dev +4 -0
  28. data/spec/dummy/bin/docker-entrypoint +14 -0
  29. data/spec/dummy/bin/rails +6 -0
  30. data/spec/dummy/bin/rake +6 -0
  31. data/spec/dummy/bin/rubocop +10 -0
  32. data/spec/dummy/bin/setup +36 -0
  33. data/spec/dummy/bin/thrust +7 -0
  34. data/spec/dummy/config/application.rb +27 -0
  35. data/spec/dummy/config/boot.rb +5 -0
  36. data/spec/dummy/config/credentials.yml.enc +1 -0
  37. data/spec/dummy/config/database.yml +37 -0
  38. data/spec/dummy/config/environment.rb +7 -0
  39. data/spec/dummy/config/environments/development.rb +54 -0
  40. data/spec/dummy/config/environments/production.rb +69 -0
  41. data/spec/dummy/config/environments/test.rb +44 -0
  42. data/spec/dummy/config/initializers/cors.rb +18 -0
  43. data/spec/dummy/config/initializers/filter_parameter_logging.rb +10 -0
  44. data/spec/dummy/config/initializers/inflections.rb +18 -0
  45. data/spec/dummy/config/locales/en.yml +31 -0
  46. data/spec/dummy/config/master.key +1 -0
  47. data/spec/dummy/config/puma.rb +43 -0
  48. data/spec/dummy/config/routes.rb +12 -0
  49. data/spec/dummy/config.ru +8 -0
  50. data/spec/dummy/db/migrate/20241221171423_create_test_models.rb +15 -0
  51. data/spec/dummy/db/migrate/20241221183116_create_has_states_tables.rb +19 -0
  52. data/spec/dummy/db/schema.rb +40 -0
  53. data/spec/dummy/db/seeds.rb +11 -0
  54. data/spec/dummy/log/development.log +142 -0
  55. data/spec/dummy/log/test.log +16652 -0
  56. data/spec/dummy/public/robots.txt +1 -0
  57. data/spec/dummy/storage/development.sqlite3 +0 -0
  58. data/spec/dummy/storage/test.sqlite3 +0 -0
  59. data/spec/dummy/tmp/local_secret.txt +1 -0
  60. data/spec/factories/has_states.rb +19 -0
  61. data/spec/generators/has_states/install_generator_spec.rb +27 -0
  62. data/spec/generators/tmp/config/initializers/has_states.rb +42 -0
  63. data/spec/generators/tmp/db/migrate/20241223020432_create_has_states_states.rb +17 -0
  64. data/spec/has_states/callback_spec.rb +92 -0
  65. data/spec/has_states/configuration_spec.rb +161 -0
  66. data/spec/has_states/state_spec.rb +264 -0
  67. data/spec/has_states_spec.rb +52 -0
  68. data/spec/rails_helper.rb +18 -0
  69. data/spec/spec_helper.rb +16 -0
  70. data/spec/support/database_cleaner.rb +17 -0
  71. data/spec/support/factory_bot.rb +8 -0
  72. data/spec/support/shoulda_matchers.rb +10 -0
  73. data/spec/tmp/config/initializers/has_states.rb +12 -0
  74. data/spec/tmp/db/migrate/20241223004024_create_has_states_states.rb +20 -0
  75. metadata +122 -0
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+
5
+ # Load dummy Rails app if in Rails context
6
+ ENV['RAILS_ENV'] = 'test'
7
+ require File.expand_path('dummy/config/environment.rb', __dir__)
8
+
9
+ # Load support files
10
+ require_relative 'support/factory_bot'
11
+ require_relative 'support/shoulda_matchers'
12
+ require_relative 'support/database_cleaner'
13
+
14
+ RSpec.configure do |config|
15
+ config.include(Shoulda::Matchers::ActiveModel, type: :model)
16
+ config.include(Shoulda::Matchers::ActiveRecord, type: :model)
17
+ # ... rest of your RSpec configuration
18
+ end
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'bundler/setup'
4
+ require 'has_states'
5
+
6
+ RSpec.configure do |config|
7
+ # Enable flags like --only-failures and --next-failure
8
+ config.example_status_persistence_file_path = '.rspec_status'
9
+
10
+ # Disable RSpec exposing methods globally on `Module` and `main`
11
+ config.disable_monkey_patching!
12
+
13
+ config.expect_with :rspec do |c|
14
+ c.syntax = :expect
15
+ end
16
+ end
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'database_cleaner/active_record'
4
+
5
+ RSpec.configure do |config|
6
+ # Database Cleaner setup
7
+ config.before(:suite) do
8
+ DatabaseCleaner.strategy = :transaction
9
+ DatabaseCleaner.clean_with(:truncation)
10
+ end
11
+
12
+ config.around do |example|
13
+ DatabaseCleaner.cleaning do
14
+ example.run
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'factory_bot'
4
+ require_relative '../factories/has_states'
5
+
6
+ RSpec.configure do |config|
7
+ config.include FactoryBot::Syntax::Methods
8
+ end
@@ -0,0 +1,10 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'shoulda-matchers'
4
+
5
+ Shoulda::Matchers.configure do |config|
6
+ config.integrate do |with|
7
+ with.test_framework :rspec
8
+ with.library :rails
9
+ end
10
+ end
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ HasStates.configure do |config|
4
+ # Configure your models here
5
+ # Example:
6
+ #
7
+ # config.configure_model User do |model|
8
+ # model.state_type :kyc do |type|
9
+ # type.statuses = ['pending', 'completed', 'rejected']
10
+ # end
11
+ # end
12
+ end
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ class CreateHasStatesStates < ActiveRecord::Migration[8.0]
4
+ def change
5
+ create_table :has_states_states do |t|
6
+ t.string :state_type
7
+ t.string :status, null: false
8
+
9
+ t.json :metadata, null: false, default: {}
10
+
11
+ t.references :stateable, polymorphic: true, null: false
12
+
13
+ t.datetime :completed_at
14
+ t.timestamps
15
+
16
+ t.index [:status]
17
+ t.index %i[stateable_type stateable_id]
18
+ end
19
+ end
20
+ end
metadata ADDED
@@ -0,0 +1,122 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: stateful_models
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Sebastian Scholl
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2024-12-23 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: "\n HasStates provides state management and event system capabilities
14
+ for Ruby objects.\n It allows tracking states, state transitions, and triggering
15
+ callbacks on state changes.\n "
16
+ email:
17
+ - sebscholl@gmail.com
18
+ executables: []
19
+ extensions: []
20
+ extra_rdoc_files: []
21
+ files:
22
+ - CHANGELOG.md
23
+ - LICENSE.txt
24
+ - README.md
25
+ - lib/generators/has_states/install/install_generator.rb
26
+ - lib/generators/has_states/install/templates/create_has_states_states.rb.erb
27
+ - lib/generators/has_states/install/templates/initializer.rb.erb
28
+ - lib/has_states.rb
29
+ - lib/has_states/callback.rb
30
+ - lib/has_states/configuration.rb
31
+ - lib/has_states/configuration/model_configuration.rb
32
+ - lib/has_states/configuration/state_type_configuration.rb
33
+ - lib/has_states/railtie.rb
34
+ - lib/has_states/state.rb
35
+ - lib/has_states/stateable.rb
36
+ - lib/has_states/version.rb
37
+ - spec/dummy/Gemfile
38
+ - spec/dummy/Gemfile.lock
39
+ - spec/dummy/README.md
40
+ - spec/dummy/Rakefile
41
+ - spec/dummy/app/controllers/application_controller.rb
42
+ - spec/dummy/app/jobs/application_job.rb
43
+ - spec/dummy/app/models/application_record.rb
44
+ - spec/dummy/app/models/company.rb
45
+ - spec/dummy/app/models/user.rb
46
+ - spec/dummy/bin/brakeman
47
+ - spec/dummy/bin/dev
48
+ - spec/dummy/bin/docker-entrypoint
49
+ - spec/dummy/bin/rails
50
+ - spec/dummy/bin/rake
51
+ - spec/dummy/bin/rubocop
52
+ - spec/dummy/bin/setup
53
+ - spec/dummy/bin/thrust
54
+ - spec/dummy/config.ru
55
+ - spec/dummy/config/application.rb
56
+ - spec/dummy/config/boot.rb
57
+ - spec/dummy/config/credentials.yml.enc
58
+ - spec/dummy/config/database.yml
59
+ - spec/dummy/config/environment.rb
60
+ - spec/dummy/config/environments/development.rb
61
+ - spec/dummy/config/environments/production.rb
62
+ - spec/dummy/config/environments/test.rb
63
+ - spec/dummy/config/initializers/cors.rb
64
+ - spec/dummy/config/initializers/filter_parameter_logging.rb
65
+ - spec/dummy/config/initializers/inflections.rb
66
+ - spec/dummy/config/locales/en.yml
67
+ - spec/dummy/config/master.key
68
+ - spec/dummy/config/puma.rb
69
+ - spec/dummy/config/routes.rb
70
+ - spec/dummy/db/migrate/20241221171423_create_test_models.rb
71
+ - spec/dummy/db/migrate/20241221183116_create_has_states_tables.rb
72
+ - spec/dummy/db/schema.rb
73
+ - spec/dummy/db/seeds.rb
74
+ - spec/dummy/log/development.log
75
+ - spec/dummy/log/test.log
76
+ - spec/dummy/public/robots.txt
77
+ - spec/dummy/storage/development.sqlite3
78
+ - spec/dummy/storage/test.sqlite3
79
+ - spec/dummy/tmp/local_secret.txt
80
+ - spec/factories/has_states.rb
81
+ - spec/generators/has_states/install_generator_spec.rb
82
+ - spec/generators/tmp/config/initializers/has_states.rb
83
+ - spec/generators/tmp/db/migrate/20241223020432_create_has_states_states.rb
84
+ - spec/has_states/callback_spec.rb
85
+ - spec/has_states/configuration_spec.rb
86
+ - spec/has_states/state_spec.rb
87
+ - spec/has_states_spec.rb
88
+ - spec/rails_helper.rb
89
+ - spec/spec_helper.rb
90
+ - spec/support/database_cleaner.rb
91
+ - spec/support/factory_bot.rb
92
+ - spec/support/shoulda_matchers.rb
93
+ - spec/tmp/config/initializers/has_states.rb
94
+ - spec/tmp/db/migrate/20241223004024_create_has_states_states.rb
95
+ homepage: https://github.com/sebscholl/has_states
96
+ licenses:
97
+ - MIT
98
+ metadata:
99
+ homepage_uri: https://github.com/sebscholl/has_states
100
+ source_code_uri: https://github.com/sebscholl/has_states
101
+ changelog_uri: https://github.com/sebscholl/has_states/blob/main/CHANGELOG.md
102
+ rubygems_mfa_required: 'true'
103
+ post_install_message:
104
+ rdoc_options: []
105
+ require_paths:
106
+ - lib
107
+ required_ruby_version: !ruby/object:Gem::Requirement
108
+ requirements:
109
+ - - ">="
110
+ - !ruby/object:Gem::Version
111
+ version: 2.7.0
112
+ required_rubygems_version: !ruby/object:Gem::Requirement
113
+ requirements:
114
+ - - ">="
115
+ - !ruby/object:Gem::Version
116
+ version: '0'
117
+ requirements: []
118
+ rubygems_version: 3.5.22
119
+ signing_key:
120
+ specification_version: 4
121
+ summary: Simple and flexible state management for Ruby objects
122
+ test_files: []