Sha256: 6244c87cddcdda128851f980d5e0ddb82da7dd321636abe86c19b2a21a366b06

Contents?: true

Size: 1.31 KB

Versions: 2

Compression:

Stored size: 1.31 KB

Contents

require 'monitor'

class Setting::NameGenerator < ::Setting
  NAME_GENERATOR_MUTEX = Mutex.new

  def self.load_defaults
    # Check the table exists
    return unless super

    Setting.transaction do
      [
        self.set('name_generator_type', N_("Type of name generator"), 'OFF', N_("Generator type")),
        self.set('name_generator_seed', N_("Initial LFSR seed value (do not change)"), -1, N_("Generator seed")),
        self.set('name_generator_register', N_("Current LFSR register (change with care, can cause name conflicts)"), -1, N_("Generator register")),
      ].compact.each { |s| self.create s.update(:category => "Setting::NameGenerator")}
    end

    true
  end

  def validate_name_generator_seed(record)
    if record.value && record.value < 1 && record.value != -1
      record.errors[:base] << _("Generator seed value must be greater than zero or -1")
    end
  end

  def self.next_generated_name
    NAME_GENERATOR_MUTEX.synchronize do
      generator = ForemanNameGenerator::RandomGenerator.new
      setting = Setting::NameGenerator.find_by_name 'name_generator_register'
      result = generator.generate(setting.value)
      Rails.logger.debug "Register moved to #{result[0]}, generated name: #{result[1]} #{result[2]}"
      setting.value = result.shift
      setting.save!
      result
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
foreman_name_generator-0.0.2 app/models/setting/name_generator.rb
foreman_name_generator-0.0.1 app/models/setting/name_generator.rb