rounders 0.2.0 → 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +2 -2
- data/.rspec +2 -0
- data/.rubocop.yml +10 -1
- data/.travis.yml +9 -0
- data/README.ja.md +196 -0
- data/README.md +56 -8
- data/lib/rounders.rb +18 -10
- data/lib/rounders/commands/global_command.rb +13 -5
- data/lib/rounders/commands/sub_commands/generate.rb +24 -8
- data/lib/rounders/generators/app/app_generator.rb +46 -0
- data/lib/rounders/generators/app/templates/.rspec +2 -0
- data/lib/rounders/generators/app/templates/Gemfile +10 -0
- data/lib/rounders/generators/app/templates/MIT-LICENSE +20 -0
- data/lib/rounders/generators/app/templates/README.md.tt +21 -0
- data/lib/rounders/generators/app/templates/Rakefile +4 -0
- data/lib/rounders/generators/app/templates/app/handlers/.gitkeep +0 -0
- data/lib/rounders/generators/app/templates/app/matchers/.gitkeep +0 -0
- data/lib/rounders/generators/app/templates/app/receivers/.gitkeep +0 -0
- data/{templates/app → lib/rounders/generators/app/templates}/config/initializers/mail.rb +2 -2
- data/lib/rounders/generators/app/templates/gitignore +54 -0
- data/lib/rounders/generators/app/templates/spec/handlers/.gitkeep +0 -0
- data/lib/rounders/generators/app/templates/spec/matchers/.gitkeep +0 -0
- data/lib/rounders/generators/app/templates/spec/receivers/.gitkeep +0 -0
- data/lib/rounders/generators/app/templates/spec/spec_helper.rb.tt +105 -0
- data/lib/rounders/generators/app/templates/travis.yml +9 -0
- data/lib/rounders/generators/base.rb +69 -0
- data/lib/rounders/generators/handler/handler_generator.rb +16 -0
- data/lib/rounders/generators/handler/templates/%underscored_name%_handler.rb.tt +12 -0
- data/lib/rounders/generators/matcher/matcher_generator.rb +15 -0
- data/{templates/generators/matcher.mustache.rb → lib/rounders/generators/matcher/templates/%underscored_name%_matcher.rb.tt} +1 -1
- data/lib/rounders/generators/plugin/plugin_generator.rb +49 -0
- data/lib/rounders/generators/plugin/templates/.rspec +2 -0
- data/lib/rounders/generators/plugin/templates/Gemfile +4 -0
- data/lib/rounders/generators/plugin/templates/MIT-LICENSE +20 -0
- data/lib/rounders/generators/plugin/templates/README.md.tt +35 -0
- data/lib/rounders/generators/plugin/templates/Rakefile +4 -0
- data/lib/rounders/generators/plugin/templates/gitignore +54 -0
- data/lib/rounders/generators/plugin/templates/lib/rounders/%underscored_name%.rb.tt +6 -0
- data/lib/rounders/generators/plugin/templates/lib/rounders/%underscored_name%/version.rb.tt +5 -0
- data/lib/rounders/generators/plugin/templates/rounders-%underscored_name%.gemspec.tt +25 -0
- data/lib/rounders/generators/plugin/templates/spec/rounders/%underscored_name%_spec.rb.tt +7 -0
- data/lib/rounders/generators/plugin/templates/spec/rounders/.gitkeep +0 -0
- data/lib/rounders/generators/plugin/templates/spec/spec_helper.rb.tt +123 -0
- data/lib/rounders/generators/plugin/templates/travis.yml +9 -0
- data/lib/rounders/generators/receiver/receiver_generator.rb +15 -0
- data/lib/rounders/generators/receiver/templates/%underscored_name%_receiver.rb.tt +16 -0
- data/lib/rounders/handlers/handler.rb +3 -2
- data/lib/rounders/matchers/matcher.rb +4 -3
- data/lib/rounders/plugins/pluggable.rb +12 -2
- data/lib/rounders/receivers/mail.rb +41 -0
- data/lib/rounders/receivers/receiver.rb +29 -0
- data/lib/rounders/rounder.rb +1 -1
- data/lib/rounders/util.rb +20 -0
- data/lib/rounders/version.rb +1 -1
- data/rounders.gemspec +6 -5
- metadata +65 -33
- data/circle.yml +0 -36
- data/lib/rounders/generators/app.rb +0 -28
- data/lib/rounders/generators/generator.rb +0 -48
- data/lib/rounders/generators/handler.rb +0 -12
- data/lib/rounders/generators/matcher.rb +0 -9
- data/lib/rounders/receiver.rb +0 -67
- data/templates/app/Gemfile +0 -2
- data/templates/generators/handler.mustache.rb +0 -14
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 45547d405ca80484bf5a309a7f0784b0c6d0d16d
|
4
|
+
data.tar.gz: b1935a235c262dc8517499725dd60c56701b5a1a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e5ddda05355cc11f219ff0cc6e62a77c8161a8034535f4c9f4277a92a6ca0eaec6e46805ea1c1d05053324958e85e6889a6fa48cfbfe86df1f2342a932fa369c
|
7
|
+
data.tar.gz: '049ab0e60c9eb09a101909ec29cde953285824520b04e2a86a34f3c6fd4715226a60cd40953d54a6b0dad48886dd6326b02ce2f3767e2f8635c492e41e8732b7'
|
data/.gitignore
CHANGED
@@ -8,15 +8,15 @@
|
|
8
8
|
/spec/reports/
|
9
9
|
/tmp/
|
10
10
|
### https://raw.github.com/github/gitignore/0aeefb48c0ac885a516fb92f7f5bfd7e85ce7a37/Rails.gitignore
|
11
|
+
/verndor/bundle
|
11
12
|
|
12
13
|
*.rbc
|
13
14
|
*.sassc
|
14
15
|
.sass-cache
|
15
16
|
capybara-*.html
|
16
|
-
.rspec
|
17
17
|
.rvmrc
|
18
18
|
/.bundle
|
19
|
-
/vendor/bundle
|
19
|
+
/vendor/bundle/
|
20
20
|
/log/*
|
21
21
|
/tmp/*
|
22
22
|
/db/*.sqlite3
|
data/.rspec
ADDED
data/.rubocop.yml
CHANGED
@@ -4,7 +4,7 @@ AllCops:
|
|
4
4
|
- 'vendor/**/*'
|
5
5
|
- 'spec/fixtures/**/*'
|
6
6
|
- 'tmp/**/*'
|
7
|
-
- 'templates
|
7
|
+
- 'templates/**/*'
|
8
8
|
##################### Metrics ##################################
|
9
9
|
|
10
10
|
Metrics/LineLength:
|
@@ -35,3 +35,12 @@ Style/DotPosition:
|
|
35
35
|
|
36
36
|
Style/FrozenStringLiteralComment:
|
37
37
|
Enabled: false
|
38
|
+
|
39
|
+
Metrics/BlockLength:
|
40
|
+
Exclude:
|
41
|
+
- 'rounders.gemspec'
|
42
|
+
- 'spec/**/*'
|
43
|
+
|
44
|
+
Metrics/MethodLength:
|
45
|
+
CountComments: false # count full line comments?
|
46
|
+
Max: 30
|
data/.travis.yml
ADDED
data/README.ja.md
ADDED
@@ -0,0 +1,196 @@
|
|
1
|
+
# Rounders [![Build Status](https://travis-ci.org/rike422/rounders.svg?branch=master)](https://travis-ci.org/rike422/rounders) [![Code Climate](https://codeclimate.com/github/rike422/rounders/badges/gpa.svg)](https://codeclimate.com/github/rike422/rounders) [![Coverage Status](https://coveralls.io/repos/github/rike422/rounders/badge.svg?branch=master)](https://coveralls.io/github/rike422/rounders?branch=master)
|
2
|
+
|
3
|
+
Roundersは拡張性を重視した、メール処理フレームワークです。
|
4
|
+
RubotyなどのBotを参考に作られました。
|
5
|
+
|
6
|
+
|
7
|
+
## Installation
|
8
|
+
|
9
|
+
Add this line to your application's Gemfile:
|
10
|
+
|
11
|
+
```ruby
|
12
|
+
gem 'rounders'
|
13
|
+
```
|
14
|
+
|
15
|
+
And then execute:
|
16
|
+
|
17
|
+
$ bundle
|
18
|
+
|
19
|
+
Or install it yourself as:
|
20
|
+
|
21
|
+
$ gem install rounders
|
22
|
+
|
23
|
+
## Usage
|
24
|
+
|
25
|
+
### botの作成
|
26
|
+
|
27
|
+
botを作成するには、下記のコマンドを実行します。
|
28
|
+
|
29
|
+
```
|
30
|
+
rounders new [name]
|
31
|
+
```
|
32
|
+
|
33
|
+
### メールアカウントの設定
|
34
|
+
|
35
|
+
生成されたbotの`config/initiarizers/mail.rb`にメールアカウント情報を設定します。
|
36
|
+
```
|
37
|
+
Rounders::Receivers::Mail.configure do |config|
|
38
|
+
# please show more option
|
39
|
+
#
|
40
|
+
config.protocol = :imap
|
41
|
+
# メールアカウント情報を設定します。
|
42
|
+
config.mail_server_setting = {
|
43
|
+
address: 'imap.gmail.com',
|
44
|
+
port: 993,
|
45
|
+
user_name: ENV['GMAIL_USER_NAME'],
|
46
|
+
password: ENV['GMAIL_PASSWORD'],
|
47
|
+
enable_ssl: true
|
48
|
+
}
|
49
|
+
config.options = {
|
50
|
+
# flag for whether to delete each receive mail after find Default: false
|
51
|
+
# delete_after_find: true
|
52
|
+
}
|
53
|
+
end
|
54
|
+
|
55
|
+
```
|
56
|
+
|
57
|
+
### botの実行
|
58
|
+
|
59
|
+
`bundle exec rounders start`でbotをスタートできます。
|
60
|
+
|
61
|
+
## Modules
|
62
|
+
|
63
|
+
Roundersはそれぞれのモジュールの基底クラスを継承することにより、
|
64
|
+
Hookが行われ、システム内に組み込むことができます。
|
65
|
+
|
66
|
+
各モジュールのテンプレートを作成するジェネレータを用意しています。
|
67
|
+
|
68
|
+
#### Handlers
|
69
|
+
|
70
|
+
Handlersはメールのハンドングを行うモジュールです。
|
71
|
+
`.on`の第一引数で渡した条件で下記のMatcherインスタンスを作成し、
|
72
|
+
マッチしたメールを、第二引数で渡したメソッドに引き渡します
|
73
|
+
|
74
|
+
#### Generate Command
|
75
|
+
|
76
|
+
下記のように`rounders generate handler`をroudersディレクトリ内で実行することで、
|
77
|
+
./app/handlersの中にテンプレートファイルが生成されます。
|
78
|
+
|
79
|
+
```
|
80
|
+
rounders generate handler [name] [method1, method2...] `
|
81
|
+
```
|
82
|
+
|
83
|
+
##### example
|
84
|
+
|
85
|
+
```ruby
|
86
|
+
module Rounders
|
87
|
+
module Handlers
|
88
|
+
class MyHandler < Rounders::Handlers::Handler
|
89
|
+
# mail.body is include 'exmpale'
|
90
|
+
on({ body: 'example' }, :callback_method1)
|
91
|
+
# body include 'exmpale' AND subject match the /programing (?<name>.+)$/
|
92
|
+
on({
|
93
|
+
body: 'example',
|
94
|
+
subject: /programing (?<name>.+)$/},
|
95
|
+
:callback_method2)
|
96
|
+
|
97
|
+
def method1(mail)
|
98
|
+
# BodyMatcherの戻り値画が格納されています。
|
99
|
+
matches[:body]
|
100
|
+
# => #<MatchData "example">
|
101
|
+
# 引数のmail、matchesを利用して処理を行えます。
|
102
|
+
end
|
103
|
+
|
104
|
+
def method2(mail)
|
105
|
+
matches[:subject]
|
106
|
+
# => <MatchData "programing ruby" name:"ruby">
|
107
|
+
matches[:subject][:name]
|
108
|
+
# => "ruby"
|
109
|
+
end
|
110
|
+
end
|
111
|
+
end
|
112
|
+
end
|
113
|
+
|
114
|
+
```
|
115
|
+
|
116
|
+
#### Matchers
|
117
|
+
|
118
|
+
Matcherはメールのフィルタリングを行うモジュールです。
|
119
|
+
`#match`メソッドを実装する必要があり、このメソッドが返した値は、
|
120
|
+
Handlersメソッド内で扱えるmatchesに格納されます。
|
121
|
+
|
122
|
+
#### Generate Command
|
123
|
+
|
124
|
+
下記のように`rounders generate matchers`をroudersディレクトリ内で実行することで、
|
125
|
+
./app/matchers/の中にテンプレートファイルが生成されます。
|
126
|
+
|
127
|
+
```
|
128
|
+
rounders generate matchers [name]`
|
129
|
+
```
|
130
|
+
|
131
|
+
下記はHTMLメールに対して、CSSセレクタでフィルタ・抽出を行うためのMatcherの実装例です。
|
132
|
+
|
133
|
+
#### exmaple
|
134
|
+
|
135
|
+
/app/matchers/css_selector.rb
|
136
|
+
|
137
|
+
```ruby
|
138
|
+
module Rounders
|
139
|
+
module Matchers
|
140
|
+
# クラス名をsnake_caseにした値が、handlerでのkeyになります。
|
141
|
+
class CssSelector < Rounders::Matchers::Matcher
|
142
|
+
attr_reader :pattern
|
143
|
+
|
144
|
+
def initialize(pattern)
|
145
|
+
@pattern = pattern
|
146
|
+
end
|
147
|
+
|
148
|
+
def match(mail)
|
149
|
+
return if mail.html_part.blank?
|
150
|
+
html_part = Nokogiri::HTML(mail.html_part.body.to_s)
|
151
|
+
node = html_part.css(pattern)
|
152
|
+
# 戻り値がmatches[:css_selector]に格納されます。
|
153
|
+
node.present? ? node : nil
|
154
|
+
end
|
155
|
+
end
|
156
|
+
end
|
157
|
+
end
|
158
|
+
|
159
|
+
```
|
160
|
+
|
161
|
+
/app/handlers/your_hander.rb
|
162
|
+
```ruby
|
163
|
+
module Rounders
|
164
|
+
module Handlers
|
165
|
+
class YourHandler < Rounders::Handlers::Handler
|
166
|
+
# 上記のCssSelectorを利用するためにキーを指定して、CSSセレクタを値として渡します。
|
167
|
+
on({ css_selector: 'body .header h2' }, method1)
|
168
|
+
|
169
|
+
def method1(mail)
|
170
|
+
# CssSelectorの戻り値が格納されています。
|
171
|
+
matches[:css_selector]
|
172
|
+
# =>[#<Nokogiri::XML::Element:0x3fc6d77f6ccc name="h2" children=[#<Nokogiri::XML::Text:0x3fc6d77f6ad8 " head text ">]>]
|
173
|
+
matches[:css_selector].to_s
|
174
|
+
# => '<h2> head text </h2>'
|
175
|
+
end
|
176
|
+
end
|
177
|
+
end
|
178
|
+
end
|
179
|
+
|
180
|
+
```
|
181
|
+
|
182
|
+
#### Gems
|
183
|
+
|
184
|
+
RoundersのモジュールはGemとして配布できます。
|
185
|
+
上記のCssSelectorをGemにしたものが下記のリポジトリになります。
|
186
|
+
- [rounders-css_selector_matcher](https://github.com/rike422/rounders-css_selector_matcher)
|
187
|
+
|
188
|
+
#### reciever
|
189
|
+
|
190
|
+
coming soon...
|
191
|
+
|
192
|
+
|
193
|
+
## License
|
194
|
+
|
195
|
+
The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
|
196
|
+
|
data/README.md
CHANGED
@@ -1,6 +1,9 @@
|
|
1
|
-
# Rounders [![
|
1
|
+
# Rounders [![Build Status](https://travis-ci.org/rike422/rounders.svg?branch=master)](https://travis-ci.org/rike422/rounders) [![Code Climate](https://codeclimate.com/github/rike422/rounders/badges/gpa.svg)](https://codeclimate.com/github/rike422/rounders) [![Coverage Status](https://coveralls.io/repos/github/rike422/rounders/badge.svg?branch=master)](https://coveralls.io/github/rike422/rounders?branch=master)
|
2
2
|
|
3
|
-
|
3
|
+
[日本語README](https://github.com/rike422/rounders/blob/master/README.ja.md)
|
4
|
+
|
5
|
+
Rounders is a mail handling framework that emphasizes pluggability.
|
6
|
+
It was made with reference to Bot such as [Ruboty](https://github.com/r7kamura/ruboty),[Lita](https://github.com/litaio/lita).
|
4
7
|
|
5
8
|
## Installation
|
6
9
|
|
@@ -22,16 +25,53 @@ Or install it yourself as:
|
|
22
25
|
|
23
26
|
### create bot
|
24
27
|
|
25
|
-
create a
|
28
|
+
To create a bot, execute the following command.
|
26
29
|
|
27
30
|
```
|
28
31
|
rounders new [name]
|
29
32
|
```
|
30
33
|
|
31
|
-
###
|
34
|
+
### Mail account settings
|
35
|
+
|
36
|
+
Set mail account information in `bot/config/initiarizers/ mail.rb` of the generated bot.
|
37
|
+
|
38
|
+
```
|
39
|
+
Rounders::Receivers::Mail.configure do |config|
|
40
|
+
# please show more option
|
41
|
+
#
|
42
|
+
config.protocol = :imap
|
43
|
+
# メールアカウント情報を設定します。
|
44
|
+
config.mail_server_setting = {
|
45
|
+
address: 'imap.gmail.com',
|
46
|
+
port: 993,
|
47
|
+
user_name: ENV['GMAIL_USER_NAME'],
|
48
|
+
password: ENV['GMAIL_PASSWORD'],
|
49
|
+
enable_ssl: true
|
50
|
+
}
|
51
|
+
config.options = {
|
52
|
+
# flag for whether to delete each receive mail after find Default: false
|
53
|
+
# delete_after_find: true
|
54
|
+
}
|
55
|
+
end
|
56
|
+
|
57
|
+
```
|
58
|
+
|
59
|
+
### start bot
|
60
|
+
|
61
|
+
You can start the bot with `bundle exec rounders start`.
|
62
|
+
|
63
|
+
### Modules
|
64
|
+
|
65
|
+
|
66
|
+
If you want to extend the processing of Rounders. inherit the base class of following modules.
|
67
|
+
it is hooked and can be incorporated into the Rounders.
|
32
68
|
|
33
69
|
#### Handlers
|
34
70
|
|
71
|
+
Handlers is a module that handles mails.
|
72
|
+
Create the Matcher instance with the condition passed as the first argument of `.on`,
|
73
|
+
If there is a matching email, If there is a matching email, It passe to the method that passed as the second argument
|
74
|
+
|
35
75
|
The `rounders generate handler` command create template of handler into ./plugins/handlers/
|
36
76
|
|
37
77
|
```
|
@@ -44,14 +84,15 @@ module Rounders
|
|
44
84
|
module Handlers
|
45
85
|
class MyHandler < Rounders::Handlers::Handler
|
46
86
|
# mail.body is include 'exmpale'
|
47
|
-
on({ body: 'example' }, :
|
87
|
+
on({ body: 'example' }, :method1)
|
48
88
|
# body include 'exmpale' AND subject match the /programing (?<name>.+)$/
|
49
89
|
on({
|
50
90
|
body: 'example',
|
51
91
|
subject: /programing (?<name>.+)$/},
|
52
|
-
:
|
92
|
+
:method2)
|
53
93
|
|
54
94
|
def method1(mail)
|
95
|
+
# The return value of BodyMatcher is assign to Handler#matches.
|
55
96
|
matches[:body]
|
56
97
|
# => #<MatchData "example">
|
57
98
|
# any process
|
@@ -71,13 +112,18 @@ end
|
|
71
112
|
|
72
113
|
#### Matchers
|
73
114
|
|
115
|
+
Matcher is a module that performs mail filtering.
|
116
|
+
The Matcher must implement 'match' method, and the value returned by this method which returns value assign to Handler#matches
|
117
|
+
|
118
|
+
|
74
119
|
The `rounders generate matchers` command create template of matchers into ./plugins/matchers/
|
75
120
|
|
76
121
|
```
|
77
122
|
rounders generate matchers [name]`
|
78
123
|
```
|
79
124
|
|
80
|
-
|
125
|
+
|
126
|
+
Below is an example of Matcher for filtering / extracting with CSSSelector for HTML mail.
|
81
127
|
|
82
128
|
#### exmaple
|
83
129
|
|
@@ -111,7 +157,7 @@ module Rounders
|
|
111
157
|
module Handlers
|
112
158
|
class YourHandler < Rounders::Handlers::Handler
|
113
159
|
# css selector match
|
114
|
-
on({ css_selector: 'body .header h2' }, method1)
|
160
|
+
on({ css_selector: 'body .header h2' }, :method1)
|
115
161
|
|
116
162
|
def method1(mail)
|
117
163
|
matches[:css_selector]
|
@@ -127,6 +173,8 @@ end
|
|
127
173
|
|
128
174
|
#### Gems
|
129
175
|
|
176
|
+
Rounder's module can be distributed as Gem.
|
177
|
+
|
130
178
|
- [rounders-css_selector_matcher](https://github.com/rike422/rounders-css_selector_matcher)
|
131
179
|
|
132
180
|
#### reciever
|
data/lib/rounders.rb
CHANGED
@@ -3,25 +3,30 @@ require 'rounders/version'
|
|
3
3
|
module Rounders
|
4
4
|
# Your code goes here...
|
5
5
|
CONFIG_DIR_PATH = File.join(Dir.pwd, 'config').freeze
|
6
|
-
|
6
|
+
APP_PATH = File.join(Dir.pwd, 'app').freeze
|
7
7
|
class << self
|
8
8
|
def handlers
|
9
|
-
@
|
9
|
+
@_handlers ||= []
|
10
10
|
end
|
11
11
|
|
12
12
|
def matchers
|
13
|
-
@
|
13
|
+
@_matchers ||= {}
|
14
|
+
end
|
15
|
+
|
16
|
+
def receivers
|
17
|
+
@_receivers ||= []
|
14
18
|
end
|
15
19
|
end
|
16
20
|
end
|
17
21
|
|
18
|
-
require 'active_support/core_ext/object'
|
19
|
-
require 'active_support/inflector'
|
20
22
|
require 'thor'
|
23
|
+
require 'thor/group'
|
24
|
+
require 'dry-configurable'
|
21
25
|
require 'forwardable'
|
22
26
|
require 'mail'
|
23
27
|
require 'dotenv'
|
24
28
|
|
29
|
+
require 'rounders/util'
|
25
30
|
require 'rounders/mail'
|
26
31
|
require 'rounders/plugins/plugin_loader'
|
27
32
|
require 'rounders/plugins/pluggable'
|
@@ -33,11 +38,14 @@ require 'rounders/matchers/from'
|
|
33
38
|
require 'rounders/matchers/to'
|
34
39
|
require 'rounders/handlers/handler'
|
35
40
|
require 'rounders/commander'
|
36
|
-
require 'rounders/receiver'
|
41
|
+
require 'rounders/receivers/receiver'
|
42
|
+
require 'rounders/receivers/mail'
|
37
43
|
require 'rounders/rounder'
|
38
44
|
require 'rounders/brains/base'
|
39
45
|
|
40
|
-
require 'rounders/generators/
|
41
|
-
require 'rounders/generators/app'
|
42
|
-
require 'rounders/generators/
|
43
|
-
require 'rounders/generators/
|
46
|
+
require 'rounders/generators/base'
|
47
|
+
require 'rounders/generators/app/app_generator'
|
48
|
+
require 'rounders/generators/plugin/plugin_generator'
|
49
|
+
require 'rounders/generators/handler/handler_generator'
|
50
|
+
require 'rounders/generators/matcher/matcher_generator'
|
51
|
+
require 'rounders/generators/receiver/receiver_generator'
|
@@ -4,11 +4,19 @@ module Rounders
|
|
4
4
|
class_option :help, type: :boolean, aliases: '-h', desc: 'Help message.'
|
5
5
|
package_name 'rounders'
|
6
6
|
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
7
|
+
register(
|
8
|
+
Rounders::Generators::AppGenerator,
|
9
|
+
'new',
|
10
|
+
'new <name> <path>',
|
11
|
+
'generate new application'
|
12
|
+
)
|
13
|
+
|
14
|
+
register(
|
15
|
+
Rounders::Generators::PluginGenerator,
|
16
|
+
'plugin',
|
17
|
+
'plugin <name>',
|
18
|
+
'Generate new rounders plugin'
|
19
|
+
)
|
12
20
|
end
|
13
21
|
end
|
14
22
|
end
|