Class: Jazari::Recipe

Inherits:
Data
  • Object
show all
Defined in:
lib/jazari/recipe.rb

Overview

The canon. Content is data, not code — the gem ships no recipe content at all, only this shape and the empty fallback. Editing a recipe changes its digest, so outstanding default revisions conflict instead of drifting silently under someone who is mid-checklist.

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(id:, version:, topic:, description:, checklist:, run_policy: RunPolicy::UNRESTRICTED) ⇒ Recipe

Returns a new instance of Recipe.



21
22
23
24
25
26
27
28
29
30
31
32
# File 'lib/jazari/recipe.rb', line 21

def initialize(id:, version:, topic:, description:, checklist:,
               run_policy: RunPolicy::UNRESTRICTED)
  unless RunPolicy::ALL.include?(run_policy)
    raise InvalidRunbook, "unknown run_policy #{run_policy.inspect}"
  end

  super(
    id: id.freeze, version: version, topic: topic.freeze,
    description: description.freeze, checklist: Checklist.freeze_items(checklist),
    run_policy: run_policy.freeze
  )
end

Instance Attribute Details

#checklistObject (readonly)

Returns the value of attribute checklist

Returns:

  • (Object)

    the current value of checklist



20
21
22
# File 'lib/jazari/recipe.rb', line 20

def checklist
  @checklist
end

#descriptionObject (readonly)

Returns the value of attribute description

Returns:

  • (Object)

    the current value of description



20
21
22
# File 'lib/jazari/recipe.rb', line 20

def description
  @description
end

#idObject (readonly)

Returns the value of attribute id

Returns:

  • (Object)

    the current value of id



20
21
22
# File 'lib/jazari/recipe.rb', line 20

def id
  @id
end

#run_policyObject (readonly)

Returns the value of attribute run_policy

Returns:

  • (Object)

    the current value of run_policy



20
21
22
# File 'lib/jazari/recipe.rb', line 20

def run_policy
  @run_policy
end

#topicObject (readonly)

Returns the value of attribute topic

Returns:

  • (Object)

    the current value of topic



20
21
22
# File 'lib/jazari/recipe.rb', line 20

def topic
  @topic
end

#versionObject (readonly)

Returns the value of attribute version

Returns:

  • (Object)

    the current value of version



20
21
22
# File 'lib/jazari/recipe.rb', line 20

def version
  @version
end

Instance Method Details

#digestObject



34
35
36
37
38
# File 'lib/jazari/recipe.rb', line 34

def digest
  Digest::SHA256.hexdigest(
    JSON.generate([ id, version, topic, description, checklist, run_policy ])
  )[0, 16]
end

#once_per_calendar_day?Boolean

Returns:

  • (Boolean)


40
# File 'lib/jazari/recipe.rb', line 40

def once_per_calendar_day? = run_policy == RunPolicy::ONCE_PER_CALENDAR_DAY

#provenanceObject



42
# File 'lib/jazari/recipe.rb', line 42

def provenance = { id: id, version: version, digest: digest }