Module: SnowyOwl::Plays
- Defined in:
- lib/snowy_owl/plays.rb
Defined Under Namespace
Classes: PlotNodeHash
Class Method Summary collapse
- .build_plays(candidate_play_books) ⇒ Object
- .create_node(plot) ⇒ Object
- .generate_deep_first_plays ⇒ Object
- .generate_digest_for_play_book(play_book) ⇒ Object
- .generate_full_path_digest(candidate_plots) ⇒ Object
Class Method Details
.build_plays(candidate_play_books) ⇒ Object
22 23 24 25 26 27 |
# File 'lib/snowy_owl/plays.rb', line 22 def build_plays(candidate_play_books) @play_hash = {} @starting_node = nil candidate_play_books.each { |play_book| generate_digest_for_play_book play_book } generate_deep_first_plays end |
.create_node(plot) ⇒ Object
60 61 62 63 64 65 66 67 68 69 70 71 72 73 |
# File 'lib/snowy_owl/plays.rb', line 60 def create_node plot plot_node = @play_hash[plot['digest']] || PlotNodeHash.new plot_node.name = plot['plot_name'] plot_node.parent = plot['parent'] plot_node.digest = plot['digest'] @play_hash[plot['digest']] = plot_node if !plot['parent'].nil? parent_node = @play_hash[plot['parent']] || PlotNodeHash.new plot_node.parent = plot['parent'] parent_node.append_child plot['digest'] @play_hash[plot['parent']] = parent_node end @play_hash[plot['digest']] end |
.generate_deep_first_plays ⇒ Object
35 36 37 38 39 40 41 42 43 44 |
# File 'lib/snowy_owl/plays.rb', line 35 def generate_deep_first_plays plays = [] deep_stack = [@starting_node.digest] while !deep_stack.empty? node = deep_stack.pop deep_stack = deep_stack.concat @play_hash[node].children plays << @play_hash[node].to_h end plays end |
.generate_digest_for_play_book(play_book) ⇒ Object
29 30 31 32 33 |
# File 'lib/snowy_owl/plays.rb', line 29 def generate_digest_for_play_book play_book @play_hash ||= {} candidate_plots = YAML.load_file(play_book) generate_full_path_digest(candidate_plots) end |
.generate_full_path_digest(candidate_plots) ⇒ Object
46 47 48 49 50 51 52 53 54 55 56 57 58 |
# File 'lib/snowy_owl/plays.rb', line 46 def generate_full_path_digest(candidate_plots) pre_digest = nil candidate_plots.each do |plot| parent_digest = plot['parent'] digest = plot['digest'] plot['digest'] = SnowyOwl::Digest.digest((parent_digest || pre_digest).to_s + plot['plot_name']) if digest.nil? plot['parent'] = pre_digest if parent_digest.nil? pre_digest = plot['digest'] node = create_node plot @starting_node = node if node.parent.nil? end candidate_plots end |