bibtex-ruby 1.2.0 → 1.2.1

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.

data/History.txt CHANGED
@@ -1,3 +1,17 @@
1
+ === 1.2.1 / 2011-02-26
2
+
3
+ * Fixed several MacRuby compliancy issues.
4
+ * Fixed compatibility issues and BibTeX parsing of Name tokens (by lyro)
5
+
6
+ === 1.2.0 / 2011-02-12
7
+
8
+ * Switched to using bundler.
9
+ * Improved BibTeX::Entry constructor (supports hashes for intuitive assignments).
10
+ * Added top-level methods BibTeX.parse, BibTeX.open, BibTeX.valid? and
11
+ BibTeX::Entry.parse.
12
+ * Rewrote StringReplacement extensions to use monkey patching of Arrays.
13
+ * See README.md or unit tests for updated code examples.
14
+
1
15
  === 1.1.2 / 2011-01-27
2
16
 
3
17
  * Added dynamic ghost methods to BibTeX::Entry for more convenient access
data/README.md CHANGED
@@ -18,15 +18,15 @@ Quickstart
18
18
  => true
19
19
  > bib = BibTeX.open('./ruby.bib')
20
20
  => book{pickaxe,
21
- address {Raleigh, North Carolina},
22
- author {Thomas, Dave, and Fowler, Chad, and Hunt, Andy},
23
- date-added {2010-08-05 09:54:07 0200},
24
- date-modified {2010-08-05 10:07:01 0200},
25
- keywords {ruby},
26
- publisher {The Pragmatic Bookshelf},
27
- series {The Facets of Ruby},
28
- title {Programming Ruby 1.9: The Pragmatic Programmers Guide},
29
- year {2009}
21
+ address = {Raleigh, North Carolina},
22
+ author = {Thomas, Dave, and Fowler, Chad, and Hunt, Andy},
23
+ date-added = {2010-08-05 09:54:07 0200},
24
+ date-modified = {2010-08-05 10:07:01 0200},
25
+ keywords = {ruby},
26
+ publisher = {The Pragmatic Bookshelf},
27
+ series = {The Facets of Ruby},
28
+ title = {Programming Ruby 1.9: The Pragmatic Programmers Guide},
29
+ year = {2009}
30
30
  }
31
31
  > bib[:pickaxe].year
32
32
  => "2009"
@@ -282,7 +282,9 @@ These represent proper BibTeX objects (e.g., @book, @collection, etc.).
282
282
  Credits
283
283
  -------
284
284
 
285
- The BibTeX-Ruby package was written by [Sylvester Keil](http://sylvester.keil.or.at/).
285
+ The BibTeX-Ruby package was written by [Sylvester Keil](http://sylvester.keil.or.at/),
286
+ with contributions by [Frank Fischer](https://github.com/lyro).
287
+
286
288
 
287
289
  License
288
290
  -------
data/bibtex-ruby.gemspec CHANGED
@@ -6,7 +6,7 @@ require 'bibtex/version'
6
6
 
7
7
  Gem::Specification.new do |s|
8
8
  s.name = 'bibtex-ruby'
9
- s.version = BibTeX::Version::STRING
9
+ s.version = BibTeX::Version::STRING.dup
10
10
  s.platform = Gem::Platform::RUBY
11
11
  s.authors = ['Sylvester Keil']
12
12
  s.email = 'http://sylvester.keil.or.at'
data/lib/bibtex.rb CHANGED
@@ -20,6 +20,9 @@ $:.unshift(File.dirname(__FILE__)) unless
20
20
  $:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname(__FILE__)))
21
21
 
22
22
 
23
+ require 'bibtex/version'
24
+ require 'logger'
25
+
23
26
  # = BibTeX
24
27
  #
25
28
  # This module encompasses a parser for BibTeX files and
@@ -32,8 +35,6 @@ $:.unshift(File.dirname(__FILE__)) unless
32
35
  # License:: GNU GPL 3.0
33
36
  #
34
37
  module BibTeX
35
- require 'bibtex/version'
36
- require 'logger'
37
38
 
38
39
  #
39
40
  # An instance of the Ruby core class +Logger+.
@@ -43,16 +44,17 @@ module BibTeX
43
44
  Log.level = ENV.has_key?('DEBUG') ? Logger::DEBUG : Logger::WARN
44
45
  Log.datetime_format = "%Y-%m-%d %H:%M:%S"
45
46
 
46
- # Load debugger
47
- # require 'ruby-debug'
48
- # Debugger.start
47
+ def self.log; BibTeX::Log end
48
+ end
49
49
 
50
- require 'bibtex/extensions'
51
- require 'bibtex/elements'
52
- require 'bibtex/entry'
53
- require 'bibtex/error'
54
- require 'bibtex/parser'
55
- require 'bibtex/bibliography'
56
- require 'bibtex/utilities'
50
+ # Load debugger
51
+ # require 'ruby-debug'
52
+ # Debugger.start
57
53
 
58
- end
54
+ require 'bibtex/extensions'
55
+ require 'bibtex/elements'
56
+ require 'bibtex/entry'
57
+ require 'bibtex/error'
58
+ require 'bibtex/parser'
59
+ require 'bibtex/bibliography'
60
+ require 'bibtex/utilities'
@@ -65,7 +65,9 @@ module BibTeX
65
65
 
66
66
  # Saves the bibliography to a file at the given path.
67
67
  def save_to(path)
68
- File.write(path,to_s)
68
+ File.open(path, "w") do |f|
69
+ f.write to_s
70
+ end
69
71
  end
70
72
 
71
73
  # Add an object to the bibliography. Returns the bibliography.
@@ -22,7 +22,8 @@ module BibTeX
22
22
  # The base class for BibTeX objects.
23
23
  #
24
24
  class Element
25
-
25
+ include Comparable
26
+
26
27
  attr_reader :bibliography
27
28
 
28
29
  # Returns an array of BibTeX elements.
@@ -76,6 +77,11 @@ module BibTeX
76
77
  @bibliography = nil
77
78
  self
78
79
  end
80
+
81
+ def <=>(other)
82
+ (type_comparison = self.class.name <=> other.class.name) == 0 ? self.to_s <=> other.to_s : type_comparison
83
+ end
84
+
79
85
  end
80
86
 
81
87
 
data/lib/bibtex/entry.rb CHANGED
@@ -51,6 +51,8 @@ module BibTeX
51
51
  self.key = hash.delete(:key) if hash.has_key?(:key)
52
52
 
53
53
  hash.each { |k, v| add(k.to_sym, v) }
54
+
55
+ yield self if block_given?
54
56
  end
55
57
 
56
58
  # Sets the key of the entry
@@ -61,18 +63,18 @@ module BibTeX
61
63
 
62
64
  # Sets the type of the entry.
63
65
  def type=(type)
64
- raise(ArgumentError, "BibTeX::Entry type must be of type Symbol; was: #{type.class.name}.") unless type.is_a?(Symbol)
65
- @type = type
66
+ raise(ArgumentError, "BibTeX::Entry type must be convertible to Symbol; was: #{type.class.name}.") unless type.respond_to?(:to_sym)
67
+ @type = type.to_sym
66
68
  end
67
69
 
68
70
  def method_missing(name, *args)
69
71
  return self[name] if @fields.has_key?(name)
70
- return self.send(:add, name.to_s.chop.to_sym, args[0]) if name.match(/=$/)
72
+ return self.send(:add, name.to_s.chop.to_sym, args[0]) if name.to_s.match(/=$/)
71
73
  super
72
74
  end
73
75
 
74
76
  def respond_to?(method)
75
- @fields.has_key?(method.to_sym) || method.match(/=$/) || super
77
+ @fields.has_key?(method.to_sym) || method.to_s.match(/=$/) || super
76
78
  end
77
79
 
78
80
  # Returns the value of the field with the given name.
@@ -168,5 +170,10 @@ module BibTeX
168
170
  end
169
171
  xml
170
172
  end
173
+
174
+ def <=>(other)
175
+ self.type != other.type ? self.type <=> other.type : self.key != other.key ? self.key <=> other.key : self.to_s <=> other.to_s
176
+ end
177
+
171
178
  end
172
179
  end
@@ -24,8 +24,8 @@ module BibTeX
24
24
  module Extensions
25
25
 
26
26
  def self.string_replacement(obj)
27
- raise(ArgumentError, "StringReplacement should only be injected into instances of Array, not #{obj.class}.") unless obj.is_a?(Array)
28
- class << obj; include StringReplacement end
27
+ raise(ArgumentError, "StringReplacement should only be injected into instances of Array, not #{obj.class}.") unless obj.is_a?(::Array)
28
+ class << obj; include ::BibTeX::Extensions::StringReplacement end
29
29
  obj
30
30
  end
31
31
 
@@ -36,16 +36,16 @@ module BibTeX
36
36
 
37
37
  options[:quotes] ||= [nil,nil]
38
38
 
39
- if self.length == 1 && !self[0].is_a?(Symbol)
39
+ if self.length == 1 && !self[0].is_a?(::Symbol)
40
40
  [options[:quotes][0], self[0], options[:quotes][1]].join
41
41
  else
42
- self.map { |s| s.is_a?(Symbol) ? s.to_s : %Q("#{ s }") }.join(' # ')
42
+ self.map { |s| s.is_a?(::Symbol) ? s.to_s : %Q("#{ s }") }.join(' # ')
43
43
  end
44
44
  end
45
45
 
46
46
  # Replaces all string constants which are defined in +hash+.
47
47
  def replace_strings(hash)
48
- Extensions.string_replacement(self.map { |s| s.is_a?(Symbol) && hash.has_key?(s) ? hash[s] : s }.flatten)
48
+ Extensions.string_replacement(self.map { |s| s.is_a?(::Symbol) && hash.has_key?(s) ? hash[s] : s }.flatten)
49
49
  end
50
50
 
51
51
  # Joins consecutive strings separated by '#'.
data/lib/bibtex/lexer.rb CHANGED
@@ -178,7 +178,7 @@ module BibTeX
178
178
  push [:SHARP,'#']
179
179
  when self.src.scan(/\d+/o)
180
180
  push [:NUMBER,self.src.matched]
181
- when self.src.scan(/[a-z\d:_!$\.%&*-]+/io)
181
+ when self.src.scan(/[a-z\d\/:_!$\.%&*-]+/io)
182
182
  push [:NAME,self.src.matched]
183
183
  when self.src.scan(/"/o)
184
184
  self.mode = :literal
@@ -18,6 +18,6 @@
18
18
 
19
19
  module BibTeX
20
20
  module Version
21
- STRING = '1.2.0'
21
+ STRING = '1.2.1'.freeze
22
22
  end
23
23
  end
data/test/test_entry.rb CHANGED
@@ -42,4 +42,57 @@ class TestEntry < MiniTest::Unit::TestCase
42
42
  assert_equal(expected, bib.data[0].author)
43
43
  end
44
44
 
45
+ def test_creation_simple
46
+ expected = "@book{raven,\n author = {Poe, Edgar A.},\n title = {The Raven}\n}\n"
47
+
48
+ entry = BibTeX::Entry.new
49
+ entry.type = :book
50
+ entry.key = 'raven'
51
+ entry.author = 'Poe, Edgar A.'
52
+ entry.title = 'The Raven'
53
+
54
+ assert_equal(expected, entry.to_s)
55
+ end
56
+
57
+ def test_creation_from_hash
58
+ expected = "@book{raven,\n author = {Poe, Edgar A.},\n title = {The Raven}\n}\n"
59
+
60
+ entry = BibTeX::Entry.new({
61
+ :type => 'book',
62
+ :key => 'raven',
63
+ :author => 'Poe, Edgar A.',
64
+ :title => 'The Raven'
65
+ })
66
+
67
+ assert_equal(expected, entry.to_s)
68
+ end
69
+
70
+ def test_creation_from_block
71
+ expected = "@book{raven,\n author = {Poe, Edgar A.},\n title = {The Raven}\n}\n"
72
+
73
+ entry = BibTeX::Entry.new do |e|
74
+ e.type = :book
75
+ e.key = 'raven'
76
+ e.author = 'Poe, Edgar A.'
77
+ e.title = 'The Raven'
78
+ end
79
+
80
+ assert_equal(expected, entry.to_s)
81
+ end
82
+
83
+ def test_sorting
84
+ entries = []
85
+ entries << BibTeX::Entry.new({ :type => 'book', :key => 'raven3', :author => 'Poe, Edgar A.', :title => 'The Raven'})
86
+ entries << BibTeX::Entry.new({ :type => 'book', :key => 'raven2', :author => 'Poe, Edgar A.', :title => 'The Raven'})
87
+ entries << BibTeX::Entry.new({ :type => 'book', :key => 'raven1', :author => 'Poe, Edgar A.', :title => 'The Raven'})
88
+ entries << BibTeX::Entry.new({ :type => 'book', :key => 'raven1', :author => 'Poe, Edgar A.', :title => 'The Aven'})
89
+
90
+ entries.sort!
91
+
92
+ assert_equal(%w{ raven1 raven1 raven2 raven3 }, entries.map(&:key))
93
+ assert_equal([ 'The Aven', 'The Raven' ], entries.map(&:title)[0,2])
94
+
95
+ end
96
+
97
+
45
98
  end
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: bibtex-ruby
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 1.2.0
5
+ version: 1.2.1
6
6
  platform: ruby
7
7
  authors:
8
8
  - Sylvester Keil
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2011-02-12 00:00:00 +01:00
13
+ date: 2011-04-06 00:00:00 +02:00
14
14
  default_executable:
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency