moory 0.5.0 → 0.6.0
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 +4 -4
- data/Gemfile.lock +1 -1
- data/README.md +2 -1
- data/lib/moory/arrow.rb +12 -0
- data/lib/moory/pair.rb +11 -0
- data/lib/moory/parser.rb +38 -16
- data/lib/moory/version.rb +1 -1
- data/moory.gemspec +1 -1
- metadata +5 -4
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 9b7874ce91e148aa1ee25266790efe1bbcd41a200c03a57af8ad1c73f350ffc0
|
|
4
|
+
data.tar.gz: 5df6382f80e74bd23374f1d22d1a2e67544534ea682563ab89fe4488d042a153
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 27ef54b9755d39c18c51d13b7cd5be867a6fbc31a0ee7fcea4b8598ee98cf29c67fccc1b144001ecb9be577305100cac7c17dd7ce19849dd490e6a2b78658652
|
|
7
|
+
data.tar.gz: bb90b7506b1dd352cafcd6f52315d63668eb9c5aeba386e463203aeb1fd632c1617e9a53e2d6990c5b029e17d7eca8cd5d14abe4b65e45a7bb6f0ab338ef74ab
|
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
|
@@ -184,7 +184,7 @@ Promising. You haven't yet spoken out of turn.
|
|
|
184
184
|
well_mannered_object.say_foo
|
|
185
185
|
# "foo"
|
|
186
186
|
```
|
|
187
|
-
A perfectly acceptable
|
|
187
|
+
A perfectly acceptable repetition.
|
|
188
188
|
```ruby
|
|
189
189
|
well_mannered_object.say_bar
|
|
190
190
|
# "bar"
|
|
@@ -192,6 +192,7 @@ well_mannered_object.say_bar
|
|
|
192
192
|
Wonderful!
|
|
193
193
|
```ruby
|
|
194
194
|
well_mannered_object.say_something_nice('Adam')
|
|
195
|
+
# "Hello, Adam. You look nice."
|
|
195
196
|
```
|
|
196
197
|
Yes. Thank you.
|
|
197
198
|
|
data/lib/moory/arrow.rb
ADDED
data/lib/moory/pair.rb
ADDED
data/lib/moory/parser.rb
CHANGED
|
@@ -1,16 +1,18 @@
|
|
|
1
|
+
require 'moory/pair'
|
|
2
|
+
|
|
1
3
|
module Moory
|
|
2
4
|
class Parser
|
|
3
5
|
attr_reader :graph, :staged
|
|
4
6
|
|
|
5
7
|
def initialize
|
|
6
8
|
@graph = {}
|
|
7
|
-
|
|
9
|
+
prime_interpreter
|
|
8
10
|
end
|
|
9
11
|
|
|
10
12
|
def analyse(input)
|
|
11
13
|
input.each_line do |line|
|
|
12
14
|
scan(line); store if valid?
|
|
13
|
-
|
|
15
|
+
reset_interpreter
|
|
14
16
|
end
|
|
15
17
|
|
|
16
18
|
return graph
|
|
@@ -19,26 +21,46 @@ module Moory
|
|
|
19
21
|
private
|
|
20
22
|
|
|
21
23
|
def scan(string)
|
|
22
|
-
string.chomp.each_char { |c|
|
|
24
|
+
string.chomp.each_char { |c| route(c) }
|
|
23
25
|
end
|
|
24
26
|
|
|
27
|
+
def route(char)
|
|
28
|
+
special?(char) ? interpret(char) : write_to_focus(char)
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def special?(char)
|
|
32
|
+
interpreter.understand?(char)
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def write_to_focus(char)
|
|
36
|
+
staged.fetch(@focus) { |k| staged[k] = '' } << char
|
|
37
|
+
end
|
|
38
|
+
|
|
25
39
|
def interpret(char)
|
|
26
|
-
|
|
27
|
-
@interpreter.putm(char)
|
|
28
|
-
else
|
|
29
|
-
staged.fetch(@focus) { |k| staged[k] = '' } << char
|
|
30
|
-
end
|
|
40
|
+
interpreter.putm(char)
|
|
31
41
|
end
|
|
32
42
|
|
|
33
43
|
def store
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
44
|
+
graph.merge!(transition)
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def transition
|
|
48
|
+
poise.shunt(response)
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
def poise
|
|
52
|
+
Moory::Pair.new(
|
|
53
|
+
left: staged['source'],
|
|
54
|
+
right: staged['stimulus']
|
|
55
|
+
)
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
def response
|
|
59
|
+
{
|
|
37
60
|
state: staged['target'],
|
|
38
61
|
output: staged['output'],
|
|
39
|
-
effector: staged['effector']
|
|
40
|
-
|
|
41
|
-
)
|
|
62
|
+
effector: staged['effector']
|
|
63
|
+
}.compact
|
|
42
64
|
end
|
|
43
65
|
|
|
44
66
|
def valid?
|
|
@@ -47,13 +69,13 @@ module Moory
|
|
|
47
69
|
staged['target']
|
|
48
70
|
end
|
|
49
71
|
|
|
50
|
-
def
|
|
72
|
+
def prime_interpreter
|
|
51
73
|
interpreter.state = '0'
|
|
52
74
|
@staged = {}
|
|
53
75
|
source
|
|
54
76
|
end
|
|
55
77
|
|
|
56
|
-
alias
|
|
78
|
+
alias reset_interpreter prime_interpreter
|
|
57
79
|
|
|
58
80
|
def interpreter
|
|
59
81
|
@interpreter ||= Moory::Interpreter.new(config)
|
data/lib/moory/version.rb
CHANGED
data/moory.gemspec
CHANGED
|
@@ -9,7 +9,7 @@ Gem::Specification.new do |spec|
|
|
|
9
9
|
spec.authors = ["Adam W. Grant"]
|
|
10
10
|
spec.email = ["adam_grnt@yahoo.co.uk"]
|
|
11
11
|
|
|
12
|
-
spec.summary = %q{Use plain text to define finite machines
|
|
12
|
+
spec.summary = %q{Use plain text to define finite machines.}
|
|
13
13
|
spec.license = "MIT"
|
|
14
14
|
|
|
15
15
|
spec.homepage = 'https://github.com/elclavijero/moory'
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: moory
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.6.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Adam W. Grant
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: exe
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2018-07-
|
|
11
|
+
date: 2018-07-11 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: bundler
|
|
@@ -78,8 +78,10 @@ files:
|
|
|
78
78
|
- images/foo_bar_etiquette.png
|
|
79
79
|
- lib/moory.rb
|
|
80
80
|
- lib/moory/acceptor.rb
|
|
81
|
+
- lib/moory/arrow.rb
|
|
81
82
|
- lib/moory/decoder.rb
|
|
82
83
|
- lib/moory/interpreter.rb
|
|
84
|
+
- lib/moory/pair.rb
|
|
83
85
|
- lib/moory/parser.rb
|
|
84
86
|
- lib/moory/version.rb
|
|
85
87
|
- lib/moory/wellmannered.rb
|
|
@@ -107,6 +109,5 @@ rubyforge_project:
|
|
|
107
109
|
rubygems_version: 2.7.6
|
|
108
110
|
signing_key:
|
|
109
111
|
specification_version: 4
|
|
110
|
-
summary: Use plain text to define finite machines
|
|
111
|
-
using a simple plain-text specification language.
|
|
112
|
+
summary: Use plain text to define finite machines.
|
|
112
113
|
test_files: []
|