csl 1.0.0.pre20 → 1.0.0.pre21
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/csl/schema.rb +4 -0
- data/lib/csl/style/choose.rb +26 -5
- data/lib/csl/version.rb +1 -1
- data/spec/csl/style/choose_spec.rb +44 -1
- metadata +3 -3
data/lib/csl/schema.rb
CHANGED
data/lib/csl/style/choose.rb
CHANGED
@@ -1,16 +1,37 @@
|
|
1
1
|
module CSL
|
2
2
|
class Style
|
3
|
-
|
3
|
+
|
4
4
|
class Choose < Node
|
5
5
|
|
6
6
|
class Block < Node
|
7
|
-
|
8
|
-
|
9
|
-
|
7
|
+
attr_struct :match, *Schema.attr(:conditionals)
|
8
|
+
|
9
|
+
attr_defaults :match => 'all'
|
10
|
+
|
11
|
+
class << self
|
12
|
+
def matches?(nodename)
|
13
|
+
nodename.to_s =~ /^if(-else)?|else$/
|
14
|
+
end
|
10
15
|
end
|
11
16
|
|
17
|
+
def conditions
|
18
|
+
attributes_for(*Schema.attr(:conditionals)).map { |type, values|
|
19
|
+
values.to_s.split(/\s+/).map { |value| [type, value] }
|
20
|
+
}.flatten(1)
|
21
|
+
end
|
22
|
+
|
23
|
+
def matcher
|
24
|
+
case attributes[:match]
|
25
|
+
when 'any'
|
26
|
+
:any?
|
27
|
+
when 'none'
|
28
|
+
:none?
|
29
|
+
else
|
30
|
+
:all?
|
31
|
+
end
|
32
|
+
end
|
12
33
|
end
|
13
34
|
end
|
14
|
-
|
35
|
+
|
15
36
|
end
|
16
37
|
end
|
data/lib/csl/version.rb
CHANGED
@@ -1,7 +1,50 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
module CSL
|
4
|
-
|
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
|
+
Choose::Block.new.conditions.should 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 and value of the condition' do
|
21
|
+
node.conditions.should == [[:'is-numeric', 'edition']]
|
22
|
+
end
|
23
|
+
|
24
|
+
describe 'when the node has two conditions' do
|
25
|
+
before(:each) { node[:disambiguate] = 'true' }
|
26
|
+
|
27
|
+
it 'returns an array with two elements' do
|
28
|
+
node.conditions.should have_exactly(2).items
|
29
|
+
end
|
30
|
+
|
31
|
+
it 'returns both conditions as arrays' do
|
32
|
+
node.conditions.map(&:first).sort.should == [:disambiguate, :'is-numeric']
|
33
|
+
node.conditions.map(&:last).sort.should == ['edition', 'true']
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
describe 'when the node has a single condition with multiple values' do
|
39
|
+
let(:node) { Choose::Block.new(:variable => 'author editor' )}
|
40
|
+
|
41
|
+
it 'expands the conditions in the result' do
|
42
|
+
node.conditions.should == [[:variable, 'author'], [:variable, 'editor']]
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
end
|
5
48
|
|
6
49
|
end
|
7
50
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: csl
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.0.
|
4
|
+
version: 1.0.0.pre21
|
5
5
|
prerelease: 6
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-01-
|
12
|
+
date: 2013-01-21 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: namae
|
@@ -183,7 +183,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
183
183
|
version: '0'
|
184
184
|
segments:
|
185
185
|
- 0
|
186
|
-
hash: -
|
186
|
+
hash: -1739872005928970958
|
187
187
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
188
188
|
none: false
|
189
189
|
requirements:
|