pug-bot 0.1.0 → 0.1.1

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: 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