csl 1.4.5 → 1.6.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (55) hide show
  1. checksums.yaml +5 -5
  2. data/.github/workflows/ci.yml +26 -0
  3. data/BSDL +1 -1
  4. data/Gemfile +9 -30
  5. data/README.md +1 -5
  6. data/Rakefile +0 -8
  7. data/csl.gemspec +10 -13
  8. data/cucumber.yml +1 -1
  9. data/lib/csl/locale.rb +4 -4
  10. data/lib/csl/locale/term.rb +1 -1
  11. data/lib/csl/node.rb +2 -2
  12. data/lib/csl/treelike.rb +11 -7
  13. data/lib/csl/version.rb +1 -1
  14. metadata +30 -92
  15. data/.rspec +0 -3
  16. data/.simplecov +0 -4
  17. data/Guardfile +0 -15
  18. data/features/locales/loading.feature +0 -57
  19. data/features/locales/ordinalize.feature +0 -713
  20. data/features/parser/choose.feature +0 -16
  21. data/features/parser/info.feature +0 -27
  22. data/features/parser/localized_dates.feature +0 -35
  23. data/features/parser/terms.feature +0 -28
  24. data/features/step_definitions/locale_steps.rb +0 -36
  25. data/features/step_definitions/parser_steps.rb +0 -40
  26. data/features/step_definitions/style_steps.rb +0 -16
  27. data/features/style/loading.feature +0 -53
  28. data/features/support/env.rb +0 -24
  29. data/spec/csl/info_spec.rb +0 -278
  30. data/spec/csl/locale/date_spec.rb +0 -63
  31. data/spec/csl/locale/style_options_spec.rb +0 -19
  32. data/spec/csl/locale/term_spec.rb +0 -255
  33. data/spec/csl/locale_spec.rb +0 -245
  34. data/spec/csl/node_spec.rb +0 -273
  35. data/spec/csl/parser_spec.rb +0 -112
  36. data/spec/csl/schema_spec.rb +0 -112
  37. data/spec/csl/style/bibliography_spec.rb +0 -7
  38. data/spec/csl/style/choose_spec.rb +0 -66
  39. data/spec/csl/style/citation_spec.rb +0 -7
  40. data/spec/csl/style/date_spec.rb +0 -21
  41. data/spec/csl/style/group_spec.rb +0 -7
  42. data/spec/csl/style/label_spec.rb +0 -44
  43. data/spec/csl/style/layout_spec.rb +0 -7
  44. data/spec/csl/style/macro_spec.rb +0 -7
  45. data/spec/csl/style/names_spec.rb +0 -36
  46. data/spec/csl/style/number_spec.rb +0 -85
  47. data/spec/csl/style/sort_spec.rb +0 -11
  48. data/spec/csl/style/text_spec.rb +0 -7
  49. data/spec/csl/style_spec.rb +0 -137
  50. data/spec/csl/treelike_spec.rb +0 -151
  51. data/spec/fixtures/locales/locales-de-DE.xml +0 -298
  52. data/spec/fixtures/locales/locales-en-GB.xml +0 -304
  53. data/spec/fixtures/locales/locales-en-US.xml +0 -304
  54. data/spec/fixtures/styles/apa.csl +0 -443
  55. data/spec/spec_helper.rb +0 -57
@@ -1,7 +0,0 @@
1
- require 'spec_helper'
2
-
3
- module CSL
4
- describe Style::Bibliography do
5
-
6
- end
7
- end
@@ -1,66 +0,0 @@
1
- require 'spec_helper'
2
-
3
- module CSL
4
- class Style
5
-
6
- describe Choose do
7
-
8
- end
9
-
10
- describe Choose::Block do
11
-
12
- describe '#conditions' do
13
- it 'returns an empty list by default' do
14
- expect(Choose::Block.new.conditions).to be_empty
15
- end
16
-
17
- describe 'when the node has a single condition' do
18
- let(:node) { Choose::Block.new(:'is-numeric' => 'edition' )}
19
-
20
- it 'returns an array with an array containing the type, matcher and values of the condition' do
21
- expect(node.conditions).to eq([[:'is-numeric', :all?, ['edition']]])
22
- end
23
-
24
- describe 'when the condition has multiple values' do
25
- before { node[:'is-numeric'] << ' issue' }
26
-
27
- it 'it splits the values in the conditions list' do
28
- expect(node.conditions).to eq([[:'is-numeric', :all?, ['edition', 'issue']]])
29
- end
30
- end
31
-
32
- describe 'when the node has two conditions' do
33
- before { node[:disambiguate] = 'true' }
34
-
35
- it 'returns an array with two elements' do
36
- expect(node.conditions.size).to eq(2)
37
- end
38
-
39
- it 'returns both conditions as arrays' do
40
- expect(node.conditions.map(&:first).sort).to eq([:disambiguate, :'is-numeric'])
41
- expect(node.conditions.map(&:last).sort).to eq([['edition'], ['true']])
42
- end
43
- end
44
- end
45
-
46
- describe 'when the node has a condition with a match override' do
47
- let(:node) { Choose::Block.new(:'variable-any' => 'author editor' )}
48
-
49
- it 'strips the match override from the type name and inserts it as the matcher' do
50
- expect(node.conditions).to eq([[:variable, :any?, ['author', 'editor']]])
51
- end
52
-
53
- describe 'other conditions' do
54
- before { node[:position] = 'false' }
55
-
56
- it 'are not affected by the override' do
57
- expect(node.conditions.map { |c| c[1].to_s }.sort).to eq(%w{ all? any? })
58
- end
59
- end
60
- end
61
- end
62
-
63
- end
64
-
65
- end
66
- end
@@ -1,7 +0,0 @@
1
- require 'spec_helper'
2
-
3
- module CSL
4
- describe Style::Citation do
5
-
6
- end
7
- end
@@ -1,21 +0,0 @@
1
- require 'spec_helper'
2
-
3
- module CSL
4
- describe Style::Date do
5
-
6
- end
7
-
8
- describe Style::DatePart do
9
-
10
- describe '#numeric-leading-zeros?' do
11
-
12
- it { is_expected.not_to be_numeric_leading_zeros }
13
-
14
- it 'returns true when the form is set accordingly' do
15
- subject[:form] = 'numeric-leading-zeros'
16
- expect(subject).to be_numeric_leading_zeros
17
- end
18
- end
19
-
20
- end
21
- end
@@ -1,7 +0,0 @@
1
- require 'spec_helper'
2
-
3
- module CSL
4
- describe Style::Group do
5
-
6
- end
7
- end
@@ -1,44 +0,0 @@
1
- require 'spec_helper'
2
-
3
- module CSL
4
- describe Style::Label do
5
-
6
- it { is_expected.not_to be_names_label }
7
- it { is_expected.not_to be_always_pluralize }
8
- it { is_expected.not_to be_never_pluralize }
9
-
10
- describe '.terms' do
11
- Hash[*%w{
12
- page page
13
- issue issue
14
- edition edition
15
- number-of-pages page
16
- number-of-volumes volume
17
- chapter-number chapter
18
- }].each do |variable, term|
19
- it "returns #{term.inspect} for #{variable.inspect}" do
20
- expect(Style::Label.terms[variable]).to eq(term)
21
- end
22
- end
23
- end
24
-
25
- describe 'a label inside a names node' do
26
- before(:each) { Style::Names.new << subject }
27
-
28
- it { is_expected.to be_names_label }
29
- end
30
-
31
- describe '#term' do
32
- it { is_expected.to be_empty }
33
-
34
- it 'returns the term for the current variable' do
35
- subject[:variable] = 'page'
36
- expect(subject.term).to eq('page')
37
-
38
- subject[:variable] = 'number-of-volumes'
39
- expect(subject.term).to eq('volume')
40
- end
41
- end
42
-
43
- end
44
- end
@@ -1,7 +0,0 @@
1
- require 'spec_helper'
2
-
3
- module CSL
4
- describe Style::Layout do
5
-
6
- end
7
- end
@@ -1,7 +0,0 @@
1
- require 'spec_helper'
2
-
3
- module CSL
4
- describe Style::Macro do
5
-
6
- end
7
- end
@@ -1,36 +0,0 @@
1
- require 'spec_helper'
2
-
3
- module CSL
4
- describe Style::Names do
5
-
6
- end
7
-
8
- describe Style::Name do
9
-
10
- it { is_expected.to be_delimiter_contextually_precedes_last }
11
-
12
- [:never, :always, :contextually].each do |setting|
13
- setter = "delimiter_#{setting}_precedes_last!"
14
- predicate = "delimiter_#{setting}_precedes_last?"
15
-
16
- describe "##{setter}" do
17
- it 'sets the delimiter precedes last option accordingly' do
18
- expect(subject.send(setter).send(predicate)).to eq(true)
19
- end
20
- end
21
- end
22
-
23
- end
24
-
25
- describe Style::NamePart do
26
-
27
- end
28
-
29
- describe Style::EtAl do
30
-
31
- end
32
-
33
- describe Style::Substitute do
34
-
35
- end
36
- end
@@ -1,85 +0,0 @@
1
- require 'spec_helper'
2
-
3
- module CSL
4
- describe Style::Number do
5
-
6
- describe '.new' do
7
- it 'returns an empty number tag by default' do
8
- expect(Style::Number.new.attributes).to be_empty
9
- end
10
-
11
- it 'accepts a form attribute' do
12
- expect(Style::Number.new(:form => 'roman')).to be_roman
13
- end
14
- end
15
-
16
- describe '#numeric?' do
17
- it 'returns true by default' do
18
- expect(Style::Number.new).to be_numeric
19
- end
20
-
21
- it 'returns false if the form attribute is set to a value other than :numeric' do
22
- expect(Style::Number.new(:form => 'foo')).not_to be_numeric
23
- end
24
-
25
- it 'returns false if the form attribute is set to :numeric' do
26
- expect(Style::Number.new(:form => 'numeric')).to be_numeric
27
- end
28
- end
29
-
30
- describe '#roman?' do
31
- it 'returns false by default' do
32
- expect(Style::Number.new).not_to be_roman
33
- end
34
-
35
- it 'returns false if the form attribute is set to a value other than :numeric' do
36
- expect(Style::Number.new(:form => 'ordinal')).not_to be_roman
37
- end
38
-
39
- it 'returns false if the form attribute is set to :roman' do
40
- expect(Style::Number.new(:form => 'roman')).to be_roman
41
- end
42
- end
43
-
44
- describe '#ordinal?' do
45
- it 'returns false by default' do
46
- expect(Style::Number.new).not_to be_ordinal
47
- end
48
-
49
- it 'returns false if the form attribute is set to a value other than :ordinal' do
50
- expect(Style::Number.new(:form => 'long-ordinal')).not_to be_ordinal
51
- end
52
-
53
- it 'returns false if the form attribute is set to :ordinal' do
54
- expect(Style::Number.new(:form => 'ordinal')).to be_ordinal
55
- expect(Style::Number.new(:form => :ordinal)).to be_ordinal
56
- end
57
- end
58
-
59
- describe '#long_ordinal?' do
60
- it 'returns false by default' do
61
- expect(Style::Number.new).not_to be_long_ordinal
62
- end
63
-
64
- it 'returns false if the form attribute is set to a value other than :"long-ordinal"' do
65
- expect(Style::Number.new(:form => 'ordinal')).not_to be_long_ordinal
66
- end
67
-
68
- it 'returns false if the form attribute is set to :ordinal' do
69
- expect(Style::Number.new(:form => 'long-ordinal')).to be_long_ordinal
70
- end
71
- end
72
-
73
-
74
- describe '#to_xml' do
75
- it 'returns an empty number tag by default' do
76
- expect(Style::Number.new.to_xml).to eq('<number/>')
77
- end
78
-
79
- it 'returns a tag with a all attribute assignments' do
80
- expect(Style::Number.new(:form => 'roman').to_xml).to eq('<number form="roman"/>')
81
- end
82
- end
83
-
84
- end
85
- end
@@ -1,11 +0,0 @@
1
- require 'spec_helper'
2
-
3
- module CSL
4
- describe Style::Sort do
5
- it { is_expected.not_to have_sort_keys }
6
- end
7
-
8
- describe Style::Sort::Key do
9
-
10
- end
11
- end
@@ -1,7 +0,0 @@
1
- require 'spec_helper'
2
-
3
- module CSL
4
- describe Style::Text do
5
-
6
- end
7
- end
@@ -1,137 +0,0 @@
1
- require 'spec_helper'
2
-
3
- module CSL
4
- describe Style do
5
- let(:style) { Style.new }
6
-
7
- it 'has a 1.x version by default' do
8
- expect(style[:version]).to match(/1\.\d+(\.\d+)?/)
9
- end
10
-
11
- it 'has the default version' do
12
- expect(style.default_attribute?(:version)).to be_truthy
13
- end
14
-
15
- it 'has a the default namespace attribute' do
16
- expect(style[:xmlns]).to eq(CSL::Schema.namespace)
17
- expect(style.default_attribute?(:xmlns)).to be_truthy
18
- end
19
-
20
- describe '#to_xml' do
21
- it 'returns an empty style' do
22
- expect(style.to_xml).to match(/^<style[^>]*\/>/)
23
- end
24
-
25
- it 'includes the xml namespace' do
26
- expect(style.to_xml).to match(CSL::Schema.namespace)
27
- end
28
-
29
- it 'supports round-trip for apa style' do
30
- apa = Style.load(:apa)
31
- expect(apa).to be_a(Style)
32
-
33
- xml = apa.to_xml
34
- expect(xml).to match(/^<style[^>]*>/)
35
-
36
- expect(Style.parse(xml)).to be_a(Style)
37
- end
38
- end
39
-
40
- describe '#deep_copy' do
41
- it 'works on apa style' do
42
- apa = Style.load(:apa)
43
- expect(apa).to be_a(Style)
44
-
45
- xml = apa.to_xml
46
-
47
- copy = apa.deep_copy
48
-
49
- expect(apa.to_xml).to eq(xml) # original unchanged!
50
- expect(copy.to_xml).to eq(xml)
51
- end
52
- end
53
-
54
- describe '#children' do
55
-
56
- it { is_expected.not_to have_info }
57
- it { is_expected.not_to have_locale }
58
- it { is_expected.not_to have_macro }
59
- it { is_expected.not_to have_citation }
60
- it { is_expected.not_to have_bibliography }
61
-
62
- describe 'when it has a title' do
63
- before { style.title = 'foo' }
64
-
65
- it { expect(style).to have_info }
66
-
67
- it 'info.title is a text node' do
68
- expect(style.info.title).to be_a(TextNode)
69
- end
70
-
71
- it '#title returns the title as a string' do
72
- expect(style.title).to be_a(String)
73
- end
74
- end
75
- end
76
-
77
- describe '#id accessor' do
78
- it 'returns nil by default' do
79
- expect(style.id).to be_nil
80
- end
81
-
82
- it 'writer sets the id to the passed-in string' do
83
- expect { style.id = 'foobar' }.to change { style.id }.from(nil).to('foobar')
84
- end
85
- end
86
-
87
- describe 'independent and dependent styles' do
88
- it 'styles are independent by default' do
89
- expect(style).to be_independent
90
- end
91
-
92
- it 'styles do not have independent-parent links by default' do
93
- expect(style).not_to have_independent_parent_link
94
- end
95
-
96
- it 'when setting an independet-parent link a style becomes dependent' do
97
- expect { style.independent_parent_link = 'foo' }.to change { style.independent? }
98
- end
99
-
100
- it 'looks up independent styles parents locally first' do
101
- style.independent_parent_link = 'http://example.com/non-existent/styles/apa'
102
- expect(style.independent_parent).to eq Style.load('apa')
103
- end
104
- end
105
-
106
- describe 'macros' do
107
- it 'has no macros by default' do
108
- expect(style).not_to have_macros
109
- end
110
-
111
- it 'raises a validation error when adding a macro without name' do
112
- expect { Style.new << Style::Macro.new }.to raise_error(ValidationError)
113
- end
114
-
115
- describe 'when it has an "author" macro' do
116
- before { style << Style::Macro.new(:name => 'author') }
117
-
118
- it 'has macros' do
119
- expect(style).to have_macros
120
- end
121
-
122
- it 'the macro is registered in the macros hash' do
123
- expect(style.macros).to have_key('author')
124
- expect(style.macros['author']).to be_a(Style::Macro)
125
- end
126
-
127
- it 'raises a validation error when adding a macro with a duplicate name' do
128
- expect { style << Style::Macro.new(:name => 'author') }.to raise_error(ValidationError)
129
- end
130
-
131
- it 'unregisters the macro when it is deleted' do
132
- expect { style.delete style.macros['author'] }.to change { style.macros.length }
133
- end
134
- end
135
- end
136
- end
137
- end