citeproc 0.0.3 → 0.0.6
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.
- data/lib/citeproc.rb +34 -0
- data/lib/citeproc/abbreviate.rb +29 -25
- data/lib/citeproc/assets.rb +101 -61
- data/lib/citeproc/bibliography.rb +188 -169
- data/lib/citeproc/engine.rb +28 -47
- data/lib/citeproc/item.rb +117 -108
- data/lib/citeproc/processor.rb +102 -35
- data/lib/citeproc/utilities.rb +3 -2
- data/lib/citeproc/version.rb +1 -1
- data/spec/citeproc/assets_spec.rb +59 -55
- data/spec/citeproc/bibliography_spec.rb +67 -67
- data/spec/citeproc/engine_spec.rb +2 -6
- data/spec/citeproc/processor_spec.rb +73 -1
- metadata +10 -10
data/lib/citeproc/utilities.rb
CHANGED
data/lib/citeproc/version.rb
CHANGED
@@ -2,59 +2,63 @@ require 'spec_helper'
|
|
2
2
|
require 'tempfile'
|
3
3
|
|
4
4
|
module CiteProc
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
5
|
+
|
6
|
+
describe 'Assets' do
|
7
|
+
let(:file) { Tempfile.new('asset') }
|
8
|
+
let(:root) { File.dirname(file.path) }
|
9
|
+
let(:name) { File.basename(file.path) }
|
10
|
+
let(:extension) { File.extname(name) }
|
11
|
+
|
12
|
+
before(:all) do
|
13
|
+
file.write("asset content\n")
|
14
|
+
file.close
|
15
|
+
end
|
16
|
+
|
17
|
+
after(:all) { file.unlink }
|
18
|
+
|
19
|
+
describe 'Style' do
|
20
|
+
|
21
|
+
before(:all) do
|
22
|
+
@default_root = Style.root
|
23
|
+
@default_extension = Style.extension
|
24
|
+
Style.root = root
|
25
|
+
Style.extension = extension
|
26
|
+
end
|
27
|
+
|
28
|
+
after(:all) do
|
29
|
+
Style.root = @default_root
|
30
|
+
Style.extension = @default_extension
|
31
|
+
end
|
32
|
+
|
33
|
+
it 'should not be open by default' do
|
34
|
+
Style.new.should_not be_open
|
35
|
+
end
|
36
|
+
|
37
|
+
describe '.open' do
|
38
|
+
|
39
|
+
it 'accepts an absolute file name' do
|
40
|
+
Style.open(file.path).to_s.should == "asset content\n"
|
41
|
+
end
|
42
|
+
|
43
|
+
it 'accepts a file name' do
|
44
|
+
Style.open(name).to_s.should == "asset content\n"
|
45
|
+
end
|
46
|
+
|
47
|
+
it 'accepts a file name without extension' do
|
48
|
+
Style.open(name.sub(/#{extension}$/,'')).to_s.should == "asset content\n"
|
49
|
+
end
|
50
|
+
|
51
|
+
|
52
|
+
it 'accepts an io object' do
|
53
|
+
Style.open(file.open).to_s.should == "asset content\n"
|
54
|
+
end
|
55
|
+
|
56
|
+
it 'returns the given string if it looks like XML' do
|
57
|
+
Style.open('<b>foo bar!</b>').to_s.should == '<b>foo bar!</b>'
|
58
|
+
end
|
59
|
+
|
60
|
+
end
|
61
|
+
|
62
|
+
end
|
63
|
+
end
|
60
64
|
end
|
@@ -1,72 +1,72 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
module CiteProc
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
4
|
+
|
5
|
+
describe Bibliography do
|
6
|
+
|
7
|
+
it { should be_empty }
|
8
|
+
it { should_not have_errors }
|
9
|
+
|
10
|
+
describe '#to_citeproc conversion' do
|
11
|
+
|
12
|
+
it 'returns an array' do
|
13
|
+
subject.to_citeproc.should be_a(Array)
|
14
|
+
end
|
15
|
+
|
16
|
+
it 'returns exactly two elements' do
|
17
|
+
subject.to_citeproc.should have(2).elements
|
18
|
+
end
|
19
|
+
|
20
|
+
it 'returns formatting options as the first element' do
|
21
|
+
subject.to_citeproc.first.should be_a(Hash)
|
22
|
+
end
|
23
23
|
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
24
|
+
describe 'the formatting options' do
|
25
|
+
let(:options) { subject.to_citeproc[0] }
|
26
|
+
|
27
|
+
it 'contains a the error list' do
|
28
|
+
options.should have_key('bibliography_errors')
|
29
|
+
options['bibliography_errors'].should be_empty
|
30
|
+
end
|
31
|
+
|
32
|
+
end
|
33
|
+
|
34
|
+
it 'returns the list of references as the second element' do
|
35
|
+
subject.to_citeproc.last.should be_a(Array)
|
36
|
+
end
|
37
|
+
|
38
|
+
end
|
39
|
+
|
40
|
+
describe '.create (citeproc parser)' do
|
41
|
+
let(:js) { <<-JS_END }
|
42
|
+
[
|
43
|
+
{
|
44
|
+
"maxoffset": 0,
|
45
|
+
"entryspacing": 0,
|
46
|
+
"linespacing": 0,
|
47
|
+
"hangingindent": 0,
|
48
|
+
"second-field-align": true,
|
49
|
+
"bibstart": "<div class=\\"csl-bib-body\\">\\n",
|
50
|
+
"bibend": "</div>",
|
51
|
+
"bibliography_errors": []
|
52
|
+
},
|
53
|
+
[
|
54
|
+
"<div class=\\"csl-entry\\">Book A</div>",
|
55
|
+
"<div class=\\"csl-entry\\">Book C</div>"
|
56
|
+
]
|
57
|
+
]
|
58
|
+
JS_END
|
59
|
+
|
60
|
+
it 'parses citeproc/json strings' do
|
61
|
+
b = Bibliography.create(js)
|
62
|
+
b.should be_a(Bibliography)
|
63
|
+
b.should have(2).references
|
64
|
+
b.should_not have_errors
|
65
|
+
b.options[:align].should be true
|
66
|
+
end
|
67
|
+
|
68
|
+
end
|
69
|
+
|
70
|
+
end
|
71
|
+
|
72
72
|
end
|
@@ -8,16 +8,12 @@ module CiteProc
|
|
8
8
|
end
|
9
9
|
|
10
10
|
describe 'subclasses' do
|
11
|
-
let(:subject) { Class.new(Engine).new
|
11
|
+
let(:subject) { Class.new(Engine).new }
|
12
12
|
|
13
13
|
it 'can be instantiated' do
|
14
14
|
subject.should_not be nil
|
15
15
|
end
|
16
|
-
|
17
|
-
it 'can be started' do
|
18
|
-
expect { subject.start }.to change { subject.running? }.from(false).to(true)
|
19
|
-
end
|
20
|
-
|
16
|
+
|
21
17
|
end
|
22
18
|
|
23
19
|
end
|
@@ -4,11 +4,83 @@ module CiteProc
|
|
4
4
|
describe Processor do
|
5
5
|
before { Class.new(Engine) }
|
6
6
|
|
7
|
-
|
7
|
+
let(:p) { Processor.new }
|
8
|
+
let(:palefire) { Item.new(:id => 'palefire', :type => :book, :title => 'Pale Fire') }
|
9
|
+
let(:despair) { Item.new(:id => 'despair', :type => :book, :title => 'Despair') }
|
8
10
|
|
9
11
|
it { should_not be nil }
|
10
12
|
|
13
|
+
describe '#register' do
|
14
|
+
|
15
|
+
it 'adds the passed-in item to the items hash' do
|
16
|
+
expect { p.register(palefire) }.to change { p.items.length }.by(1)
|
17
|
+
end
|
18
|
+
|
19
|
+
it 'register the item with its id' do
|
20
|
+
expect { p.register(palefire) }.to change { p.has_key?(:palefire) }
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
24
|
+
|
25
|
+
describe '#<<' do
|
26
|
+
|
27
|
+
it 'registers the passed in item' do
|
28
|
+
expect { p << palefire }.to change { p.has_key?(:palefire) }
|
29
|
+
end
|
30
|
+
|
31
|
+
it 'returns the processor' do
|
32
|
+
(p << palefire).should be_equal(p)
|
33
|
+
end
|
34
|
+
|
35
|
+
end
|
36
|
+
|
37
|
+
describe '#[]' do
|
38
|
+
|
39
|
+
describe 'when there is no item with the passed-in id' do
|
40
|
+
it 'returns nil' do
|
41
|
+
p[:palefire].should be nil
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
describe 'when there is an item with the passed-in id' do
|
46
|
+
before(:each) { p.register(palefire) }
|
47
|
+
|
48
|
+
it 'returns the item' do
|
49
|
+
p[:palefire].should equal(palefire)
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
describe '#update' do
|
55
|
+
|
56
|
+
it 'accepts a single item and adds it to the item hash' do
|
57
|
+
expect { p.update(palefire) }.to change { p.items.length }.by(1)
|
58
|
+
end
|
59
|
+
|
60
|
+
it 'registers the passed-in item with its id' do
|
61
|
+
expect { p.update(palefire) }.to change { p[:palefire] }.from(nil).to(palefire)
|
62
|
+
end
|
63
|
+
|
64
|
+
describe 'when passed a hash' do
|
65
|
+
it 'registers the value with the key as id' do
|
66
|
+
p.update(:foo => palefire)[:foo].should equal(palefire)
|
67
|
+
end
|
68
|
+
|
69
|
+
it 'converts the value to an item' do
|
70
|
+
p.update(:foo => { :title => 'The Story of Foo' })[:foo].should be_a(Item)
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
it 'adds all items in the array when passed an array' do
|
75
|
+
expect { p.update([palefire, despair]) }.to change { p.items.length }.by(2)
|
76
|
+
end
|
11
77
|
|
78
|
+
it 'adds all items in when passed multiple items' do
|
79
|
+
expect { p.update(palefire, despair) }.to change { p.items.length }.by(2)
|
80
|
+
end
|
81
|
+
|
82
|
+
end
|
83
|
+
|
12
84
|
describe '#bibliography (generates the bibliography)' do
|
13
85
|
|
14
86
|
describe 'when no items have been processed' do
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: citeproc
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.6
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2011-11-
|
12
|
+
date: 2011-11-06 00:00:00.000000000Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: multi_json
|
16
|
-
requirement: &
|
16
|
+
requirement: &2157117740 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ~>
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: '1.0'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *2157117740
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: cucumber
|
27
|
-
requirement: &
|
27
|
+
requirement: &2157114740 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ! '>='
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: 1.0.2
|
33
33
|
type: :development
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *2157114740
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: rspec
|
38
|
-
requirement: &
|
38
|
+
requirement: &2157112700 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ! '>='
|
@@ -43,10 +43,10 @@ dependencies:
|
|
43
43
|
version: 2.6.0
|
44
44
|
type: :development
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *2157112700
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: watchr
|
49
|
-
requirement: &
|
49
|
+
requirement: &2157105760 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - ! '>='
|
@@ -54,7 +54,7 @@ dependencies:
|
|
54
54
|
version: '0.7'
|
55
55
|
type: :development
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *2157105760
|
58
58
|
description: A a cite processor for Citation Style Language (CSL) styles.
|
59
59
|
email: http://sylvester.keil.or.at
|
60
60
|
executables: []
|