Sha256: 481c232b865532a90e52d56cb323e6723edbdec969ab9b9c645820b155e408d5

Contents?: true

Size: 1.94 KB

Versions: 90

Compression:

Stored size: 1.94 KB

Contents

module ItamaeMitsurin
  class RecipeChildren < Array
    NotFoundError = Class.new(StandardError)

    def find_resource_by_description(desc)
      # desc is like 'resource_type[name]'
      resources.find do |resource|
        type, name = ItamaeMitsurin::Resource.parse_description(desc)
        resource.resource_type == type && resource.resource_name == name
      end.tap do |resource|
        unless resource
          raise NotFoundError, "'#{desc}' resource is not found."
        end
      end
    end

    def subscribing(target)
      resources.map do |resource|
        resource.subscriptions.select do |subscription|
          subscription.resource == target
        end
      end.flatten
    end

    def find_recipe_by_path(path)
      recipes.find do |recipe|
        recipe.path == path
      end
    end

    def resources
      self.map do |item|
        case item
        when Resource::Base
          item
        when Recipe
          item.children.resources
        end
      end.flatten
    end

    def recipes(options = {})
      options = {recursive: true}.merge(options)

      self.select do |item|
        item.is_a?(Recipe)
      end.map do |recipe|
        if options[:recursive]
          [recipe] + recipe.children.recipes
        else
          recipe
        end
      end.flatten
    end

    def run
      self.each do |resource|
        resource.run
      end
    end

    # returns dependencies graph in DOT
    def dependency_in_dot
      result = ""
      result << "digraph recipes {\n"
      result << "  rankdir=LR;\n"
      result << _dependency_in_dot
      result << "}"

      result
    end

    def _dependency_in_dot
      result = ""

      recipes(recursive: false).each do |recipe|
        recipe.children.recipes(recursive: false).each do |child_recipe|
          result << %{  "#{recipe.path}" -> "#{child_recipe.path}";\n}
        end
        result << recipe.children._dependency_in_dot
      end

      result
    end
  end
end

Version data entries

90 entries across 47 versions & 1 rubygems

Version Path
itamae-mitsurin-1.0.3 lib/itamae-mitsurin/recipe_children.rb
itamae-mitsurin-1.0.2 lib/itamae-mitsurin/recipe_children.rb
itamae-mitsurin-1.0.1 lib/itamae-mitsurin/recipe_children.rb
itamae-mitsurin-1.0.0 lib/itamae-mitsurin/recipe_children.rb
itamae-mitsurin-0.50 lib/itamae-mitsurin/recipe_children.rb
itamae-mitsurin-0.50 test/test_itamae-mitsurin/test_recipe_children.rb
itamae-mitsurin-0.49 lib/itamae-mitsurin/recipe_children.rb
itamae-mitsurin-0.49 test/test_itamae-mitsurin/test_recipe_children.rb
itamae-mitsurin-0.48 lib/itamae-mitsurin/recipe_children.rb
itamae-mitsurin-0.48 test/test_itamae-mitsurin/test_recipe_children.rb
itamae-mitsurin-0.47 lib/itamae-mitsurin/recipe_children.rb
itamae-mitsurin-0.47 test/test_itamae-mitsurin/test_recipe_children.rb
itamae-mitsurin-0.46 lib/itamae-mitsurin/recipe_children.rb
itamae-mitsurin-0.46 test/test_itamae-mitsurin/test_recipe_children.rb
itamae-mitsurin-0.45 lib/itamae-mitsurin/recipe_children.rb
itamae-mitsurin-0.45 test/test_itamae-mitsurin/test_recipe_children.rb
itamae-mitsurin-0.44 lib/itamae-mitsurin/recipe_children.rb
itamae-mitsurin-0.44 test/test_itamae-mitsurin/test_recipe_children.rb
itamae-mitsurin-0.43 lib/itamae-mitsurin/recipe_children.rb
itamae-mitsurin-0.43 test/test_itamae-mitsurin/test_recipe_children.rb