rbib 2.0.1

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,32 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ Gem::Specification.new do |s|
4
+ s.name = %q{rbib}
5
+ s.version = "2.0.1"
6
+
7
+ s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
8
+ s.authors = ["Nick Gasson, Aur\303\251lien Malisart", "Pjotr Prins"]
9
+ s.date = %q{2009-05-10}
10
+ s.description = %q{BibTeX parser written in Ruby}
11
+ s.email = %q{aurelien.malisart@gmail.com}
12
+ s.extra_rdoc_files = ["lib/bibtex/bibliography.rb", "lib/bibtex/entry.rb", "lib/bibtex/field.rb", "lib/bibtex/lexer.rb", "lib/bibtex/parser.rb", "lib/bibtex.rb", "README.rdoc"]
13
+ s.files = ["examples/example.bib", "examples/glom_citeulike.rb", "examples/tara_no_url.rb", "lib/bibtex/bibliography.rb", "lib/bibtex/entry.rb", "lib/bibtex/field.rb", "lib/bibtex/lexer.rb", "lib/bibtex/parser.rb", "lib/bibtex.rb", "Manifest", "Rakefile", "rbib.gemspec", "README.rdoc", "test/run_unit_tests.rb", "test/test_bibliography.rb", "test/test_entry.rb", "test/test_field.rb", "test/test_lexer.rb", "test/test_parser.rb"]
14
+ s.has_rdoc = true
15
+ s.homepage = %q{http://github.com/aurels/rbib}
16
+ s.rdoc_options = ["--line-numbers", "--inline-source", "--title", "Rbib", "--main", "README.rdoc"]
17
+ s.require_paths = ["lib"]
18
+ s.rubyforge_project = %q{rbib}
19
+ s.rubygems_version = %q{1.3.1}
20
+ s.summary = %q{BibTeX parser written in Ruby}
21
+ s.test_files = ["test/test_bibliography.rb", "test/test_entry.rb", "test/test_field.rb", "test/test_lexer.rb", "test/test_parser.rb"]
22
+
23
+ if s.respond_to? :specification_version then
24
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
25
+ s.specification_version = 2
26
+
27
+ if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
28
+ else
29
+ end
30
+ else
31
+ end
32
+ end
@@ -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 ADDED
@@ -0,0 +1,102 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: rbib
3
+ version: !ruby/object:Gem::Version
4
+ hash: 13
5
+ prerelease:
6
+ segments:
7
+ - 2
8
+ - 0
9
+ - 1
10
+ version: 2.0.1
11
+ platform: ruby
12
+ authors:
13
+ - "Nick Gasson, Aur\xC3\xA9lien Malisart"
14
+ - Pjotr Prins
15
+ autorequire:
16
+ bindir: bin
17
+ cert_chain: []
18
+
19
+ date: 2009-05-10 00:00:00 +02:00
20
+ default_executable:
21
+ dependencies: []
22
+
23
+ description: BibTeX parser written in Ruby
24
+ email: aurelien.malisart@gmail.com
25
+ executables: []
26
+
27
+ extensions: []
28
+
29
+ extra_rdoc_files:
30
+ - lib/bibtex/bibliography.rb
31
+ - lib/bibtex/entry.rb
32
+ - lib/bibtex/field.rb
33
+ - lib/bibtex/lexer.rb
34
+ - lib/bibtex/parser.rb
35
+ - lib/bibtex.rb
36
+ - README.rdoc
37
+ files:
38
+ - examples/example.bib
39
+ - examples/glom_citeulike.rb
40
+ - examples/tara_no_url.rb
41
+ - lib/bibtex/bibliography.rb
42
+ - lib/bibtex/entry.rb
43
+ - lib/bibtex/field.rb
44
+ - lib/bibtex/lexer.rb
45
+ - lib/bibtex/parser.rb
46
+ - lib/bibtex.rb
47
+ - Manifest
48
+ - Rakefile
49
+ - rbib.gemspec
50
+ - README.rdoc
51
+ - test/run_unit_tests.rb
52
+ - test/test_bibliography.rb
53
+ - test/test_entry.rb
54
+ - test/test_field.rb
55
+ - test/test_lexer.rb
56
+ - test/test_parser.rb
57
+ has_rdoc: true
58
+ homepage: http://github.com/aurels/rbib
59
+ licenses: []
60
+
61
+ post_install_message:
62
+ rdoc_options:
63
+ - --line-numbers
64
+ - --inline-source
65
+ - --title
66
+ - Rbib
67
+ - --main
68
+ - README.rdoc
69
+ require_paths:
70
+ - lib
71
+ required_ruby_version: !ruby/object:Gem::Requirement
72
+ none: false
73
+ requirements:
74
+ - - ">="
75
+ - !ruby/object:Gem::Version
76
+ hash: 3
77
+ segments:
78
+ - 0
79
+ version: "0"
80
+ required_rubygems_version: !ruby/object:Gem::Requirement
81
+ none: false
82
+ requirements:
83
+ - - ">="
84
+ - !ruby/object:Gem::Version
85
+ hash: 11
86
+ segments:
87
+ - 1
88
+ - 2
89
+ version: "1.2"
90
+ requirements: []
91
+
92
+ rubyforge_project: rbib
93
+ rubygems_version: 1.4.1
94
+ signing_key:
95
+ specification_version: 2
96
+ summary: BibTeX parser written in Ruby
97
+ test_files:
98
+ - test/test_bibliography.rb
99
+ - test/test_entry.rb
100
+ - test/test_field.rb
101
+ - test/test_lexer.rb
102
+ - test/test_parser.rb