lib/deimos/config/configuration.rb in deimos-ruby-1.11.2 vs lib/deimos/config/configuration.rb in deimos-ruby-1.12.0
- old
+ new
@@ -16,20 +16,34 @@
end
# :nodoc:
after_configure do
Phobos.configure(self.config.phobos_config)
+ if self.config.schema.use_schema_classes
+ load_generated_schema_classes
+ end
self.config.producer_objects.each do |producer|
configure_producer_or_consumer(producer)
end
self.config.consumer_objects.each do |consumer|
configure_producer_or_consumer(consumer)
end
validate_consumers
validate_db_backend if self.config.producers.backend == :db
end
+ # Loads generated classes
+ def self.load_generated_schema_classes
+ if Deimos.config.schema.generated_class_path.nil?
+ raise 'Cannot use schema classes without schema.generated_class_path. Please provide a directory.'
+ end
+
+ Dir["./#{Deimos.config.schema.generated_class_path}/**/*.rb"].sort.each { |f| require f }
+ rescue LoadError
+ raise 'Cannot load schema classes. Please regenerate classes with rake deimos:generate_schema_models.'
+ end
+
# Ensure everything is set up correctly for the DB backend.
def self.validate_db_backend
begin
require 'activerecord-import'
rescue LoadError
@@ -66,10 +80,11 @@
klass.class_eval do
topic(kafka_config.topic) if kafka_config.topic.present? && klass.respond_to?(:topic)
schema(kafka_config.schema) if kafka_config.schema.present?
namespace(kafka_config.namespace) if kafka_config.namespace.present?
key_config(**kafka_config.key_config) if kafka_config.key_config.present?
+ schema_class_config(kafka_config.use_schema_classes) if kafka_config.use_schema_classes.present?
end
end
define_settings do
@@ -258,10 +273,18 @@
setting :registry_url, 'http://localhost:8081'
# Local path to look for schemas in.
# @return [String]
setting :path
+
+ # Local path for schema classes to be generated in.
+ # @return [String]
+ setting :generated_class_path, 'app/lib/schema_classes'
+
+ # Set to true to use the generated schema classes in your application
+ # @return [Boolean]
+ setting :use_schema_classes, false
end
# The configured metrics provider.
# @return [Metrics::Provider]
setting :metrics, Metrics::Mock.new
@@ -299,10 +322,13 @@
# @return [String]
setting :namespace
# Key configuration (see docs).
# @return [Hash]
setting :key_config
+ # Configure the usage of generated schema classes for this producer
+ # @return [Boolean]
+ setting :use_schema_classes
end
setting_object :consumer do
# Consumer class.
# @return [String]
@@ -321,9 +347,12 @@
setting :key_config
# Set to true to ignore the consumer in the Phobos config and not actually start up a
# listener.
# @return [Boolean]
setting :disabled, false
+ # Configure the usage of generated schema classes for this consumer
+ # @return [Boolean]
+ setting :use_schema_classes
# These are the phobos "listener" configs. See CONFIGURATION.md for more
# info.
setting :group_id
setting :max_concurrency, 1