Class: Jazari::RecipeRecord

Inherits:
ApplicationRecord show all
Defined in:
app/models/jazari/recipe_record.rb

Overview

The persisted canon. Deliberately named RecipeRecord, not Recipe: Recipe is the immutable value the domain passes around, and letting an ActiveRecord object wear that name is how unsaved records leak into return values.

Constant Summary collapse

POLICIES =
Jazari::RunPolicy::ALL

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.table_nameObject

Resolved on EVERY call, not assigned at class-definition time.

Assigning it eagerly made the binding depend on load order: under Zeitwerk a host's configure runs before these constants autoload, so the assignment never happened and the model silently kept the gem's default name. A host adopting existing tables then queried tables that do not exist. Reading config here removes the ordering question entirely.



15
# File 'app/models/jazari/recipe_record.rb', line 15

def self.table_name = Jazari.table_name_for(:recipes)

Instance Method Details

#to_recipeObject



25
26
27
28
29
30
31
32
33
34
# File 'app/models/jazari/recipe_record.rb', line 25

def to_recipe
  Recipe.new(
    id: recipe_id, version: version, topic: topic, description: description,
    run_policy: run_policy,
    checklist: Array(checklist).map do |item|
      { id: item["id"].to_s, text: item["text"].to_s,
        done: item["done"] == true, required: item.fetch("required", true) == true }
    end
  )
end