bibtex-ruby 4.4.7 → 5.0.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.

Potentially problematic release.


This version of bibtex-ruby might be problematic. Click here for more details.

Files changed (46) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +23 -24
  3. data/History.txt +4 -0
  4. data/Rakefile +23 -25
  5. data/bibtex-ruby.gemspec +1 -1
  6. data/examples/bib2html.rb +5 -6
  7. data/examples/bib2yaml.rb +2 -2
  8. data/features/step_definitions/bibtex_steps.rb +3 -6
  9. data/features/step_definitions/name_steps.rb +1 -2
  10. data/lib/bibtex.rb +11 -13
  11. data/lib/bibtex/bibliography.rb +45 -58
  12. data/lib/bibtex/compatibility.rb +3 -5
  13. data/lib/bibtex/elements.rb +49 -42
  14. data/lib/bibtex/entry.rb +80 -84
  15. data/lib/bibtex/entry/citeproc_converter.rb +47 -52
  16. data/lib/bibtex/entry/rdf_converter.rb +97 -63
  17. data/lib/bibtex/error.rb +10 -11
  18. data/lib/bibtex/extensions.rb +2 -5
  19. data/lib/bibtex/filters.rb +4 -9
  20. data/lib/bibtex/filters/latex.rb +0 -2
  21. data/lib/bibtex/filters/linebreaks.rb +0 -2
  22. data/lib/bibtex/lexer.rb +81 -81
  23. data/lib/bibtex/names.rb +24 -28
  24. data/lib/bibtex/replaceable.rb +15 -17
  25. data/lib/bibtex/utilities.rb +5 -10
  26. data/lib/bibtex/value.rb +28 -34
  27. data/lib/bibtex/version.rb +6 -6
  28. data/test/benchmark.rb +20 -22
  29. data/test/bibtex/entry/test_rdf_converter.rb +3 -5
  30. data/test/bibtex/test_bibliography.rb +22 -35
  31. data/test/bibtex/test_elements.rb +7 -15
  32. data/test/bibtex/test_entry.rb +78 -87
  33. data/test/bibtex/test_filters.rb +8 -7
  34. data/test/bibtex/test_lexer.rb +10 -13
  35. data/test/bibtex/test_name_parser.rb +6 -9
  36. data/test/bibtex/test_names.rb +50 -55
  37. data/test/bibtex/test_parser.rb +30 -34
  38. data/test/bibtex/test_string.rb +8 -9
  39. data/test/bibtex/test_utilities.rb +6 -9
  40. data/test/bibtex/test_value.rb +41 -43
  41. data/test/helper.rb +3 -6
  42. data/test/macruby.rb +12 -13
  43. data/test/profile.rb +16 -16
  44. data/test/test_bibtex.rb +10 -15
  45. data/test/test_export.rb +5 -13
  46. metadata +4 -4
@@ -1,6 +1,6 @@
1
1
  #--
2
2
  # BibTeX-Ruby
3
- # Copyright (C) 2010 Sylvester Keil <sylvester.keil.or.at>
3
+ # Copyright (C) 2010 Sylvester Keil <sylvester.keil.or.at>
4
4
  #
5
5
  # This program is free software: you can redistribute it and/or modify
6
6
  # it under the terms of the GNU General Public License as published by
@@ -9,15 +9,14 @@
9
9
  #
10
10
  # This program is distributed in the hope that it will be useful,
11
11
  # but WITHOUT ANY WARRANTY; without even the implied warranty of
12
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
13
  # GNU General Public License for more details.
14
14
  #
15
15
  # You should have received a copy of the GNU General Public License
16
- # along with this program. If not, see <http://www.gnu.org/licenses/>.
16
+ # along with this program. If not, see <http://www.gnu.org/licenses/>.
17
17
  #++
18
18
 
19
19
  module BibTeX
20
-
21
20
  #
22
21
  # The Replaceable module provides methods that expose a Value attribute
23
22
  # and the ability to join or replace the contained BibTeX symbols.
@@ -27,26 +26,25 @@ module BibTeX
27
26
 
28
27
  attr_reader :value
29
28
 
30
- def value=(value)
31
- @value = Value.new(value)
32
- end
29
+ def value=(value)
30
+ @value = Value.new(value)
31
+ end
33
32
 
34
- def replace(*arguments)
35
- @value.replace(*arguments)
36
- self
37
- end
33
+ def replace(*arguments)
34
+ @value.replace(*arguments)
35
+ self
36
+ end
38
37
 
39
38
  def join
40
39
  @value.join
41
40
  self
42
41
  end
43
42
 
44
- def <<(value)
45
- @value << value
46
- self
47
- end
48
-
49
- alias :v :value
43
+ def <<(value)
44
+ @value << value
45
+ self
46
+ end
50
47
 
48
+ alias v value
51
49
  end
52
50
  end
@@ -17,9 +17,7 @@
17
17
  #++
18
18
 
19
19
  module BibTeX
20
-
21
20
  class << self
22
-
23
21
  # Opens a BibTeX file or URI and returns a corresponding +Bibliography+
24
22
  # object or, if a block is given, yields the Bibliography to the block,
25
23
  # ensuring that the file is saved.
@@ -30,10 +28,9 @@ module BibTeX
30
28
  # Parses the given string and returns a corresponding +Bibliography+ object.
31
29
  # Delegates to BibTeX.open if the string is a filename or URI.
32
30
  def parse(string, options = {}, &block)
33
- case
34
- when string.length < 260 && File.exist?(string)
31
+ if string.length < 260 && File.exist?(string)
35
32
  Bibliography.open(string, options, &block)
36
- when string =~ /\A[a-z]+:\/\//i
33
+ elsif string =~ %r{\A[a-z]+://}i
37
34
  Bibliography.open(string, options)
38
35
  else
39
36
  Bibliography.parse(string, options)
@@ -50,10 +47,8 @@ module BibTeX
50
47
  Names.parse(string)
51
48
  end
52
49
 
53
- alias :name :names
54
- alias :parse_name :names
55
- alias :parse_names :names
56
-
50
+ alias name names
51
+ alias parse_name names
52
+ alias parse_names names
57
53
  end
58
-
59
54
  end
data/lib/bibtex/value.rb CHANGED
@@ -1,5 +1,3 @@
1
- # -*- coding: utf-8 -*-
2
-
3
1
  #--
4
2
  # BibTeX-Ruby
5
3
  # Copyright (C) 2010-2015 Sylvester Keil <sylvester.keil.or.at>
@@ -21,8 +19,6 @@
21
19
  require 'forwardable'
22
20
 
23
21
  module BibTeX
24
-
25
-
26
22
  # A BibTeX Value is something very much like a string. In BibTeX files it
27
23
  # can appear on the right hand side of @string or @entry field assignments
28
24
  # or as @preamble contents. In the example below [VALUE] indicates possible
@@ -53,9 +49,9 @@ module BibTeX
53
49
  alias to_a tokens
54
50
 
55
51
  def_delegators :to_s, :=~, :===,
56
- *String.instance_methods(false).reject { |m|
57
- m =~ /^\W|^(length|dup|replace|to_s|inspect)$|!$/
58
- }
52
+ *String.instance_methods(false).reject do |m|
53
+ m =~ /^\W|^(length|dup|replace|to_s|inspect)$|!$/
54
+ end
59
55
 
60
56
  def_delegators :@tokens, :[], :length
61
57
  def_delegator :@tokens, :each, :each_token
@@ -79,9 +75,8 @@ module BibTeX
79
75
 
80
76
  def initialize_copy(other)
81
77
  @tokens = other.tokens.map do |token|
82
- case
83
- when token.nil? then nil
84
- when token.is_a?(Symbol) then token
78
+ if token.nil? then nil
79
+ elsif token.is_a?(Symbol) then token
85
80
  else token.dup
86
81
  end
87
82
  end
@@ -115,7 +110,7 @@ module BibTeX
115
110
  if argument.respond_to?(:to_s)
116
111
  @tokens << argument.to_s
117
112
  else
118
- raise(ArgumentError, "Failed to create Value from argument #{ argument.inspect }; expected String, Symbol or Value instance.")
113
+ raise(ArgumentError, "Failed to create Value from argument #{argument.inspect}; expected String, Symbol or Value instance.")
119
114
  end
120
115
  end
121
116
  self
@@ -124,10 +119,10 @@ module BibTeX
124
119
  alias << add
125
120
  alias push add
126
121
 
127
- [:strip!, :upcase!, :downcase!, :sub!, :gsub!, :chop!, :chomp!, :rstrip!].each do |method_id|
122
+ %i[strip! upcase! downcase! sub! gsub! chop! chomp! rstrip!].each do |method_id|
128
123
  define_method(method_id) do |*arguments, &block|
129
124
  @tokens.each do |part|
130
- part.send(method_id, *arguments, &block) unless part.nil?
125
+ part&.send(method_id, *arguments, &block)
131
126
  end
132
127
  self
133
128
  end
@@ -135,6 +130,7 @@ module BibTeX
135
130
 
136
131
  def replace(*arguments)
137
132
  return self unless has_symbol?
133
+
138
134
  arguments.flatten.each do |argument|
139
135
  case argument
140
136
  when ::String # simulates Ruby's String#replace
@@ -148,7 +144,6 @@ module BibTeX
148
144
  self
149
145
  end
150
146
 
151
-
152
147
  # call-seq:
153
148
  # Value.new('foo', 'bar').join #=> <'foobar'>
154
149
  # Value.new(:foo, 'bar').join #=> <:foo, 'bar'>
@@ -157,13 +152,12 @@ module BibTeX
157
152
  #
158
153
  # @return {Value} the instance with all consecutive String tokens joined
159
154
  def join(separator = '')
160
- @tokens = @tokens.inject([]) do |a,b|
155
+ @tokens = @tokens.each_with_object([]) do |b, a|
161
156
  if a[-1].is_a?(::String) && b.is_a?(::String)
162
157
  a[-1] = [a[-1], b].join(separator)
163
158
  else
164
159
  a << b
165
160
  end
166
- a
167
161
  end
168
162
  self
169
163
  end
@@ -186,8 +180,9 @@ module BibTeX
186
180
  # If the option :filter is given, the Value will be converted using
187
181
  # the filter(s) specified.
188
182
  def to_s(options = {})
189
- return convert(options.delete(:filter)).to_s(options) if options.has_key?(:filter)
190
- return value.to_s unless options.has_key?(:quotes) && atomic? && !symbol?
183
+ return convert(options.delete(:filter)).to_s(options) if options.key?(:filter)
184
+ return value.to_s unless options.key?(:quotes) && atomic? && !symbol?
185
+
191
186
  q = Array(options[:quotes])
192
187
  [q[0], value, q[-1]].compact.join
193
188
  end
@@ -200,11 +195,11 @@ module BibTeX
200
195
  if atomic?
201
196
  @tokens[0]
202
197
  else
203
- @tokens.map { |v| v.is_a?(::String) ? v.inspect : v }.join(' # ')
198
+ @tokens.map { |v| v.is_a?(::String) ? v.inspect : v }.join(' # ')
204
199
  end
205
200
  end
206
201
 
207
- alias :v :value
202
+ alias v value
208
203
 
209
204
  def inspect
210
205
  "#<#{self.class} #{@tokens.map(&:inspect).join(', ')}>"
@@ -216,9 +211,11 @@ module BibTeX
216
211
  end
217
212
 
218
213
  # Returns true if the value is a BibTeX name value.
219
- def name?; false; end
214
+ def name?
215
+ false
216
+ end
220
217
 
221
- alias :names? :name?
218
+ alias names? name?
222
219
 
223
220
  def to_name
224
221
  Names.parse(to_s)
@@ -235,7 +232,7 @@ module BibTeX
235
232
  def to_date
236
233
  require 'date'
237
234
  Date.parse(to_s)
238
- rescue
235
+ rescue StandardError
239
236
  nil
240
237
  end
241
238
 
@@ -248,7 +245,7 @@ module BibTeX
248
245
  @tokens[0].to_i
249
246
  end
250
247
 
251
- def to_citeproc (options = {})
248
+ def to_citeproc(options = {})
252
249
  to_s(options)
253
250
  end
254
251
 
@@ -265,12 +262,12 @@ module BibTeX
265
262
  end
266
263
 
267
264
  # Returns a new Value with all string values converted according to the given filter(s).
268
- def convert (*filters)
265
+ def convert(*filters)
269
266
  dup.convert!(*filters)
270
267
  end
271
268
 
272
269
  # Converts all string values according to the given filter(s).
273
- def convert! (*filters)
270
+ def convert!(*filters)
274
271
  filters.flatten.each do |filter|
275
272
  f = Filters.resolve!(filter)
276
273
  @tokens.map! { |t| f.apply(t) }
@@ -279,27 +276,24 @@ module BibTeX
279
276
  self
280
277
  end
281
278
 
282
- def method_missing (name, *args)
283
- case
284
- when name.to_s =~ /^(?:convert|from)_([a-z]+)(!)?$/
285
- $2 ? convert!($1) : convert($1)
279
+ def method_missing(name, *args)
280
+ if name.to_s =~ /^(?:convert|from)_([a-z]+)(!)?$/
281
+ Regexp.last_match(2) ? convert!(Regexp.last_match(1)) : convert(Regexp.last_match(1))
286
282
  else
287
283
  super
288
284
  end
289
285
  end
290
286
 
291
- def respond_to? (method, include_all=false)
287
+ def respond_to?(method, include_all = false)
292
288
  method =~ /^(?:convert|from)_([a-z]+)(!)?$/ || super
293
289
  end
294
290
 
295
- def <=> (other)
291
+ def <=>(other)
296
292
  if numeric? && other.respond_to?(:numeric?) && other.numeric?
297
293
  to_i <=> other.to_i
298
294
  else
299
295
  to_s <=> other.to_s
300
296
  end
301
297
  end
302
-
303
298
  end
304
-
305
299
  end
@@ -1,6 +1,6 @@
1
1
  #--
2
2
  # BibTeX-Ruby
3
- # Copyright (C) 2010-2015 Sylvester Keil <sylvester.keil.or.at>
3
+ # Copyright (C) 2010-2015 Sylvester Keil <sylvester.keil.or.at>
4
4
  #
5
5
  # This program is free software: you can redistribute it and/or modify
6
6
  # it under the terms of the GNU General Public License as published by
@@ -9,18 +9,18 @@
9
9
  #
10
10
  # This program is distributed in the hope that it will be useful,
11
11
  # but WITHOUT ANY WARRANTY; without even the implied warranty of
12
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
13
  # GNU General Public License for more details.
14
14
  #
15
15
  # You should have received a copy of the GNU General Public License
16
- # along with this program. If not, see <http://www.gnu.org/licenses/>.
16
+ # along with this program. If not, see <http://www.gnu.org/licenses/>.
17
17
  #++
18
18
 
19
19
  module BibTeX
20
20
  module Version
21
- MAJOR = 4
22
- MINOR = 4
23
- PATCH = 7
21
+ MAJOR = 5
22
+ MINOR = 0
23
+ PATCH = 0
24
24
  BUILD = nil
25
25
 
26
26
  STRING = [MAJOR, MINOR, PATCH, BUILD].compact.join('.').freeze
data/test/benchmark.rb CHANGED
@@ -7,21 +7,22 @@ require 'bibtex'
7
7
 
8
8
  # data = File.open(BibTeX::Test.fixtures(:benchmark)).read
9
9
 
10
- input = <<-END
11
- @book{pickaxe,
12
- Address = {Raleigh, North Carolina},
13
- Author = {Thomas, Dave, and Fowler, Chad, and Hunt, Andy},
14
- Date-Added = {2010-08-05 09:54:07 +0200},
15
- Date-Modified = {2010-08-05 10:07:01 +0200},
16
- Keywords = {ruby},
17
- Publisher = {The Pragmatic Bookshelf},
18
- Series = {The Facets of Ruby},
19
- Title = {Programming Ruby 1.9: The Pragmatic Programmer's Guide},
20
- Year = {2009}
21
- }
10
+ input = <<~END
11
+ @book{pickaxe,
12
+ Address = {Raleigh, North Carolina},
13
+ Author = {Thomas, Dave, and Fowler, Chad, and Hunt, Andy},
14
+ Date-Added = {2010-08-05 09:54:07 +0200},
15
+ Date-Modified = {2010-08-05 10:07:01 +0200},
16
+ Keywords = {ruby},
17
+ Publisher = {The Pragmatic Bookshelf},
18
+ Series = {The Facets of Ruby},
19
+ Title = {Programming Ruby 1.9: The Pragmatic Programmer's Guide},
20
+ Year = {2009}
21
+ }
22
22
  END
23
23
 
24
- n, k = 31, 10
24
+ n = 31
25
+ k = 10
25
26
  lexer = BibTeX::Lexer.new
26
27
  # parser = BibTeX::Parser.new
27
28
 
@@ -31,26 +32,23 @@ g = []
31
32
  # Ruby 1.9.3
32
33
  format = Benchmark.const_defined?(:FMTSTR) ? Benchmark::FMTSTR : Benchmark::FORMAT
33
34
 
34
- Benchmark.benchmark((" "*15) + CAPTION, 7, format, '%14s:' % 'sum(f)', '%14s:' % 'sum(g)') do |b|
35
-
36
- 1.step(n,k) do |i|
37
-
38
- f << b.report('%14s:' % "f(#{i})") do
35
+ Benchmark.benchmark((' ' * 15) + CAPTION, 7, format, format('%14s:', 'sum(f)'), format('%14s:', 'sum(g)')) do |b|
36
+ 1.step(n, k) do |i|
37
+ f << b.report(format('%14s:', "f(#{i})")) do
39
38
  i.times do
40
39
  lexer.data = input
41
40
  lexer.analyse
42
- # BibTeX::Parser.new.parse(input)
41
+ # BibTeX::Parser.new.parse(input)
43
42
  end
44
43
  end
45
44
 
46
45
  data = input * i
47
46
 
48
- g << b.report('%14s:' % "g(#{i})") do
47
+ g << b.report(format('%14s:', "g(#{i})")) do
49
48
  lexer.data = data
50
49
  lexer.analyse
51
- # BibTeX::Parser.new.parse(data)
50
+ # BibTeX::Parser.new.parse(data)
52
51
  end
53
-
54
52
  end
55
53
 
56
54
  [f.inject(:+), g.inject(:+)]
@@ -1,5 +1,3 @@
1
- # -*- coding: utf-8 -*-
2
-
3
1
  require 'helper.rb'
4
2
 
5
3
  module BibTeX
@@ -37,7 +35,7 @@ module BibTeX
37
35
  end
38
36
 
39
37
  describe '#bdsk_url' do
40
- let(:entry) { Entry.new(:'bdsk-url-1' => 'http://www.example.com') }
38
+ let(:entry) { Entry.new('bdsk-url-1': 'http://www.example.com') }
41
39
 
42
40
  it 'should run successfully' do
43
41
  subject.bdsk_url
@@ -73,7 +71,7 @@ module BibTeX
73
71
  end
74
72
 
75
73
  describe '#date_added' do
76
- let(:entry) { Entry.new(:'date-added' => '2014-01-20') }
74
+ let(:entry) { Entry.new('date-added': '2014-01-20') }
77
75
 
78
76
  it 'should run successfully' do
79
77
  subject.date_added
@@ -81,7 +79,7 @@ module BibTeX
81
79
  end
82
80
 
83
81
  describe '#date_modified' do
84
- let(:entry) { Entry.new(:'date-modified' => '2014-01-20') }
82
+ let(:entry) { Entry.new('date-modified': '2014-01-20') }
85
83
 
86
84
  it 'should run successfully' do
87
85
  subject.date_modified
@@ -1,11 +1,7 @@
1
- # -*- encoding: utf-8 -*-
2
-
3
1
  require 'helper'
4
2
 
5
3
  module BibTeX
6
-
7
4
  class BibliographyTest < Minitest::Spec
8
-
9
5
  describe 'when newly created' do
10
6
  it 'should not be nil' do
11
7
  assert Bibliography.new
@@ -27,16 +23,15 @@ module BibTeX
27
23
 
28
24
  assert_equal b.length - 1, BibTeX.open(tmp.path).length
29
25
  end
30
-
31
26
  end
32
27
 
33
28
  describe '.parse' do
34
29
  it 'accepts filters' do
35
- Bibliography.parse("@misc{k, title = {\\''u}}", :filter => 'latex')[0].title.must_be :==, 'ü'
30
+ Bibliography.parse("@misc{k, title = {\\''u}}", filter: 'latex')[0].title.must_be :==, 'ü'
36
31
  end
37
32
 
38
33
  it 'accepts filters in an array' do
39
- Bibliography.parse("@misc{k, title = {\\''u}}", :filter => ['latex'])[0].title.must_be :==, 'ü'
34
+ Bibliography.parse("@misc{k, title = {\\''u}}", filter: ['latex'])[0].title.must_be :==, 'ü'
40
35
  end
41
36
  end
42
37
 
@@ -89,15 +84,15 @@ module BibTeX
89
84
  describe '#extend_initials' do
90
85
  it 'extends the initials in matching names' do
91
86
  @bib.names.map(&:to_s).wont_include 'Flanagan, Dave'
92
- @bib.extend_initials(['Dave', 'Flanagan'])
87
+ @bib.extend_initials(%w[Dave Flanagan])
93
88
  @bib.names.map(&:to_s).must_include 'Flanagan, Dave'
94
89
  end
95
90
  end
96
91
 
97
92
  describe '#extend_initials!' do
98
93
  it 'extends the initials of all names to the longest prototype' do
99
- assert_equal "Ruby, Sam Thomas, Dave Hansson Heinemeier, David Flanagan, David Matsumoto, Yukihiro Segaran, Thomas",
100
- @bib.extend_initials!.names.map(&:sort_order).uniq.join(' ')
94
+ assert_equal 'Ruby, Sam Thomas, Dave Hansson Heinemeier, David Flanagan, David Matsumoto, Yukihiro Segaran, Thomas',
95
+ @bib.extend_initials!.names.map(&:sort_order).uniq.join(' ')
101
96
  end
102
97
  end
103
98
 
@@ -116,7 +111,7 @@ module BibTeX
116
111
  it 'passes each entry with matching fields to the block if given' do
117
112
  years = []
118
113
  @bib.unify(:publisher, /reilly/i) { |e| years << e.year.to_s }
119
- assert_equal ['2007','2008'], years.sort
114
+ assert_equal %w[2007 2008], years.sort
120
115
  end
121
116
 
122
117
  it 'returns the bibliography' do
@@ -144,11 +139,11 @@ module BibTeX
144
139
  end
145
140
 
146
141
  it 'supports access by range' do
147
- assert_equal %w{2008 2007}, @bib[1..2].map(&:year)
142
+ assert_equal %w[2008 2007], @bib[1..2].map(&:year)
148
143
  end
149
144
 
150
145
  it 'supports access by index and offset' do
151
- assert_equal %w{2008 2007}, @bib[1,2].map(&:year)
146
+ assert_equal %w[2008 2007], @bib[1, 2].map(&:year)
152
147
  end
153
148
 
154
149
  it 'supports queries by symbol key' do
@@ -192,7 +187,6 @@ module BibTeX
192
187
  assert_nil @bib.q(:first, '@collection')
193
188
  end
194
189
 
195
-
196
190
  it 'supports queries by pattern' do
197
191
  assert_equal 0, @bib[/reilly/].length
198
192
  assert_equal 2, @bib[/reilly/i].length
@@ -230,7 +224,6 @@ module BibTeX
230
224
  assert_equal 0, @bib['@*[year>=2010]'].length
231
225
  end
232
226
 
233
-
234
227
  it 'supports queries by bibtex element' do
235
228
  entry = Entry.parse(<<-END).first
236
229
  @article{segaran2007,
@@ -258,7 +251,6 @@ module BibTeX
258
251
  end
259
252
 
260
253
  describe '#query' do
261
-
262
254
  it 'returns all elements when passed no arguments' do
263
255
  @bib.query.length.must_be :==, 6
264
256
  end
@@ -270,11 +262,9 @@ module BibTeX
270
262
  it 'returns all entries when passed a * wildcard' do
271
263
  @bib.query('@*').length.must_be :==, 5
272
264
  end
273
-
274
265
  end
275
266
 
276
267
  describe 'duplicates' do
277
-
278
268
  it 'understands select_duplicates_by' do
279
269
  assert_equal 1, @bib.select_duplicates_by.length
280
270
  end
@@ -282,7 +272,6 @@ module BibTeX
282
272
  it 'understands duplicates?' do
283
273
  assert @bib.duplicates?
284
274
  end
285
-
286
275
  end
287
276
 
288
277
  describe '#uniq!' do
@@ -320,7 +309,7 @@ module BibTeX
320
309
 
321
310
  describe 'with block' do
322
311
  it 'removes duplicate entries and returns the bibliography' do
323
- assert @a.length > @a.uniq!(:author){|d,e| d+'|'+e.pages_from}.length
312
+ assert @a.length > @a.uniq!(:author) { |d, e| d + '|' + e.pages_from }.length
324
313
  end
325
314
  end
326
315
  end
@@ -328,7 +317,9 @@ module BibTeX
328
317
  describe 'given a filter' do
329
318
  before do
330
319
  @filter = Object.new
331
- def @filter.apply (value); value.is_a?(::String) ? value.upcase : value; end
320
+ def @filter.apply(value)
321
+ value.is_a?(::String) ? value.upcase : value
322
+ end
332
323
  end
333
324
 
334
325
  it 'supports arbitrary conversions' do
@@ -341,11 +332,9 @@ module BibTeX
341
332
  assert_equal 'ruby, rails', @bib[:rails].keywords
342
333
  assert_equal 'RUBY', @bib[:flanagan2008].keywords
343
334
  end
344
-
345
335
  end
346
336
 
347
337
  describe 'sorting' do
348
-
349
338
  before do
350
339
  @small_bib = BibTeX.parse <<-END
351
340
  @book{flanagan2008,
@@ -372,29 +361,29 @@ module BibTeX
372
361
  year={2007},
373
362
  publisher={O'Reilly}
374
363
  }
375
- END
376
- end
364
+ END
365
+ end
377
366
 
378
367
  it 'can be sorted destructively' do
379
368
  @small_bib.sort!
380
- @small_bib.map(&:key).must_equal [ 'segaran2007', 'flanagan2008', 'rails']
369
+ @small_bib.map(&:key).must_equal %w[segaran2007 flanagan2008 rails]
381
370
  end
382
371
 
383
372
  it 'can be sorted by field destructively' do
384
373
  @small_bib.sort_by! { |e| -e[:year].to_i }
385
- @small_bib.map(&:key).must_equal [ 'rails', 'flanagan2008', 'segaran2007' ]
374
+ @small_bib.map(&:key).must_equal %w[rails flanagan2008 segaran2007]
386
375
  end
387
376
 
388
377
  it 'can be sorted non-destructively' do
389
378
  sorted_entries = @small_bib.sort
390
- sorted_entries.map(&:key).must_equal [ 'segaran2007', 'flanagan2008', 'rails']
391
- @small_bib.map(&:key).must_equal [ 'flanagan2008', 'rails', 'segaran2007']
379
+ sorted_entries.map(&:key).must_equal %w[segaran2007 flanagan2008 rails]
380
+ @small_bib.map(&:key).must_equal %w[flanagan2008 rails segaran2007]
392
381
  end
393
382
 
394
383
  it 'can be sorted by field non-destructively' do
395
384
  sorted_entries = @small_bib.sort_by { |e| -e[:year].to_i }
396
- sorted_entries.map(&:key).must_equal [ 'rails', 'flanagan2008', 'segaran2007' ]
397
- @small_bib.map(&:key).must_equal [ 'flanagan2008', 'rails', 'segaran2007']
385
+ sorted_entries.map(&:key).must_equal %w[rails flanagan2008 segaran2007]
386
+ @small_bib.map(&:key).must_equal %w[flanagan2008 rails segaran2007]
398
387
  end
399
388
  end
400
389
 
@@ -406,7 +395,6 @@ module BibTeX
406
395
  it 'converts LaTeX umlauts' do
407
396
  @bib.convert(:latex)['rails'].keywords.must_be :==, 'rüby'
408
397
  end
409
-
410
398
  end
411
399
 
412
400
  describe 'BibTeXML export' do
@@ -422,13 +410,12 @@ module BibTeX
422
410
  end
423
411
 
424
412
  it 'supports exporting to extended BibTeXML' do
425
- @bib.to_xml(:extended => true).write(@bibtexml, 2)
413
+ @bib.to_xml(extended: true).write(@bibtexml, 2)
426
414
  @bibtexml.rewind
427
415
  xml = REXML::Document.new(@bibtexml)
428
416
  xml.root.namespace.must_be :==, 'http://bibtexml.sf.net/'
429
417
  xml.root.get_elements('//bibtex:person').wont_be_empty
430
418
  end
431
-
432
419
  end
433
420
  end
434
421
 
@@ -439,7 +426,7 @@ module BibTeX
439
426
 
440
427
  it 'should respect options provided to initializer' do
441
428
  assert_equal(@bib.add('@article{, title = test}'), @bib)
442
- assert(! @bib.entries.keys.any?(&:empty?))
429
+ assert(@bib.entries.keys.none?(&:empty?))
443
430
  end
444
431
  end
445
432
  end