ping 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml 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'