ping 0.1.0 → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 4b72814d428ea3a2db8f4c7aafd0df25d4be72402bb4f1345da8f24635d07a17
4
- data.tar.gz: 200b1aed0640d89e91730c7d29b7356e42ab19074c06f9d8c3b855814a4915c9
3
+ metadata.gz: ac62acfe2a85d874917d0af6fbbb36f0eda901912c097f84d7900174ceccdd1d
4
+ data.tar.gz: 82c14c8e4b00b70c99dcd1dd76c4bbebffeed6732102f3d1185dd32d3332a391
5
5
  SHA512:
6
- metadata.gz: b5a1a8053177c0ee4395ddd325c7acad96a7500f3190069dc50c54a95d00ee8fe339a94b2482ecf2d1cf523f5517156d7059454e81bb8a066d0add270c0e074b
7
- data.tar.gz: d6d88258ce8b7e886eafad4888db0cf1906585fbf56375f87495127f3a13a0bd8dce9b21a5255f82e248ed65256481900241c0a46024d0d34eb04a4365314458
6
+ metadata.gz: fa87a0acd7bd37dc8d80a5ce8fa5d4efbe3e271f906746b8127ba4d21613446f10074e56d56a6e59d3575127dca2c1ba5648b93f70c73406587016521b3204dd
7
+ data.tar.gz: e2b424198f0672f8785c3c8a9dd8da0b8a3a0407f72fdf7a1123dd3e398495ff1a6052d9cadc8331f8c9e805af8914190e9489d0c6ea1618ff2891f8686ea0f4
@@ -15,6 +15,10 @@ jobs:
15
15
  steps:
16
16
  - checkout
17
17
 
18
+ - run:
19
+ name: install bundler
20
+ command: gem install bundler:2.1.4
21
+
18
22
  - run:
19
23
  name: check dependencies
20
24
  command: |
@@ -1,11 +1,44 @@
1
- inherit_from: .rubocop_todo.yml
1
+ AllCops:
2
+ TargetRubyVersion: 2.4
3
+ Exclude:
4
+ - 'bin/**/*'
5
+ - 'vendor/**/*'
6
+ - 'config.ru'
2
7
 
3
- Style/RegexpLiteral:
4
- AllowInnerSlashes: true
8
+ Layout/LineLength:
9
+ Max: 100
5
10
 
6
- AllCops:
11
+ Metrics/AbcSize:
12
+ Max: 20
13
+
14
+ Metrics/BlockLength:
15
+ Max: 30
16
+ Exclude:
17
+ - 'test/**/*.rb'
18
+
19
+ Metrics/ClassLength:
20
+ Exclude:
21
+ - 'test/**/*.rb'
22
+
23
+ Metrics/MethodLength:
24
+ Max: 15
7
25
  Exclude:
8
- - 'test/ping/*'
9
- - 'ping.gemspec'
10
- - 'lib/ping/version.rb'
11
- - 'vendor/**/*'
26
+ - 'test/**/*.rb'
27
+
28
+ Style/ClassAndModuleChildren:
29
+ Exclude:
30
+ - 'test/**/*.rb'
31
+
32
+ Style/Documentation:
33
+ Enabled: false
34
+ Exclude:
35
+ - 'test/**/*'
36
+
37
+ Style/HashEachMethods:
38
+ Enabled: true
39
+
40
+ Style/HashTransformKeys:
41
+ Enabled: true
42
+
43
+ Style/HashTransformValues:
44
+ Enabled: true
data/Gemfile CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  source 'https://rubygems.org'
2
4
 
3
5
  # Specify your gem's dependencies in ping.gemspec
data/Rakefile CHANGED
@@ -1,20 +1,18 @@
1
- #!/usr/bin/env rake
1
+ # frozen_string_literal: true
2
+
2
3
  require 'bundler/gem_tasks'
3
4
  require 'rake/testtask'
5
+ require 'rubocop/rake_task'
4
6
 
7
+ desc 'Run tests'
8
+ task default: :test
5
9
  Rake::TestTask.new do |t|
6
10
  t.libs << 'lib'
7
11
  t.pattern = 'test/**/*_test.rb'
8
12
  t.verbose = true
9
13
  end
10
14
 
11
- desc 'Run tests'
12
- task default: :test
13
-
14
15
  # append to the default rake task
15
- require 'rubocop/rake_task'
16
16
  RuboCop::RakeTask.new
17
17
 
18
- task :default do
19
- Rake::Task['rubocop'].invoke
20
- end
18
+ Rake::Task['test'].enhance ['rubocop']
@@ -1,2 +1,4 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'ping/version'
2
4
  require 'ping/parser'
@@ -1,7 +1,7 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Ping
2
4
  class << self
3
- attr_accessor :config
4
-
5
5
  def configure
6
6
  yield config
7
7
  end
@@ -11,7 +11,7 @@ module Ping
11
11
  end
12
12
 
13
13
  # Here we are implementing a reset method because
14
- # for global values like this, its best to clean up before/after
14
+ # for global values like this, it's best to clean up before/after
15
15
  # each spec to ensure the system is back to a default state.
16
16
  def reset
17
17
  @config = Config.new
@@ -21,10 +21,10 @@ module Ping
21
21
  class Config
22
22
  attr_accessor :qualifiers
23
23
 
24
- DEFAULT_QUALIFIERS = [
25
- 'close', 'closes', 'closed', 'fix', 'fixes', 'fixed', 'need', 'needs', 'needed',
26
- 'require', 'requires', 'required', 'resolve', 'resolves', 'resolved'
27
- ]
24
+ DEFAULT_QUALIFIERS = %w[
25
+ close closes closed fix fixes fixed need needs needed
26
+ require requires required resolve resolves resolved
27
+ ].freeze
28
28
 
29
29
  def initialize
30
30
  @qualifiers = DEFAULT_QUALIFIERS
@@ -1,8 +1,10 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Ping
2
4
  class IssueReference
3
5
  attr_accessor :qualifier, :repository, :number
4
6
 
5
- REPOSITORY_NAME = /[a-z0-9][a-z0-9\-]*\/[a-z0-9][a-z0-9\-_]*/ix
7
+ REPOSITORY_NAME = %r{[a-z0-9][a-z0-9\-]*/[a-z0-9][a-z0-9\-_]*}ix.freeze
6
8
 
7
9
  class << self
8
10
  def qualifier_regex
@@ -40,12 +42,12 @@ module Ping
40
42
  # - needs https://github.com/codetree/feedback/issues/123
41
43
  # - etc...
42
44
  def url_pattern
43
- /
45
+ %r{
44
46
  (?:^|\W) # beginning of string or non-word char
45
47
  (?:(#{qualifier_regex})(?:\s))? # qualifier (optional)
46
- https:\/\/github.com\/
48
+ https://github.com/
47
49
  (#{REPOSITORY_NAME}) # repository name
48
- \/(?:issues|pulls)\/
50
+ /(?:issues|pulls)/
49
51
  (\d+) # issue number
50
52
  (?=
51
53
  \.+[ \t]| # dots followed by space or non-word character
@@ -53,7 +55,7 @@ module Ping
53
55
  [^0-9a-zA-Z_.]| # non-word character except dot
54
56
  $ # end of line
55
57
  )
56
- /ix
58
+ }ix
57
59
  end
58
60
 
59
61
  def extract(text)
@@ -82,10 +84,9 @@ module Ping
82
84
  return replacement unless replacement.is_a?(IssueReference)
83
85
 
84
86
  # 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
87
+ lead_in = match[0] == ' ' ? ' ' : '' # fix leading space
88
+ lead_in += replacement.qualifier + ' ' if replacement.qualifier
89
+ lead_in + replacement.repository.to_s + '#' + replacement.number.to_s
89
90
  end
90
91
  end
91
92
 
@@ -1,18 +1,20 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Ping
2
4
  class Mention
3
5
  attr_accessor :username
4
6
 
5
- PATTERN = /
7
+ PATTERN = %r{
6
8
  (?:^|\W) # beginning of string or non-word char
7
9
  @((?>[a-z0-9][a-z0-9-]*)) # @username
8
- (?!\/) # without a trailing slash
10
+ (?!/) # without a trailing slash
9
11
  (?=
10
12
  \.+[ \t]| # dots followed by space or non-word character
11
13
  \.+$| # dots at end of line
12
14
  [^0-9a-zA-Z_.]| # non-word character except dot
13
15
  $ # end of line
14
16
  )
15
- /ix
17
+ }ix.freeze
16
18
 
17
19
  def initialize(username)
18
20
  @username = username
@@ -25,8 +27,8 @@ module Ping
25
27
  end
26
28
  end
27
29
 
28
- def ==(username)
29
- username == self.username
30
+ def ==(other)
31
+ other == username
30
32
  end
31
33
 
32
34
  def to_s
@@ -1,4 +1,6 @@
1
- require "ping/config"
1
+ # frozen_string_literal: true
2
+
3
+ require 'ping/config'
2
4
  require 'ping/mention'
3
5
  require 'ping/issue_reference'
4
6
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Ping
2
- VERSION = '0.1.0'
4
+ VERSION = '0.1.1'
3
5
  end
@@ -1,5 +1,6 @@
1
- # coding: utf-8
2
- lib = File.expand_path('../lib', __FILE__)
1
+ # frozen_string_literal: true
2
+
3
+ lib = File.expand_path('lib', __dir__)
3
4
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
5
  require 'ping/version'
5
6
 
@@ -12,16 +13,16 @@ Gem::Specification.new do |spec|
12
13
  spec.description = 'A little library for parsing GitHub @mentions and issue references'
13
14
  spec.homepage = 'https://github.com/codetree/ping'
14
15
  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)\//)
16
+ spec.required_ruby_version = '>= 2.4'
19
17
  spec.require_paths = ['lib']
20
18
 
21
- spec.add_development_dependency 'bundler', '~> 1.6'
22
- spec.add_development_dependency 'rake', '~> 10.0'
19
+ spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
20
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
21
+
22
+ spec.add_development_dependency 'bundler', '~> 2.1', '>= 2.1.4'
23
23
  spec.add_development_dependency 'minitest', '~> 5.0'
24
- spec.add_development_dependency 'shoulda-context', '~> 1.2'
25
24
  spec.add_development_dependency 'mocha', '~> 1.0'
26
- spec.add_development_dependency 'rubocop'
25
+ spec.add_development_dependency 'rake', '~> 13.0'
26
+ spec.add_development_dependency 'rubocop', '~> 0.80.1'
27
+ spec.add_development_dependency 'shoulda-context', '~> 1.2'
27
28
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ping
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Codetree
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2020-01-15 00:00:00.000000000 Z
12
+ date: 2020-04-22 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler
@@ -17,84 +17,90 @@ dependencies:
17
17
  requirements:
18
18
  - - "~>"
19
19
  - !ruby/object:Gem::Version
20
- version: '1.6'
20
+ version: '2.1'
21
+ - - ">="
22
+ - !ruby/object:Gem::Version
23
+ version: 2.1.4
21
24
  type: :development
22
25
  prerelease: false
23
26
  version_requirements: !ruby/object:Gem::Requirement
24
27
  requirements:
25
28
  - - "~>"
26
29
  - !ruby/object:Gem::Version
27
- version: '1.6'
30
+ version: '2.1'
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: 2.1.4
28
34
  - !ruby/object:Gem::Dependency
29
- name: rake
35
+ name: minitest
30
36
  requirement: !ruby/object:Gem::Requirement
31
37
  requirements:
32
38
  - - "~>"
33
39
  - !ruby/object:Gem::Version
34
- version: '10.0'
40
+ version: '5.0'
35
41
  type: :development
36
42
  prerelease: false
37
43
  version_requirements: !ruby/object:Gem::Requirement
38
44
  requirements:
39
45
  - - "~>"
40
46
  - !ruby/object:Gem::Version
41
- version: '10.0'
47
+ version: '5.0'
42
48
  - !ruby/object:Gem::Dependency
43
- name: minitest
49
+ name: mocha
44
50
  requirement: !ruby/object:Gem::Requirement
45
51
  requirements:
46
52
  - - "~>"
47
53
  - !ruby/object:Gem::Version
48
- version: '5.0'
54
+ version: '1.0'
49
55
  type: :development
50
56
  prerelease: false
51
57
  version_requirements: !ruby/object:Gem::Requirement
52
58
  requirements:
53
59
  - - "~>"
54
60
  - !ruby/object:Gem::Version
55
- version: '5.0'
61
+ version: '1.0'
56
62
  - !ruby/object:Gem::Dependency
57
- name: shoulda-context
63
+ name: rake
58
64
  requirement: !ruby/object:Gem::Requirement
59
65
  requirements:
60
66
  - - "~>"
61
67
  - !ruby/object:Gem::Version
62
- version: '1.2'
68
+ version: '13.0'
63
69
  type: :development
64
70
  prerelease: false
65
71
  version_requirements: !ruby/object:Gem::Requirement
66
72
  requirements:
67
73
  - - "~>"
68
74
  - !ruby/object:Gem::Version
69
- version: '1.2'
75
+ version: '13.0'
70
76
  - !ruby/object:Gem::Dependency
71
- name: mocha
77
+ name: rubocop
72
78
  requirement: !ruby/object:Gem::Requirement
73
79
  requirements:
74
80
  - - "~>"
75
81
  - !ruby/object:Gem::Version
76
- version: '1.0'
82
+ version: 0.80.1
77
83
  type: :development
78
84
  prerelease: false
79
85
  version_requirements: !ruby/object:Gem::Requirement
80
86
  requirements:
81
87
  - - "~>"
82
88
  - !ruby/object:Gem::Version
83
- version: '1.0'
89
+ version: 0.80.1
84
90
  - !ruby/object:Gem::Dependency
85
- name: rubocop
91
+ name: shoulda-context
86
92
  requirement: !ruby/object:Gem::Requirement
87
93
  requirements:
88
- - - ">="
94
+ - - "~>"
89
95
  - !ruby/object:Gem::Version
90
- version: '0'
96
+ version: '1.2'
91
97
  type: :development
92
98
  prerelease: false
93
99
  version_requirements: !ruby/object:Gem::Requirement
94
100
  requirements:
95
- - - ">="
101
+ - - "~>"
96
102
  - !ruby/object:Gem::Version
97
- version: '0'
103
+ version: '1.2'
98
104
  description: A little library for parsing GitHub @mentions and issue references
99
105
  email:
100
106
  - support@codetree.com
@@ -107,7 +113,6 @@ files:
107
113
  - ".circleci/setup-rubygems.sh"
108
114
  - ".gitignore"
109
115
  - ".rubocop.yml"
110
- - ".rubocop_todo.yml"
111
116
  - Gemfile
112
117
  - LICENSE.txt
113
118
  - README.md
@@ -119,11 +124,6 @@ files:
119
124
  - lib/ping/parser.rb
120
125
  - lib/ping/version.rb
121
126
  - ping.gemspec
122
- - test/ping/config_test.rb
123
- - test/ping/issue_reference_test.rb
124
- - test/ping/mention_test.rb
125
- - test/ping/parser_test.rb
126
- - test/test_helper.rb
127
127
  homepage: https://github.com/codetree/ping
128
128
  licenses:
129
129
  - MIT
@@ -136,7 +136,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
136
136
  requirements:
137
137
  - - ">="
138
138
  - !ruby/object:Gem::Version
139
- version: 2.2.2
139
+ version: '2.4'
140
140
  required_rubygems_version: !ruby/object:Gem::Requirement
141
141
  requirements:
142
142
  - - ">="
@@ -147,9 +147,4 @@ rubygems_version: 3.0.3
147
147
  signing_key:
148
148
  specification_version: 4
149
149
  summary: Parse @mentions and issue references
150
- test_files:
151
- - test/ping/config_test.rb
152
- - test/ping/issue_reference_test.rb
153
- - test/ping/mention_test.rb
154
- - test/ping/parser_test.rb
155
- - test/test_helper.rb
150
+ test_files: []
@@ -1,29 +0,0 @@
1
- # This configuration was generated by `rubocop --auto-gen-config`
2
- # on 2015-08-01 15:11:49 -0700 using RuboCop version 0.32.1.
3
- # The point is for the user to remove these configuration records
4
- # one by one as the offenses are removed from the code base.
5
- # Note that changes in the inspected code, or installation of new
6
- # versions of RuboCop, may require this file to be generated again.
7
-
8
- # Offense count: 1
9
- # Configuration parameters: CountComments.
10
- Metrics/ClassLength:
11
- Max: 335
12
-
13
- # Offense count: 7
14
- # Configuration parameters: AllowURI, URISchemes.
15
- Metrics/LineLength:
16
- Max: 93
17
-
18
- # Offense count: 4
19
- # Configuration parameters: EnforcedStyle, SupportedStyles.
20
- Style/ClassAndModuleChildren:
21
- Enabled: false
22
-
23
- # Offense count: 9
24
- Style/Documentation:
25
- Enabled: false
26
-
27
- # Offense count: 1
28
- Style/OpMethod:
29
- Enabled: false
@@ -1,41 +0,0 @@
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,481 +0,0 @@
1
- require File.dirname(__FILE__) + '/../test_helper.rb'
2
-
3
- class Ping::IssueReferenceTest < MiniTest::Test
4
- def setup
5
- Ping.reset
6
- end
7
-
8
- def extract(text)
9
- Ping::IssueReference.extract(text)
10
- end
11
-
12
- def extract_first(text)
13
- Ping::IssueReference.extract(text).first
14
- end
15
-
16
- context '.extract with standard syntax' do
17
- should 'extract single issue references' do
18
- text = 'See #43'
19
- issue = extract_first(text)
20
-
21
- assert_nil issue.qualifier
22
- assert_nil issue.repository
23
- assert_equal '43', issue.number
24
- end
25
-
26
- should 'extract single issue references followed by a period' do
27
- text = 'See #43.'
28
- issue = extract_first(text)
29
-
30
- assert_nil issue.qualifier
31
- assert_nil issue.repository
32
- assert_equal '43', issue.number
33
- end
34
-
35
- should 'extract close qualifiers' do
36
- %w(fix fixes fixed close closes closed resolve resolves resolved).each do |q|
37
- text = "#{q} #55"
38
- issue = extract_first(text)
39
-
40
- assert_equal q, issue.qualifier
41
- assert_nil issue.repository
42
- assert_equal '55', issue.number
43
- end
44
- end
45
-
46
- should 'extract dependency qualifiers' do
47
- %w(need needs needed require requires required).each do |q|
48
- text = "#{q} #123"
49
- issue = extract_first(text)
50
-
51
- assert_equal q, issue.qualifier
52
- assert_nil issue.repository
53
- assert_equal '123', issue.number
54
- end
55
- end
56
-
57
- should 'extract repository' do
58
- text = 'codetree/codetree#43'
59
- issue = extract_first(text)
60
-
61
- assert_nil issue.qualifier
62
- assert_equal 'codetree/codetree', issue.repository
63
- assert_equal '43', issue.number
64
- end
65
-
66
- should 'extract repository with qualifier' do
67
- text = 'Fixes codetree/codetree#43'
68
- issue = extract_first(text)
69
-
70
- assert_equal 'Fixes', issue.qualifier
71
- assert_equal 'codetree/codetree', issue.repository
72
- assert_equal '43', issue.number
73
- end
74
-
75
- should 'handle odd repository names' do
76
- text = 'giant-sequoia-123/scaling_octokitten#43'
77
- issue = extract_first(text)
78
-
79
- assert_equal 'giant-sequoia-123/scaling_octokitten', issue.repository
80
- assert_equal '43', issue.number
81
- end
82
-
83
- should 'extract multiple references' do
84
- text = 'You should look at #2 and #4 because #5 fixes codetree/codetree#6'
85
- refs = extract(text)
86
-
87
- assert refs.include?(2)
88
- assert refs.include?(4)
89
- assert refs.include?(5)
90
- assert refs.include?(6)
91
- end
92
-
93
- should 'not extract similar non-qualifiers' do
94
- text = 'afixes #43'
95
- issue = extract_first(text)
96
-
97
- assert_nil issue.qualifier
98
- assert_nil issue.repository
99
- assert_equal '43', issue.number
100
- end
101
-
102
- should 'not choke on case' do
103
- text = 'FIxEs #43'
104
- issue = extract_first(text)
105
-
106
- assert_equal 'FIxEs', issue.qualifier
107
- assert_nil issue.repository
108
- assert_equal '43', issue.number
109
- end
110
-
111
- should 'require one space between qualifier and issue' do
112
- text = 'fixes #43'
113
- issue = extract_first(text)
114
-
115
- assert_nil issue.qualifier
116
- assert_nil issue.repository
117
- assert_equal '43', issue.number
118
- end
119
-
120
- should 'handle variable casing in repo names' do
121
- text = 'needs Liquid-Labs/rf-app-admin-web-app#2'
122
- issue = extract_first(text)
123
-
124
- assert_equal 'needs', issue.qualifier
125
- assert_equal 'Liquid-Labs/rf-app-admin-web-app', issue.repository
126
- assert_equal '2', issue.number
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
159
- end
160
-
161
- context '.extract with GH-XXX syntax' do
162
- should 'extract single issue references' do
163
- text = 'See GH-43'
164
- issue = extract_first(text)
165
-
166
- assert_nil issue.qualifier
167
- assert_nil issue.repository
168
- assert_equal '43', issue.number
169
- end
170
-
171
- should 'extract lower case issue references' do
172
- text = 'See gh-43'
173
- issue = extract_first(text)
174
-
175
- assert_nil issue.qualifier
176
- assert_nil issue.repository
177
- assert_equal '43', issue.number
178
- end
179
-
180
- should 'extract single issue references followed by a period' do
181
- text = 'See GH-43.'
182
- issue = extract_first(text)
183
-
184
- assert_nil issue.qualifier
185
- assert_nil issue.repository
186
- assert_equal '43', issue.number
187
- end
188
-
189
- should 'extract close qualifiers' do
190
- %w(fix fixes fixed close closes closed resolve resolves resolved).each do |q|
191
- text = "#{q} GH-55"
192
- issue = extract_first(text)
193
-
194
- assert_equal q, issue.qualifier
195
- assert_nil issue.repository
196
- assert_equal '55', issue.number
197
- end
198
- end
199
-
200
- should 'extract dependency qualifiers' do
201
- %w(need needs needed require requires required).each do |q|
202
- text = "#{q} GH-123"
203
- issue = extract_first(text)
204
-
205
- assert_equal q, issue.qualifier
206
- assert_nil issue.repository
207
- assert_equal '123', issue.number
208
- end
209
- end
210
-
211
- should 'extract multiple references' do
212
- text = 'You should look at GH-2 and GH-4 because GH-5 fixes codetree/codetree#6'
213
- refs = extract(text)
214
-
215
- assert refs.include?(2)
216
- assert refs.include?(4)
217
- assert refs.include?(5)
218
- assert refs.include?(6)
219
- end
220
-
221
- should 'not extract similar non-qualifiers' do
222
- text = 'afixes GH-43'
223
- issue = extract_first(text)
224
-
225
- assert_nil issue.qualifier
226
- assert_nil issue.repository
227
- assert_equal '43', issue.number
228
- end
229
-
230
- should 'not choke on case' do
231
- text = 'FIxEs GH-43'
232
- issue = extract_first(text)
233
-
234
- assert_equal 'FIxEs', issue.qualifier
235
- assert_nil issue.repository
236
- assert_equal '43', issue.number
237
- end
238
-
239
- should 'require only one space between qualifier and issue' do
240
- text = 'fixes GH-43'
241
- issue = extract_first(text)
242
-
243
- assert_nil issue.qualifier
244
- assert_nil issue.repository
245
- assert_equal '43', issue.number
246
- end
247
-
248
- should 'require at least one space before GH' do
249
- text = 'fixes codetree/codetreeGH-99 and fixes GH-43'
250
- issue = extract_first(text)
251
-
252
- assert_equal 'fixes', issue.qualifier
253
- assert_nil issue.repository
254
- assert_equal '43', issue.number
255
- end
256
- end
257
-
258
- context '#issue_references with URL syntax' do
259
- should 'extract single issue references' do
260
- text = 'See https://github.com/codetree/feedback/issues/43'
261
- issue = extract_first(text)
262
-
263
- assert_nil issue.qualifier
264
- assert_equal 'codetree/feedback', issue.repository
265
- assert_equal '43', issue.number
266
- end
267
-
268
- should 'extract single pull requests references' do
269
- text = 'See https://github.com/codetree/feedback/pulls/43'
270
- issue = extract_first(text)
271
-
272
- assert_nil issue.qualifier
273
- assert_equal 'codetree/feedback', issue.repository
274
- assert_equal '43', issue.number
275
- end
276
-
277
- should 'extract single issue references followed by a period' do
278
- text = 'See https://github.com/codetree/feedback/issues/43.'
279
- issue = extract_first(text)
280
-
281
- assert_nil issue.qualifier
282
- assert_equal 'codetree/feedback', issue.repository
283
- assert_equal '43', issue.number
284
- end
285
-
286
- should 'extract close qualifiers' do
287
- %w(fix fixes fixed close closes closed resolve resolves resolved).each do |q|
288
- text = "#{q} https://github.com/codetree/feedback/issues/55"
289
- issue = extract_first(text)
290
- assert_equal q, issue.qualifier
291
- assert_equal 'codetree/feedback', issue.repository
292
- assert_equal '55', issue.number
293
- end
294
- end
295
-
296
- should 'extract dependency qualifiers' do
297
- %w(need needs needed require requires required).each do |q|
298
- text = "#{q} https://github.com/codetree/feedback/issues/123"
299
- issue = extract_first(text)
300
-
301
- assert_equal q, issue.qualifier
302
- assert_equal 'codetree/feedback', issue.repository
303
- assert_equal '123', issue.number
304
- end
305
- end
306
-
307
- should 'extract multiple references' do
308
- text = 'You should look at https://github.com/codetree/feedback/issues/2 ' \
309
- 'and https://github.com/codetree/feedback/issues/4 because ' \
310
- 'https://github.com/codetree/feedback/issues/5 fixes codetree/codetree#6'
311
-
312
- refs = extract(text)
313
-
314
- assert refs.include?(2)
315
- assert refs.include?(4)
316
- assert refs.include?(5)
317
- assert refs.include?(6)
318
- end
319
-
320
- should 'not extract similar non-qualifiers' do
321
- text = 'afixes https://github.com/codetree/feedback/issues/43'
322
- issue = extract_first(text)
323
-
324
- assert_nil issue.qualifier
325
- assert_equal 'codetree/feedback', issue.repository
326
- assert_equal '43', issue.number
327
- end
328
-
329
- should 'not choke on case' do
330
- text = 'FIxEs https://github.com/codetree/feedback/issues/43'
331
- issue = extract_first(text)
332
-
333
- assert_equal 'FIxEs', issue.qualifier
334
- assert_equal 'codetree/feedback', issue.repository
335
- assert_equal '43', issue.number
336
- end
337
-
338
- should 'require only one space between qualifier and issue' do
339
- text = 'fixes https://github.com/codetree/feedback/issues/43'
340
- issue = extract_first(text)
341
-
342
- assert_nil issue.qualifier
343
- assert_equal 'codetree/feedback', issue.repository
344
- assert_equal '43', issue.number
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
366
- end
367
-
368
- context '.replace' do
369
- should 'yield the phrase and parsed reference' do
370
- text = 'Fixes codetree/codetree#123 needs codetree/feedback#456'
371
-
372
- expected = [
373
- 'Fixes codetree/codetree#123',
374
- ' needs codetree/feedback#456'
375
- ]
376
-
377
- Ping::IssueReference.replace(text) do |phrase, reference|
378
- expected_phrase = expected.shift
379
- expected_reference = Ping::IssueReference.extract(expected_phrase).first
380
-
381
- assert_equal expected_phrase, phrase
382
- assert_equal expected_reference, reference
383
- end
384
- end
385
-
386
- context 'given a IssueReference replacement' do
387
- should 'handle qualifier + repo + number' do
388
- text = 'Fixes a/b#123 fixes #456'
389
-
390
- result = Ping::IssueReference.replace(text) do |_phrase, reference|
391
- reference.tap do |r|
392
- r.repository = 'codetree/feedback' unless r.repository
393
- end
394
- end
395
-
396
- assert_equal 'Fixes a/b#123 fixes codetree/feedback#456', result
397
- end
398
-
399
- should 'handle qualifier + number' do
400
- text = 'Fixes #123 fixes #456'
401
-
402
- result = Ping::IssueReference.replace(text) do |_phrase, reference|
403
- reference.tap do |r|
404
- r.qualifier = 'needs'
405
- r.repository = 'a/b'
406
- end
407
- end
408
-
409
- assert_equal 'needs a/b#123 needs a/b#456', result
410
- end
411
-
412
- should 'handle repo + number' do
413
- text = 'a/b#123 b/c#456'
414
-
415
- result = Ping::IssueReference.replace(text) do |_phrase, reference|
416
- reference.tap do |r|
417
- r.qualifier = 'needs'
418
- r.repository = 'd/e'
419
- end
420
- end
421
-
422
- assert_equal 'needs d/e#123 needs d/e#456', result
423
- end
424
-
425
- should 'handle number only' do
426
- text = '#123 #456'
427
-
428
- result = Ping::IssueReference.replace(text) do |_phrase, reference|
429
- reference.tap do |r|
430
- r.repository = 'd/e'
431
- end
432
- end
433
-
434
- assert_equal 'd/e#123 d/e#456', result
435
- end
436
- end
437
-
438
- context 'given a string replacement' do
439
- should 'replace references' do
440
- text = 'Fixes a/b#123 fixes #456'
441
-
442
- result = Ping::IssueReference.replace(text) do |phrase, _reference|
443
- phrase + ' bar'
444
- end
445
-
446
- assert_equal 'Fixes a/b#123 bar fixes #456 bar', result
447
- end
448
- end
449
- end
450
-
451
- context '#==' do
452
- should 'compare with integers' do
453
- issue = Ping::IssueReference.new('fixes', 'codetree/codetree', '123')
454
- assert issue == 123
455
- end
456
-
457
- should 'compare with strings' do
458
- issue = Ping::IssueReference.new('fixes', 'codetree/codetree', '123')
459
- assert issue == '123'
460
- end
461
-
462
- should 'compare with issues' do
463
- issue = Ping::IssueReference.new('fixes', 'codetree/codetree', '123')
464
- assert issue == Ping::IssueReference.new(nil, 'codetree/codetree', '123')
465
- end
466
- end
467
-
468
- context '#to_s' do
469
- should 'return the issue number' do
470
- issue = Ping::IssueReference.new('Fixes', 'codetree/codetree', '123')
471
- assert_equal '123', issue.to_s
472
- end
473
- end
474
-
475
- context '#to_i' do
476
- should 'return the integer issue number' do
477
- issue = Ping::IssueReference.new('Fixes', 'codetree/codetree', '123')
478
- assert_equal 123, issue.to_i
479
- end
480
- end
481
- end
@@ -1,45 +0,0 @@
1
- require File.dirname(__FILE__) + '/../test_helper.rb'
2
-
3
- class Ping::MentionTest < MiniTest::Test
4
- def extract(text)
5
- Ping::Mention.extract(text)
6
- end
7
-
8
- def extract_first(text)
9
- Ping::Mention.extract(text).first
10
- end
11
-
12
- context '.extract' do
13
- should 'extract @mentions' do
14
- text = "Hey there, @djreimer. How's @defunkt?"
15
- result = extract(text)
16
- assert result.include?('djreimer')
17
- assert result.include?('defunkt')
18
- end
19
-
20
- should 'de-dup mentions' do
21
- text = "Hey there, @djreimer. How's @djreimer?"
22
- result = extract(text)
23
- assert_equal 1, result.length
24
- end
25
- end
26
-
27
- context '#==' do
28
- should 'compare with strings' do
29
- mention = Ping::Mention.new('djreimer')
30
- assert mention == 'djreimer'
31
- end
32
-
33
- should 'compare with mentions' do
34
- mention = Ping::Mention.new('djreimer')
35
- assert mention == Ping::Mention.new('djreimer')
36
- end
37
- end
38
-
39
- context '#to_s' do
40
- should 'return the username' do
41
- mention = Ping::Mention.new('djreimer')
42
- assert_equal 'djreimer', mention.to_s
43
- end
44
- end
45
- end
@@ -1,4 +0,0 @@
1
- require File.dirname(__FILE__) + '/../test_helper.rb'
2
-
3
- class Ping::ParserTest < MiniTest::Test
4
- end
@@ -1,6 +0,0 @@
1
- $LOAD_PATH.unshift File.expand_path('../../lib', __FILE__)
2
-
3
- require 'ping'
4
- require 'minitest/autorun'
5
- require 'shoulda-context'
6
- require 'mocha/api'