Sha256: e3b73d3005fa01ba78931722c4fa64a06402ecfbb14b8e14dfe105e7affcc3a5

Contents?: true

Size: 1.89 KB

Versions: 6

Compression:

Stored size: 1.89 KB

Contents

module Saga
  class Document
    attr_accessor :title, :introduction, :authors, :stories, :definitions

    def initialize
      @title        = ''
      @introduction = []
      @authors      = []
      @stories      = {}
      @definitions  = {}
    end

    def copy_story(story)
      copied = {}
      %i[id iteration status estimate description].each do |attribute|
        copied[attribute] = story[attribute] if story[attribute]
      end; copied
    end

    def flatten_stories(stories)
      stories_as_flat_list = []
      stories.flatten.each do |story|
        if story[:stories]
          stories_as_flat_list << copy_story(story)
          stories_as_flat_list.concat(story[:stories])
        else
          stories_as_flat_list << story
        end
      end; stories_as_flat_list
    end

    def stories_as_flat_list
      flatten_stories(stories.values)
    end

    def _binding
      binding
    end

    def used_ids
      @stories.values.each_with_object([]) do |stories, ids|
        stories.each do |story|
          ids << story[:id]
          next unless story[:stories]

          story[:stories].each do |nested|
            ids << nested[:id]
          end
        end
      end.compact
    end

    def unused_ids(limit)
      position = 1
      used_ids = used_ids()
      (1..limit).map do
        while used_ids.include?(position) do position += 1 end
        used_ids << position
        position
      end
    end

    def length
      stories_as_flat_list.length
    end

    def empty?
      length == 0
    end

    def _autofill_ids(stories, unused_ids)
      stories.each do |story|
        story[:id] ||= unused_ids.shift
        _autofill_ids(story[:stories], unused_ids) if story[:stories]
      end
    end

    def autofill_ids
      unused_ids = unused_ids(length - used_ids.length)
      stories.each do |_section, data|
        _autofill_ids(data, unused_ids)
      end
    end
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
saga-0.13.2 lib/saga/document.rb
saga-0.13.1 lib/saga/document.rb
saga-0.13.0 lib/saga/document.rb
saga-0.12.2 lib/saga/document.rb
saga-0.12.1 lib/saga/document.rb
saga-0.12.0 lib/saga/document.rb