fictive 0.0.8 → 0.0.9

Sign up to get free protection for your applications and to get access to all the features.
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: