DEV: Move more service code to core (#26613)

This is to enable :array type attributes for Contract
attributes in services, this is a followup to the move
of services from chat to core here:

cab178a405

Co-authored-by: Joffrey JAFFEUX <j.jaffeux@gmail.com>
This commit is contained in:
Martin Brennan 2024-04-12 21:14:19 +10:00 committed by GitHub
parent a2db8d9439
commit 380e5ca6cb
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
7 changed files with 37 additions and 36 deletions

View File

@ -0,0 +1,5 @@
# frozen_string_literal: true
Rails.application.config.to_prepare do
ActiveModel::Type.register(:array, ActiveSupportTypeExtensions::Array)
end

View File

@ -0,0 +1,28 @@
# frozen_string_literal: true
module ActiveSupportTypeExtensions
class Array < ActiveModel::Type::Value
def serializable?(_)
false
end
def cast_value(value)
case value
when String
value.split(",")
when ::Array
value.map { |item| convert_to_integer(item) }
else
::Array.wrap(value)
end
end
private
def convert_to_integer(item)
Integer(item)
rescue ArgumentError
item
end
end
end

View File

@ -1,32 +0,0 @@
# frozen_string_literal: true
module Chat
module Types
class Array < ActiveModel::Type::Value
def serializable?(_)
false
end
def cast_value(value)
case value
when String
value.split(",")
when ::Array
value.map { |item| convert_to_integer(item) }
else
::Array.wrap(value)
end
end
private
def convert_to_integer(item)
Integer(item)
rescue ArgumentError
item
end
end
end
end
ActiveSupport.on_load(:active_record) { ActiveModel::Type.register(:array, Chat::Types::Array) }

View File

@ -39,7 +39,6 @@ module ::Chat
end
require_relative "lib/chat/engine"
require_relative "lib/chat/types/array"
after_initialize do
register_seedfu_fixtures(Rails.root.join("plugins", "chat", "db", "fixtures"))

View File

@ -130,8 +130,6 @@ end
RSpec.configure do |config|
config.include ChatSystemHelpers, type: :system
config.include ChatSpecHelpers
config.include WithServiceHelper
config.include ServiceMatchers
config.expect_with :rspec do |c|
# Or a very large value, if you do want to truncate at some point

View File

@ -1,6 +1,6 @@
# frozen_string_literal: true
RSpec.describe Chat::Types::Array do
RSpec.describe ActiveSupportTypeExtensions::Array do
subject(:type) { described_class.new }
describe "#cast" do

View File

@ -201,6 +201,9 @@ RSpec.configure do |config|
config.include UploadsHelpers
config.include OneboxHelpers
config.include FastImageHelpers
config.include WithServiceHelper
config.include ServiceMatchers
config.mock_framework = :mocha
config.order = "random"
config.infer_spec_type_from_file_location!