lita-random 0.5.1 → 0.6.0

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: 7c1fb4692a0af160c82d3ac96a2bc9c70bc03af7
4
- data.tar.gz: 654bb8ab07e5a5a50e31ab089cb73fdd16348d44
3
+ metadata.gz: b6a25f9cefa5cb1ce12f145126748c76bfed3c13
4
+ data.tar.gz: 147c9a8eaac238fa7caad05c147c27fccefcb434
5
5
  SHA512:
6
- metadata.gz: 45627fffda0ab06ce74f363eca9b596c249e2d86812cb5cb5fab438a8556b2a936ca7edc2d555dcfc9806c76bfaa5a99d8d049e0626bba0dc7c532315d2f26ff
7
- data.tar.gz: ab1a7640111a1ef70db61c9d012ccc19d7198df4970a13d3cf462d00dbd4fd518da09a25054d2bb1d7eb39ee1082f66b20582b65736037494dc837bf402fee77
6
+ metadata.gz: 3794f616b4fc18a76576f1bcafdad6e931a0333de9d9cf24ee759ed500db7a1ab6f5da9ef146c6641bfeb28197937f3f0b8d3b33f6e0cd317cdbf6a0f2e77bcd
7
+ data.tar.gz: a0042ac3fdb4548a70e408d84c304c41fe5b9f0789b78844db1693be6c13ffb2d900aae7af7b3b5eb52abce4e5c0c35f4e40079f3e8398e5c76d6cda1197826b
@@ -2,11 +2,14 @@ AllCops:
2
2
  Exclude:
3
3
  - vendor/**/*
4
4
 
5
- Style/AccessModifierIndentation:
6
- EnforcedStyle: outdent
7
-
8
5
  Style/AndOr:
9
6
  Enabled: false
10
7
 
8
+ Style/LambdaCall:
9
+ Enabled: false
10
+
11
11
  Style/TrailingComma:
12
12
  Enabled: false
13
+
14
+ Style/AccessModifierIndentation:
15
+ EnforcedStyle: outdent
@@ -1,9 +1,16 @@
1
1
  language: ruby
2
2
 
3
3
  rvm:
4
- - 2.0.0
4
+ - 2.0
5
5
  - 2.1
6
6
  - 2.2
7
+ - jruby-9.0.0.0
8
+ - rbx-2
9
+
10
+ matrix:
11
+ allow_failures:
12
+ - rvm: jruby-9.0.0.0
13
+ - rvm: rbx-2
7
14
 
8
15
  script: bundle exec rake
9
16
 
@@ -1,93 +1,75 @@
1
1
  # Change Log
2
2
 
3
- ## [v0.5.1](https://github.com/braiden-vasco/lita-random/tree/v0.5.1) (2015-06-25)
3
+ ## [v0.6.0](https://github.com/braiden-vasco/lita-random/tree/v0.6.0) (2015-10-24)
4
+ [Full Changelog](https://github.com/braiden-vasco/lita-random/compare/v0.5.1...v0.6.0)
5
+
6
+ **Merged pull requests:**
7
+
8
+ - Support keyword arguments partially [\#46](https://github.com/braiden-vasco/lita-random/pull/46) ([braiden-vasco](https://github.com/braiden-vasco))
9
+ - Test like Lita [\#45](https://github.com/braiden-vasco/lita-random/pull/45) ([braiden-vasco](https://github.com/braiden-vasco))
10
+ - Test with Rubinius [\#44](https://github.com/braiden-vasco/lita-random/pull/44) ([braiden-vasco](https://github.com/braiden-vasco))
11
+ - Don't use version label and version PRs [\#43](https://github.com/braiden-vasco/lita-random/pull/43) ([braiden-vasco](https://github.com/braiden-vasco))
4
12
 
13
+ ## [v0.5.1](https://github.com/braiden-vasco/lita-random/tree/v0.5.1) (2015-06-25)
5
14
  [Full Changelog](https://github.com/braiden-vasco/lita-random/compare/v0.5.0...v0.5.1)
6
15
 
7
16
  **Merged pull requests:**
8
17
 
9
18
  - Test with multiple versions of Ruby [\#39](https://github.com/braiden-vasco/lita-random/pull/39) ([braiden-vasco](https://github.com/braiden-vasco))
10
-
11
19
  - Remove open-ended dependencies [\#38](https://github.com/braiden-vasco/lita-random/pull/38) ([braiden-vasco](https://github.com/braiden-vasco))
12
-
13
20
  - Remove unnecessary dependencies [\#37](https://github.com/braiden-vasco/lita-random/pull/37) ([braiden-vasco](https://github.com/braiden-vasco))
14
21
 
15
22
  ## [v0.5.0](https://github.com/braiden-vasco/lita-random/tree/v0.5.0) (2015-06-24)
16
-
17
23
  [Full Changelog](https://github.com/braiden-vasco/lita-random/compare/v0.4.0...v0.5.0)
18
24
 
19
25
  **Merged pull requests:**
20
26
 
21
27
  - Add command "random case" [\#34](https://github.com/braiden-vasco/lita-random/pull/34) ([braiden-vasco](https://github.com/braiden-vasco))
22
-
23
28
  - Add command "sample" [\#33](https://github.com/braiden-vasco/lita-random/pull/33) ([braiden-vasco](https://github.com/braiden-vasco))
24
-
25
29
  - Add command "shuffle" [\#31](https://github.com/braiden-vasco/lita-random/pull/31) ([braiden-vasco](https://github.com/braiden-vasco))
26
-
27
30
  - Move development dependencies to gemspec [\#30](https://github.com/braiden-vasco/lita-random/pull/30) ([braiden-vasco](https://github.com/braiden-vasco))
28
31
 
29
32
  ## [v0.4.0](https://github.com/braiden-vasco/lita-random/tree/v0.4.0) (2015-06-23)
30
-
31
33
  [Full Changelog](https://github.com/braiden-vasco/lita-random/compare/v0.3.0...v0.4.0)
32
34
 
33
35
  **Merged pull requests:**
34
36
 
35
37
  - Add password generator [\#28](https://github.com/braiden-vasco/lita-random/pull/28) ([braiden-vasco](https://github.com/braiden-vasco))
36
-
37
38
  - Add smart password generator [\#27](https://github.com/braiden-vasco/lita-random/pull/27) ([braiden-vasco](https://github.com/braiden-vasco))
38
-
39
39
  - Add help for commands [\#26](https://github.com/braiden-vasco/lita-random/pull/26) ([braiden-vasco](https://github.com/braiden-vasco))
40
40
 
41
41
  ## [v0.3.0](https://github.com/braiden-vasco/lita-random/tree/v0.3.0) (2015-06-21)
42
-
43
42
  [Full Changelog](https://github.com/braiden-vasco/lita-random/compare/v0.2.0...v0.3.0)
44
43
 
45
44
  **Merged pull requests:**
46
45
 
47
46
  - Add UUID generator [\#23](https://github.com/braiden-vasco/lita-random/pull/23) ([braiden-vasco](https://github.com/braiden-vasco))
48
-
49
47
  - Optional spaces between commands, add more aliases [\#22](https://github.com/braiden-vasco/lita-random/pull/22) ([braiden-vasco](https://github.com/braiden-vasco))
50
-
51
48
  - Add hexadecimal string generator [\#21](https://github.com/braiden-vasco/lita-random/pull/21) ([braiden-vasco](https://github.com/braiden-vasco))
52
-
53
49
  - Add base64 generator [\#20](https://github.com/braiden-vasco/lita-random/pull/20) ([braiden-vasco](https://github.com/braiden-vasco))
54
-
55
50
  - Refactor regular expressions [\#19](https://github.com/braiden-vasco/lita-random/pull/19) ([braiden-vasco](https://github.com/braiden-vasco))
56
51
 
57
52
  ## [v0.2.0](https://github.com/braiden-vasco/lita-random/tree/v0.2.0) (2015-06-21)
58
-
59
53
  [Full Changelog](https://github.com/braiden-vasco/lita-random/compare/v0.1.0...v0.2.0)
60
54
 
61
55
  **Merged pull requests:**
62
56
 
63
57
  - Allow float ranges [\#17](https://github.com/braiden-vasco/lita-random/pull/17) ([braiden-vasco](https://github.com/braiden-vasco))
64
-
65
58
  - Basic testing [\#15](https://github.com/braiden-vasco/lita-random/pull/15) ([braiden-vasco](https://github.com/braiden-vasco))
66
59
 
67
60
  ## [v0.1.0](https://github.com/braiden-vasco/lita-random/tree/v0.1.0) (2015-06-20)
68
-
69
61
  **Merged pull requests:**
70
62
 
71
63
  - Add instructions [\#11](https://github.com/braiden-vasco/lita-random/pull/11) ([braiden-vasco](https://github.com/braiden-vasco))
72
-
73
64
  - Basic implementation [\#10](https://github.com/braiden-vasco/lita-random/pull/10) ([braiden-vasco](https://github.com/braiden-vasco))
74
-
75
65
  - Initialize Lita handler [\#9](https://github.com/braiden-vasco/lita-random/pull/9) ([braiden-vasco](https://github.com/braiden-vasco))
76
-
77
66
  - Add changelog generator [\#8](https://github.com/braiden-vasco/lita-random/pull/8) ([braiden-vasco](https://github.com/braiden-vasco))
78
-
79
67
  - Use YARD [\#7](https://github.com/braiden-vasco/lita-random/pull/7) ([braiden-vasco](https://github.com/braiden-vasco))
80
-
81
68
  - Configure Coveralls [\#6](https://github.com/braiden-vasco/lita-random/pull/6) ([braiden-vasco](https://github.com/braiden-vasco))
82
-
83
69
  - Configure Travis CI [\#5](https://github.com/braiden-vasco/lita-random/pull/5) ([braiden-vasco](https://github.com/braiden-vasco))
84
-
85
70
  - Add README [\#4](https://github.com/braiden-vasco/lita-random/pull/4) ([braiden-vasco](https://github.com/braiden-vasco))
86
-
87
71
  - Configure testing [\#3](https://github.com/braiden-vasco/lita-random/pull/3) ([braiden-vasco](https://github.com/braiden-vasco))
88
-
89
72
  - Configure linting [\#2](https://github.com/braiden-vasco/lita-random/pull/2) ([braiden-vasco](https://github.com/braiden-vasco))
90
-
91
73
  - Initialize gem [\#1](https://github.com/braiden-vasco/lita-random/pull/1) ([braiden-vasco](https://github.com/braiden-vasco))
92
74
 
93
75
 
data/Gemfile CHANGED
@@ -3,4 +3,4 @@ source 'https://rubygems.org'
3
3
  # Specify your gem's dependencies in lita-random.gemspec
4
4
  gemspec
5
5
 
6
- gem 'coveralls'
6
+ gem 'coveralls', require: false
data/README.md CHANGED
@@ -5,26 +5,44 @@ Lita::Handlers::Random
5
5
  [![Build Status](https://travis-ci.org/braiden-vasco/lita-random.svg)](https://travis-ci.org/braiden-vasco/lita-random)
6
6
  [![Coverage Status](https://coveralls.io/repos/braiden-vasco/lita-random/badge.svg)](https://coveralls.io/r/braiden-vasco/lita-random)
7
7
 
8
- Generator of random numbers and strings for the Lita chat bot.
8
+ Generator of random numbers and strings for the [Lita](http://lita.io) chat bot.
9
9
 
10
10
  Usage
11
11
  -----
12
12
 
13
- At first, see the documentation for Lita: https://docs.lita.io/
13
+ At first, see the documentation for Lita: http://docs.lita.io/
14
14
 
15
15
  ### Installation
16
16
 
17
17
  Add **lita-random** to your Lita instance's Gemfile:
18
18
 
19
19
  ```ruby
20
- gem 'lita-random', '~> 0.5.1'
20
+ gem 'lita-random', '~> 0.6.0'
21
21
  ```
22
22
 
23
23
  ### Commands
24
24
 
25
- The space between instructions can be skiiped, so you can write
25
+ The space between instructions can be skipped, so you can write
26
26
  `random hex` as `randomhex`, `rand b64` as `randb64`
27
27
 
28
+ Arguments for all commands (excluding `random case`, `shuffle` and `sample`)
29
+ can be passed as keyword arguments too. Put them after
30
+ positional arguments with two dashes before, or the first letter
31
+ of argument name with one dash. Examples:
32
+
33
+ ```
34
+ You: lita random 5 10
35
+ Lita: 7
36
+ You: lita random 5 --to 5
37
+ Lita: 9
38
+ You: lita random 5 -t 10
39
+ Lita: 5
40
+ You: lita random --to 10 --from 5
41
+ Lita: 6
42
+ You: lita random -f 5 -t 10
43
+ Lita: 9
44
+ ```
45
+
28
46
  Command `random` has alias `rand`
29
47
 
30
48
  * `random` -
@@ -36,19 +54,19 @@ Command `random` has alias `rand`
36
54
  * `random <from> <to>` -
37
55
  random integer or float number, greater or equal to `from` and lesser than `to`
38
56
 
39
- * `random case <s>` -
40
- randomize case of each character of string `s`
57
+ * `random case <string>` -
58
+ randomize case of each character of string `string`
41
59
 
42
60
  Command `base64` has alias `b64`
43
61
 
44
- * `random base64 <n=16>` -
45
- random base64 string, length of source string is `n`,
46
- length of result is about `n * 4 / 3` (24 with default value of `n`)
62
+ * `random base64 <size=16>` -
63
+ random base64 string, length of source string is `size`,
64
+ length of result is about `size * 4 / 3` (24 with default value of `size`)
47
65
 
48
66
  Command `hex` has aliases `hx` and `x`
49
67
 
50
- * `random hex <n=16>` -
51
- random hexadecimal string with length `n * 2`
68
+ * `random hex <size=16>` -
69
+ random hexadecimal string with length `size * 2`
52
70
 
53
71
  Command `uuid` has alias `uid`
54
72
 
@@ -59,18 +77,18 @@ Command `uuid` has alias `uid`
59
77
 
60
78
  Command `password` has alias `pass`
61
79
 
62
- * `random password <n=16>` -
63
- random password with length `n` containing characters
80
+ * `random password <length=16>` -
81
+ random password with length `length` containing characters
64
82
  in upper and lower case, and digits
65
83
 
66
- * `random smart password <n=8>` -
67
- random pronounceable password with a minimum length of `n`
84
+ * `random smart password <length=8>` -
85
+ random pronounceable password with a minimum length of `length`
68
86
 
69
87
  * `shuffle <array, ...>` -
70
88
  new array with elements of `array` shuffled
71
89
 
72
- * `sample <n=1> <array, ...>` -
73
- choose `n` random elements from `array`
90
+ * `sample <count=1> <array, ...>` -
91
+ choose `count` random elements from `array`
74
92
 
75
93
  ### Examples
76
94
 
@@ -82,12 +100,12 @@ Lita: 0.8332672468501509
82
100
 
83
101
  You: lita random 5
84
102
  Lita: 2
85
- You: lita rand 100
103
+ You: lita rand --to 100
86
104
  Lita: 24
87
105
 
88
- You: lita random 1.5
106
+ You: lita random -f 1.5
89
107
  Lita: 1.1828046952104034
90
- You: lita random 5 10
108
+ You: lita random 10 --from 5
91
109
  Lita: 8
92
110
  You: lita rand 1000 2000
93
111
  Lita: 1240
@@ -104,7 +122,7 @@ Lita: NMkIhB+iG2VNpg==
104
122
 
105
123
  You: lita random hex
106
124
  Lita: 7d6f39cf53303db862bac5e1b36eb0fa
107
- You: lita randx 10
125
+ You: lita randx -s 10
108
126
  Lita: 0d8297837d6e63b8c25b
109
127
 
110
128
  You: lita random uuid
@@ -112,7 +130,7 @@ Lita: f1281565-3c8a-475d-a1aa-565ff840a42c
112
130
 
113
131
  You: lita random password
114
132
  Lita: TXXBu7XEBdwFF7fP
115
- You: lita randpass 8
133
+ You: lita randpass --length 8
116
134
  Lita: 7lFateFs
117
135
 
118
136
  You: lita random smart password
data/Rakefile CHANGED
@@ -5,8 +5,6 @@ gemspec = Gem::Specification.load('lita-random.gemspec')
5
5
  github_user, github_project =
6
6
  gemspec.homepage.scan(%r{^https://github\.com/([^/]+)/([^/]+)/?$})[0]
7
7
 
8
- DEFAULT_EXCLUDE_LABELS = 'duplicate,question,invalid,wontfix'
9
-
10
8
  require 'bundler/gem_tasks'
11
9
 
12
10
  task default: [:spec, :lint]
@@ -25,7 +23,6 @@ task :changelog, [:token] do |_t, args|
25
23
  cmd << " -u #{github_user}"
26
24
  cmd << " -p #{github_project}"
27
25
  cmd << " -t #{args[:token]}" if args[:token]
28
- cmd << " --exclude-labels version,#{DEFAULT_EXCLUDE_LABELS}"
29
26
 
30
27
  sh cmd
31
28
  end
@@ -1,3 +1,5 @@
1
+ require 'lita-keyword-arguments'
2
+
1
3
  ##
2
4
  # Lita module.
3
5
  #
@@ -22,16 +24,16 @@ module Lita
22
24
  'random integer or float number, ' \
23
25
  'greater or equal to `from` and lesser than `to`',
24
26
 
25
- 'random case <s>' =>
26
- 'randomize case of each character of string `s`',
27
+ 'random case <string>' =>
28
+ 'randomize case of each character of string `string`',
27
29
 
28
- 'random base64 <n=16>' =>
29
- 'random base64 string, length of source string is n, ' \
30
- 'length of result is about `n * 4 / 3` ' \
31
- '(24 with default value of `n`)',
30
+ 'random base64 <size=16>' =>
31
+ 'random base64 string, length of source string is `size`, ' \
32
+ 'length of result is about `size * 4 / 3` ' \
33
+ '(24 with default value of `size`)',
32
34
 
33
- 'random hex <n=16>' =>
34
- 'random hexadecimal string with length `n * 2`',
35
+ 'random hex <size=16>' =>
36
+ 'random hexadecimal string with length `size * 2`',
35
37
 
36
38
  'random uuid' =>
37
39
  'v4 random UUID (Universally Unique IDentifier). ' \
@@ -39,54 +41,45 @@ module Lita
39
41
  'It doesn’t contain meaningful information ' \
40
42
  'such as MAC address, time, etc.',
41
43
 
42
- 'random password <n=16>' =>
43
- 'random password with length `n` containing characters ' \
44
+ 'random password <length=16>' =>
45
+ 'random password with length `length` containing characters ' \
44
46
  'in upper and lower case, and digits',
45
47
 
46
- 'random smart password <n=8>' =>
47
- 'random pronounceable password with a minimum length of `n`',
48
+ 'random smart password <length=8>' =>
49
+ 'random pronounceable password with a minimum length of `length`',
48
50
 
49
51
  'shuffle <array, ...>' =>
50
52
  'new array with elements of `array` shuffled',
51
53
 
52
- 'sample <n=1> <array, ...>' =>
53
- 'choose `n` random elements from `array`',
54
+ 'sample <count=1> <array, ...>' =>
55
+ 'choose `count` random elements from `array`',
54
56
  }
55
57
 
56
- route(/^rand(om)?$/i, :route_random, command: true, help: HELP)
57
- def route_random(response)
58
- response.reply(::Random.rand.to_s)
59
- end
58
+ route(
59
+ /^rand(om)?((\s+(?<from>\d+(\.\d+)?))?\s+(?<to>\d+(\.\d+)?))?($|\s*-)/i,
60
+ :route_random,
61
+ command: true, help: HELP,
62
+ kwargs: {
63
+ from: { short: 'f' },
64
+ to: { short: 't' },
65
+ }
66
+ )
60
67
 
61
- route(/^rand(om)?\s+(\d+)?$/i, :route_random_to, command: true)
62
- def route_random_to(response)
63
- to = response.matches[0][1].to_i
64
- response.reply(::Random.rand(to).to_s)
65
- end
68
+ def route_random(response)
69
+ from = extract_argument(response, 0, :from, &method(:str_to_num)) || 0
70
+ to = extract_argument(response, 1, :to, &method(:str_to_num)) || 1.0
66
71
 
67
- route(/^rand(om)?\s+(\d+\.\d+)?$/i, :route_random_float_to, command: true)
68
- def route_random_float_to(response)
69
- to = response.matches[0][1].to_f
70
- response.reply(::Random.rand(to).to_s)
71
- end
72
+ rescue RuntimeError # rubocop:disable Lint/HandleExceptions
73
+ else
74
+ result = if from.is_a?(Float) || to.is_a?(Float)
75
+ # In Rubinius,
76
+ # ::Random.rand can not exclude non Integer end value
77
+ ::Random.rand(from..(to - Float::EPSILON))
78
+ else
79
+ ::Random.rand(from...to)
80
+ end
72
81
 
73
- route(/^rand(om)?\s+(\d+)\s+(\d+)?$/i,
74
- :route_random_from_to, command: true)
75
- def route_random_from_to(response)
76
- from = response.matches[0][1].to_i
77
- to = response.matches[0][2].to_i
78
- response.reply(::Random.rand(from...to).to_s)
79
- end
80
-
81
- route(/^rand(om)?\s+(?<from>\d+\.\d+)\s+(?<to>\d+)?$/i,
82
- :route_random_float_from_to, command: true)
83
- route(/^rand(om)?\s+(?<from>\d+(\.\d+)?)\s+(?<to>\d+\.\d+)?$/i,
84
- :route_random_float_from_to, command: true)
85
- def route_random_float_from_to(response)
86
- matches = response.matches[0]
87
- from = matches[0].to_f
88
- to = matches[1].to_f
89
- response.reply(::Random.rand(from...to).to_s)
82
+ response.reply(result.to_s)
90
83
  end
91
84
 
92
85
  route(/^rand(om)?\s*case(\s+(?<s>.*))?$/i,
@@ -95,28 +88,38 @@ module Lita
95
88
  response.reply(random_case(response.matches[0][0] || ''))
96
89
  end
97
90
 
98
- route(/^rand(om)?\s*b(ase)?64$/i, :route_random_base64, command: true)
91
+ route(
92
+ /^rand(om)?\s*b(ase)?64(\s+(?<n>\d+))?($|\s)/i,
93
+ :route_random_base64,
94
+ command: true,
95
+ kwargs: {
96
+ size: { short: 's' },
97
+ }
98
+ )
99
+
99
100
  def route_random_base64(response)
100
- response.reply(SecureRandom.base64)
101
- end
101
+ size = extract_argument(response, 0, :size, &:to_i) || 16
102
102
 
103
- route(/^rand(om)?\s*b(ase)?64\s+(?<n>\d+)$/i,
104
- :route_random_base64_n, command: true)
105
- def route_random_base64_n(response)
106
- n = response.matches[0][0].to_i
107
- response.reply(SecureRandom.base64(n))
103
+ rescue RuntimeError # rubocop:disable Lint/HandleExceptions
104
+ else
105
+ response.reply(SecureRandom.base64(size))
108
106
  end
109
107
 
110
- route(/^rand(om)?\s*(he?)?x$/i, :route_random_hex, command: true)
108
+ route(
109
+ /^rand(om)?\s*(he?)?x(\s+(?<n>\d+))?($|\s)/i,
110
+ :route_random_hex,
111
+ command: true,
112
+ kwargs: {
113
+ size: { short: 's' },
114
+ }
115
+ )
116
+
111
117
  def route_random_hex(response)
112
- response.reply(SecureRandom.hex)
113
- end
118
+ size = extract_argument(response, 0, :size, &:to_i) || 16
114
119
 
115
- route(/^rand(om)?\s*(he?)?x\s+(?<n>\d+)$/i,
116
- :route_random_hex_n, command: true)
117
- def route_random_hex_n(response)
118
- n = response.matches[0][0].to_i
119
- response.reply(SecureRandom.hex(n))
120
+ rescue RuntimeError # rubocop:disable Lint/HandleExceptions
121
+ else
122
+ response.reply(SecureRandom.hex(size))
120
123
  end
121
124
 
122
125
  route(/^rand(om)?\s*u?uid$/i, :route_random_uuid, command: true)
@@ -124,28 +127,37 @@ module Lita
124
127
  response.reply(SecureRandom.uuid)
125
128
  end
126
129
 
127
- route(/^rand(om)?\s*smart\s*pass(word)?$/i,
128
- :route_random_smart_pass, command: true)
130
+ route(
131
+ /^rand(om)?\s*smart\s*pass(word)?(\s+(?<n>\d+))?($|\s)/i,
132
+ :route_random_smart_pass,
133
+ command: true,
134
+ kwargs: {
135
+ length: { short: 'l' },
136
+ }
137
+ )
138
+
129
139
  def route_random_smart_pass(response)
130
- response.reply(smart_password)
131
- end
140
+ length = extract_argument(response, 0, :length, &:to_i) || 8
132
141
 
133
- route(/^rand(om)?\s*smart\s*pass(word)?\s+(?<n>\d+)$/i,
134
- :route_random_smart_pass_n, command: true)
135
- def route_random_smart_pass_n(response)
136
- min_length = response.matches[0][0].to_i
137
- response.reply(smart_password(min_length))
142
+ rescue RuntimeError # rubocop:disable Lint/HandleExceptions
143
+ else
144
+ response.reply(smart_password(length))
138
145
  end
139
146
 
140
- route(/^rand(om)?\s*pass(word)?$/i, :route_random_pass, command: true)
147
+ route(
148
+ /^rand(om)?\s*pass(word)?(\s+(?<n>\d+))?($|\s)/i,
149
+ :route_random_pass,
150
+ command: true,
151
+ kwargs: {
152
+ length: { short: 'l' },
153
+ }
154
+ )
155
+
141
156
  def route_random_pass(response)
142
- response.reply(password)
143
- end
157
+ length = extract_argument(response, 0, :length, &:to_i) || 16
144
158
 
145
- route(/^rand(om)?\s*pass(word)?\s+(?<n>\d+)$/i,
146
- :route_random_pass_n, command: true)
147
- def route_random_pass_n(response)
148
- length = response.matches[0][0].to_i
159
+ rescue RuntimeError # rubocop:disable Lint/HandleExceptions
160
+ else
149
161
  response.reply(password(length))
150
162
  end
151
163
 
@@ -183,7 +195,7 @@ module Lita
183
195
  true => %w(a e i o u y),
184
196
  }
185
197
 
186
- def smart_password(min_length = 8)
198
+ def smart_password(min_length)
187
199
  password = ''
188
200
  sequence_id = false
189
201
  while password.length < min_length
@@ -196,9 +208,27 @@ module Lita
196
208
 
197
209
  PASS_CHARS = [*'a'..'z', *'A'..'Z', *'0'..'9']
198
210
 
199
- def password(length = 16)
211
+ def password(length)
200
212
  (0...length).map { |_| PASS_CHARS.sample }.join
201
213
  end
214
+
215
+ def extract_argument(response, index, name)
216
+ matches = response.matches[0]
217
+ kwargs = response.extensions[:kwargs]
218
+
219
+ positional = matches[index]
220
+ kw = kwargs[name]
221
+
222
+ fail if positional && kw
223
+
224
+ s = positional || kw
225
+
226
+ block_given? && s ? yield(s) : s
227
+ end
228
+
229
+ def str_to_num(s)
230
+ s =~ /\./ ? s.to_f : s.to_i
231
+ end
202
232
  end
203
233
 
204
234
  Lita.register_handler(Random)
@@ -2,7 +2,7 @@
2
2
 
3
3
  Gem::Specification.new do |spec|
4
4
  spec.name = 'lita-random'
5
- spec.version = '0.5.1'
5
+ spec.version = '0.6.0'
6
6
  spec.authors = ['Braiden Vasco']
7
7
  spec.email = ['braiden-vasco@mailtor.net']
8
8
 
@@ -32,4 +32,5 @@ Gem::Specification.new do |spec|
32
32
  spec.add_development_dependency 'simplecov', '~> 0.10'
33
33
 
34
34
  spec.add_runtime_dependency 'lita', '~> 4.4'
35
+ spec.add_runtime_dependency 'lita-keyword-arguments', '~> 1.0'
35
36
  end
metadata CHANGED
@@ -1,113 +1,127 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lita-random
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.1
4
+ version: 0.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Braiden Vasco
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2015-06-25 00:00:00.000000000 Z
11
+ date: 2015-10-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ~>
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
19
  version: '1.7'
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ~>
24
+ - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: '1.7'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rake
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ~>
31
+ - - "~>"
32
32
  - !ruby/object:Gem::Version
33
33
  version: '10.0'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - ~>
38
+ - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: '10.0'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: github_changelog_generator
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - ~>
45
+ - - "~>"
46
46
  - !ruby/object:Gem::Version
47
47
  version: '1.6'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - ~>
52
+ - - "~>"
53
53
  - !ruby/object:Gem::Version
54
54
  version: '1.6'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: rubocop
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - ~>
59
+ - - "~>"
60
60
  - !ruby/object:Gem::Version
61
61
  version: '0.31'
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - ~>
66
+ - - "~>"
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0.31'
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: rspec
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
- - - ~>
73
+ - - "~>"
74
74
  - !ruby/object:Gem::Version
75
75
  version: '3.3'
76
76
  type: :development
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
- - - ~>
80
+ - - "~>"
81
81
  - !ruby/object:Gem::Version
82
82
  version: '3.3'
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: simplecov
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
- - - ~>
87
+ - - "~>"
88
88
  - !ruby/object:Gem::Version
89
89
  version: '0.10'
90
90
  type: :development
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
- - - ~>
94
+ - - "~>"
95
95
  - !ruby/object:Gem::Version
96
96
  version: '0.10'
97
97
  - !ruby/object:Gem::Dependency
98
98
  name: lita
99
99
  requirement: !ruby/object:Gem::Requirement
100
100
  requirements:
101
- - - ~>
101
+ - - "~>"
102
102
  - !ruby/object:Gem::Version
103
103
  version: '4.4'
104
104
  type: :runtime
105
105
  prerelease: false
106
106
  version_requirements: !ruby/object:Gem::Requirement
107
107
  requirements:
108
- - - ~>
108
+ - - "~>"
109
109
  - !ruby/object:Gem::Version
110
110
  version: '4.4'
111
+ - !ruby/object:Gem::Dependency
112
+ name: lita-keyword-arguments
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - "~>"
116
+ - !ruby/object:Gem::Version
117
+ version: '1.0'
118
+ type: :runtime
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - "~>"
123
+ - !ruby/object:Gem::Version
124
+ version: '1.0'
111
125
  description: Generator of random numbers and strings for the Lita chat bot.
112
126
  email:
113
127
  - braiden-vasco@mailtor.net
@@ -115,11 +129,11 @@ executables: []
115
129
  extensions: []
116
130
  extra_rdoc_files: []
117
131
  files:
118
- - .gitignore
119
- - .rspec
120
- - .rubocop.yml
121
- - .simplecov
122
- - .travis.yml
132
+ - ".gitignore"
133
+ - ".rspec"
134
+ - ".rubocop.yml"
135
+ - ".simplecov"
136
+ - ".travis.yml"
123
137
  - CHANGELOG.md
124
138
  - Gemfile
125
139
  - LICENSE
@@ -143,12 +157,12 @@ require_paths:
143
157
  - lib
144
158
  required_ruby_version: !ruby/object:Gem::Requirement
145
159
  requirements:
146
- - - '>='
160
+ - - ">="
147
161
  - !ruby/object:Gem::Version
148
162
  version: '0'
149
163
  required_rubygems_version: !ruby/object:Gem::Requirement
150
164
  requirements:
151
- - - '>='
165
+ - - ">="
152
166
  - !ruby/object:Gem::Version
153
167
  version: '0'
154
168
  requirements: []