pug-bot 0.1.0 → 0.1.1

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: 130e63accf84439db61edd3da1f0745878a35bf5
4
- data.tar.gz: e655cfbcd864bc561b128b0248798a1c8371b62c
3
+ metadata.gz: bb3da53f3cb80665342a064571021de5697ac955
4
+ data.tar.gz: 75a403313a896c2d2db1416f985235cd3998163f
5
5
  SHA512:
6
- metadata.gz: 360bc1589c908f872b249c7e0388b87d50dcbdc0df9e791d84b431f7e3136e0589b37f4632212e3fecdfed8b3f1b8b51ae562729028f0b776f844aa191a5d26d
7
- data.tar.gz: d6bfc6fef76beabd1e7ee82ac1df9e9368910138e6cd81e4d81ca415fa69be583050d56ad8ce305efa9027b8f2fc319bd2345392142e5d2beca8804a254b7741
6
+ metadata.gz: eafbe7a091d4f8fcf7b2b4003a0c2b7697bebf3e81e9968e146b5a22ac68872a8edd1436eefdcdfc922f0e4df100d63b6ac4e1f4c419fe219c923ff909b4e0b6
7
+ data.tar.gz: 5ab8264be18b53ae4bb3536866a27ecaf94918e24bce8107d561f2789a480c0140f5dd072f1dada31a6b0dc21fe14892f9e49ea86e7235f9e99f71d99caa1814
data/README.md CHANGED
@@ -1,12 +1,26 @@
1
1
  # pug-bot
2
+ [![Gem Version](https://badge.fury.io/rb/pug-bot.svg)](https://badge.fury.io/rb/pug-bot)
3
+ [![Build Status](https://travis-ci.org/ajfigueroa/pug-bot.svg?branch=master)](https://travis-ci.org/ajfigueroa/pug-bot)
2
4
 
3
5
  An automation framework for repetitive dev tasks
4
6
 
7
+ # Background
8
+
9
+ There were a lot of tasks that I found myself repeating during dev work.
10
+ I wanted something that was device/editor agnostic and could handle multiline arguments with no hassle.
11
+
12
+ After playing around with the Telegram API, I hacked together a quick Bot to start this automation.
13
+ This is the result of a few weeks of tinkering in hopes of making something more extensible.
14
+
15
+ This bot was originally designed to work with Telegram but I added support for a command line interface when I wanted something that also worked offline as well.
16
+
17
+ You can see how I use this framework [here](https://github.com/ajfigueroa/alex-pug-bot).
18
+
5
19
  # Installation
6
20
 
7
21
  Add the following to your `Gemfile` and then run `bundle install`
8
22
 
9
- ```
23
+ ```ruby
10
24
  gem 'pug-bot'
11
25
  ```
12
26
 
@@ -57,7 +71,7 @@ end
57
71
  Once you've defined your action you just need a way to interact with it.
58
72
  There are two ways to interact with pug-bot: Telegram and Terminal.
59
73
 
60
- ### Telegram Bot Setup
74
+ ## Telegram Bot Setup
61
75
 
62
76
  To use Telegram we need to first setup a Telegram Bot. Thankfully, Telegram makes this a nice experience. Skip this and the next section if you want to just use Terminal.
63
77
 
@@ -88,6 +102,8 @@ end
88
102
  Pug::Bot.run
89
103
  ```
90
104
 
105
+ **Note: If you want to interact with Telegram without a script, you'll need to deploy to a server such as Heroku.**
106
+
91
107
  ## Terminal
92
108
 
93
109
  To setup Terminal, you just need to specify the type as Terminal
@@ -111,25 +127,24 @@ For the `HelloWorldAction`, that would be `0` as shown below:
111
127
 
112
128
  ## Telegram
113
129
 
114
- <img src="assets/telegram_example.png" width=60% height=60%>
130
+ ![Telegram Example](assets/telegram_example.png)
115
131
 
116
132
  ## Terminal
117
133
 
118
- <img src="assets/terminal_example.png" width=60% height=60%>
134
+ ![Terminal Example](assets/terminal_example.png)
119
135
 
120
136
  # Hints
121
137
 
122
138
  Hints can be provided via entering: `help` or `list`.
123
139
 
124
- <img src="assets/terminal_hints.png" width=60% height=60%>
140
+ ![Terminal Hints](assets/terminal_hints.png)
125
141
 
142
+ # How it works
126
143
 
127
- # Motivation
144
+ This flowchart outlines how an `Action` gets handled by pug-bot
128
145
 
129
- There were a lot of tasks that I found myself repeating during my dev work.
130
- I wanted to use something that was device/editor agnostic and could handle multiline arguments with no hassle.
131
- After playing around with the Telegram API, I hacked together a quick Bot to start this automation.
132
- This is the result of a few weeks of tinkering in hopes of making something more extensible.
146
+ ![Action Flow](assets/pug_bot_action_flowchart.png)
147
+
148
+ # Documentation
133
149
 
134
- If this helps at least one other person work faster then I'll be content.
135
- Also, I come from an iOS background so forgive my not-so idomatic Ruby.
150
+ Documentation can be generated via `rake document`. You can view the resulting documentation by loading the html files from the newly generated `doc/` folder in a browser.
data/Rakefile CHANGED
@@ -1,28 +1,15 @@
1
- # frozen_string_literal: true.
1
+ require 'bundler/gem_tasks'
2
+ require 'rspec/core/rake_task'
2
3
 
3
- require 'pug/version'
4
- require 'yard'
4
+ RSpec::Core::RakeTask.new(:spec)
5
5
 
6
- desc 'Prepares and installs gem'
7
- task :prepare do
8
- sh %{ gem build pug-bot.gemspec }
9
- sh %{ gem install pug-bot-#{Pug::VERSION}.gem }
10
- end
11
-
12
- desc 'Run tests for the gem'
13
- task :test do
14
- sh %{ rspec spec }
15
- end
6
+ task :default => [:cop, :spec]
16
7
 
17
8
  desc 'Run Rubocop check for the gem'
18
9
  task :cop do
19
10
  sh %{ rubocop }
20
11
  end
21
12
 
22
- desc 'Verify everything is good before merge'
23
- task :flightcheck => [:cop, :test] do
24
- end
25
-
26
13
  desc 'Generate documentation'
27
14
  task :document do
28
15
  sh %{ yardoc 'lib/**/*.rb' }
data/bin/pug ADDED
@@ -0,0 +1,11 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'pug'
4
+ require_relative '../example/actions/hello_world_action'
5
+
6
+ Pug.configure do |config|
7
+ config.type = Pug::Configuration::TERMINAL
8
+ config.actions = [HelloWorldAction.new]
9
+ end
10
+
11
+ Pug::Bot.run
data/lib/pug.rb CHANGED
@@ -10,7 +10,9 @@ require 'pug/interfaces/client'
10
10
  require 'pug/types/result'
11
11
  require 'pug/bot'
12
12
  require 'pug/configuration'
13
+ require 'pug/help_action'
13
14
  require 'pug/keyword_handler'
15
+ require 'pug/list_action'
14
16
  require 'pug/message_handler'
15
17
  require 'pug/number_parser'
16
18
  require 'pug/results'
@@ -21,7 +21,7 @@ module Pug
21
21
  @handler = MessageHandler.default(actions)
22
22
  end
23
23
 
24
- # Starts the handling all messages received via the Client
24
+ # Starts the handling of all messages received via the Client
25
25
  # @return [void]
26
26
  def start
27
27
  @client.listen do |message|
@@ -0,0 +1,34 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Pug
4
+ # Lists all the system defined actions
5
+ class HelpAction < Interfaces::Action
6
+ # @param actions [Array<Interfaces::Action>]
7
+ # system provided actions
8
+ def initialize(actions)
9
+ @actions = actions
10
+ end
11
+
12
+ # Action overrides
13
+
14
+ # Override of {Interfaces::Action#name}
15
+ # @return [String]
16
+ def name
17
+ ''
18
+ end
19
+
20
+ # Override of {Interfaces::Action#execute}
21
+ # @return [String]
22
+ def execute
23
+ return Strings.no_help_commands if @actions.empty?
24
+ actions = @actions.map do |action|
25
+ if action.description.to_s.empty?
26
+ action.name
27
+ else
28
+ "#{action.name} # #{action.description}"
29
+ end
30
+ end
31
+ Strings.help(actions.join("\n"))
32
+ end
33
+ end
34
+ end
@@ -5,55 +5,31 @@ require 'set'
5
5
  module Pug
6
6
  # Responds to keywords that provide hints to the User
7
7
  class KeywordHandler
8
- # @!group Keywords
9
- HELP = 'help'
10
- LIST = 'list'
11
- # @!endgroup
12
-
13
8
  # @param actions [Array<Interfaces::Action>]
14
9
  # user provided actions
15
10
  def initialize(actions)
16
- @actions = actions
17
- @keywords = Set[HELP, LIST]
18
- @enumerator = Action::Enumerator.new
11
+ list_action = ListAction.new(actions)
12
+ @keyword_map = {
13
+ 'help' => HelpAction.new([list_action]),
14
+ 'list' => list_action
15
+ }
19
16
  end
20
17
 
21
18
  # Determines if a given text is a keyword
22
19
  # @param text [String] text to test
23
20
  # @return [Boolean] if text is a keyword
24
21
  def keyword?(text)
25
- @keywords.include?(text)
22
+ @keyword_map.include?(text)
26
23
  end
27
24
 
28
25
  # Runs the command corresponding to text
29
26
  # if it is a keyword
30
27
  # @param text [String] text to run command for
31
28
  # @return [String, nil] output of command or nil
32
- def run_command_for_keyword(text)
33
- return nil unless keyword?(text)
34
- map_keyword_to_command(text)
35
- end
36
-
37
- private
38
-
39
- def keywords_excluding_help
40
- @keywords.to_a.reject { |keyword| keyword == HELP }
41
- end
42
-
43
- def map_keyword_to_command(keyword)
44
- return help_response if keyword == HELP
45
- return list_response if keyword == LIST
46
- nil
47
- end
48
-
49
- def help_response
50
- commands = keywords_excluding_help.join("\n")
51
- Strings.help(commands)
52
- end
53
-
54
- def list_response
55
- return Strings.no_actions if @actions.empty?
56
- @enumerator.names(@actions, true).join("\n")
29
+ def run_command_for_keyword(keyword)
30
+ return nil unless keyword?(keyword)
31
+ command = @keyword_map[keyword]
32
+ command.execute
57
33
  end
58
34
  end
59
35
  end
@@ -0,0 +1,34 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Pug
4
+ # Lists all the user defined actions
5
+ class ListAction < Interfaces::Action
6
+ # @param actions [Array<Interfaces::Action>]
7
+ # user provided actions
8
+ def initialize(actions)
9
+ @actions = actions
10
+ @enumerator = Action::Enumerator.new
11
+ end
12
+
13
+ # Action overrides
14
+
15
+ # Override of {Interfaces::Action#name}
16
+ # @return [String]
17
+ def name
18
+ 'list'
19
+ end
20
+
21
+ # Override of {Interfaces::Action#description}
22
+ # @return [String]
23
+ def description
24
+ Strings.list_description
25
+ end
26
+
27
+ # Override of {Interfaces::Action#execute}
28
+ # @return [String]
29
+ def execute
30
+ return Strings.no_actions if @actions.empty?
31
+ @enumerator.names(@actions, true).join("\n")
32
+ end
33
+ end
34
+ end
@@ -32,7 +32,15 @@ module Pug
32
32
  end
33
33
 
34
34
  def self.help(commands)
35
- "These are available commands:\n#{commands}"
35
+ "These are the available commands:\n#{commands}"
36
+ end
37
+
38
+ def self.no_help_commands
39
+ 'There are no available commands.'
40
+ end
41
+
42
+ def self.list_description
43
+ 'Displays all your available pug-bot actions'
36
44
  end
37
45
  end
38
46
  end
@@ -43,18 +43,22 @@ module Pug
43
43
  private
44
44
 
45
45
  def send_telegram_message(message)
46
- reply_markup = Telegram::Bot::Types::ReplyKeyboardMarkup.new(
47
- keyboard: @keyboard_markup || []
48
- )
49
46
  perform_with_bot do |bot|
50
47
  bot.api.send_message(
51
48
  chat_id: @chat_id,
52
49
  text: message,
53
- reply_markup: reply_markup
50
+ reply_markup: reply_markup,
51
+ disable_web_page_preview: true
54
52
  )
55
53
  end
56
54
  end
57
55
 
56
+ def reply_markup
57
+ Telegram::Bot::Types::ReplyKeyboardMarkup.new(
58
+ keyboard: @keyboard_markup || []
59
+ )
60
+ end
61
+
58
62
  def client
59
63
  return @client if @client
60
64
  raise 'No Telegram token provided' if @token.to_s.empty?
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Pug
4
- VERSION = '0.1.0'
4
+ VERSION = '0.1.1'
5
5
  end
@@ -1,3 +1,6 @@
1
+ lib = File.expand_path('../lib', __FILE__)
2
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
3
+
1
4
  require 'pug/version'
2
5
 
3
6
  Gem::Specification.new do |s|
@@ -13,11 +16,14 @@ Gem::Specification.new do |s|
13
16
  s.files = Dir['lib/**/*'] + %w(Gemfile LICENSE README.md Rakefile pug-bot.gemspec)
14
17
  s.test_files = Dir['spec/**/*']
15
18
  s.require_paths = ['lib']
19
+ s.executables << 'pug'
20
+
16
21
  s.required_ruby_version = '>= 2.3'
17
22
 
18
- s.add_runtime_dependency 'telegram-bot-ruby', '~> 0.8.6', '>= 0.8.6'
23
+ s.add_runtime_dependency 'telegram-bot-ruby', '~> 0.8.6'
19
24
 
20
- s.add_development_dependency 'rspec', '~> 3.7.0', '>= 3.7.0'
21
- s.add_development_dependency 'rubocop', '~> 0.53.0', '>= 0.53.0'
22
- s.add_development_dependency 'yard', '~> 0.9.2', '>= 0.9.2'
25
+ s.add_development_dependency 'rspec', '~> 3.7.0'
26
+ s.add_development_dependency 'rubocop', '~> 0.53.0'
27
+ s.add_development_dependency 'yard', '~> 0.9.2'
28
+ s.add_development_dependency 'rake', '~> 10.4.2'
23
29
  end
@@ -10,12 +10,14 @@ describe Pug::Bot do
10
10
  @client = MockClient.new
11
11
  action0 = MockAction.new('Action0', false, 'Output0')
12
12
  action1 = MockAction.new('Action1', true, 'Output1')
13
- @bot = Pug::Bot.new(@client, [action0, action1])
13
+ @actions = [action0, action1]
14
+ @bot = Pug::Bot.new(@client, @actions)
14
15
  end
15
16
 
16
17
  it 'should respond to "help" command' do
17
18
  @client.enqueue_message('help')
18
- expected = Pug::Strings.help('list')
19
+ list_action = Pug::ListAction.new(@actions)
20
+ expected = Pug::HelpAction.new([list_action]).execute
19
21
  @bot.start
20
22
  expect(@client.last_sent_message).to eq(expected)
21
23
  end
@@ -53,13 +55,6 @@ describe Pug::Bot do
53
55
  @bot.start
54
56
  expect(@client.sent_messages).to eq([expected0, expected1])
55
57
  end
56
-
57
- it 'should respond to an action call with inputs required' do
58
- @client.enqueue_message('1')
59
- expected = Pug::Strings.enter_inputs('Action1')
60
- @bot.start
61
- expect(@client.last_sent_message).to eq(expected)
62
- end
63
58
  end
64
59
 
65
60
  describe 'when a command is running' do
@@ -0,0 +1,26 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'pug'
4
+ require_relative '../spec_helpers/mock_action'
5
+
6
+ describe Pug::HelpAction do
7
+ describe 'execute' do
8
+ before(:each) do
9
+ action0 = MockAction.new('Action0', false, 'Output0')
10
+ action1 = MockAction.new('Action1', true, 'Output1', 'Desc1')
11
+ @help_action = Pug::HelpAction.new([action0, action1])
12
+ end
13
+
14
+ it 'should display the list of actions' do
15
+ result = @help_action.execute
16
+ expected = Pug::Strings.help("Action0\nAction1 # Desc1")
17
+ expect(result).to eq(expected)
18
+ end
19
+
20
+ it 'should display no actions if none are setup' do
21
+ help_action = Pug::HelpAction.new([])
22
+ result = help_action.execute
23
+ expect(result).to eq(Pug::Strings.no_help_commands)
24
+ end
25
+ end
26
+ end
@@ -26,8 +26,8 @@ describe Pug::KeywordHandler do
26
26
  action0 = MockAction.new('Test0', false, '', 'About0')
27
27
  action1 = MockAction.new('Test1', false, '')
28
28
  action2 = MockAction.new('Test2', false, '', '')
29
- actions = [action0, action1, action2]
30
- @handler = Pug::KeywordHandler.new(actions)
29
+ @actions = [action0, action1, action2]
30
+ @handler = Pug::KeywordHandler.new(@actions)
31
31
  end
32
32
 
33
33
  it 'returns nil if text is not a keyword' do
@@ -35,18 +35,19 @@ describe Pug::KeywordHandler do
35
35
  end
36
36
 
37
37
  it 'returns list of keywords if text is help' do
38
- expected = Pug::Strings.help('list')
38
+ list_action = Pug::ListAction.new(@actions)
39
+ expected = Pug::HelpAction.new([list_action]).execute
39
40
  expect(@handler.run_command_for_keyword('help')).to eq(expected)
40
41
  end
41
42
 
42
43
  it 'returns list of actions if text is list' do
43
- expected = "0: Test0 # About0\n1: Test1\n2: Test2"
44
+ expected = Pug::ListAction.new(@actions).execute
44
45
  expect(@handler.run_command_for_keyword('list')).to eq(expected)
45
46
  end
46
47
 
47
48
  it 'returns if there are no actions if text is list' do
48
49
  handler = Pug::KeywordHandler.new([])
49
- expected = Pug::Strings.no_actions
50
+ expected = Pug::ListAction.new([]).execute
50
51
  expect(handler.run_command_for_keyword('list')).to eq(expected)
51
52
  end
52
53
  end
@@ -0,0 +1,26 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'pug'
4
+ require_relative '../spec_helpers/mock_action'
5
+
6
+ describe Pug::ListAction do
7
+ describe 'execute' do
8
+ before(:each) do
9
+ action0 = MockAction.new('Action0', false, 'Output0')
10
+ action1 = MockAction.new('Action1', true, 'Output1', 'Desc1')
11
+ @list_action = Pug::ListAction.new([action0, action1])
12
+ end
13
+
14
+ it 'should display the list of actions' do
15
+ result = @list_action.execute
16
+ expected = "0: Action0\n1: Action1 # Desc1"
17
+ expect(result).to eq(expected)
18
+ end
19
+
20
+ it 'should display no actions if none are setup' do
21
+ list_action = Pug::ListAction.new([])
22
+ result = list_action.execute
23
+ expect(result).to eq(Pug::Strings.no_actions)
24
+ end
25
+ end
26
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pug-bot
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alex Figueroa
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-06-25 00:00:00.000000000 Z
11
+ date: 2018-09-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: telegram-bot-ruby
@@ -17,9 +17,6 @@ dependencies:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
19
  version: 0.8.6
20
- - - ">="
21
- - !ruby/object:Gem::Version
22
- version: 0.8.6
23
20
  type: :runtime
24
21
  prerelease: false
25
22
  version_requirements: !ruby/object:Gem::Requirement
@@ -27,9 +24,6 @@ dependencies:
27
24
  - - "~>"
28
25
  - !ruby/object:Gem::Version
29
26
  version: 0.8.6
30
- - - ">="
31
- - !ruby/object:Gem::Version
32
- version: 0.8.6
33
27
  - !ruby/object:Gem::Dependency
34
28
  name: rspec
35
29
  requirement: !ruby/object:Gem::Requirement
@@ -37,9 +31,6 @@ dependencies:
37
31
  - - "~>"
38
32
  - !ruby/object:Gem::Version
39
33
  version: 3.7.0
40
- - - ">="
41
- - !ruby/object:Gem::Version
42
- version: 3.7.0
43
34
  type: :development
44
35
  prerelease: false
45
36
  version_requirements: !ruby/object:Gem::Requirement
@@ -47,9 +38,6 @@ dependencies:
47
38
  - - "~>"
48
39
  - !ruby/object:Gem::Version
49
40
  version: 3.7.0
50
- - - ">="
51
- - !ruby/object:Gem::Version
52
- version: 3.7.0
53
41
  - !ruby/object:Gem::Dependency
54
42
  name: rubocop
55
43
  requirement: !ruby/object:Gem::Requirement
@@ -57,9 +45,6 @@ dependencies:
57
45
  - - "~>"
58
46
  - !ruby/object:Gem::Version
59
47
  version: 0.53.0
60
- - - ">="
61
- - !ruby/object:Gem::Version
62
- version: 0.53.0
63
48
  type: :development
64
49
  prerelease: false
65
50
  version_requirements: !ruby/object:Gem::Requirement
@@ -67,9 +52,6 @@ dependencies:
67
52
  - - "~>"
68
53
  - !ruby/object:Gem::Version
69
54
  version: 0.53.0
70
- - - ">="
71
- - !ruby/object:Gem::Version
72
- version: 0.53.0
73
55
  - !ruby/object:Gem::Dependency
74
56
  name: yard
75
57
  requirement: !ruby/object:Gem::Requirement
@@ -77,9 +59,6 @@ dependencies:
77
59
  - - "~>"
78
60
  - !ruby/object:Gem::Version
79
61
  version: 0.9.2
80
- - - ">="
81
- - !ruby/object:Gem::Version
82
- version: 0.9.2
83
62
  type: :development
84
63
  prerelease: false
85
64
  version_requirements: !ruby/object:Gem::Requirement
@@ -87,12 +66,24 @@ dependencies:
87
66
  - - "~>"
88
67
  - !ruby/object:Gem::Version
89
68
  version: 0.9.2
90
- - - ">="
69
+ - !ruby/object:Gem::Dependency
70
+ name: rake
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
91
74
  - !ruby/object:Gem::Version
92
- version: 0.9.2
75
+ version: 10.4.2
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: 10.4.2
93
83
  description:
94
84
  email: alexjfigueroa [ at ] gmail [ dot ] com
95
- executables: []
85
+ executables:
86
+ - pug
96
87
  extensions: []
97
88
  extra_rdoc_files: []
98
89
  files:
@@ -100,6 +91,7 @@ files:
100
91
  - LICENSE
101
92
  - README.md
102
93
  - Rakefile
94
+ - bin/pug
103
95
  - lib/pug.rb
104
96
  - lib/pug/action/controller.rb
105
97
  - lib/pug/action/enumerator.rb
@@ -108,9 +100,11 @@ files:
108
100
  - lib/pug/bot.rb
109
101
  - lib/pug/clients/factory.rb
110
102
  - lib/pug/configuration.rb
103
+ - lib/pug/help_action.rb
111
104
  - lib/pug/interfaces/action.rb
112
105
  - lib/pug/interfaces/client.rb
113
106
  - lib/pug/keyword_handler.rb
107
+ - lib/pug/list_action.rb
114
108
  - lib/pug/message_handler.rb
115
109
  - lib/pug/number_parser.rb
116
110
  - lib/pug/results.rb
@@ -125,7 +119,9 @@ files:
125
119
  - spec/lib/pug/bot_spec.rb
126
120
  - spec/lib/pug/clients/factory_spec.rb
127
121
  - spec/lib/pug/configuration_spec.rb
122
+ - spec/lib/pug/help_action_spec.rb
128
123
  - spec/lib/pug/keyword_handler_spec.rb
124
+ - spec/lib/pug/list_action_spec.rb
129
125
  - spec/lib/pug/message_handler_spec.rb
130
126
  - spec/lib/pug/number_parser_spec.rb
131
127
  - spec/lib/pug/types/result_spec.rb
@@ -159,9 +155,11 @@ test_files:
159
155
  - spec/lib/spec_helpers/mock_action.rb
160
156
  - spec/lib/spec_helpers/mock_client.rb
161
157
  - spec/lib/pug/clients/factory_spec.rb
158
+ - spec/lib/pug/help_action_spec.rb
162
159
  - spec/lib/pug/types/result_spec.rb
163
160
  - spec/lib/pug/number_parser_spec.rb
164
161
  - spec/lib/pug/configuration_spec.rb
162
+ - spec/lib/pug/list_action_spec.rb
165
163
  - spec/lib/pug/action/enumerator_spec.rb
166
164
  - spec/lib/pug/action/controller_spec.rb
167
165
  - spec/lib/pug/message_handler_spec.rb