ellen 0.0.1 → 0.0.2
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/CHANGELOG.md +6 -0
- data/lib/ellen.rb +3 -0
- data/lib/ellen/action.rb +15 -0
- data/lib/ellen/adapters/base.rb +4 -1
- data/lib/ellen/adapters/shell.rb +12 -2
- data/lib/ellen/command_builder.rb +2 -1
- data/lib/ellen/handlers/base.rb +17 -1
- data/lib/ellen/handlers/help.rb +2 -10
- data/lib/ellen/message.rb +15 -0
- data/lib/ellen/robot.rb +12 -2
- data/lib/ellen/version.rb +1 -1
- metadata +4 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1a7c6482b9bfde724af1ad6fc7ce974df7af1714
|
4
|
+
data.tar.gz: 77363d87ff9d8c0894f0b832c3ccb9221a6abee9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 28c4776e263d80a48539d6bb0863b312ac9c78aaf14acc03378ee08ac97cd62e74436b9382ee29bc89570b640364942a5f70e73d8feb4e72d1976561e05e4619
|
7
|
+
data.tar.gz: 7766b5ec90898a46545db4a4a6a92cf650971f7fd79707848e407e98fcf49e7d20e7fd4202680539cd5157ddf04eb26447ad0d293bdfe42ac24e60950f4adb0a
|
data/CHANGELOG.md
ADDED
data/lib/ellen.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
require "active_support/core_ext/module/delegation"
|
1
2
|
require "active_support/core_ext/string/inflections"
|
2
3
|
require "bundler"
|
3
4
|
require "mem"
|
@@ -28,6 +29,7 @@ module Ellen
|
|
28
29
|
end
|
29
30
|
end
|
30
31
|
|
32
|
+
require "ellen/action"
|
31
33
|
require "ellen/adapter_builder"
|
32
34
|
require "ellen/adapters/base"
|
33
35
|
require "ellen/adapters/shell"
|
@@ -38,5 +40,6 @@ require "ellen/commands/run"
|
|
38
40
|
require "ellen/handlers/base"
|
39
41
|
require "ellen/handlers/help"
|
40
42
|
require "ellen/logger"
|
43
|
+
require "ellen/message"
|
41
44
|
require "ellen/robot"
|
42
45
|
require "ellen/version"
|
data/lib/ellen/action.rb
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
module Ellen
|
2
|
+
class Action
|
3
|
+
attr_reader :pattern, :options, :block
|
4
|
+
|
5
|
+
def initialize(pattern, options = {}, &block)
|
6
|
+
@pattern = pattern
|
7
|
+
@options = options
|
8
|
+
@block = block
|
9
|
+
end
|
10
|
+
|
11
|
+
def call(handler, message)
|
12
|
+
handler.robot.instance_exec(message, &block) if message.match(pattern, options)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
data/lib/ellen/adapters/base.rb
CHANGED
@@ -14,7 +14,6 @@ module Ellen
|
|
14
14
|
class Base
|
15
15
|
class << self
|
16
16
|
def inherited(child)
|
17
|
-
super
|
18
17
|
Ellen.adapters[child.name.split("::").last.underscore] = child
|
19
18
|
end
|
20
19
|
end
|
@@ -25,6 +24,10 @@ module Ellen
|
|
25
24
|
@robot = robot
|
26
25
|
@options = options
|
27
26
|
end
|
27
|
+
|
28
|
+
def say(body, options = {})
|
29
|
+
Ellen.logger.info("Not implemented #{self.class}##{__method__} was called")
|
30
|
+
end
|
28
31
|
end
|
29
32
|
end
|
30
33
|
end
|
data/lib/ellen/adapters/shell.rb
CHANGED
@@ -8,6 +8,10 @@ module Ellen
|
|
8
8
|
listen
|
9
9
|
end
|
10
10
|
|
11
|
+
def say(body, options = {})
|
12
|
+
puts body
|
13
|
+
end
|
14
|
+
|
11
15
|
private
|
12
16
|
|
13
17
|
def explain
|
@@ -28,17 +32,23 @@ module Ellen
|
|
28
32
|
|
29
33
|
def listen
|
30
34
|
loop { step }
|
35
|
+
rescue Interrupt
|
36
|
+
exit
|
31
37
|
end
|
32
38
|
|
33
39
|
def step
|
34
40
|
prompt
|
35
|
-
case
|
41
|
+
case body = read
|
36
42
|
when "exit", "quit"
|
37
43
|
exit
|
38
44
|
else
|
39
|
-
robot.receive(
|
45
|
+
robot.receive(body: body, source: source, command: true)
|
40
46
|
end
|
41
47
|
end
|
48
|
+
|
49
|
+
def source
|
50
|
+
"shell user"
|
51
|
+
end
|
42
52
|
end
|
43
53
|
end
|
44
54
|
end
|
@@ -20,8 +20,9 @@ module Ellen
|
|
20
20
|
|
21
21
|
def options
|
22
22
|
Slop.parse!(arguments, help: true) do
|
23
|
-
on("g", "generate", "Generate a new chatterbot with ./ellen/ directory if specified.")
|
24
23
|
on("a", "adapter=", "Take adapter name.")
|
24
|
+
on("g", "generate", "Generate a new chatterbot with ./ellen/ directory if specified.")
|
25
|
+
on("l", "load=", "Load a ruby file before running.")
|
25
26
|
end.to_hash
|
26
27
|
end
|
27
28
|
memoize :options
|
data/lib/ellen/handlers/base.rb
CHANGED
@@ -12,10 +12,20 @@ module Ellen
|
|
12
12
|
module Handlers
|
13
13
|
class Base
|
14
14
|
class << self
|
15
|
+
include Mem
|
16
|
+
|
15
17
|
def inherited(child)
|
16
|
-
super
|
17
18
|
Ellen.handlers << child
|
18
19
|
end
|
20
|
+
|
21
|
+
def on(pattern, options = {}, &block)
|
22
|
+
actions << Action.new(pattern, options, &block)
|
23
|
+
end
|
24
|
+
|
25
|
+
def actions
|
26
|
+
[]
|
27
|
+
end
|
28
|
+
memoize :actions
|
19
29
|
end
|
20
30
|
|
21
31
|
attr_reader :robot
|
@@ -23,6 +33,12 @@ module Ellen
|
|
23
33
|
def initialize(robot)
|
24
34
|
@robot = robot
|
25
35
|
end
|
36
|
+
|
37
|
+
def call(message)
|
38
|
+
self.class.actions.each do |action|
|
39
|
+
action.call(self, message)
|
40
|
+
end
|
41
|
+
end
|
26
42
|
end
|
27
43
|
end
|
28
44
|
end
|
data/lib/ellen/handlers/help.rb
CHANGED
@@ -1,16 +1,8 @@
|
|
1
1
|
module Ellen
|
2
2
|
module Handlers
|
3
3
|
class Help < Base
|
4
|
-
|
5
|
-
|
6
|
-
when /help\z/
|
7
|
-
help
|
8
|
-
end
|
9
|
-
end
|
10
|
-
|
11
|
-
# TODO
|
12
|
-
def help
|
13
|
-
puts "Not yet implemented"
|
4
|
+
on /help\z/, command: true do |message|
|
5
|
+
say "You'll be okay", destination: message.source
|
14
6
|
end
|
15
7
|
end
|
16
8
|
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
module Ellen
|
2
|
+
class Message
|
3
|
+
attr_reader :body, :source, :command
|
4
|
+
|
5
|
+
def initialize(options)
|
6
|
+
@body = options[:body]
|
7
|
+
@source = options[:source]
|
8
|
+
@command = options[:command]
|
9
|
+
end
|
10
|
+
|
11
|
+
def match(pattern, options = {})
|
12
|
+
(!options[:command] || command) && pattern === body
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
data/lib/ellen/robot.rb
CHANGED
@@ -2,6 +2,8 @@ module Ellen
|
|
2
2
|
class Robot
|
3
3
|
include Mem
|
4
4
|
|
5
|
+
delegate :say, to: :adapter
|
6
|
+
|
5
7
|
attr_reader :options
|
6
8
|
|
7
9
|
def initialize(options)
|
@@ -10,11 +12,15 @@ module Ellen
|
|
10
12
|
|
11
13
|
def run
|
12
14
|
bundle
|
15
|
+
setup
|
13
16
|
adapt
|
14
17
|
end
|
15
18
|
|
16
|
-
def receive(
|
17
|
-
|
19
|
+
def receive(attributes)
|
20
|
+
message = Message.new(attributes)
|
21
|
+
handlers.each do |handler|
|
22
|
+
handler.call(message)
|
23
|
+
end
|
18
24
|
end
|
19
25
|
|
20
26
|
private
|
@@ -32,6 +38,10 @@ module Ellen
|
|
32
38
|
Bundler.require
|
33
39
|
end
|
34
40
|
|
41
|
+
def setup
|
42
|
+
load(options[:load]) if options[:load]
|
43
|
+
end
|
44
|
+
|
35
45
|
def handlers
|
36
46
|
Ellen.handlers.map {|handler_class| handler_class.new(self) }
|
37
47
|
end
|
data/lib/ellen/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ellen
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ryo Nakamura
|
@@ -117,6 +117,7 @@ extensions: []
|
|
117
117
|
extra_rdoc_files: []
|
118
118
|
files:
|
119
119
|
- ".gitignore"
|
120
|
+
- CHANGELOG.md
|
120
121
|
- Gemfile
|
121
122
|
- LICENSE.txt
|
122
123
|
- README.md
|
@@ -124,6 +125,7 @@ files:
|
|
124
125
|
- bin/ellen
|
125
126
|
- ellen.gemspec
|
126
127
|
- lib/ellen.rb
|
128
|
+
- lib/ellen/action.rb
|
127
129
|
- lib/ellen/adapter_builder.rb
|
128
130
|
- lib/ellen/adapters/base.rb
|
129
131
|
- lib/ellen/adapters/shell.rb
|
@@ -134,6 +136,7 @@ files:
|
|
134
136
|
- lib/ellen/handlers/base.rb
|
135
137
|
- lib/ellen/handlers/help.rb
|
136
138
|
- lib/ellen/logger.rb
|
139
|
+
- lib/ellen/message.rb
|
137
140
|
- lib/ellen/robot.rb
|
138
141
|
- lib/ellen/version.rb
|
139
142
|
- spec/ellen/commands/generate_spec.rb
|