<commit_before>#encoding: utf-8

# Представление тестовых данных в виде экземпляра модели. Сохранение экземпляров выполняется отдельно.
class Smeltery::Furnace::Model
  def self.create(klass, ingot)
    new(klass, ingot).cool
  end

  def initialize(klass, ingot)
    @label = ingot.label
    @ingot = ingot
    @klass = klass

    @model = @ingot.respond_to?(:to_model) ?
      @ingot.to_model :
      @klass.new( @ingot.value, without_protection: true )
  end

  attr_reader :label, :value

  # Сохранение модели. Тестовые данные, не прошедшие проверку, будут представлены не сохраненным экземпляром модели.
  # ToDo:
  # + этот метод потенциально опасен при параллельном выполнении. Для улучшения ситуации следует самостоятельно вычислять идентификатор записи;
  # + стоит добавить заполнение столбцов 'created_on' и 'updated_on' (см. rails fixtures).
  def cool
    return @value = @model if @model.invalid?

    now = (@klass.default_timezone == :utc ? Time.now.utc : Time.now)
      .to_s(:db)
    columns = @model.attributes
    columns['created_at'] = now unless columns['created_at']
    columns['updated_at'] = now unless columns['updated_at']

    @klass.connection.insert_fixture columns, @klass.table_name
    @value = @klass.last # danger!
    # @value.save
  end

  # Удаление модели.
  def to_ingot
    @value.delete
    @ingot.tap { |ingot| ingot.define_singleton_method(:to_model) {@model} }
  end

  def inspect
    @value ? @value.inspect : @ingot.inspect
  end
end<commit_msg>Error correction. Sorry<commit_after>#encoding: utf-8

# Представление тестовых данных в виде экземпляра модели. Сохранение экземпляров выполняется отдельно.
class Smeltery::Furnace::Model
  def self.create(klass, ingot)
    new(klass, ingot).tap { |model| model.cool }
  end

  def initialize(klass, ingot)
    @label = ingot.label
    @ingot = ingot
    @klass = klass

    @model = @ingot.respond_to?(:to_model) ?
      @ingot.to_model :
      @klass.new( @ingot.value, without_protection: true )
  end

  attr_reader :label, :value

  # Сохранение модели. Тестовые данные, не прошедшие проверку, будут представлены не сохраненным экземпляром модели.
  # ToDo:
  # + этот метод потенциально опасен при параллельном выполнении. Для улучшения ситуации следует самостоятельно вычислять идентификатор записи;
  # + стоит добавить заполнение столбцов 'created_on' и 'updated_on' (см. rails fixtures).
  def cool
    return @value = @model if @model.invalid?

    now = (@klass.default_timezone == :utc ? Time.now.utc : Time.now)
      .to_s(:db)
    columns = @model.attributes
    columns['created_at'] = now unless columns['created_at']
    columns['updated_at'] = now unless columns['updated_at']

    @klass.connection.insert_fixture columns, @klass.table_name
    @value = @klass.last # danger!
    # @value.save
  end

  # Удаление модели.
  def to_ingot
    @value.delete if @value
    model = @model
    @ingot.tap { |ingot| ingot.define_singleton_method(:to_model) {model} }
  end

  def inspect
    @value ? @value.inspect : @ingot.inspect
  end
end
{'fraction_non_alphanumeric': 0.10609037328094302, 'fraction_numerical': 0.0006548788474132286, 'mean_word_length': 3.7437888198757765, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 3, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '7123657', 'n_tokens_mistral': 1154, 'n_tokens_neox': 1220, 'n_words': 263}