whittaker_tech-midas 0.1.1 → 0.3.0

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 (29) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +75 -6
  3. data/app/controllers/whittaker_tech/midas/application_controller.rb +1 -5
  4. data/app/helpers/whittaker_tech/midas/application_helper.rb +1 -5
  5. data/app/helpers/whittaker_tech/midas/form_helper.rb +68 -72
  6. data/app/jobs/whittaker_tech/midas/application_job.rb +1 -5
  7. data/app/mailers/whittaker_tech/midas/application_mailer.rb +3 -7
  8. data/app/models/concerns/whittaker_tech/midas/bankable.rb +188 -172
  9. data/app/models/whittaker_tech/midas/application_record.rb +2 -6
  10. data/app/models/whittaker_tech/midas/coin/allocation.rb +124 -0
  11. data/app/models/whittaker_tech/midas/coin/arithmetic.rb +196 -0
  12. data/app/models/whittaker_tech/midas/coin/bidi.rb +87 -0
  13. data/app/models/whittaker_tech/midas/coin/converter/bank_provider.rb +35 -0
  14. data/app/models/whittaker_tech/midas/coin/converter.rb +79 -0
  15. data/app/models/whittaker_tech/midas/coin/parser.rb +104 -0
  16. data/app/models/whittaker_tech/midas/coin/presenter.rb +229 -0
  17. data/app/models/whittaker_tech/midas/coin.rb +285 -76
  18. data/app/models/whittaker_tech/midas/exchange.rb +37 -0
  19. data/db/migrate/20260101000000_create_whittaker_tech_schema.rb +26 -0
  20. data/db/migrate/{create_wt_midas_coins.rb → 20260101000001_create_midas_coins.rb} +7 -3
  21. data/db/migrate/20260219120000_rename_resource_label_to_resource_role_in_wt_midas_coins.rb +12 -0
  22. data/db/migrate/20260219150000_rename_wt_midas_coins_to_midas_coins.rb +13 -0
  23. data/db/migrate/20260707000000_create_midas_exchanges.rb +15 -0
  24. data/lib/generators/whittaker_tech/midas/install/install_generator.rb +5 -11
  25. data/lib/whittaker_tech/midas/deprecation.rb +32 -0
  26. data/lib/whittaker_tech/midas/engine.rb +113 -115
  27. data/lib/whittaker_tech/midas/version.rb +4 -4
  28. data/lib/whittaker_tech/midas.rb +120 -3
  29. metadata +72 -3
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'whittaker_tech/midas'
4
+
5
+ class RenameResourceLabelToResourceRoleInWtMidasCoins < ActiveRecord::Migration[8.0]
6
+ def change
7
+ rename_column WhittakerTech::Midas.table_name('coins'), :resource_label, :resource_role
8
+ rename_index WhittakerTech::Midas.table_name('coins'),
9
+ 'index_midas_coins_on_owner_and_label',
10
+ 'index_midas_coins_on_resource_and_role'
11
+ end
12
+ end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ class RenameWtMidasCoinsToMidasCoins < ActiveRecord::Migration[8.0]
4
+ def change
5
+ rename_table :wt_midas_coins, :midas_coins
6
+ rename_index :midas_coins,
7
+ 'index_wt_midas_coins_on_resource_and_role',
8
+ 'index_midas_coins_on_resource_and_role'
9
+ rename_index :midas_coins,
10
+ 'index_wt_midas_coins_on_resource',
11
+ 'index_midas_coins_on_resource'
12
+ end
13
+ end
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'whittaker_tech/midas'
4
+
5
+ class CreateMidasExchanges < ActiveRecord::Migration[8.0]
6
+ def change
7
+ create_table WhittakerTech::Midas.table_name('exchanges') do |t|
8
+ t.decimal :rate, precision: 24, scale: 12, null: false
9
+ t.string :source, null: false
10
+ t.datetime :at, null: false
11
+
12
+ t.timestamps
13
+ end
14
+ end
15
+ end
@@ -1,16 +1,10 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- module WhittakerTech
4
- module Midas
5
- module Generators
6
- class InstallGenerator < Rails::Generators::Base
7
- desc 'Installs Midas and copies migrations.'
3
+ class WhittakerTech::Midas::Generators::InstallGenerator < Rails::Generators::Base
4
+ desc 'Installs Midas and copies migrations.'
8
5
 
9
- def copy_migrations
10
- say_status 'migrations', 'Copying migrations for Midas...', :green
11
- rake 'midas:install:migrations'
12
- end
13
- end
14
- end
6
+ def copy_migrations
7
+ say_status 'migrations', 'Copying migrations for Midas...', :green
8
+ rake 'midas:install:migrations'
15
9
  end
16
10
  end
@@ -0,0 +1,32 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Emits or raises deprecation notices for Midas API changes.
4
+ #
5
+ # Behavior is controlled by WhittakerTech::Midas.deprecation_behavior:
6
+ # :warn - prints a warning to STDERR (default)
7
+ # :raise - raises a DeprecationError (useful in test mode)
8
+ # :silence - suppresses all notices
9
+ module WhittakerTech::Midas::Deprecation
10
+ # Removal horizon advertised in deprecation messages.
11
+ HORIZON = '0.3.0'
12
+
13
+ # Error raised when deprecation_behavior is :raise.
14
+ class DeprecationError < StandardError; end
15
+
16
+ # Emits a deprecation notice for `message` attributed to `callsite`.
17
+ #
18
+ # @param message [String] human-readable deprecation description
19
+ # @param callsite [Thread::Backtrace::Location, nil]
20
+ def self.warn(message, callsite = caller_locations(1, 1).first)
21
+ location = callsite ? "#{callsite.path}:#{callsite.lineno}" : 'unknown'
22
+ full = "[DEPRECATED] #{message} " \
23
+ "(called from #{location}). " \
24
+ "Will be removed in whittaker_tech-midas #{HORIZON}."
25
+
26
+ case WhittakerTech::Midas.deprecation_behavior
27
+ when :raise then raise DeprecationError, full
28
+ when :silence then nil
29
+ else Kernel.warn full
30
+ end
31
+ end
32
+ end
@@ -1,122 +1,120 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- module WhittakerTech
4
- module Midas
5
- # The Midas Engine provides monetary value management capabilities as a Rails Engine.
6
- # It integrates seamlessly with Rails applications to add currency handling, coin management,
7
- # and monetary formatting functionality through the Bankable concern and related components.
8
- #
9
- # This engine follows Rails Engine conventions and can be mounted in any Rails application
10
- # to provide comprehensive monetary value handling capabilities. It includes models, helpers,
11
- # and utilities for working with currencies and monetary amounts.
12
- #
13
- # == Features
14
- #
15
- # - **Bankable Concern**: Allows any Active Record model to have monetary attributes
16
- # - **Coin Model**: Stores monetary values with currency information
17
- # - **Form Helpers**: View helpers for monetary input and display
18
- # - **Currency Management**: Integration with the Money gem for currency operations
19
- # - **Namespace Isolation**: Clean separation from host application code
20
- #
21
- # == Installation and Setup
22
- #
23
- # Add the engine to your Rails application's Gemfile and run bundle install.
24
- # The engine will automatically configure itself when Rails boots.
25
- #
26
- # @example Adding to a Rails application
27
- # # In your Gemfile
28
- # gem 'whittaker_tech-midas'
29
- #
30
- # # The engine auto-configures on Rails boot
31
- # # No additional setup required
32
- #
33
- # == Usage in Host Applications
34
- #
35
- # Once installed, the engine's functionality becomes available throughout
36
- # your Rails application:
37
- #
38
- # @example Using Bankable in models
39
- # class Product < ApplicationRecord
40
- # include WhittakerTech::Midas::Bankable
41
- # has_coin :price
42
- # end
43
- #
44
- # @example Using form helpers in views
45
- # <%= form_with model: @product do |form| %>
46
- # <%= form.money_field :price %>
47
- # <% end %>
48
- #
49
- # == Configuration
50
- #
51
- # The engine provides several configuration points:
52
- #
53
- # - **Eager Loading**: Automatically configures model loading paths
54
- # - **Helper Integration**: Injects form helpers into ActionView
55
- # - **Namespace Isolation**: Keeps engine code separate from host application
56
- #
57
- # == Directory Structure
58
- #
59
- # The engine follows standard Rails Engine structure:
60
- # - `app/models/`: Coin model and concerns
61
- # - `app/helpers/`: Form helpers for monetary inputs
62
- # - `db/migrate/`: Database migrations for coin storage
63
- # - `lib/`: Engine configuration and initialization
64
- #
65
- # == Database Integration
66
- #
67
- # The engine provides database migrations that create the necessary tables
68
- # for storing monetary values. Run migrations after installation:
69
- #
70
- # @example Running migrations
71
- # rails db:migrate
72
- #
73
- # == Namespace Isolation
74
- #
75
- # The engine uses `isolate_namespace` to prevent conflicts with host
76
- # application code. All engine components are properly namespaced under
77
- # `WhittakerTech::Midas`.
78
- #
79
- # == Helper Integration
80
- #
81
- # Form helpers are automatically made available in all views through
82
- # an initializer that extends ActionView::Base when the view layer loads.
83
- # This provides seamless integration without requiring manual includes.
84
- #
85
- # == Eager Loading
86
- #
87
- # The engine configures additional eager load paths to ensure all models
88
- # are properly loaded in production environments. This includes the models
89
- # directory which contains the Coin model and Bankable concern.
90
- #
91
- # == Thread Safety
92
- #
93
- # The engine follows Rails conventions for thread safety and can be safely
94
- # used in multi-threaded environments like Puma or Falcon.
95
- #
96
- # == Development and Testing
97
- #
98
- # The engine can be developed and tested independently using its own
99
- # test suite, or integrated into a host application for testing.
100
- #
101
- # @see WhittakerTech::Midas::Bankable
102
- # @see WhittakerTech::Midas::Coin
103
- # @see WhittakerTech::Midas::FormHelper
104
- # @since 0.1.0
105
- class Engine < ::Rails::Engine
106
- isolate_namespace WhittakerTech::Midas
3
+ # The Midas Engine provides monetary value management capabilities as a Rails Engine.
4
+ # It integrates seamlessly with Rails applications to add currency handling, coin management,
5
+ # and monetary formatting functionality through the Bankable concern and related components.
6
+ #
7
+ # This engine follows Rails Engine conventions and can be mounted in any Rails application
8
+ # to provide comprehensive monetary value handling capabilities. It includes models, helpers,
9
+ # and utilities for working with currencies and monetary amounts.
10
+ #
11
+ # == Features
12
+ #
13
+ # - **Bankable Concern**: Allows any Active Record model to have monetary attributes
14
+ # - **Coin Model**: Stores monetary values with currency information
15
+ # - **Form Helpers**: View helpers for monetary input and display
16
+ # - **Currency Management**: Integration with the Money gem for currency operations
17
+ # - **Namespace Isolation**: Clean separation from host application code
18
+ #
19
+ # == Installation and Setup
20
+ #
21
+ # Add the engine to your Rails application's Gemfile and run bundle install.
22
+ # The engine will automatically configure itself when Rails boots.
23
+ #
24
+ # @example Adding to a Rails application
25
+ # # In your Gemfile
26
+ # gem 'whittaker_tech-midas'
27
+ #
28
+ # # The engine auto-configures on Rails boot
29
+ # # No additional setup required
30
+ #
31
+ # == Usage in Host Applications
32
+ #
33
+ # Once installed, the engine's functionality becomes available throughout
34
+ # your Rails application:
35
+ #
36
+ # @example Using Bankable in models
37
+ # class Product < ApplicationRecord
38
+ # include WhittakerTech::Midas::Bankable
39
+ # has_coin :price
40
+ # end
41
+ #
42
+ # @example Using form helpers in views
43
+ # <%= form_with model: @product do |form| %>
44
+ # <%= form.money_field :price %>
45
+ # <% end %>
46
+ #
47
+ # == Configuration
48
+ #
49
+ # The engine provides several configuration points:
50
+ #
51
+ # - **Eager Loading**: Automatically configures model loading paths
52
+ # - **Helper Integration**: Injects form helpers into ActionView
53
+ # - **Namespace Isolation**: Keeps engine code separate from host application
54
+ #
55
+ # == Directory Structure
56
+ #
57
+ # The engine follows standard Rails Engine structure:
58
+ # - `app/models/`: Coin model and concerns
59
+ # - `app/helpers/`: Form helpers for monetary inputs
60
+ # - `db/migrate/`: Database migrations for coin storage
61
+ # - `lib/`: Engine configuration and initialization
62
+ #
63
+ # == Database Integration
64
+ #
65
+ # The engine provides database migrations that create the necessary tables
66
+ # for storing monetary values. Run migrations after installation:
67
+ #
68
+ # @example Running migrations
69
+ # rails db:migrate
70
+ #
71
+ # == Namespace Isolation
72
+ #
73
+ # The engine uses `isolate_namespace` to prevent conflicts with host
74
+ # application code. All engine components are properly namespaced under
75
+ # `WhittakerTech::Midas`.
76
+ #
77
+ # == Helper Integration
78
+ #
79
+ # Form helpers are automatically made available in all views through
80
+ # an initializer that extends ActionView::Base when the view layer loads.
81
+ # This provides seamless integration without requiring manual includes.
82
+ #
83
+ # == Eager Loading
84
+ #
85
+ # The engine configures additional eager load paths to ensure all models
86
+ # are properly loaded in production environments. This includes the models
87
+ # directory which contains the Coin model and Bankable concern.
88
+ #
89
+ # == Thread Safety
90
+ #
91
+ # The engine follows Rails conventions for thread safety and can be safely
92
+ # used in multi-threaded environments like Puma or Falcon.
93
+ #
94
+ # == Development and Testing
95
+ #
96
+ # The engine can be developed and tested independently using its own
97
+ # test suite, or integrated into a host application for testing.
98
+ #
99
+ # See also:
100
+ #
101
+ # - `WhittakerTech::Midas::Bankable`
102
+ # - `WhittakerTech::Midas::Coin`
103
+ # - `WhittakerTech::Midas::FormHelper`
104
+ # @since 0.1.0
105
+ class WhittakerTech::Midas::Engine < Rails::Engine
106
+ isolate_namespace WhittakerTech::Midas
107
107
 
108
- config.eager_load_paths += Dir["#{config.root}/app/models"]
108
+ config.eager_load_paths += Dir["#{config.root}/app/models"]
109
109
 
110
- initializer 'midas.helpers' do
111
- ActiveSupport.on_load(:action_view) do
112
- include WhittakerTech::Midas::FormHelper
113
- end
114
- end
115
-
116
- rake_tasks do
117
- tasks_path = root.join('tasks/**/*.rake')
118
- Dir[tasks_path].each { |file| load file }
119
- end
110
+ initializer 'midas.helpers' do
111
+ ActiveSupport.on_load(:action_view) do
112
+ include WhittakerTech::Midas::FormHelper
120
113
  end
121
114
  end
115
+
116
+ rake_tasks do
117
+ tasks_path = root.join('tasks/**/*.rake')
118
+ Dir[tasks_path].each { |file| load file }
119
+ end
122
120
  end
@@ -1,5 +1,5 @@
1
- module WhittakerTech
2
- module Midas
3
- VERSION = '0.1.1'.freeze
4
- end
1
+ module WhittakerTech; end
2
+
3
+ module WhittakerTech::Midas
4
+ VERSION = '0.3.0'.freeze
5
5
  end
@@ -1,11 +1,128 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'whittaker_tech/midas/version'
4
+ require 'whittaker_tech/midas/deprecation'
4
5
  require 'whittaker_tech/midas/engine'
5
6
  require 'money'
7
+ require 'poly'
6
8
 
7
- module WhittakerTech
8
- module Midas
9
- # Your code goes here...
9
+ # WhittakerTech::Midas is a Rails engine for multi-currency monetary value
10
+ # management. It replaces scattered `*_cents` and `*_currency` columns with a
11
+ # single polymorphic `Coin` model backed by a centralized `midas_coins`
12
+ # table.
13
+ #
14
+ # ## Configuration
15
+ #
16
+ # ### Table namespace (PostgreSQL schema)
17
+ #
18
+ # By default all coins are stored in `midas_coins`. To place the table
19
+ # inside a PostgreSQL schema set `table_namespace` in an initializer:
20
+ #
21
+ # WhittakerTech::Midas.table_namespace = 'finance'
22
+ # # => table becomes finance.coins
23
+ #
24
+ # ### Bidirectional text
25
+ #
26
+ # Currency display direction defaults to LTR for every currency code.
27
+ # Override individual currencies as needed:
28
+ #
29
+ # WhittakerTech::Midas.currency_directions['ILS'] = :rtl
30
+ # WhittakerTech::Midas.currency_directions['AED'] = :rtl
31
+ #
32
+ # See also:
33
+ #
34
+ # - `Coin`
35
+ # - `Coin::Arithmetic`
36
+ # - `Bankable`
37
+ # @since 0.1.0
38
+ module WhittakerTech::Midas
39
+ # Rounding strategies available for division operations.
40
+ #
41
+ # Each value is a lambda that accepts a Float and returns a rounded value.
42
+ #
43
+ # Rounding keys:
44
+ #
45
+ # - `:round`: Round half-up (standard commercial rounding)
46
+ # - `:ceil`: Always round up (ceiling)
47
+ # - `:floor`: Always round down (floor / truncate)
48
+ # - `:bankers`: Round half-to-even (banker's rounding)
49
+ #
50
+ # @return [Hash{Symbol => Proc}]
51
+ ROUNDING_POLICIES = {
52
+ round: ->(v) { v.round },
53
+ ceil: ->(v) { v.ceil },
54
+ floor: ->(v) { v.floor },
55
+ bankers: ->(v) { v.round(0, half: :even) }
56
+ }.freeze
57
+
58
+ # The rounding policy applied when no explicit policy is supplied.
59
+ # @return [Symbol]
60
+ DEFAULT_ROUNDING_POLICY = :round
61
+
62
+ # Optional PostgreSQL schema name used to namespace the coins table.
63
+ #
64
+ # When `nil` (default) the table is created as `midas_coins`.
65
+ # When set, the table becomes `<namespace>.coins` and requires a PostgreSQL
66
+ # adapter.
67
+ #
68
+ # @return [String, nil]
69
+ mattr_accessor :table_namespace, default: nil
70
+
71
+ # Controls how deprecation notices are emitted.
72
+ #
73
+ # Allowed values:
74
+ #
75
+ # - `:warn`: Prints to STDERR via `Kernel.warn` (default)
76
+ # - `:raise`: Raises `Deprecation::DeprecationError`
77
+ # - `:silence`: Suppresses all notices
78
+ #
79
+ # @return [Symbol]
80
+ mattr_accessor :deprecation_behavior, default: :warn
81
+
82
+ # Resolves the fully-qualified table name for a given base name.
83
+ #
84
+ # @param name [String] base table name, e.g. `"coins"`
85
+ # @return [String] the namespaced table name
86
+ # @raise [RuntimeError] if `table_namespace` is set and the adapter is not PostgreSQL
87
+ def self.table_name(name)
88
+ return "midas_#{name}" if table_namespace.blank?
89
+
90
+ adapter = ActiveRecord::Base.connection.adapter_name
91
+ raise "WhittakerTech::Midas.table_namespace requires PostgreSQL (got #{adapter})" unless adapter == 'PostgreSQL'
92
+
93
+ "#{table_namespace}.#{name}"
94
+ end
95
+
96
+ # Per-currency display direction map. Defaults all currencies to `:ltr`.
97
+ #
98
+ # Modify to configure RTL currencies in your initializer:
99
+ #
100
+ # WhittakerTech::Midas.currency_directions['ILS'] = :rtl
101
+ #
102
+ # @return [Hash{String => Symbol}] maps uppercased ISO currency code to `:ltr` or `:rtl`
103
+ def self.currency_directions
104
+ @currency_directions ||= Hash.new(:ltr)
105
+ end
106
+
107
+ # Returns the configured display direction for the given currency code.
108
+ #
109
+ # Falls back to `:ltr` for any currency not explicitly configured.
110
+ #
111
+ # @param currency_code [String] ISO 4217 currency code, e.g. `"USD"`
112
+ # @return [Symbol] `:ltr` or `:rtl`
113
+ def self.currency_direction_for(currency_code)
114
+ currency_directions[currency_code.to_s.upcase]
115
+ end
116
+
117
+ # Resets all mutable configuration to defaults.
118
+ #
119
+ # Intended for use in test suite `after` blocks when specs mutate
120
+ # engine-level configuration.
121
+ #
122
+ # @return [void]
123
+ def self.reset_configuration!
124
+ self.table_namespace = nil
125
+ self.deprecation_behavior = :warn
126
+ @currency_directions = nil
10
127
  end
11
128
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: whittaker_tech-midas
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Lee Whittaker
@@ -23,6 +23,20 @@ dependencies:
23
23
  - - "~>"
24
24
  - !ruby/object:Gem::Version
25
25
  version: 6.19.0
26
+ - !ruby/object:Gem::Dependency
27
+ name: poly
28
+ requirement: !ruby/object:Gem::Requirement
29
+ requirements:
30
+ - - "~>"
31
+ - !ruby/object:Gem::Version
32
+ version: '1.0'
33
+ type: :runtime
34
+ prerelease: false
35
+ version_requirements: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - "~>"
38
+ - !ruby/object:Gem::Version
39
+ version: '1.0'
26
40
  - !ruby/object:Gem::Dependency
27
41
  name: rails
28
42
  requirement: !ruby/object:Gem::Requirement
@@ -65,6 +79,20 @@ dependencies:
65
79
  - - "~>"
66
80
  - !ruby/object:Gem::Version
67
81
  version: '6.0'
82
+ - !ruby/object:Gem::Dependency
83
+ name: rspec
84
+ requirement: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - ">="
87
+ - !ruby/object:Gem::Version
88
+ version: '0'
89
+ type: :development
90
+ prerelease: false
91
+ version_requirements: !ruby/object:Gem::Requirement
92
+ requirements:
93
+ - - ">="
94
+ - !ruby/object:Gem::Version
95
+ version: '0'
68
96
  - !ruby/object:Gem::Dependency
69
97
  name: rspec-rails
70
98
  requirement: !ruby/object:Gem::Requirement
@@ -135,6 +163,34 @@ dependencies:
135
163
  - - "~>"
136
164
  - !ruby/object:Gem::Version
137
165
  version: '3.5'
166
+ - !ruby/object:Gem::Dependency
167
+ name: yard
168
+ requirement: !ruby/object:Gem::Requirement
169
+ requirements:
170
+ - - ">="
171
+ - !ruby/object:Gem::Version
172
+ version: '0'
173
+ type: :development
174
+ prerelease: false
175
+ version_requirements: !ruby/object:Gem::Requirement
176
+ requirements:
177
+ - - ">="
178
+ - !ruby/object:Gem::Version
179
+ version: '0'
180
+ - !ruby/object:Gem::Dependency
181
+ name: yard-markdown
182
+ requirement: !ruby/object:Gem::Requirement
183
+ requirements:
184
+ - - ">="
185
+ - !ruby/object:Gem::Version
186
+ version: '0'
187
+ type: :development
188
+ prerelease: false
189
+ version_requirements: !ruby/object:Gem::Requirement
190
+ requirements:
191
+ - - ">="
192
+ - !ruby/object:Gem::Version
193
+ version: '0'
138
194
  description: |
139
195
  WhittakerTech Midas is a Rails engine that provides elegant multi-currency support
140
196
  through a single polymorphic Coin model. Instead of adding price_cents/price_currency
@@ -160,13 +216,26 @@ files:
160
216
  - app/models/concerns/whittaker_tech/midas/bankable.rb
161
217
  - app/models/whittaker_tech/midas/application_record.rb
162
218
  - app/models/whittaker_tech/midas/coin.rb
219
+ - app/models/whittaker_tech/midas/coin/allocation.rb
220
+ - app/models/whittaker_tech/midas/coin/arithmetic.rb
221
+ - app/models/whittaker_tech/midas/coin/bidi.rb
222
+ - app/models/whittaker_tech/midas/coin/converter.rb
223
+ - app/models/whittaker_tech/midas/coin/converter/bank_provider.rb
224
+ - app/models/whittaker_tech/midas/coin/parser.rb
225
+ - app/models/whittaker_tech/midas/coin/presenter.rb
226
+ - app/models/whittaker_tech/midas/exchange.rb
163
227
  - app/views/layouts/whittaker_tech/midas/application.html.erb
164
228
  - app/views/layouts/whittaker_tech/midas/shared/_currency_field.html.erb
165
229
  - config/locales/midas.en.yml
166
- - db/migrate/create_wt_midas_coins.rb
230
+ - db/migrate/20260101000000_create_whittaker_tech_schema.rb
231
+ - db/migrate/20260101000001_create_midas_coins.rb
232
+ - db/migrate/20260219120000_rename_resource_label_to_resource_role_in_wt_midas_coins.rb
233
+ - db/migrate/20260219150000_rename_wt_midas_coins_to_midas_coins.rb
234
+ - db/migrate/20260707000000_create_midas_exchanges.rb
167
235
  - lib/generators/whittaker_tech/midas/install/install_generator.rb
168
236
  - lib/tasks/whittaker_tech/midas_tasks.rake
169
237
  - lib/whittaker_tech/midas.rb
238
+ - lib/whittaker_tech/midas/deprecation.rb
170
239
  - lib/whittaker_tech/midas/engine.rb
171
240
  - lib/whittaker_tech/midas/version.rb
172
241
  homepage: https://github.com/whittakertech/midas
@@ -185,7 +254,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
185
254
  requirements:
186
255
  - - ">="
187
256
  - !ruby/object:Gem::Version
188
- version: 3.4.0
257
+ version: 3.2.0
189
258
  required_rubygems_version: !ruby/object:Gem::Requirement
190
259
  requirements:
191
260
  - - ">="