mailmap 0.1.0 → 0.2.0

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: cdc12709b9e48412d76d01f4f75c018bb0822e6d3e25ced6527cdca9c507a97f
4
- data.tar.gz: e3a713e40d6f7ae4134ac8c1021558e01aa23f9f3dae5fb039bfc724c6a648dd
3
+ metadata.gz: 4eddd3d4d856573b2f0886a08f721b9743db7135db526e2931106827cd3fd3cd
4
+ data.tar.gz: d030d00fcaede82db18bd7978efa7c262344d2ed561dab7dc248c299935c45dd
5
5
  SHA512:
6
- metadata.gz: df1d46c1608c78dae83f1359b13af597a24d11cf531d44bd4aa9d6f8fd71e1d89779ff3018f357d7bd17c46e628e985905a7906a593bf9e23f55af4dbcdee7e8
7
- data.tar.gz: 1519019ddacc4d53af233a9638bbc7717df61a15457cbc88d356dc964c23c8608f0f4eb565e646f6b834ee2143643be3948e80def17195d669f4e090fbbc2c83
6
+ metadata.gz: b8c963050607ed6da6240013aba42103c553b33cb490a58ba0f4ed147a3f54168f0796bdce4e96cc9b2f5e6aae2375c06ec48685aa2e57cae1d2c86dd08499c7
7
+ data.tar.gz: bf65c0613576ef87a0efe85bbdde22e4cf84036a5fc74a4bb11c4575914fab1e952d4c55a6c4b7a4abbb663894ea8450452bb1cba9e57847eaf87af215051665
data/lib/mailmap/map.rb CHANGED
@@ -1,6 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'forwardable'
4
3
  require 'strscan'
5
4
 
6
5
  module Mailmap
@@ -10,9 +9,7 @@ module Mailmap
10
9
 
11
10
  # A Map represents a .mailmap file.
12
11
  class Map
13
- extend Forwardable
14
-
15
- def_delegators :each, *Enumerable.instance_methods(false)
12
+ include Enumerable
16
13
 
17
14
  class << self
18
15
  # Load a mailmap file and return Map object.
@@ -28,18 +25,20 @@ module Mailmap
28
25
 
29
26
  # @param string [String] the string in .mailmap format
30
27
  def initialize(string)
28
+ # @type ivar @map: Hash[String, Hash[String?, String?]]
31
29
  @map = Hash.new { |h, k| h[k] = {} }
32
30
  parse(string)
33
31
  end
34
32
 
35
33
  def each
36
- return enum_for(:each) unless block_given?
34
+ return enum_for unless block_given?
37
35
 
38
36
  @map.each do |commit_email, entries_by_commit_name|
39
37
  entries_by_commit_name.each do |commit_name, (proper_name, proper_email)|
40
- yield [proper_name, proper_email, commit_name, commit_email]
38
+ yield proper_name, proper_email, commit_name, commit_email
41
39
  end
42
40
  end
41
+ self
43
42
  end
44
43
 
45
44
  # Look up the person's canonical name and email address.
@@ -47,7 +46,9 @@ module Mailmap
47
46
  #
48
47
  # @param commit_name_or_nil [String, nil] the name in commit or nil
49
48
  # @param commit_email [String] the name in commit
50
- # @return [Array<String>] if found, a pair of proper name and email or nil
49
+ # @return [(String, String)] if found, a pair of proper name and email
50
+ # @return [(String, nil)] if only proper name is found
51
+ # @return [(nil, String)] if only proper email is found
51
52
  # @return [nil] if not found
52
53
  def lookup(commit_name_or_nil, commit_email)
53
54
  commit_name = commit_name_or_nil&.downcase
@@ -56,12 +57,13 @@ module Mailmap
56
57
  hash[commit_name] || hash[nil]
57
58
  end
58
59
 
59
- # Like `git-check-mailmap` command, look up the person's canonical name and email address.
60
+ # Like +git-check-mailmap+ command, look up the person's canonical name and email address.
60
61
  # If found, return them; otherwise return the input as-is.
61
62
  #
62
63
  # @param commit_name_or_nil [String, nil] the name in commit or nil
63
64
  # @param commit_email [String] the email in commit
64
- # @return [Array<String>] a pair of proper name and email
65
+ # @return [(String, String)] a pair of proper name and email
66
+ # @return [(nil, String)] if proper name is not found and +commit_name+ is not provided
65
67
  def resolve(commit_name_or_nil, commit_email)
66
68
  proper_name, proper_email = lookup(commit_name_or_nil, commit_email)
67
69
  proper_name ||= commit_name_or_nil
@@ -76,8 +78,8 @@ module Mailmap
76
78
  # @return [Boolean]
77
79
  def include_name?(name)
78
80
  name = name.downcase
79
- any? do |(proper_name, _proper_email, commit_name, _commit_email)|
80
- proper_name.downcase == name || commit_name == name
81
+ any? do |proper_name, _proper_email, commit_name, _commit_email|
82
+ proper_name&.downcase == name || commit_name == name
81
83
  end
82
84
  end
83
85
 
@@ -88,8 +90,8 @@ module Mailmap
88
90
  # @return [Boolean]
89
91
  def include_email?(email)
90
92
  email = email.downcase
91
- any? do |(_proper_name, proper_email, _commit_name, commit_email)|
92
- proper_email.downcase == email || commit_email == email
93
+ any? do |_proper_name, proper_email, _commit_name, commit_email|
94
+ proper_email&.downcase == email || commit_email == email
93
95
  end
94
96
  end
95
97
 
@@ -104,7 +106,9 @@ module Mailmap
104
106
  end
105
107
 
106
108
  def parse_name_and_email(line, line_number) # rubocop:disable Metrics/AbcSize, Metrics/MethodLength
109
+ # @type var names: Array[String]
107
110
  names = []
111
+ # @type var emails: Array[String]
108
112
  emails = []
109
113
  scanner = StringScanner.new(line)
110
114
  2.times do
@@ -114,9 +118,9 @@ module Mailmap
114
118
  scanner.scan(/[^>]+/).then { |s| emails << s if s }
115
119
  scanner.skip(/>/)
116
120
  end
117
- raise ParserError, "Missing commit email at line #{line_number}" if emails.empty?
118
-
119
121
  commit_email = emails.pop&.downcase
122
+ raise ParserError, "Missing commit email at line #{line_number}" unless commit_email
123
+
120
124
  proper_email = emails.pop
121
125
  proper_name = names.shift
122
126
  commit_name = names.shift&.downcase
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Mailmap
4
- VERSION = '0.1.0'
4
+ VERSION = '0.2.0'
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mailmap
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ryosuke Ito
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-12-05 00:00:00.000000000 Z
11
+ date: 2023-01-27 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: Parser for Git Mailmap (.mailmap)
14
14
  email: