aurels-rbib 1.2 → 2.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.
@@ -0,0 +1,15 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ #
4
+ # Run all the unit tests in the current directory.
5
+ #
6
+
7
+ require 'test/unit'
8
+
9
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
10
+ require "bibtex"
11
+
12
+ Dir.glob(File.join(File.dirname(__FILE__), '..', 'test', 'test_*.rb')).each do |file|
13
+ require file
14
+ end
15
+
@@ -0,0 +1,76 @@
1
+ require 'bibtex/bibliography'
2
+ require 'test/unit'
3
+
4
+ class TestBibliography < Test::Unit::TestCase
5
+ include Bibtex
6
+
7
+ def setup
8
+ @b = Bibliography.new
9
+
10
+ @foo01 = Entry.new(EntryType::Book, 'foo01')
11
+ @foo01.add_field :author, 'C. Doof'
12
+ @foo01.add_field :year, 2007
13
+ @foo01.add_field Field.new(:url, 'www.doof.me.uk')
14
+
15
+ @bar99 = Entry.new(EntryType::Article, 'bar99')
16
+ @bar99.add_field :author, 'N. Cakesniffer'
17
+ @bar99.add_field :year, 1999
18
+ @bar99.add_field Field.new(:url, 'www.cakesniffer.co.uk')
19
+
20
+ @b << @foo01
21
+ @b << @bar99
22
+ end
23
+
24
+ def test_basic
25
+ assert_equal 2, @b.entries.length
26
+ assert_equal @foo01, @b['foo01']
27
+ end
28
+
29
+ def test_map
30
+ expect = <<END
31
+ @article{bar99,
32
+ author = {N. Cakesniffer},
33
+ year = {1999}
34
+ }
35
+
36
+ @book{foo01,
37
+ author = {C. Doof},
38
+ year = {2007}
39
+ }
40
+
41
+ END
42
+ urlless = @b.map do |e|
43
+ e.reject_fields [:url]
44
+ end
45
+ assert_equal expect, urlless.to_s
46
+ end
47
+
48
+ def test_to_s
49
+ expect = <<END
50
+ @article{bar99,
51
+ author = {N. Cakesniffer},
52
+ url = {www.cakesniffer.co.uk},
53
+ year = {1999}
54
+ }
55
+
56
+ @book{foo01,
57
+ author = {C. Doof},
58
+ url = {www.doof.me.uk},
59
+ year = {2007}
60
+ }
61
+
62
+ END
63
+ assert_equal expect, @b.to_s
64
+ end
65
+
66
+ def test_save
67
+ fname = '/tmp/_test.bib'
68
+ @b.save fname
69
+
70
+ f = File.new(fname)
71
+ assert_equal @b.to_s, f.read
72
+ f.close
73
+ File.delete fname
74
+ end
75
+
76
+ end
@@ -0,0 +1,70 @@
1
+ require 'bibtex/entry'
2
+ require 'test/unit'
3
+
4
+ class TestEntry < Test::Unit::TestCase
5
+ include Bibtex
6
+
7
+ def setup
8
+ @e = Entry.new(EntryType::Book, 'foo01')
9
+ end
10
+
11
+ def test_basic
12
+ assert_equal EntryType::Book, @e.type
13
+ assert_equal 'foo01', @e.key
14
+ end
15
+
16
+ def add_default_fields
17
+ @e.add_field :author, 'C. Doof'
18
+ @e.add_field :year, 2007
19
+ @e.add_field Field.new(:url, 'www.doof.me.uk')
20
+ end
21
+
22
+ def test_fields
23
+ add_default_fields
24
+
25
+ assert_equal 'C. Doof', @e[:author]
26
+ assert_equal 2007, @e[:year]
27
+ assert_equal 'www.doof.me.uk', @e[:url]
28
+ end
29
+
30
+ def test_to_s
31
+ add_default_fields
32
+
33
+ expect = <<END
34
+ @book{foo01,
35
+ author = {C. Doof},
36
+ url = {www.doof.me.uk},
37
+ year = {2007}
38
+ }
39
+
40
+ END
41
+ assert_equal expect, @e.to_s
42
+ end
43
+
44
+ def test_reject
45
+ add_default_fields
46
+
47
+ expect = <<END
48
+ @book{foo01,
49
+ author = {C. Doof},
50
+ year = {2007}
51
+ }
52
+
53
+ END
54
+ r = @e.reject_fields [:url]
55
+ assert_equal expect, r.to_s
56
+ end
57
+
58
+ def test_select
59
+ add_default_fields
60
+
61
+ expect = <<END
62
+ @book{foo01,
63
+ url = {www.doof.me.uk}
64
+ }
65
+
66
+ END
67
+ r = @e.select_fields [:url]
68
+ assert_equal expect, r.to_s
69
+ end
70
+ end
@@ -0,0 +1,17 @@
1
+ require 'bibtex/field'
2
+ require 'test/unit'
3
+
4
+ class TestField < Test::Unit::TestCase
5
+ include Bibtex
6
+
7
+ def test_basic
8
+ f = Field.new(:author, 'C. Doof')
9
+ assert_equal :author, f.key
10
+ assert_equal 'C. Doof', f.value
11
+ end
12
+
13
+ def test_to_s
14
+ f = Field.new(:author, 'C. Doof')
15
+ assert_equal 'author = {C. Doof}', f.to_s
16
+ end
17
+ end
@@ -0,0 +1,116 @@
1
+ require 'bibtex/lexer'
2
+ require 'test/unit'
3
+
4
+ class TestLexer < Test::Unit::TestCase
5
+ include Bibtex
6
+
7
+ def test_basic
8
+ l = Lexer.new do |rules|
9
+ rules.match /a/, :a
10
+ rules.match /b+/, :bs
11
+ rules.match /\s+/, :space
12
+ rules.match /hello/, :hello
13
+ end
14
+ l.feed 'aabbb hello'
15
+
16
+ assert_equal :a, l.next_token!
17
+ assert_equal :a, l.next_token!
18
+ assert_equal :bs, l.next_token!
19
+ assert_equal :space, l.next_token!
20
+ assert_equal :hello, l.peek_token
21
+ assert_equal 'hello', l.peek_lval
22
+ assert_equal :hello, l.next_token!
23
+
24
+ assert (not l.more_tokens?)
25
+ assert_raise LexerError do
26
+ l.next_token!
27
+ end
28
+ end
29
+
30
+ def test_prec
31
+ l = Lexer.new do |rules|
32
+ rules.match /a/, :aye
33
+ rules.match /a+/, :bad
34
+ rules.match /.*/, :other
35
+ end
36
+ l.feed 'aa'
37
+ assert_equal :aye, l.next_token!
38
+ assert_equal :aye, l.next_token!
39
+ assert (not l.more_tokens?)
40
+ end
41
+
42
+ def test_whitespace
43
+ l = Lexer.new(false) do |rules|
44
+ rules.match /\w+/, :word
45
+ end
46
+ l.feed " hello\t\n world "
47
+
48
+ assert (not l.ignore_whitespace)
49
+ l.ignore_whitespace = true
50
+
51
+ assert_equal :word, l.next_token!
52
+ assert_equal 'hello', l.lval
53
+ assert_equal :word, l.next_token!
54
+ assert_equal 'world', l.lval
55
+ assert (not l.more_tokens?)
56
+ end
57
+
58
+ def test_src_pos
59
+ l = Lexer.new do |rules|
60
+ rules.match /a/, :a
61
+ rules.match /\n/, :newline
62
+ end
63
+ l.feed 'aaaab'
64
+
65
+ 4.times { l.next_token! }
66
+ begin
67
+ l.next_token!
68
+ flunk 'No exception raised'
69
+ rescue LexerError => e
70
+ assert_kind_of SourcePos, e.src_pos
71
+ assert_equal 1, e.src_pos.line
72
+ assert_equal 4, e.src_pos.column
73
+ end
74
+
75
+ l.ignore_newlines = false
76
+ l.feed "aa\nab"
77
+
78
+ l.file_name = 'My File'
79
+
80
+ 2.times { l.next_token! }
81
+ assert_equal :newline, l.next_token!
82
+ assert_equal :a, l.next_token!
83
+ begin
84
+ l.next_token!
85
+ flunk 'No error raised'
86
+ rescue LexerError => e
87
+ assert_equal 2, e.src_pos.line
88
+ assert_equal 1, e.src_pos.column
89
+ assert_equal 'My File', e.src_pos.file
90
+ end
91
+ end
92
+
93
+ def test_literals
94
+ l = Lexer.new do |rules|
95
+ rules.literals [:aye, :bee]
96
+ end
97
+ l.feed 'ayebeebee'
98
+
99
+ assert_equal :aye, l.next_token!
100
+ assert_equal :bee, l.next_token!
101
+ assert_equal :bee, l.next_token!
102
+ end
103
+
104
+ def test_refeed
105
+ l = Lexer.new do |rules|
106
+ rules.match /a/, :a
107
+ rules.match /b/, :b
108
+ end
109
+ l.feed 'aaa'
110
+
111
+ assert_equal :a, l.next_token!
112
+ l.feed 'bb'
113
+ assert l.more_tokens?
114
+ assert_equal :b, l.next_token!
115
+ end
116
+ end
@@ -0,0 +1,27 @@
1
+ require 'bibtex/parser'
2
+ require 'test/unit'
3
+
4
+ class TestParser < Test::Unit::TestCase
5
+ include Bibtex
6
+
7
+ def test_basic
8
+ b = Parser.parse 'examples/example.bib'
9
+
10
+ ryan98 = b['ryan98']
11
+ assert_kind_of Entry, ryan98
12
+ assert_equal EntryType::Article, ryan98.type
13
+ assert_equal 1998, ryan98[:year].to_i
14
+
15
+ heys01 = b['heys01']
16
+ assert_equal "March", heys01[:month]
17
+ assert_equal 2001, heys01[:year].to_i
18
+ end
19
+
20
+ def test_parse_reparse
21
+ fname = '/tmp/example.bib.stripped'
22
+ b = Parser.parse 'examples/example.bib'
23
+ b.save fname
24
+ Parser.parse fname
25
+ File.delete fname
26
+ end
27
+ end
metadata CHANGED
@@ -1,35 +1,62 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: aurels-rbib
3
3
  version: !ruby/object:Gem::Version
4
- version: "1.2"
4
+ version: "2.0"
5
5
  platform: ruby
6
6
  authors:
7
- - Nick Gasson
8
- - "Aur\xC3\xA9lien Malisart"
7
+ - "Nick Gasson, Aur\xC3\xA9lien Malisart"
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
11
 
13
- date: 2009-05-07 00:00:00 -07:00
12
+ date: 2009-05-10 00:00:00 -07:00
14
13
  default_executable:
15
14
  dependencies: []
16
15
 
17
- description: BibTeX parser in Ruby
16
+ description: BibTeX parser written in Ruby
18
17
  email: aurelien.malisart@gmail.com
19
18
  executables: []
20
19
 
21
20
  extensions: []
22
21
 
23
- extra_rdoc_files: []
24
-
22
+ extra_rdoc_files:
23
+ - lib/bibtex/bibliography.rb
24
+ - lib/bibtex/entry.rb
25
+ - lib/bibtex/field.rb
26
+ - lib/bibtex/lexer.rb
27
+ - lib/bibtex/parser.rb
28
+ - lib/bibtex.rb
29
+ - README.rdoc
25
30
  files:
26
- - README
31
+ - examples/example.bib
32
+ - examples/glom_citeulike.rb
33
+ - examples/tara_no_url.rb
34
+ - lib/bibtex/bibliography.rb
35
+ - lib/bibtex/entry.rb
36
+ - lib/bibtex/field.rb
37
+ - lib/bibtex/lexer.rb
38
+ - lib/bibtex/parser.rb
27
39
  - lib/bibtex.rb
28
- has_rdoc: false
40
+ - Manifest
41
+ - Rakefile
42
+ - rbib.gemspec
43
+ - README.rdoc
44
+ - test/run_unit_tests.rb
45
+ - test/test_bibliography.rb
46
+ - test/test_entry.rb
47
+ - test/test_field.rb
48
+ - test/test_lexer.rb
49
+ - test/test_parser.rb
50
+ has_rdoc: true
29
51
  homepage: http://github.com/aurels/rbib
30
52
  post_install_message:
31
- rdoc_options: []
32
-
53
+ rdoc_options:
54
+ - --line-numbers
55
+ - --inline-source
56
+ - --title
57
+ - Rbib
58
+ - --main
59
+ - README.rdoc
33
60
  require_paths:
34
61
  - lib
35
62
  required_ruby_version: !ruby/object:Gem::Requirement
@@ -42,14 +69,18 @@ required_rubygems_version: !ruby/object:Gem::Requirement
42
69
  requirements:
43
70
  - - ">="
44
71
  - !ruby/object:Gem::Version
45
- version: "0"
72
+ version: "1.2"
46
73
  version:
47
74
  requirements: []
48
75
 
49
- rubyforge_project:
76
+ rubyforge_project: rbib
50
77
  rubygems_version: 1.2.0
51
78
  signing_key:
52
79
  specification_version: 2
53
- summary: BibTeX parser in Ruby
54
- test_files: []
55
-
80
+ summary: BibTeX parser written in Ruby
81
+ test_files:
82
+ - test/test_bibliography.rb
83
+ - test/test_entry.rb
84
+ - test/test_field.rb
85
+ - test/test_lexer.rb
86
+ - test/test_parser.rb
data/README DELETED
@@ -1,20 +0,0 @@
1
- Parser for BibTeX files written in Ruby. No dependencies (except Test::Unit if
2
- you need to run the tests).
3
-
4
- By Nick Gasson (http://www.doof.me.uk)
5
-
6
- Example of usage:
7
-
8
- require 'rubygems'
9
- require 'bibtex'
10
-
11
- BibTeX::Parser.parse('references.bib').map do |entry|
12
- puts entry[:Title]
13
- puts entry[:Year]
14
- entry
15
- end
16
-
17
- Installation:
18
-
19
- gem sources -a http://gems.github.com
20
- gem install aurels-rbib