bibtex-ruby 4.4.7 → 5.0.0

Sign up to get free protection for your applications and to get access to all the features.

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