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 +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
|
+
[![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
|
-
|
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
|
+
![Telegram Example](assets/telegram_example.png)
|
115
131
|
|
116
132
|
## Terminal
|
117
133
|
|
118
|
-
|
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
|
-
|
140
|
+
![Terminal Hints](assets/terminal_hints.png)
|
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
|
+
![Action Flow](assets/pug_bot_action_flowchart.png)
|
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
|