Class: LcpRuby::ModelFactory::DefaultApplicator

Inherits:
Object
  • Object
show all
Defined in:
lib/lcp_ruby/model_factory/default_applicator.rb

Defined Under Namespace

Classes: LiteralDefault

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(model_class, model_definition) ⇒ DefaultApplicator

Returns a new instance of DefaultApplicator.



9
10
11
12
# File 'lib/lcp_ruby/model_factory/default_applicator.rb', line 9

def initialize(model_class, model_definition)
  @model_class = model_class
  @model_definition = model_definition
end

Class Method Details

.resolve_default(record, field_name, default_config) ⇒ Object



30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
# File 'lib/lcp_ruby/model_factory/default_applicator.rb', line 30

def self.resolve_default(record, field_name, default_config)
  case default_config
  when LiteralDefault
    default_config.value
  when Hash
    service_key = default_config["service"] || default_config[:service]
    unless service_key
      Rails.logger.warn("[LcpRuby] Default for '#{field_name}' is a Hash without 'service' key") if defined?(Rails)
      return
    end

    service = Services::Registry.lookup("defaults", service_key.to_s)
    unless service
      Rails.logger.warn("[LcpRuby] Default service '#{service_key}' not found") if defined?(Rails)
      return
    end

    if service.respond_to?(:call)
      service.call(record, field_name)
    end
  when String
    # Built-in default keys like "current_date", "current_datetime", "current_user.id"
    service = Services::Registry.lookup("defaults", default_config)
    if service&.respond_to?(:call)
      service.call(record, field_name)
    end
  end
end

Instance Method Details

#apply!Object



14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# File 'lib/lcp_ruby/model_factory/default_applicator.rb', line 14

def apply!
  dynamic_defaults = collect_dynamic_defaults
  return if dynamic_defaults.empty?

  @model_class.after_initialize do |record|
    next unless record.new_record?

    dynamic_defaults.each do |field_name, default_config|
      next unless record.send(field_name).nil?

      value = DefaultApplicator.resolve_default(record, field_name, default_config)
      record.send("#{field_name}=", value) unless value.nil?
    end
  end
end