ping 0.0.8 → 0.1.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 +5 -5
- data/.circleci/config.yml +76 -0
- data/.circleci/setup-rubygems.sh +3 -0
- data/.gitignore +1 -1
- data/.rubocop.yml +7 -0
- data/Gemfile +2 -0
- data/LICENSE.txt +1 -1
- data/README.md +45 -3
- data/lib/ping/config.rb +33 -0
- data/lib/ping/issue_reference.rb +77 -72
- data/lib/ping/mention.rb +4 -4
- data/lib/ping/parser.rb +1 -0
- data/lib/ping/version.rb +1 -1
- data/ping.gemspec +13 -13
- data/test/ping/config_test.rb +41 -0
- data/test/ping/issue_reference_test.rb +86 -32
- data/test/test_helper.rb +1 -1
- metadata +28 -24
- data/circle.yml +0 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 4b72814d428ea3a2db8f4c7aafd0df25d4be72402bb4f1345da8f24635d07a17
|
4
|
+
data.tar.gz: 200b1aed0640d89e91730c7d29b7356e42ab19074c06f9d8c3b855814a4915c9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b5a1a8053177c0ee4395ddd325c7acad96a7500f3190069dc50c54a95d00ee8fe339a94b2482ecf2d1cf523f5517156d7059454e81bb8a066d0add270c0e074b
|
7
|
+
data.tar.gz: d6d88258ce8b7e886eafad4888db0cf1906585fbf56375f87495127f3a13a0bd8dce9b21a5255f82e248ed65256481900241c0a46024d0d34eb04a4365314458
|
@@ -0,0 +1,76 @@
|
|
1
|
+
version: 2.1
|
2
|
+
|
3
|
+
environment: &environment
|
4
|
+
LOG_LEVEL: WARN
|
5
|
+
|
6
|
+
jobs:
|
7
|
+
functional_tests:
|
8
|
+
working_directory: ~/repos/ping
|
9
|
+
|
10
|
+
docker:
|
11
|
+
- image: circleci/ruby:2.6.4-buster-node
|
12
|
+
environment:
|
13
|
+
<<: *environment
|
14
|
+
|
15
|
+
steps:
|
16
|
+
- checkout
|
17
|
+
|
18
|
+
- run:
|
19
|
+
name: check dependencies
|
20
|
+
command: |
|
21
|
+
bundle -v
|
22
|
+
bundle exec ruby -v
|
23
|
+
|
24
|
+
- restore_cache:
|
25
|
+
keys:
|
26
|
+
- ping-bundle-v2-{{ checksum "ping.gemspec" }}
|
27
|
+
- ping-bundle-v2-
|
28
|
+
|
29
|
+
- run:
|
30
|
+
name: install gems
|
31
|
+
command: bundle install && bundle clean
|
32
|
+
|
33
|
+
- save_cache:
|
34
|
+
key: ping-bundle-v2-{{ checksum "ping.gemspec" }}
|
35
|
+
paths:
|
36
|
+
- vendor/bundle
|
37
|
+
|
38
|
+
- run:
|
39
|
+
name: run functional tests
|
40
|
+
command: bundle exec rake test
|
41
|
+
|
42
|
+
- store_test_results:
|
43
|
+
path: test_results
|
44
|
+
|
45
|
+
publish_to_rubygems:
|
46
|
+
working_directory: ~/repos/ping
|
47
|
+
|
48
|
+
docker:
|
49
|
+
- image: circleci/ruby:2.6.4-buster-node
|
50
|
+
environment:
|
51
|
+
<<: *environment
|
52
|
+
|
53
|
+
steps:
|
54
|
+
- checkout
|
55
|
+
|
56
|
+
- run:
|
57
|
+
name: setup Rubygems
|
58
|
+
command: bash .circleci/setup-rubygems.sh
|
59
|
+
|
60
|
+
- run:
|
61
|
+
name: publish to Rubygems
|
62
|
+
command: |
|
63
|
+
gem build ping.gemspec
|
64
|
+
gem push "ping-$(git describe --abbrev=0 --tags | cut -c 2-).gem"
|
65
|
+
|
66
|
+
workflows:
|
67
|
+
version: 2
|
68
|
+
build_and_test:
|
69
|
+
jobs:
|
70
|
+
- functional_tests
|
71
|
+
- publish_to_rubygems:
|
72
|
+
filters:
|
73
|
+
tags:
|
74
|
+
only: /.*/
|
75
|
+
branches:
|
76
|
+
ignore: /.*/
|
data/.gitignore
CHANGED
data/.rubocop.yml
CHANGED
data/Gemfile
CHANGED
data/LICENSE.txt
CHANGED
data/README.md
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# Ping
|
1
|
+
# Ping [](https://circleci.com/gh/codetree/ping)
|
2
2
|
|
3
3
|
A little library for extracting GitHub @mentions and issue references.
|
4
4
|
|
@@ -16,9 +16,47 @@ Or install it yourself as:
|
|
16
16
|
|
17
17
|
$ gem install ping
|
18
18
|
|
19
|
-
## Usage
|
19
|
+
## Basic Usage
|
20
20
|
|
21
|
-
|
21
|
+
Simply load a new parser object and extract issue references and mentions. Here are examples.
|
22
|
+
|
23
|
+
#### issue references
|
24
|
+
|
25
|
+
``` ruby
|
26
|
+
parser = Ping::Parser.new('closed codetree/ping#25')
|
27
|
+
parser.issue_references # => [#<Ping::IssueReference:0x000056099c3cf400 @number="25", @qualifier="closed", @repository='codetree/ping'>]
|
28
|
+
```
|
29
|
+
|
30
|
+
#### mentions
|
31
|
+
|
32
|
+
``` ruby
|
33
|
+
parser = Ping::Mention.new('Hey @djreimer, please look into the bug.')
|
34
|
+
parser.mentions # => [#<Ping::Mention:0x000055ad151f43d0 @username="djreimer">]
|
35
|
+
```
|
36
|
+
|
37
|
+
## Configuration
|
38
|
+
|
39
|
+
gem provided some default qualifiers to extract issue references
|
40
|
+
|
41
|
+
``` ruby
|
42
|
+
DEFAULT_QUALIFIERS = [
|
43
|
+
'close', 'closes', 'closed', 'fix', 'fixes', 'fixed', 'need', 'needs', 'needed',
|
44
|
+
'require', 'requires', 'required', 'resolve', 'resolves', 'resolved'
|
45
|
+
]
|
46
|
+
```
|
47
|
+
|
48
|
+
but you can also define your own qualifiers along with default qualifiers
|
49
|
+
|
50
|
+
``` ruby
|
51
|
+
## config/initializers/ping.rb
|
52
|
+
|
53
|
+
require 'ping'
|
54
|
+
|
55
|
+
Ping.configure do |config|
|
56
|
+
config.qualifiers = Ping::DEFAULT_QUALIFIERS.push(*['epic' 'needed-by'])
|
57
|
+
end
|
58
|
+
```
|
59
|
+
** Note: qualifiers must be an array of qualifier words
|
22
60
|
|
23
61
|
## Contributing
|
24
62
|
|
@@ -27,3 +65,7 @@ TODO: Write usage instructions here
|
|
27
65
|
3. Commit your changes (`git commit -am 'Add some feature'`)
|
28
66
|
4. Push to the branch (`git push origin my-new-feature`)
|
29
67
|
5. Create a new Pull Request
|
68
|
+
|
69
|
+
## Updating RubyGems
|
70
|
+
1. Create an annotated tag `git tag -a v0.1.0 -m "msg with the tag`
|
71
|
+
2. Push tag to Github `github push --tags`
|
data/lib/ping/config.rb
ADDED
@@ -0,0 +1,33 @@
|
|
1
|
+
module Ping
|
2
|
+
class << self
|
3
|
+
attr_accessor :config
|
4
|
+
|
5
|
+
def configure
|
6
|
+
yield config
|
7
|
+
end
|
8
|
+
|
9
|
+
def config
|
10
|
+
@config ||= Config.new
|
11
|
+
end
|
12
|
+
|
13
|
+
# Here we are implementing a reset method because
|
14
|
+
# for global values like this, it’s best to clean up before/after
|
15
|
+
# each spec to ensure the system is back to a default state.
|
16
|
+
def reset
|
17
|
+
@config = Config.new
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
class Config
|
22
|
+
attr_accessor :qualifiers
|
23
|
+
|
24
|
+
DEFAULT_QUALIFIERS = [
|
25
|
+
'close', 'closes', 'closed', 'fix', 'fixes', 'fixed', 'need', 'needs', 'needed',
|
26
|
+
'require', 'requires', 'required', 'resolve', 'resolves', 'resolved'
|
27
|
+
]
|
28
|
+
|
29
|
+
def initialize
|
30
|
+
@qualifiers = DEFAULT_QUALIFIERS
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
data/lib/ping/issue_reference.rb
CHANGED
@@ -2,92 +2,97 @@ module Ping
|
|
2
2
|
class IssueReference
|
3
3
|
attr_accessor :qualifier, :repository, :number
|
4
4
|
|
5
|
-
QUALIFIERS = /
|
6
|
-
close|closes|closed|fix|fixes|fixed|resolve|resolves|resolved|
|
7
|
-
need|needs|needed|require|requires|required
|
8
|
-
/ix
|
9
|
-
|
10
5
|
REPOSITORY_NAME = /[a-z0-9][a-z0-9\-]*\/[a-z0-9][a-z0-9\-_]*/ix
|
11
6
|
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
# - GH-123
|
17
|
-
# - needs #123
|
18
|
-
# - etc...
|
19
|
-
#
|
20
|
-
# See http://rubular.com/r/evB7RlvUfI
|
21
|
-
SHORT_PATTERN = /
|
22
|
-
(?:^|\W) # beginning of string or non-word char
|
23
|
-
(?:(#{QUALIFIERS})(?:\s))? # qualifier (optional)
|
24
|
-
(?:(#{REPOSITORY_NAME})? # repository name (optional)
|
25
|
-
\#|(?:GH\-))(\d+) # issue number
|
26
|
-
(?=
|
27
|
-
\.+[ \t\W]| # dots followed by space or non-word character
|
28
|
-
\.+$| # dots at end of line
|
29
|
-
[^0-9a-zA-Z_.]| # non-word character except dot
|
30
|
-
$ # end of line
|
31
|
-
)
|
32
|
-
/ix
|
7
|
+
class << self
|
8
|
+
def qualifier_regex
|
9
|
+
/#{Ping.config.qualifiers.join('|')}/ix
|
10
|
+
end
|
33
11
|
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
12
|
+
# Match references of the form:
|
13
|
+
#
|
14
|
+
# - #123
|
15
|
+
# - codetree/feedback#123
|
16
|
+
# - GH-123
|
17
|
+
# - needs #123
|
18
|
+
# - etc...
|
19
|
+
#
|
20
|
+
# See http://rubular.com/r/evB7RlvUfI
|
21
|
+
def short_pattern
|
22
|
+
/
|
23
|
+
(?:^|\W) # beginning of string or non-word char
|
24
|
+
(?:(#{qualifier_regex})(?:\s))? # qualifier (optional)
|
25
|
+
(?:(#{REPOSITORY_NAME})? # repository name (optional)
|
26
|
+
\#|(?:GH\-))(\d+) # issue number
|
27
|
+
(?=
|
28
|
+
\.+[ \t]| # dots followed by space or non-word character
|
29
|
+
\.+$| # dots at end of line
|
30
|
+
[^0-9a-zA-Z_.]| # non-word character except dot
|
31
|
+
$ # end of line
|
32
|
+
)
|
33
|
+
/ix
|
34
|
+
end
|
54
35
|
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
36
|
+
# Match references of the form:
|
37
|
+
#
|
38
|
+
# - https://github.com/codetree/feedback/issues/123
|
39
|
+
# - https://github.com/codetree/feedback/pulls/123
|
40
|
+
# - needs https://github.com/codetree/feedback/issues/123
|
41
|
+
# - etc...
|
42
|
+
def url_pattern
|
43
|
+
/
|
44
|
+
(?:^|\W) # beginning of string or non-word char
|
45
|
+
(?:(#{qualifier_regex})(?:\s))? # qualifier (optional)
|
46
|
+
https:\/\/github.com\/
|
47
|
+
(#{REPOSITORY_NAME}) # repository name
|
48
|
+
\/(?:issues|pulls)\/
|
49
|
+
(\d+) # issue number
|
50
|
+
(?=
|
51
|
+
\.+[ \t]| # dots followed by space or non-word character
|
52
|
+
\.+$| # dots at end of line
|
53
|
+
[^0-9a-zA-Z_.]| # non-word character except dot
|
54
|
+
$ # end of line
|
55
|
+
)
|
56
|
+
/ix
|
57
|
+
end
|
60
58
|
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
59
|
+
def extract(text)
|
60
|
+
[short_pattern, url_pattern].inject([]) do |memo, pattern|
|
61
|
+
memo.tap do |m|
|
62
|
+
text.scan(pattern).each do |match|
|
63
|
+
m << new(*match)
|
64
|
+
end
|
66
65
|
end
|
67
66
|
end
|
68
67
|
end
|
69
|
-
end
|
70
68
|
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
69
|
+
def replace(text, &block)
|
70
|
+
[short_pattern, url_pattern].each do |pattern|
|
71
|
+
text = text.gsub(pattern) do |match|
|
72
|
+
ref = new(*match.scan(pattern).first)
|
73
|
+
replace_match(match, ref, &block)
|
74
|
+
end
|
76
75
|
end
|
76
|
+
|
77
|
+
text
|
77
78
|
end
|
78
79
|
|
79
|
-
|
80
|
-
|
80
|
+
def replace_match(match, ref, &_block)
|
81
|
+
replacement = yield(match, ref)
|
82
|
+
return replacement unless replacement.is_a?(IssueReference)
|
81
83
|
|
82
|
-
|
83
|
-
|
84
|
-
|
84
|
+
# Reformat the given issue reference replacement to match
|
85
|
+
new_phrase = match[0] == ' ' ? ' ' : '' # fix leading space
|
86
|
+
new_phrase << replacement.qualifier + ' ' if replacement.qualifier
|
87
|
+
new_phrase << replacement.repository.to_s
|
88
|
+
new_phrase << '#' + replacement.number.to_s
|
89
|
+
end
|
90
|
+
end
|
85
91
|
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
new_phrase << '#' + replacement.number.to_s
|
92
|
+
def initialize(qualifier, repository, number)
|
93
|
+
@qualifier = qualifier
|
94
|
+
@repository = repository
|
95
|
+
@number = number
|
91
96
|
end
|
92
97
|
|
93
98
|
def ==(other)
|
data/lib/ping/mention.rb
CHANGED
@@ -7,7 +7,7 @@ module Ping
|
|
7
7
|
@((?>[a-z0-9][a-z0-9-]*)) # @username
|
8
8
|
(?!\/) # without a trailing slash
|
9
9
|
(?=
|
10
|
-
\.+[ \t
|
10
|
+
\.+[ \t]| # dots followed by space or non-word character
|
11
11
|
\.+$| # dots at end of line
|
12
12
|
[^0-9a-zA-Z_.]| # non-word character except dot
|
13
13
|
$ # end of line
|
@@ -20,9 +20,9 @@ module Ping
|
|
20
20
|
|
21
21
|
def self.extract(text)
|
22
22
|
text.scan(PATTERN).flatten
|
23
|
-
|
24
|
-
|
25
|
-
|
23
|
+
.map(&:downcase).uniq.map do |username|
|
24
|
+
new(username)
|
25
|
+
end
|
26
26
|
end
|
27
27
|
|
28
28
|
def ==(username)
|
data/lib/ping/parser.rb
CHANGED
data/lib/ping/version.rb
CHANGED
data/ping.gemspec
CHANGED
@@ -4,19 +4,19 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
4
4
|
require 'ping/version'
|
5
5
|
|
6
6
|
Gem::Specification.new do |spec|
|
7
|
-
spec.name
|
8
|
-
spec.version
|
9
|
-
spec.authors
|
10
|
-
spec.email
|
11
|
-
spec.summary
|
12
|
-
spec.description
|
13
|
-
spec.homepage
|
14
|
-
spec.license
|
15
|
-
|
16
|
-
spec.files
|
17
|
-
spec.executables
|
18
|
-
spec.test_files
|
19
|
-
spec.require_paths
|
7
|
+
spec.name = 'ping'
|
8
|
+
spec.version = Ping::VERSION
|
9
|
+
spec.authors = ['Codetree', 'Derrick Reimer']
|
10
|
+
spec.email = ['support@codetree.com', 'derrickreimer@gmail.com']
|
11
|
+
spec.summary = 'Parse @mentions and issue references'
|
12
|
+
spec.description = 'A little library for parsing GitHub @mentions and issue references'
|
13
|
+
spec.homepage = 'https://github.com/codetree/ping'
|
14
|
+
spec.license = 'MIT'
|
15
|
+
spec.required_ruby_version = '>= 2.2.2'
|
16
|
+
spec.files = `git ls-files -z`.split("\x0")
|
17
|
+
spec.executables = spec.files.grep(/^bin\//) { |f| File.basename(f) }
|
18
|
+
spec.test_files = spec.files.grep(/^(test|spec|features)\//)
|
19
|
+
spec.require_paths = ['lib']
|
20
20
|
|
21
21
|
spec.add_development_dependency 'bundler', '~> 1.6'
|
22
22
|
spec.add_development_dependency 'rake', '~> 10.0'
|
@@ -0,0 +1,41 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../test_helper.rb'
|
2
|
+
|
3
|
+
class Ping::ConfigTest < MiniTest::Test
|
4
|
+
def setup
|
5
|
+
Ping.reset
|
6
|
+
end
|
7
|
+
|
8
|
+
context '#default qualifiers' do
|
9
|
+
should "have default qualifiers" do
|
10
|
+
default_qualifiers = Ping::Config::DEFAULT_QUALIFIERS
|
11
|
+
|
12
|
+
Ping.config.qualifiers.each do |q|
|
13
|
+
assert default_qualifiers.include?(q)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
context '#with custom configuration' do
|
19
|
+
setup do
|
20
|
+
@custom_qualifiers = %w(fix epic needed-by close)
|
21
|
+
|
22
|
+
Ping.configure do |config|
|
23
|
+
config.qualifiers = @custom_qualifiers
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
should 'include custom qualifiers' do
|
28
|
+
Ping.config.qualifiers.each do |q|
|
29
|
+
assert @custom_qualifiers.include?(q)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
should 'not include unknown qualifiers' do
|
34
|
+
unknown_qualifiers = %w(resolve require done)
|
35
|
+
|
36
|
+
unknown_qualifiers.each do |q|
|
37
|
+
assert !Ping.config.qualifiers.include?(q)
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
@@ -1,6 +1,10 @@
|
|
1
1
|
require File.dirname(__FILE__) + '/../test_helper.rb'
|
2
2
|
|
3
3
|
class Ping::IssueReferenceTest < MiniTest::Test
|
4
|
+
def setup
|
5
|
+
Ping.reset
|
6
|
+
end
|
7
|
+
|
4
8
|
def extract(text)
|
5
9
|
Ping::IssueReference.extract(text)
|
6
10
|
end
|
@@ -14,8 +18,8 @@ class Ping::IssueReferenceTest < MiniTest::Test
|
|
14
18
|
text = 'See #43'
|
15
19
|
issue = extract_first(text)
|
16
20
|
|
17
|
-
|
18
|
-
|
21
|
+
assert_nil issue.qualifier
|
22
|
+
assert_nil issue.repository
|
19
23
|
assert_equal '43', issue.number
|
20
24
|
end
|
21
25
|
|
@@ -23,8 +27,8 @@ class Ping::IssueReferenceTest < MiniTest::Test
|
|
23
27
|
text = 'See #43.'
|
24
28
|
issue = extract_first(text)
|
25
29
|
|
26
|
-
|
27
|
-
|
30
|
+
assert_nil issue.qualifier
|
31
|
+
assert_nil issue.repository
|
28
32
|
assert_equal '43', issue.number
|
29
33
|
end
|
30
34
|
|
@@ -34,7 +38,7 @@ class Ping::IssueReferenceTest < MiniTest::Test
|
|
34
38
|
issue = extract_first(text)
|
35
39
|
|
36
40
|
assert_equal q, issue.qualifier
|
37
|
-
|
41
|
+
assert_nil issue.repository
|
38
42
|
assert_equal '55', issue.number
|
39
43
|
end
|
40
44
|
end
|
@@ -45,7 +49,7 @@ class Ping::IssueReferenceTest < MiniTest::Test
|
|
45
49
|
issue = extract_first(text)
|
46
50
|
|
47
51
|
assert_equal q, issue.qualifier
|
48
|
-
|
52
|
+
assert_nil issue.repository
|
49
53
|
assert_equal '123', issue.number
|
50
54
|
end
|
51
55
|
end
|
@@ -54,7 +58,7 @@ class Ping::IssueReferenceTest < MiniTest::Test
|
|
54
58
|
text = 'codetree/codetree#43'
|
55
59
|
issue = extract_first(text)
|
56
60
|
|
57
|
-
|
61
|
+
assert_nil issue.qualifier
|
58
62
|
assert_equal 'codetree/codetree', issue.repository
|
59
63
|
assert_equal '43', issue.number
|
60
64
|
end
|
@@ -90,8 +94,8 @@ class Ping::IssueReferenceTest < MiniTest::Test
|
|
90
94
|
text = 'afixes #43'
|
91
95
|
issue = extract_first(text)
|
92
96
|
|
93
|
-
|
94
|
-
|
97
|
+
assert_nil issue.qualifier
|
98
|
+
assert_nil issue.repository
|
95
99
|
assert_equal '43', issue.number
|
96
100
|
end
|
97
101
|
|
@@ -100,7 +104,7 @@ class Ping::IssueReferenceTest < MiniTest::Test
|
|
100
104
|
issue = extract_first(text)
|
101
105
|
|
102
106
|
assert_equal 'FIxEs', issue.qualifier
|
103
|
-
|
107
|
+
assert_nil issue.repository
|
104
108
|
assert_equal '43', issue.number
|
105
109
|
end
|
106
110
|
|
@@ -108,8 +112,8 @@ class Ping::IssueReferenceTest < MiniTest::Test
|
|
108
112
|
text = 'fixes #43'
|
109
113
|
issue = extract_first(text)
|
110
114
|
|
111
|
-
|
112
|
-
|
115
|
+
assert_nil issue.qualifier
|
116
|
+
assert_nil issue.repository
|
113
117
|
assert_equal '43', issue.number
|
114
118
|
end
|
115
119
|
|
@@ -121,6 +125,37 @@ class Ping::IssueReferenceTest < MiniTest::Test
|
|
121
125
|
assert_equal 'Liquid-Labs/rf-app-admin-web-app', issue.repository
|
122
126
|
assert_equal '2', issue.number
|
123
127
|
end
|
128
|
+
|
129
|
+
context '#with custom configuration' do
|
130
|
+
setup do
|
131
|
+
@custom_qualifiers = %w(epic needed-by)
|
132
|
+
Ping.configure do |config|
|
133
|
+
config.qualifiers = Ping::Config::DEFAULT_QUALIFIERS.push(*@custom_qualifiers)
|
134
|
+
end
|
135
|
+
end
|
136
|
+
|
137
|
+
should 'extract default qualifiers' do
|
138
|
+
Ping::Config::DEFAULT_QUALIFIERS.each do |q|
|
139
|
+
text = "#{q} #123"
|
140
|
+
issue = extract_first(text)
|
141
|
+
|
142
|
+
assert_equal q, issue.qualifier
|
143
|
+
assert_nil issue.repository
|
144
|
+
assert_equal '123', issue.number
|
145
|
+
end
|
146
|
+
end
|
147
|
+
|
148
|
+
should 'extract custom qualifiers' do
|
149
|
+
@custom_qualifiers.each do |q|
|
150
|
+
text = "#{q} #123"
|
151
|
+
issue = extract_first(text)
|
152
|
+
|
153
|
+
assert_equal q, issue.qualifier
|
154
|
+
assert_nil issue.repository
|
155
|
+
assert_equal '123', issue.number
|
156
|
+
end
|
157
|
+
end
|
158
|
+
end
|
124
159
|
end
|
125
160
|
|
126
161
|
context '.extract with GH-XXX syntax' do
|
@@ -128,8 +163,8 @@ class Ping::IssueReferenceTest < MiniTest::Test
|
|
128
163
|
text = 'See GH-43'
|
129
164
|
issue = extract_first(text)
|
130
165
|
|
131
|
-
|
132
|
-
|
166
|
+
assert_nil issue.qualifier
|
167
|
+
assert_nil issue.repository
|
133
168
|
assert_equal '43', issue.number
|
134
169
|
end
|
135
170
|
|
@@ -137,8 +172,8 @@ class Ping::IssueReferenceTest < MiniTest::Test
|
|
137
172
|
text = 'See gh-43'
|
138
173
|
issue = extract_first(text)
|
139
174
|
|
140
|
-
|
141
|
-
|
175
|
+
assert_nil issue.qualifier
|
176
|
+
assert_nil issue.repository
|
142
177
|
assert_equal '43', issue.number
|
143
178
|
end
|
144
179
|
|
@@ -146,8 +181,8 @@ class Ping::IssueReferenceTest < MiniTest::Test
|
|
146
181
|
text = 'See GH-43.'
|
147
182
|
issue = extract_first(text)
|
148
183
|
|
149
|
-
|
150
|
-
|
184
|
+
assert_nil issue.qualifier
|
185
|
+
assert_nil issue.repository
|
151
186
|
assert_equal '43', issue.number
|
152
187
|
end
|
153
188
|
|
@@ -157,7 +192,7 @@ class Ping::IssueReferenceTest < MiniTest::Test
|
|
157
192
|
issue = extract_first(text)
|
158
193
|
|
159
194
|
assert_equal q, issue.qualifier
|
160
|
-
|
195
|
+
assert_nil issue.repository
|
161
196
|
assert_equal '55', issue.number
|
162
197
|
end
|
163
198
|
end
|
@@ -168,7 +203,7 @@ class Ping::IssueReferenceTest < MiniTest::Test
|
|
168
203
|
issue = extract_first(text)
|
169
204
|
|
170
205
|
assert_equal q, issue.qualifier
|
171
|
-
|
206
|
+
assert_nil issue.repository
|
172
207
|
assert_equal '123', issue.number
|
173
208
|
end
|
174
209
|
end
|
@@ -187,8 +222,8 @@ class Ping::IssueReferenceTest < MiniTest::Test
|
|
187
222
|
text = 'afixes GH-43'
|
188
223
|
issue = extract_first(text)
|
189
224
|
|
190
|
-
|
191
|
-
|
225
|
+
assert_nil issue.qualifier
|
226
|
+
assert_nil issue.repository
|
192
227
|
assert_equal '43', issue.number
|
193
228
|
end
|
194
229
|
|
@@ -197,7 +232,7 @@ class Ping::IssueReferenceTest < MiniTest::Test
|
|
197
232
|
issue = extract_first(text)
|
198
233
|
|
199
234
|
assert_equal 'FIxEs', issue.qualifier
|
200
|
-
|
235
|
+
assert_nil issue.repository
|
201
236
|
assert_equal '43', issue.number
|
202
237
|
end
|
203
238
|
|
@@ -205,8 +240,8 @@ class Ping::IssueReferenceTest < MiniTest::Test
|
|
205
240
|
text = 'fixes GH-43'
|
206
241
|
issue = extract_first(text)
|
207
242
|
|
208
|
-
|
209
|
-
|
243
|
+
assert_nil issue.qualifier
|
244
|
+
assert_nil issue.repository
|
210
245
|
assert_equal '43', issue.number
|
211
246
|
end
|
212
247
|
|
@@ -215,7 +250,7 @@ class Ping::IssueReferenceTest < MiniTest::Test
|
|
215
250
|
issue = extract_first(text)
|
216
251
|
|
217
252
|
assert_equal 'fixes', issue.qualifier
|
218
|
-
|
253
|
+
assert_nil issue.repository
|
219
254
|
assert_equal '43', issue.number
|
220
255
|
end
|
221
256
|
end
|
@@ -225,7 +260,7 @@ class Ping::IssueReferenceTest < MiniTest::Test
|
|
225
260
|
text = 'See https://github.com/codetree/feedback/issues/43'
|
226
261
|
issue = extract_first(text)
|
227
262
|
|
228
|
-
|
263
|
+
assert_nil issue.qualifier
|
229
264
|
assert_equal 'codetree/feedback', issue.repository
|
230
265
|
assert_equal '43', issue.number
|
231
266
|
end
|
@@ -234,7 +269,7 @@ class Ping::IssueReferenceTest < MiniTest::Test
|
|
234
269
|
text = 'See https://github.com/codetree/feedback/pulls/43'
|
235
270
|
issue = extract_first(text)
|
236
271
|
|
237
|
-
|
272
|
+
assert_nil issue.qualifier
|
238
273
|
assert_equal 'codetree/feedback', issue.repository
|
239
274
|
assert_equal '43', issue.number
|
240
275
|
end
|
@@ -243,7 +278,7 @@ class Ping::IssueReferenceTest < MiniTest::Test
|
|
243
278
|
text = 'See https://github.com/codetree/feedback/issues/43.'
|
244
279
|
issue = extract_first(text)
|
245
280
|
|
246
|
-
|
281
|
+
assert_nil issue.qualifier
|
247
282
|
assert_equal 'codetree/feedback', issue.repository
|
248
283
|
assert_equal '43', issue.number
|
249
284
|
end
|
@@ -252,7 +287,6 @@ class Ping::IssueReferenceTest < MiniTest::Test
|
|
252
287
|
%w(fix fixes fixed close closes closed resolve resolves resolved).each do |q|
|
253
288
|
text = "#{q} https://github.com/codetree/feedback/issues/55"
|
254
289
|
issue = extract_first(text)
|
255
|
-
|
256
290
|
assert_equal q, issue.qualifier
|
257
291
|
assert_equal 'codetree/feedback', issue.repository
|
258
292
|
assert_equal '55', issue.number
|
@@ -287,7 +321,7 @@ class Ping::IssueReferenceTest < MiniTest::Test
|
|
287
321
|
text = 'afixes https://github.com/codetree/feedback/issues/43'
|
288
322
|
issue = extract_first(text)
|
289
323
|
|
290
|
-
|
324
|
+
assert_nil issue.qualifier
|
291
325
|
assert_equal 'codetree/feedback', issue.repository
|
292
326
|
assert_equal '43', issue.number
|
293
327
|
end
|
@@ -305,10 +339,30 @@ class Ping::IssueReferenceTest < MiniTest::Test
|
|
305
339
|
text = 'fixes https://github.com/codetree/feedback/issues/43'
|
306
340
|
issue = extract_first(text)
|
307
341
|
|
308
|
-
|
342
|
+
assert_nil issue.qualifier
|
309
343
|
assert_equal 'codetree/feedback', issue.repository
|
310
344
|
assert_equal '43', issue.number
|
311
345
|
end
|
346
|
+
|
347
|
+
context '#with custom configuration' do
|
348
|
+
setup do
|
349
|
+
@custom_qualifiers = %w(epic needed-by)
|
350
|
+
Ping.configure do |config|
|
351
|
+
config.qualifiers = @custom_qualifiers
|
352
|
+
end
|
353
|
+
end
|
354
|
+
|
355
|
+
should 'extract custom qualifiers' do
|
356
|
+
@custom_qualifiers.each do |q|
|
357
|
+
text = "#{q} https://github.com/codetree/feedback/issues/123"
|
358
|
+
issue = extract_first(text)
|
359
|
+
|
360
|
+
assert_equal q, issue.qualifier
|
361
|
+
assert_equal 'codetree/feedback', issue.repository
|
362
|
+
assert_equal '123', issue.number
|
363
|
+
end
|
364
|
+
end
|
365
|
+
end
|
312
366
|
end
|
313
367
|
|
314
368
|
context '.replace' do
|
data/test/test_helper.rb
CHANGED
metadata
CHANGED
@@ -1,120 +1,125 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ping
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
|
+
- Codetree
|
7
8
|
- Derrick Reimer
|
8
9
|
autorequire:
|
9
10
|
bindir: bin
|
10
11
|
cert_chain: []
|
11
|
-
date:
|
12
|
+
date: 2020-01-15 00:00:00.000000000 Z
|
12
13
|
dependencies:
|
13
14
|
- !ruby/object:Gem::Dependency
|
14
15
|
name: bundler
|
15
16
|
requirement: !ruby/object:Gem::Requirement
|
16
17
|
requirements:
|
17
|
-
- - ~>
|
18
|
+
- - "~>"
|
18
19
|
- !ruby/object:Gem::Version
|
19
20
|
version: '1.6'
|
20
21
|
type: :development
|
21
22
|
prerelease: false
|
22
23
|
version_requirements: !ruby/object:Gem::Requirement
|
23
24
|
requirements:
|
24
|
-
- - ~>
|
25
|
+
- - "~>"
|
25
26
|
- !ruby/object:Gem::Version
|
26
27
|
version: '1.6'
|
27
28
|
- !ruby/object:Gem::Dependency
|
28
29
|
name: rake
|
29
30
|
requirement: !ruby/object:Gem::Requirement
|
30
31
|
requirements:
|
31
|
-
- - ~>
|
32
|
+
- - "~>"
|
32
33
|
- !ruby/object:Gem::Version
|
33
34
|
version: '10.0'
|
34
35
|
type: :development
|
35
36
|
prerelease: false
|
36
37
|
version_requirements: !ruby/object:Gem::Requirement
|
37
38
|
requirements:
|
38
|
-
- - ~>
|
39
|
+
- - "~>"
|
39
40
|
- !ruby/object:Gem::Version
|
40
41
|
version: '10.0'
|
41
42
|
- !ruby/object:Gem::Dependency
|
42
43
|
name: minitest
|
43
44
|
requirement: !ruby/object:Gem::Requirement
|
44
45
|
requirements:
|
45
|
-
- - ~>
|
46
|
+
- - "~>"
|
46
47
|
- !ruby/object:Gem::Version
|
47
48
|
version: '5.0'
|
48
49
|
type: :development
|
49
50
|
prerelease: false
|
50
51
|
version_requirements: !ruby/object:Gem::Requirement
|
51
52
|
requirements:
|
52
|
-
- - ~>
|
53
|
+
- - "~>"
|
53
54
|
- !ruby/object:Gem::Version
|
54
55
|
version: '5.0'
|
55
56
|
- !ruby/object:Gem::Dependency
|
56
57
|
name: shoulda-context
|
57
58
|
requirement: !ruby/object:Gem::Requirement
|
58
59
|
requirements:
|
59
|
-
- - ~>
|
60
|
+
- - "~>"
|
60
61
|
- !ruby/object:Gem::Version
|
61
62
|
version: '1.2'
|
62
63
|
type: :development
|
63
64
|
prerelease: false
|
64
65
|
version_requirements: !ruby/object:Gem::Requirement
|
65
66
|
requirements:
|
66
|
-
- - ~>
|
67
|
+
- - "~>"
|
67
68
|
- !ruby/object:Gem::Version
|
68
69
|
version: '1.2'
|
69
70
|
- !ruby/object:Gem::Dependency
|
70
71
|
name: mocha
|
71
72
|
requirement: !ruby/object:Gem::Requirement
|
72
73
|
requirements:
|
73
|
-
- - ~>
|
74
|
+
- - "~>"
|
74
75
|
- !ruby/object:Gem::Version
|
75
76
|
version: '1.0'
|
76
77
|
type: :development
|
77
78
|
prerelease: false
|
78
79
|
version_requirements: !ruby/object:Gem::Requirement
|
79
80
|
requirements:
|
80
|
-
- - ~>
|
81
|
+
- - "~>"
|
81
82
|
- !ruby/object:Gem::Version
|
82
83
|
version: '1.0'
|
83
84
|
- !ruby/object:Gem::Dependency
|
84
85
|
name: rubocop
|
85
86
|
requirement: !ruby/object:Gem::Requirement
|
86
87
|
requirements:
|
87
|
-
- -
|
88
|
+
- - ">="
|
88
89
|
- !ruby/object:Gem::Version
|
89
90
|
version: '0'
|
90
91
|
type: :development
|
91
92
|
prerelease: false
|
92
93
|
version_requirements: !ruby/object:Gem::Requirement
|
93
94
|
requirements:
|
94
|
-
- -
|
95
|
+
- - ">="
|
95
96
|
- !ruby/object:Gem::Version
|
96
97
|
version: '0'
|
97
98
|
description: A little library for parsing GitHub @mentions and issue references
|
98
99
|
email:
|
100
|
+
- support@codetree.com
|
99
101
|
- derrickreimer@gmail.com
|
100
102
|
executables: []
|
101
103
|
extensions: []
|
102
104
|
extra_rdoc_files: []
|
103
105
|
files:
|
104
|
-
- .
|
105
|
-
- .
|
106
|
-
- .
|
106
|
+
- ".circleci/config.yml"
|
107
|
+
- ".circleci/setup-rubygems.sh"
|
108
|
+
- ".gitignore"
|
109
|
+
- ".rubocop.yml"
|
110
|
+
- ".rubocop_todo.yml"
|
107
111
|
- Gemfile
|
108
112
|
- LICENSE.txt
|
109
113
|
- README.md
|
110
114
|
- Rakefile
|
111
|
-
- circle.yml
|
112
115
|
- lib/ping.rb
|
116
|
+
- lib/ping/config.rb
|
113
117
|
- lib/ping/issue_reference.rb
|
114
118
|
- lib/ping/mention.rb
|
115
119
|
- lib/ping/parser.rb
|
116
120
|
- lib/ping/version.rb
|
117
121
|
- ping.gemspec
|
122
|
+
- test/ping/config_test.rb
|
118
123
|
- test/ping/issue_reference_test.rb
|
119
124
|
- test/ping/mention_test.rb
|
120
125
|
- test/ping/parser_test.rb
|
@@ -129,23 +134,22 @@ require_paths:
|
|
129
134
|
- lib
|
130
135
|
required_ruby_version: !ruby/object:Gem::Requirement
|
131
136
|
requirements:
|
132
|
-
- -
|
137
|
+
- - ">="
|
133
138
|
- !ruby/object:Gem::Version
|
134
|
-
version:
|
139
|
+
version: 2.2.2
|
135
140
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
136
141
|
requirements:
|
137
|
-
- -
|
142
|
+
- - ">="
|
138
143
|
- !ruby/object:Gem::Version
|
139
144
|
version: '0'
|
140
145
|
requirements: []
|
141
|
-
|
142
|
-
rubygems_version: 2.3.0
|
146
|
+
rubygems_version: 3.0.3
|
143
147
|
signing_key:
|
144
148
|
specification_version: 4
|
145
149
|
summary: Parse @mentions and issue references
|
146
150
|
test_files:
|
151
|
+
- test/ping/config_test.rb
|
147
152
|
- test/ping/issue_reference_test.rb
|
148
153
|
- test/ping/mention_test.rb
|
149
154
|
- test/ping/parser_test.rb
|
150
155
|
- test/test_helper.rb
|
151
|
-
has_rdoc:
|
data/circle.yml
DELETED