fictive 0.0.8 → 0.0.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 0c86f83407c9ef024a85de5d16d203852f69f4bc
4
- data.tar.gz: a87be8b3e9172621db702000f4ab7e07730a66d6
3
+ metadata.gz: e10d24622162519c183ce0b64b31c469146b2e37
4
+ data.tar.gz: f9bc6e85318bf025e2c786aef8d21597b1d0b90d
5
5
  SHA512:
6
- metadata.gz: 9ed6521c08d33d7ce761c25465c0d189c6297e675fbdfbcad2ddd74193cdd8cce438a325d1e9fc4768209f3aba67453c36e0f92410277a17e736e451601acc81
7
- data.tar.gz: 580dd582c9459c25fa7ad05c0bb30e954e4d16efbf96cb805615f9f113e233634e3b5a7c2277d8106ba4450aedc706cc09d1b7383b8d7800a8c044916c96401d
6
+ metadata.gz: bff9757ff374ea4813c7ba9b268e69d215bc9ffd614ab4685188c24cca62d4fa97a8530bb8c5d80d2c6f90fbd2387e0a4b55ba32349b9fa7a439bccd9e864d06
7
+ data.tar.gz: 992b80e2e7cb84e1261f96fcc9eb2eec63fb0d4a7f4a517bfba4405e623471d376b8b21d19c02c2e6426e9599b31ddf515bb9aa4d15e63aac0ee572ac9733975
data/fictive.gemspec CHANGED
@@ -18,6 +18,8 @@ Gem::Specification.new do |spec|
18
18
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
19
19
  spec.require_paths = ['lib']
20
20
 
21
+ spec.add_runtime_dependency 'mementus', '~> 0.5.2'
22
+
21
23
  spec.add_development_dependency 'bundler', '~> 1.10'
22
24
  spec.add_development_dependency 'rake', '~> 10.0'
23
25
  spec.add_development_dependency 'rspec', '~> 3.4'
@@ -1,11 +1,11 @@
1
1
  module Fictive
2
2
  class Choice
3
- def initialize(metadata)
4
- @metadata = metadata
3
+ def initialize(edge)
4
+ @edge = edge
5
5
  end
6
6
 
7
7
  def id
8
- @metadata.fetch(:id)
8
+ @edge.id
9
9
  end
10
10
  end
11
11
  end
@@ -1,18 +1,15 @@
1
1
  module Fictive
2
2
  class Passage
3
- attr_reader :text
4
-
5
- def initialize(metadata, text)
6
- @metadata = metadata
7
- @text = text
3
+ def initialize(node)
4
+ @node = node
8
5
  end
9
6
 
10
7
  def id
11
- @metadata.fetch(:id)
8
+ @node.id
12
9
  end
13
10
 
14
11
  def choices
15
- @metadata.fetch(:choices, [])
12
+ @node.out_e.all.map { |e| Choice.new(e) }
16
13
  end
17
14
  end
18
15
  end
data/lib/fictive/story.rb CHANGED
@@ -1,32 +1,69 @@
1
1
  module Fictive
2
2
  class Story
3
- def self.demo
3
+ def self._demo
4
4
  self.new([
5
5
  Passage.new({id: 'hello', choices: [Choice.new({id: 'goodbye'})]}, 'Hello world'),
6
6
  Passage.new({id: 'goodbye'}, 'Goodbye world')
7
7
  ])
8
8
  end
9
9
 
10
- def initialize(passages)
11
- @passages = passages
12
- @passages_index = {}
13
- @passages.each_with_index do |passage, id|
14
- @passages_index[passage.id] = id
15
- end
10
+ def self.demo
11
+ self.new(Mementus::Graph.new do
12
+ create_node do |node|
13
+ node.id = 'hello'
14
+ node[:text] = 'Hello world'
15
+ node.label = :passage
16
+ end
17
+
18
+ create_node do |node|
19
+ node.id = 'goodbye'
20
+ node[:text] = 'Goodbye world'
21
+ node.label = :passage
22
+ end
23
+
24
+ create_edge do |edge|
25
+ edge.id = 'say_goodbye'
26
+ edge.from = 'hello'
27
+ edge.to = 'goodbye'
28
+ edge.label = :choice
29
+ end
30
+ end, 'hello')
31
+ end
32
+
33
+ def initialize(graph, start_id)
34
+ # @passages = passages
35
+ # @passages_index = {}
36
+ # @passages.each_with_index do |passage, id|
37
+ # @passages_index[passage.id] = id
38
+ # end
39
+ #
40
+ # @index = 0
41
+ @graph = graph
42
+ @current = graph.n(start_id)
43
+ end
44
+
45
+ # Initiate a new story graph traversal from the starting point.
46
+ def start
47
+ # TODO
48
+ end
16
49
 
17
- @index = 0
50
+ # Resume a story graph traversal from a bookmarked place in the story.
51
+ def resume
52
+ # TODO
18
53
  end
19
54
 
20
55
  def has_next?
21
- !@passages.at(@index).nil? && !@passages.at(@index + 1).nil?
56
+ #!@passages.at(@index).nil? && !@passages.at(@index + 1).nil?
57
+ @current.out_e.all.count > 0
22
58
  end
23
59
 
24
60
  def next
25
- @passages.at(@index)
61
+ Passage.new(@current)
26
62
  end
27
63
 
28
64
  def choose_path(id)
29
- @index = @passages_index[id]
65
+ @current = @graph.edge(id).to
66
+ Passage.new(@current)
30
67
  end
31
68
  end
32
69
  end
@@ -30,10 +30,10 @@ module Fictive
30
30
  if concat_fragment
31
31
  Fictive::Text::Node.new(Fictive::Text::TextNode.new(concat_fragment.gsub(/{/, '')), parse_substitution)
32
32
  else
33
- concat_before_directive = scanner.scan_until(/~/)
33
+ concat_before_directive = scanner.scan_until(/\[/)
34
34
 
35
35
  if concat_before_directive
36
- Fictive::Text::Node.new(Fictive::Text::TextNode.new(concat_before_directive.gsub(/~/, '')), parse_directive)
36
+ Fictive::Text::Node.new(Fictive::Text::TextNode.new(concat_before_directive.gsub(/\[/, '')), parse_directive)
37
37
  else
38
38
  fragment = scanner.scan(/.+/)
39
39
  Fictive::Text::TextNode.new(fragment)
@@ -64,7 +64,7 @@ module Fictive
64
64
  expression = parse_expression
65
65
  scanner.skip(/:/)
66
66
  scanner.skip(/\s/)
67
- consequent = scanner.scan_until(/~/).gsub(/~/, '')
67
+ consequent = scanner.scan_until(/\]/).gsub(/\]/, '')
68
68
 
69
69
  Fictive::Text::ConditionalNode.new(
70
70
  Fictive::Text::ExpressionNode.new(
@@ -78,73 +78,5 @@ module Fictive
78
78
  Fictive::Text::TrueNode.new if scanner.scan(/true/)
79
79
  end
80
80
  end
81
-
82
- class Node
83
- def initialize(*nodes)
84
- @nodes = nodes
85
- end
86
-
87
- def evaluate
88
- @nodes.map do |node|
89
- result = node.evaluate
90
- end.join
91
- end
92
- end
93
-
94
- class TextNode
95
- def initialize(text)
96
- @text = text
97
- end
98
-
99
- def evaluate
100
- @text
101
- end
102
- end
103
-
104
- class ReferenceNode
105
- def initialize(reference, symbol_table)
106
- @reference = reference.to_sym
107
- @symbol_table = symbol_table
108
- end
109
-
110
- def evaluate
111
- @symbol_table.fetch(@reference)
112
- end
113
- end
114
-
115
- class ConditionalNode
116
- # TODO: decide on array or explicit parameter convention
117
- # eg: initialize(condition, consequent, alternative)
118
- def initialize(condition, consequent)
119
- @condition = condition
120
- @consequent = consequent
121
- end
122
-
123
- def evaluate
124
- @consequent.evaluate if @condition.evaluate_boolean
125
- end
126
- end
127
-
128
- class ExpressionNode
129
- def initialize(expression)
130
- @expression = expression
131
- end
132
-
133
- def evaluate_boolean
134
- @expression.evaluate_boolean
135
- end
136
- end
137
-
138
- class TrueNode
139
- def evaluate_boolean
140
- true
141
- end
142
- end
143
-
144
- class FalseNode
145
- def evaluate_boolean
146
- false
147
- end
148
- end
149
81
  end
150
82
  end
@@ -0,0 +1,16 @@
1
+ module Fictive
2
+ module Text
3
+ class ConditionalNode
4
+ # TODO: decide on array or explicit parameter convention
5
+ # eg: initialize(condition, consequent, alternative)
6
+ def initialize(condition, consequent)
7
+ @condition = condition
8
+ @consequent = consequent
9
+ end
10
+
11
+ def evaluate
12
+ @consequent.evaluate if @condition.evaluate_boolean
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,13 @@
1
+ module Fictive
2
+ module Text
3
+ class ExpressionNode
4
+ def initialize(expression)
5
+ @expression = expression
6
+ end
7
+
8
+ def evaluate_boolean
9
+ @expression.evaluate_boolean
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,9 @@
1
+ module Fictive
2
+ module Text
3
+ class FalseNode
4
+ def evaluate_boolean
5
+ false
6
+ end
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,15 @@
1
+ module Fictive
2
+ module Text
3
+ class Node
4
+ def initialize(*nodes)
5
+ @nodes = nodes
6
+ end
7
+
8
+ def evaluate
9
+ @nodes.map do |node|
10
+ result = node.evaluate
11
+ end.join
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,14 @@
1
+ module Fictive
2
+ module Text
3
+ class ReferenceNode
4
+ def initialize(reference, symbol_table)
5
+ @reference = reference.to_sym
6
+ @symbol_table = symbol_table
7
+ end
8
+
9
+ def evaluate
10
+ @symbol_table.fetch(@reference)
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,13 @@
1
+ module Fictive
2
+ module Text
3
+ class TextNode
4
+ def initialize(text)
5
+ @text = text
6
+ end
7
+
8
+ def evaluate
9
+ @text
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,9 @@
1
+ module Fictive
2
+ module Text
3
+ class TrueNode
4
+ def evaluate_boolean
5
+ true
6
+ end
7
+ end
8
+ end
9
+ end
@@ -1,3 +1,3 @@
1
1
  module Fictive
2
- VERSION = '0.0.8'.freeze
2
+ VERSION = '0.0.9'.freeze
3
3
  end
data/lib/fictive.rb CHANGED
@@ -1,6 +1,15 @@
1
- require_relative 'fictive/version'
2
- require_relative 'fictive/story'
3
- require_relative 'fictive/choice'
4
- require_relative 'fictive/passage'
5
- require_relative 'fictive/syntax'
6
- require_relative 'fictive/text/compiler'
1
+ require 'mementus'
2
+
3
+ require 'fictive/version'
4
+ require 'fictive/story'
5
+ require 'fictive/choice'
6
+ require 'fictive/passage'
7
+ require 'fictive/syntax'
8
+ require 'fictive/text/compiler'
9
+ require 'fictive/text/node'
10
+ require 'fictive/text/text_node'
11
+ require 'fictive/text/reference_node'
12
+ require 'fictive/text/conditional_node'
13
+ require 'fictive/text/expression_node'
14
+ require 'fictive/text/true_node'
15
+ require 'fictive/text/false_node'
metadata CHANGED
@@ -1,15 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fictive
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.8
4
+ version: 0.0.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mark Rickerby
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-05-09 00:00:00.000000000 Z
11
+ date: 2016-11-10 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: mementus
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: 0.5.2
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: 0.5.2
13
27
  - !ruby/object:Gem::Dependency
14
28
  name: bundler
15
29
  requirement: !ruby/object:Gem::Requirement
@@ -69,6 +83,13 @@ files:
69
83
  - lib/fictive/story.rb
70
84
  - lib/fictive/syntax.rb
71
85
  - lib/fictive/text/compiler.rb
86
+ - lib/fictive/text/conditional_node.rb
87
+ - lib/fictive/text/expression_node.rb
88
+ - lib/fictive/text/false_node.rb
89
+ - lib/fictive/text/node.rb
90
+ - lib/fictive/text/reference_node.rb
91
+ - lib/fictive/text/text_node.rb
92
+ - lib/fictive/text/true_node.rb
72
93
  - lib/fictive/version.rb
73
94
  homepage: https://github.com/maetl/fictive
74
95
  licenses:
@@ -90,9 +111,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
90
111
  version: '0'
91
112
  requirements: []
92
113
  rubyforge_project:
93
- rubygems_version: 2.2.2
114
+ rubygems_version: 2.5.1
94
115
  signing_key:
95
116
  specification_version: 4
96
117
  summary: An authoring framework for choice fiction
97
118
  test_files: []
98
- has_rdoc: