csl 1.0.0.pre16 → 1.0.0.pre17

Sign up to get free protection for your applications and to get access to all the features.
data/lib/csl.rb CHANGED
@@ -23,6 +23,7 @@ require 'csl/treelike'
23
23
  require 'csl/node'
24
24
 
25
25
  require 'csl/info'
26
+ require 'csl/date_part'
26
27
 
27
28
  require 'csl/locale'
28
29
  require 'csl/locale/date'
@@ -0,0 +1,52 @@
1
+ module CSL
2
+ module DatePart
3
+
4
+ def range_delimiter
5
+ attributes.fetch(:'range-delimiter', '')
6
+ end
7
+
8
+ def has_name?
9
+ attribute?(:name)
10
+ end
11
+
12
+ def name
13
+ attributes[:name].to_s
14
+ end
15
+
16
+ def has_form?
17
+ attribute?(:form)
18
+ end
19
+
20
+ def form
21
+ case
22
+ when has_form?
23
+ attributes[:form].to_s
24
+ when day?
25
+ 'numeric'
26
+ else
27
+ 'long'
28
+ end
29
+ end
30
+
31
+ Schema.values[:date_part][:form].each do |type|
32
+ pattern = Regexp.new("^#{type}", true)
33
+
34
+ define_method("#{type}?".tr('-', '_')) do
35
+ form =~ pattern
36
+ end
37
+ end
38
+
39
+ def year?
40
+ name =~ /year/i
41
+ end
42
+
43
+ def month?
44
+ name =~ /month/i
45
+ end
46
+
47
+ def day?
48
+ name =~ /day/i
49
+ end
50
+
51
+ end
52
+ end
@@ -21,10 +21,23 @@ module CSL
21
21
  raise ValidationError, "parent must be locale node: was #{node.inspect}" unless node.is_a?(Locale)
22
22
  end
23
23
 
24
- %w{ text numeric }.each do |type|
25
- define_method("#{type}?") { attributes.form == type }
24
+ def delimiter
25
+ attributes.fetch(:delimiter, '')
26
26
  end
27
27
 
28
+ def text?
29
+ !numeric?
30
+ end
31
+
32
+ def numeric?
33
+ attributes[:form].to_s =~ /^numeric$/i
34
+ end
35
+
36
+ def has_date_parts?
37
+ !date_parts.empty?
38
+ end
39
+ alias has_parts? has_date_parts?
40
+
28
41
  end
29
42
 
30
43
  # DatePart represent the localized formatting options for an individual
@@ -35,12 +48,7 @@ module CSL
35
48
  attr_struct :name, :form, :'range-delimiter',
36
49
  *Schema.attr(:formatting, :periods)
37
50
 
38
- %w{ day month year }.each do |part|
39
- define_method("#{part}?") do
40
- attributes.name == part
41
- end
42
- end
43
-
51
+ include CSL::DatePart
44
52
  end
45
53
 
46
54
 
data/lib/csl/schema.rb CHANGED
@@ -91,7 +91,15 @@ module CSL
91
91
  @attributes.values_at(:affixes, :font).flatten)
92
92
 
93
93
  @attributes.freeze
94
+
95
+ @values = Hash.new { |h,k| h.fetch(k.to_sym, nil) }.merge({
96
+ :date_part => {
97
+ :form => %w{ numeric numeric-leading-zeros ordinal long short }
98
+ }
99
+ })
94
100
 
101
+ @values.freeze
102
+
95
103
  @file = File.expand_path('../../../vendor/schema/csl.rng', __FILE__)
96
104
 
97
105
  @validators = {
@@ -120,7 +128,7 @@ module CSL
120
128
  class << self
121
129
 
122
130
  attr_accessor :version, :namespace, :types, :variables, :categories,
123
- :attributes, :preamble
131
+ :attributes, :preamble, :values
124
132
 
125
133
  private :new
126
134
 
@@ -2,7 +2,6 @@ module CSL
2
2
  class Style
3
3
 
4
4
  class Date < Node
5
-
6
5
  attr_defaults :'date-parts' => 'year-month-day'
7
6
 
8
7
  attr_struct :name, :form, :'range-delimiter', :'date-parts', :variable,
@@ -22,6 +21,12 @@ module CSL
22
21
  yield self if block_given?
23
22
  end
24
23
 
24
+ # @return [Array<String>] the localized date parts to be used
25
+ def date_parts_filter
26
+ attributes[:'date-parts'].to_s.split(/-/)
27
+ end
28
+ alias parts_filter date_parts_filter
29
+
25
30
  def delimiter
26
31
  attributes.fetch(:delimiter, '')
27
32
  end
@@ -37,56 +42,37 @@ module CSL
37
42
  def has_form?
38
43
  attribute?(:form)
39
44
  end
45
+ alias localized? has_form?
40
46
 
41
47
  def form
42
48
  attributes[:form]
43
49
  end
44
50
 
51
+ def numeric?
52
+ attributes[:form].to_s =~ /^numeric$/i
53
+ end
54
+
55
+ def text?
56
+ attributes[:form].to_s =~ /^text$/i
57
+ end
58
+
45
59
  def has_date_parts?
46
60
  !date_parts.empty?
47
61
  end
48
62
  alias has_parts? has_date_parts?
49
63
 
64
+ def has_overrides?
65
+ localized? && has_parts?
66
+ end
50
67
  end
51
68
 
52
69
  class DatePart < Node
70
+ has_no_children
71
+
53
72
  attr_struct :name, :form, :'range-delimiter',
54
73
  *Schema.attr(:formatting, :periods)
55
74
 
56
- def range_delimiter
57
- attributes.fetch(:'range-delimiter', '')
58
- end
59
-
60
- def name
61
- attributes[:name].to_s
62
- end
63
-
64
- def has_form?
65
- attribute?(:form)
66
- end
67
-
68
- def form
69
- case
70
- when has_form?
71
- attributes[:form]
72
- when has_parent?
73
- parent.form
74
- else
75
- nil
76
- end
77
- end
78
-
79
- def year?
80
- name =~ /year/i
81
- end
82
-
83
- def month?
84
- name =~ /month/i
85
- end
86
-
87
- def day?
88
- name =~ /day/i
89
- end
75
+ include CSL::DatePart
90
76
  end
91
77
 
92
78
  end
data/lib/csl/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module CSL
2
- VERSION = '1.0.0.pre16'.freeze
2
+ VERSION = '1.0.0.pre17'.freeze
3
3
  end
@@ -8,7 +8,7 @@ module CSL
8
8
 
9
9
  it { should_not be_nil }
10
10
 
11
- it { should_not be_text }
11
+ it { should be_text }
12
12
  it { should_not be_numeric }
13
13
 
14
14
  describe '#parts' do
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.pre16
4
+ version: 1.0.0.pre17
5
5
  prerelease: 6
6
6
  platform: ruby
7
7
  authors:
@@ -109,6 +109,7 @@ files:
109
109
  - features/support/env.rb
110
110
  - lib/csl.rb
111
111
  - lib/csl/compatibility.rb
112
+ - lib/csl/date_part.rb
112
113
  - lib/csl/errors.rb
113
114
  - lib/csl/extensions.rb
114
115
  - lib/csl/info.rb
@@ -182,7 +183,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
182
183
  version: '0'
183
184
  segments:
184
185
  - 0
185
- hash: -3642197188366485862
186
+ hash: -438810669519834613
186
187
  required_rubygems_version: !ruby/object:Gem::Requirement
187
188
  none: false
188
189
  requirements: