namae 0.8.7 → 0.9.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile +1 -1
- data/features/step_definitions/namae_steps.rb +11 -7
- data/lib/namae/name.rb +28 -0
- data/lib/namae/version.rb +2 -2
- data/namae.gemspec +3 -3
- data/spec/namae/name_spec.rb +38 -27
- data/spec/namae/parser_spec.rb +22 -22
- data/spec/namae/utility_spec.rb +3 -3
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ca79f39aed91f0816566c4374e8a80c2b10d7aef
|
4
|
+
data.tar.gz: 7e8b909610dab34673e3506f9abfbcbdba7f233a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1635916f55db9770ebc2b02b25af4b1d306119e5349db2ed6b5a146ab117e222081f7338c4e06a908fc1f1e8f58d887a99290cb4fecc7185f4baf3d508b15620
|
7
|
+
data.tar.gz: 891f0c209b26d0b0aabb79ad0cc1daa85410a900237482a36f0283ee674d603d68be12088ea9c4ae85ce35d1eee02ebb3dbe9b646d8052bd10e1c0e6b59246a8
|
data/Gemfile
CHANGED
@@ -13,24 +13,28 @@ end
|
|
13
13
|
|
14
14
|
Then /^the BibTeX parts should be:$/ do |table|
|
15
15
|
table.hashes.each do |row|
|
16
|
-
|
17
|
-
|
16
|
+
expect(
|
17
|
+
@name.values_at(:given, :particle, :family, :suffix).map(&:to_s)
|
18
|
+
).to eq(row.values_at('first', 'von', 'last', 'jr'))
|
18
19
|
end
|
19
20
|
end
|
20
21
|
|
21
22
|
Then /^the parts should be:$/ do |table|
|
22
23
|
table.hashes.each do |row|
|
23
|
-
|
24
|
-
|
24
|
+
expect(
|
25
|
+
@name.values_at(:given, :particle, :family, :suffix, :title, :appellation, :nick).map(&:to_s)
|
26
|
+
).to eq(row.values_at('given', 'particle', 'family', 'suffix', 'title', 'appellation', 'nick'))
|
25
27
|
end
|
26
28
|
end
|
27
29
|
|
28
30
|
Then /^there should be (\d+) names$/ do |count|
|
29
|
-
@names.length.
|
31
|
+
expect(@names.length).to eq(count.to_i)
|
30
32
|
end
|
31
33
|
|
32
34
|
Then /^the names should be:$/ do |table|
|
33
35
|
table.hashes.each_with_index do |row, i|
|
34
|
-
|
36
|
+
expect(
|
37
|
+
@names[i].values_at(*row.keys.map(&:to_sym)).map(&:to_s)
|
38
|
+
).to eq(row.values)
|
35
39
|
end
|
36
|
-
end
|
40
|
+
end
|
data/lib/namae/name.rb
CHANGED
@@ -49,6 +49,27 @@ module Namae
|
|
49
49
|
i.gsub!(/\s+/, '') unless options[:spaces]
|
50
50
|
i
|
51
51
|
end
|
52
|
+
|
53
|
+
# @param name [String] a name or part of a name
|
54
|
+
# @return [String] the passed-in name with normalized initials
|
55
|
+
def existing_initials_of(name, options = {})
|
56
|
+
return unless name
|
57
|
+
|
58
|
+
i = name.dup
|
59
|
+
|
60
|
+
i.gsub!(/\.+/, '')
|
61
|
+
i.gsub!(/\b[[:upper:]]+\b/) { |m| m.chars.join(' ') }
|
62
|
+
|
63
|
+
if options[:dots]
|
64
|
+
i.gsub!(/\b([[:upper:]])\b/, '\1.')
|
65
|
+
end
|
66
|
+
|
67
|
+
if !options[:spaces]
|
68
|
+
i.gsub!(/\b([[:upper:]]\.?)\s+/, '\1')
|
69
|
+
end
|
70
|
+
|
71
|
+
i
|
72
|
+
end
|
52
73
|
end
|
53
74
|
|
54
75
|
# A Name represents a single personal name, exposing its constituent
|
@@ -154,6 +175,13 @@ module Namae
|
|
154
175
|
super(*arguments.flatten.map { |k| k.is_a?(Symbol) ? Name.parts.index(k) : k })
|
155
176
|
end
|
156
177
|
|
178
|
+
def normalize_initials(options = {})
|
179
|
+
return self if given.nil?
|
180
|
+
|
181
|
+
options = Name.defaults[:initials].merge(options)
|
182
|
+
self.given = existing_initials_of given, options
|
183
|
+
self
|
184
|
+
end
|
157
185
|
|
158
186
|
# @return [String] a string representation of the name
|
159
187
|
def inspect
|
data/lib/namae/version.rb
CHANGED
data/namae.gemspec
CHANGED
@@ -2,16 +2,16 @@
|
|
2
2
|
# DO NOT EDIT THIS FILE DIRECTLY
|
3
3
|
# Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
|
4
4
|
# -*- encoding: utf-8 -*-
|
5
|
-
# stub: namae 0.
|
5
|
+
# stub: namae 0.9.0 ruby lib
|
6
6
|
|
7
7
|
Gem::Specification.new do |s|
|
8
8
|
s.name = "namae"
|
9
|
-
s.version = "0.
|
9
|
+
s.version = "0.9.0"
|
10
10
|
|
11
11
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
12
12
|
s.require_paths = ["lib"]
|
13
13
|
s.authors = ["Sylvester Keil", "Dan Collis-Puro"]
|
14
|
-
s.date = "2014-
|
14
|
+
s.date = "2014-06-10"
|
15
15
|
s.description = " Namae (\u{540d}\u{524d}) is a parser for human names. It recognizes personal names of various cultural backgrounds and tries to split them into their component parts (e.g., given and family names, honorifics etc.). "
|
16
16
|
s.email = ["sylvester@keil.or.at", "dan@collispuro.com"]
|
17
17
|
s.extra_rdoc_files = [
|
data/spec/namae/name_spec.rb
CHANGED
@@ -4,117 +4,128 @@ module Namae
|
|
4
4
|
describe '.new' do
|
5
5
|
|
6
6
|
it 'returns an empty name by default' do
|
7
|
-
Name.new.
|
7
|
+
expect(Name.new).to be_empty
|
8
8
|
end
|
9
9
|
|
10
10
|
it 'sets all passed-in attributes' do
|
11
|
-
Name.new(:given => 'Foo').given.
|
11
|
+
expect(Name.new(:given => 'Foo').given).to eq('Foo')
|
12
12
|
end
|
13
13
|
|
14
14
|
it 'ignores unknown attributes' do
|
15
|
-
Name.new(:foo => 'bar').
|
15
|
+
expect(Name.new(:foo => 'bar')).to be_empty
|
16
16
|
end
|
17
17
|
|
18
18
|
end
|
19
19
|
|
20
20
|
describe '.parse' do
|
21
21
|
it 'returns an empty name for an empty string' do
|
22
|
-
Name.parse('').
|
23
|
-
Name.parse('').
|
22
|
+
expect(Name.parse('')).to be_empty
|
23
|
+
expect(Name.parse('')).to be_a(Name)
|
24
24
|
end
|
25
25
|
|
26
26
|
it 'returns a single name object if there is more than one name' do
|
27
|
-
Name.parse('Plato and Sokrates').given.
|
27
|
+
expect(Name.parse('Plato and Sokrates').given).to eq('Plato')
|
28
28
|
end
|
29
29
|
end
|
30
30
|
|
31
31
|
describe '#values_at' do
|
32
32
|
it 'returns an array with the given values' do
|
33
|
-
Name.new(:family => 'foo').values_at(:family).
|
33
|
+
expect(Name.new(:family => 'foo').values_at(:family)).to eq(['foo'])
|
34
34
|
end
|
35
35
|
|
36
36
|
it 'returns an array with the given values' do
|
37
|
-
Name.new(:family => 'foo').values_at(:family).
|
37
|
+
expect(Name.new(:family => 'foo').values_at(:family)).to eq(['foo'])
|
38
38
|
end
|
39
39
|
end
|
40
40
|
|
41
41
|
describe '#initials' do
|
42
42
|
it "returns the name's initials" do
|
43
|
-
Name.new(:family => 'Poe', :given => 'Edgar A.').initials.
|
43
|
+
expect(Name.new(:family => 'Poe', :given => 'Edgar A.').initials).to eq('E.A.P.')
|
44
44
|
end
|
45
45
|
|
46
46
|
it "returns the name's initials but leaves the family name expanded" do
|
47
|
-
Name.new(:family => 'Poe', :given => 'Edgar A.').initials(:expand => true).
|
47
|
+
expect(Name.new(:family => 'Poe', :given => 'Edgar A.').initials(:expand => true)).to eq('E.A. Poe')
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
describe '#normalize_initials' do
|
52
|
+
it "adds dots to existing initials" do
|
53
|
+
expect(Name.new(:given => 'Edgar A').normalize_initials.given).to eq('Edgar A.')
|
54
|
+
expect(Name.new(:given => 'A').normalize_initials.given).to eq('A.')
|
55
|
+
expect(Name.new(:given => 'E A').normalize_initials.given).to eq('E.A.')
|
56
|
+
expect(Name.new(:given => 'EA').normalize_initials.given).to eq('E.A.')
|
57
|
+
expect(Name.new(:given => 'JFK').normalize_initials.given).to eq('J.F.K.')
|
58
|
+
expect(Name.new(:given => 'E-A').normalize_initials.given).to eq('E.-A.')
|
48
59
|
end
|
49
60
|
end
|
50
61
|
|
51
62
|
describe '#merge' do
|
52
63
|
it 'merges the attributes in the given hash into the name' do
|
53
|
-
Name.new.merge(:family => 'foo').family.
|
64
|
+
expect(Name.new.merge(:family => 'foo').family).to eq('foo')
|
54
65
|
end
|
55
66
|
|
56
67
|
it 'merges the attributes in the given name into the name' do
|
57
|
-
Name.new.merge(Name.new(:family => 'foo')).family.
|
68
|
+
expect(Name.new.merge(Name.new(:family => 'foo')).family).to eq('foo')
|
58
69
|
end
|
59
70
|
|
60
71
|
it 'ignores unknown attributes' do
|
61
|
-
Name.new.merge(:foo => 'bar').
|
72
|
+
expect(Name.new.merge(:foo => 'bar')).to be_empty
|
62
73
|
end
|
63
74
|
|
64
75
|
it 'ignores nil values' do
|
65
|
-
Name.new(:family => 'foo').merge(:family => nil).family.
|
76
|
+
expect(Name.new(:family => 'foo').merge(:family => nil).family).to eq('foo')
|
66
77
|
end
|
67
78
|
end
|
68
79
|
|
69
80
|
describe '#inspect' do
|
70
81
|
it 'returns the name as a string' do
|
71
|
-
Name.new(:given => 'Ichiro').inspect.
|
82
|
+
expect(Name.new(:given => 'Ichiro').inspect).to eq('#<Name given="Ichiro">')
|
72
83
|
end
|
73
84
|
end
|
74
85
|
|
75
86
|
describe '#sort_order' do
|
76
87
|
it 'returns an empty string by default' do
|
77
|
-
Name.new.sort_order.
|
88
|
+
expect(Name.new.sort_order).to eq('')
|
78
89
|
end
|
79
90
|
|
80
91
|
it 'returns the name in sort order' do
|
81
|
-
Name.new(:given => 'Ichiro', :family => 'Suzuki').sort_order.
|
92
|
+
expect(Name.new(:given => 'Ichiro', :family => 'Suzuki').sort_order).to eq('Suzuki, Ichiro')
|
82
93
|
end
|
83
94
|
|
84
95
|
it 'returns only the given if there is no family name' do
|
85
|
-
Name.new(:given => 'Ichiro').sort_order.
|
96
|
+
expect(Name.new(:given => 'Ichiro').sort_order).to eq('Ichiro')
|
86
97
|
end
|
87
98
|
|
88
99
|
it 'returns only the family if there is no given name' do
|
89
|
-
Name.new(:family => 'Suzuki').sort_order.
|
100
|
+
expect(Name.new(:family => 'Suzuki').sort_order).to eq('Suzuki')
|
90
101
|
end
|
91
102
|
|
92
103
|
it 'includes the suffix' do
|
93
|
-
Name.new(:family => 'Griffey', :suffix => 'Jr.').sort_order.
|
94
|
-
Name.new(:family => 'Griffey', :given => 'Ken', :suffix => 'Jr.').sort_order.
|
104
|
+
expect(Name.new(:family => 'Griffey', :suffix => 'Jr.').sort_order).to eq('Griffey, Jr.')
|
105
|
+
expect(Name.new(:family => 'Griffey', :given => 'Ken', :suffix => 'Jr.').sort_order).to eq('Griffey, Jr., Ken')
|
95
106
|
end
|
96
107
|
end
|
97
108
|
|
98
109
|
describe '#display_order' do
|
99
110
|
it 'returns an empty string by default' do
|
100
|
-
Name.new.display_order.
|
111
|
+
expect(Name.new.display_order).to eq('')
|
101
112
|
end
|
102
113
|
|
103
114
|
it 'returns the name in display order' do
|
104
|
-
Name.new(:given => 'Ichiro', :family => 'Suzuki').display_order.
|
115
|
+
expect(Name.new(:given => 'Ichiro', :family => 'Suzuki').display_order).to eq('Ichiro Suzuki')
|
105
116
|
end
|
106
117
|
|
107
118
|
it 'returns only the given if there is no family name' do
|
108
|
-
Name.new(:given => 'Ichiro').display_order.
|
119
|
+
expect(Name.new(:given => 'Ichiro').display_order).to eq('Ichiro')
|
109
120
|
end
|
110
121
|
|
111
122
|
it 'returns only the family if there is no given name' do
|
112
|
-
Name.new(:family => 'Suzuki').display_order.
|
123
|
+
expect(Name.new(:family => 'Suzuki').display_order).to eq('Suzuki')
|
113
124
|
end
|
114
125
|
|
115
126
|
it 'includes the suffix' do
|
116
|
-
Name.new(:family => 'Griffey', :suffix => 'Jr.').display_order.
|
117
|
-
Name.new(:family => 'Griffey', :given => 'Ken', :suffix => 'Jr.').display_order.
|
127
|
+
expect(Name.new(:family => 'Griffey', :suffix => 'Jr.').display_order).to eq('Griffey Jr.')
|
128
|
+
expect(Name.new(:family => 'Griffey', :given => 'Ken', :suffix => 'Jr.').display_order).to eq('Ken Griffey Jr.')
|
118
129
|
end
|
119
130
|
end
|
120
131
|
|
data/spec/namae/parser_spec.rb
CHANGED
@@ -2,14 +2,14 @@ module Namae
|
|
2
2
|
describe 'Parser' do
|
3
3
|
|
4
4
|
it 'does not respond to .new' do
|
5
|
-
Parser.
|
5
|
+
expect(Parser).not_to respond_to(:new)
|
6
6
|
end
|
7
7
|
|
8
8
|
describe '.instance' do
|
9
9
|
let(:parser) { Parser.instance }
|
10
10
|
|
11
11
|
it 'returns the parser' do
|
12
|
-
parser.
|
12
|
+
expect(parser).to be_a(Parser)
|
13
13
|
end
|
14
14
|
|
15
15
|
describe '#next_token' do
|
@@ -19,35 +19,35 @@ module Namae
|
|
19
19
|
|
20
20
|
describe 'when the input is empty' do
|
21
21
|
it 'returns nil' do
|
22
|
-
parser.send(:next_token).
|
22
|
+
expect(parser.send(:next_token)).to be_nil
|
23
23
|
end
|
24
24
|
end
|
25
25
|
|
26
26
|
describe 'when the next input is " and "' do
|
27
27
|
before { parser.send(:input).string = ' and ' }
|
28
28
|
it 'returns an AND token' do
|
29
|
-
parser.send(:next_token).
|
29
|
+
expect(parser.send(:next_token)).to eq([:AND, :AND])
|
30
30
|
end
|
31
31
|
end
|
32
32
|
|
33
33
|
describe 'when the next input is " & "' do
|
34
34
|
before { parser.send(:input).string = ' & ' }
|
35
35
|
it 'returns an AND token' do
|
36
|
-
parser.send(:next_token).
|
36
|
+
expect(parser.send(:next_token)).to eq([:AND, :AND])
|
37
37
|
end
|
38
38
|
end
|
39
39
|
|
40
40
|
describe 'when the next input is " , "' do
|
41
41
|
before { parser.send(:input).string = ' , ' }
|
42
42
|
it 'returns a COMMA token' do
|
43
|
-
parser.send(:next_token).
|
43
|
+
expect(parser.send(:next_token)).to eq([:COMMA, :COMMA])
|
44
44
|
end
|
45
45
|
end
|
46
46
|
|
47
47
|
describe 'when the next input is " \'foo bar\' "' do
|
48
48
|
before { parser.send(:input).string = " 'foo bar' " }
|
49
49
|
it 'returns a NICK token' do
|
50
|
-
parser.send(:next_token).
|
50
|
+
expect(parser.send(:next_token)).to eq([:NICK, 'foo bar'])
|
51
51
|
end
|
52
52
|
end
|
53
53
|
|
@@ -55,7 +55,7 @@ module Namae
|
|
55
55
|
describe "the next token is #{appellation.inspect}" do
|
56
56
|
before { parser.send(:input).string = appellation }
|
57
57
|
it 'returns an APPELLATION token' do
|
58
|
-
parser.send(:next_token).
|
58
|
+
expect(parser.send(:next_token)).to eq([:APPELLATION, appellation])
|
59
59
|
end
|
60
60
|
end
|
61
61
|
end
|
@@ -64,11 +64,11 @@ module Namae
|
|
64
64
|
describe "the next token is #{suffix.inspect}" do
|
65
65
|
before { parser.send(:input).string = suffix }
|
66
66
|
it 'returns an SUFFIX token' do
|
67
|
-
parser.send(:next_token).
|
67
|
+
expect(parser.send(:next_token)).to eq([:SUFFIX, suffix])
|
68
68
|
end
|
69
69
|
|
70
70
|
it 'the input matches the suffix pattern' do
|
71
|
-
parser.suffix.
|
71
|
+
expect(parser.suffix).to match(suffix)
|
72
72
|
end
|
73
73
|
end
|
74
74
|
end
|
@@ -77,52 +77,52 @@ module Namae
|
|
77
77
|
|
78
78
|
describe '#parse!' do
|
79
79
|
it 'returns an empty list by default' do
|
80
|
-
parser.parse!('').
|
80
|
+
expect(parser.parse!('')).to be_empty
|
81
81
|
end
|
82
82
|
|
83
83
|
it 'returns a list of names' do
|
84
|
-
parser.parse!('foo')[0].
|
84
|
+
expect(parser.parse!('foo')[0]).to be_a(Name)
|
85
85
|
end
|
86
86
|
|
87
87
|
describe 'when parsing a single name' do
|
88
88
|
|
89
89
|
it 'treats "Ichiro" as a given name' do
|
90
|
-
parser.parse!('Ichiro')[0].given.
|
90
|
+
expect(parser.parse!('Ichiro')[0].given).to eq('Ichiro')
|
91
91
|
end
|
92
92
|
|
93
93
|
it 'treats "Lord Byron" as a title and family name' do
|
94
|
-
parser.parse!('Lord Byron')[0].values_at(:family, :title).
|
94
|
+
expect(parser.parse!('Lord Byron')[0].values_at(:family, :title)).to eq(['Byron', 'Lord'])
|
95
95
|
end
|
96
96
|
|
97
97
|
it 'parses given and family part name in "Ichiro Suzuki"' do
|
98
|
-
parser.parse!('Ichiro Suzuki')[0].values_at(:given, :family).
|
98
|
+
expect(parser.parse!('Ichiro Suzuki')[0].values_at(:given, :family)).to eq(%w{Ichiro Suzuki})
|
99
99
|
end
|
100
100
|
|
101
101
|
it 'parses given, nick and family part name in "Yukihiro \'Matz\' Matsumoto"' do
|
102
|
-
parser.parse!("Yukihiro 'Matz' Matsumoto")[0].values_at(:given, :family, :nick).
|
102
|
+
expect(parser.parse!("Yukihiro 'Matz' Matsumoto")[0].values_at(:given, :family, :nick)).to eq(%w{Yukihiro Matsumoto Matz})
|
103
103
|
end
|
104
104
|
|
105
105
|
it 'parses given, nick and family part name in \'Yukihiro "Matz" Matsumoto\'' do
|
106
|
-
parser.parse!('Yukihiro "Matz" Matsumoto')[0].values_at(:given, :family, :nick).
|
106
|
+
expect(parser.parse!('Yukihiro "Matz" Matsumoto')[0].values_at(:given, :family, :nick)).to eq(%w{Yukihiro Matsumoto Matz})
|
107
107
|
end
|
108
108
|
|
109
109
|
it 'parses given and family name in "Poe, Edgar A."' do
|
110
|
-
parser.parse!('Poe, Edgar A.')[0].values_at(:given, :family).
|
110
|
+
expect(parser.parse!('Poe, Edgar A.')[0].values_at(:given, :family)).to eq(['Edgar A.', 'Poe'])
|
111
111
|
end
|
112
112
|
|
113
113
|
%w{Mr. Mr Mrs. Ms Herr Frau Miss}.each do |appellation|
|
114
114
|
it "recognizes #{appellation.inspect} as an appellation" do
|
115
|
-
parser.parse!([appellation, 'Edgar A. Poe'].join(' '))[0].appellation.
|
115
|
+
expect(parser.parse!([appellation, 'Edgar A. Poe'].join(' '))[0].appellation).to eq(appellation)
|
116
116
|
end
|
117
117
|
end
|
118
118
|
|
119
119
|
it 'parses common Jr. as a suffix in sort order' do
|
120
|
-
parser.parse!('Griffey, Jr., Ken')[0].values_at(:given, :family, :suffix).
|
121
|
-
parser.parse!('Griffey, Ken, Jr.')[0].values_at(:given, :family, :suffix).
|
120
|
+
expect(parser.parse!('Griffey, Jr., Ken')[0].values_at(:given, :family, :suffix)).to eq(['Ken', 'Griffey', 'Jr.'])
|
121
|
+
expect(parser.parse!('Griffey, Ken, Jr.')[0].values_at(:given, :family, :suffix)).to eq(['Ken', 'Griffey', 'Jr.'])
|
122
122
|
end
|
123
123
|
|
124
124
|
it 'parses common Jr. as a suffix in display order' do
|
125
|
-
parser.parse!('Ken Griffey Jr.')[0].values_at(:given, :family, :suffix).
|
125
|
+
expect(parser.parse!('Ken Griffey Jr.')[0].values_at(:given, :family, :suffix)).to eq(['Ken', 'Griffey', 'Jr.'])
|
126
126
|
end
|
127
127
|
|
128
128
|
end
|
data/spec/namae/utility_spec.rb
CHANGED
@@ -2,19 +2,19 @@ describe 'Namae' do
|
|
2
2
|
|
3
3
|
describe '.parse' do
|
4
4
|
it 'returns an empty list by default' do
|
5
|
-
Namae.parse('').
|
5
|
+
expect(Namae.parse('')).to be_empty
|
6
6
|
end
|
7
7
|
end
|
8
8
|
|
9
9
|
describe '.parse!' do
|
10
10
|
it 'returns an empty list by default' do
|
11
|
-
Namae.parse!('').
|
11
|
+
expect(Namae.parse!('')).to be_empty
|
12
12
|
end
|
13
13
|
end
|
14
14
|
|
15
15
|
describe '.options' do
|
16
16
|
it 'returns the parse options' do
|
17
|
-
Namae.options.
|
17
|
+
expect(Namae.options).to equal(Namae::Parser.instance.options)
|
18
18
|
end
|
19
19
|
end
|
20
20
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: namae
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.9.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sylvester Keil
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2014-
|
12
|
+
date: 2014-06-10 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: simplecov
|