csl 1.0.0.pre16 → 1.0.0.pre17

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.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: