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 +4 -4
- data/README.md +27 -12
- data/Rakefile +4 -17
- data/bin/pug +11 -0
- data/lib/pug.rb +2 -0
- data/lib/pug/bot.rb +1 -1
- data/lib/pug/help_action.rb +34 -0
- data/lib/pug/keyword_handler.rb +10 -34
- data/lib/pug/list_action.rb +34 -0
- data/lib/pug/strings.rb +9 -1
- data/lib/pug/telegram_client.rb +8 -4
- data/lib/pug/version.rb +1 -1
- data/pug-bot.gemspec +10 -4
- data/spec/lib/pug/bot_spec.rb +4 -9
- data/spec/lib/pug/help_action_spec.rb +26 -0
- data/spec/lib/pug/keyword_handler_spec.rb +6 -5
- data/spec/lib/pug/list_action_spec.rb +26 -0
- metadata +24 -26
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: bb3da53f3cb80665342a064571021de5697ac955
|
4
|
+
data.tar.gz: 75a403313a896c2d2db1416f985235cd3998163f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: eafbe7a091d4f8fcf7b2b4003a0c2b7697bebf3e81e9968e146b5a22ac68872a8edd1436eefdcdfc922f0e4df100d63b6ac4e1f4c419fe219c923ff909b4e0b6
|
7
|
+
data.tar.gz: 5ab8264be18b53ae4bb3536866a27ecaf94918e24bce8107d561f2789a480c0140f5dd072f1dada31a6b0dc21fe14892f9e49ea86e7235f9e99f71d99caa1814
|
data/README.md
CHANGED
@@ -1,12 +1,26 @@
|
|
1
1
|
# pug-bot
|
2
|
+
[](https://badge.fury.io/rb/pug-bot)
|
3
|
+
[](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
|
-
|
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
|
-
|
130
|
+

|
115
131
|
|
116
132
|
## Terminal
|
117
133
|
|
118
|
-
|
134
|
+

|
119
135
|
|
120
136
|
# Hints
|
121
137
|
|
122
138
|
Hints can be provided via entering: `help` or `list`.
|
123
139
|
|
124
|
-
|
140
|
+

|
125
141
|
|
142
|
+
# How it works
|
126
143
|
|
127
|
-
|
144
|
+
This flowchart outlines how an `Action` gets handled by pug-bot
|
128
145
|
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
This is the result of a few weeks of tinkering in hopes of making something more extensible.
|
146
|
+

|
147
|
+
|
148
|
+
# Documentation
|
133
149
|
|
134
|
-
|
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
|
-
|
1
|
+
require 'bundler/gem_tasks'
|
2
|
+
require 'rspec/core/rake_task'
|
2
3
|
|
3
|
-
|
4
|
-
require 'yard'
|
4
|
+
RSpec::Core::RakeTask.new(:spec)
|
5
5
|
|
6
|
-
|
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
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'
|
data/lib/pug/bot.rb
CHANGED
@@ -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
|
data/lib/pug/keyword_handler.rb
CHANGED
@@ -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
|
-
|
17
|
-
@
|
18
|
-
|
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
|
-
@
|
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(
|
33
|
-
return nil unless keyword?(
|
34
|
-
|
35
|
-
|
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
|
data/lib/pug/strings.rb
CHANGED
@@ -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
|
data/lib/pug/telegram_client.rb
CHANGED
@@ -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?
|
data/lib/pug/version.rb
CHANGED
data/pug-bot.gemspec
CHANGED
@@ -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'
|
23
|
+
s.add_runtime_dependency 'telegram-bot-ruby', '~> 0.8.6'
|
19
24
|
|
20
|
-
s.add_development_dependency 'rspec', '~> 3.7.0'
|
21
|
-
s.add_development_dependency 'rubocop', '~> 0.53.0'
|
22
|
-
s.add_development_dependency 'yard', '~> 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
|
data/spec/lib/pug/bot_spec.rb
CHANGED
@@ -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
|
-
@
|
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
|
-
|
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
|
-
|
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 =
|
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::
|
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.
|
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-
|
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:
|
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
|