i18n_date_range 1.0.3 → 2.0.0

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d63ea2ee051f21d65183750a064b9cd38f3248a55e50ec037056246c8e7a7424
4
- data.tar.gz: fac4a2b62b8b2f0d38ba75b5107eed21dd7a0e09bdd0812f190e5f59292cdfe2
3
+ metadata.gz: 4b5b37d47192e7ed082d17c10cb9e633b3267699985ceb4a9d5f23914d477f16
4
+ data.tar.gz: ab2eacf2fe9807d9e305f52c626a40352d2a445e0872c03ffe403b80aa84a884
5
5
  SHA512:
6
- metadata.gz: af9801311b093b741615eb8c9fb2a2a34c3917cfcd88dcc60eab1016b122b61b4bd8ee68c610f64d68d257a0231e155c9974a2f392c52deff3fe93332bbc723c
7
- data.tar.gz: 32917fd6bf796a4333492f2cedaca7293a508681b826c51eeb74b564ecdabee95db9ec4b0976c555d7e477f463640ba4201a8cfc7ff21696be06906b6db33f8e
6
+ metadata.gz: 3a2ac59f09a6ac60221430eb270505b886beb3fd13cb335f7da7b174b7d283a8cf899d232572428048e903757958889bd442ca2f2eb8246dbaaf9915e7ceee0d
7
+ data.tar.gz: cbb79ad4ca1cac1a7058c9909e394ea6bc11424d1487798350275c53a706e7bfd771ef3ccf2bb9e8ae413ad99f16886bc8d0e9e1de301e70d1dd3e89b8e04a4f
data/.rubocop.yml CHANGED
@@ -2,6 +2,8 @@ require: rubocop-rails
2
2
 
3
3
  AllCops:
4
4
  TargetRubyVersion: 2.6
5
+ AllCops:
6
+ NewCops: enable
5
7
 
6
8
  Style/StringLiterals:
7
9
  Enabled: true
data/CHANGELOG.md CHANGED
@@ -1,3 +1,8 @@
1
1
  ## [0.1.0] - 2023-09-08
2
2
 
3
3
  - Initial release
4
+
5
+ ## [2.0.0] - 2023-11-02
6
+
7
+ - Change structure to manage different languages and different formats
8
+ - Add bunch of tests
data/Gemfile.lock CHANGED
@@ -119,7 +119,7 @@ GEM
119
119
  mini_mime (1.1.5)
120
120
  minitest (5.20.0)
121
121
  mutex_m (0.1.2)
122
- net-imap (0.4.3)
122
+ net-imap (0.3.7)
123
123
  date
124
124
  net-protocol
125
125
  net-pop (0.1.2)
@@ -255,4 +255,4 @@ DEPENDENCIES
255
255
  rubocop-rails
256
256
 
257
257
  BUNDLED WITH
258
- 2.4.6
258
+ 2.4.21
data/README.md CHANGED
@@ -19,13 +19,18 @@ And then execute:
19
19
  This gem comes with an integrated view helper: `date_range_i18n` which takes 3 parameters:
20
20
  - date_from
21
21
  - date_to (optional)
22
- - format (optional)
22
+ - a hash of additional formatting options(optional)
23
23
 
24
- Format can be `:short` or `:long` (default is :short)
24
+ The options hash currently support 2 arguments:
25
+ - format: can be `:short` or `:long` (default is :short)
26
+ - layout: can be `:one_line`or `:two_lines` (default is :one_line)
25
27
 
26
28
  "Short" format means without the explicit day name (September 8, 2024).
27
29
  "Long" format means with it (Friday, September 8, 2024).
28
30
 
31
+ "One line" layout means the string will be displayed on one line only (From September 8, 2024 to September 8, 2025)
32
+ "Two lines" layout means the result will be displayed on 2 lines,separated with `<br>` (September 8, 2024<br>September 8, 2025)
33
+
29
34
  ## Change texts or formats
30
35
 
31
36
  This gem is based on I18n. Feel free to overwrite any key you want.
@@ -1,19 +1,157 @@
1
1
  en-GB:
2
2
  date_range:
3
- one_line:
4
- with_to: "From %{from} to %{to}"
5
- without_to: "%{from}"
6
- two_lines:
7
- with_to: "%{from}<br>%{to}"
8
- without_to: "%{from}"
9
-
10
- date:
11
- formats:
12
- range_short:
13
- day: "%-d"
14
- day_month: "%-d %B"
15
- day_month_year: "%-d %B %Y"
16
- range_long:
17
- day: "%A %-d"
18
- day_month: "%A, %-d %B"
19
- day_month_year: "%A, %-d %B %Y"
3
+ no_end:
4
+ one_line:
5
+ short:
6
+ from:
7
+ sentence: "From %-d %B %Y"
8
+ upcase_first: false
9
+ to:
10
+ sentence: ""
11
+ upcase_first: false
12
+ long:
13
+ from:
14
+ sentence: "From %A %-d %B %Y"
15
+ upcase_first: false
16
+ to:
17
+ sentence: ""
18
+ upcase_first: false
19
+ two_lines:
20
+ short:
21
+ from:
22
+ sentence: "%-d %B %Y"
23
+ upcase_first: false
24
+ to:
25
+ sentence: ""
26
+ upcase_first: false
27
+ long:
28
+ from:
29
+ sentence: "%A %-d %B %Y"
30
+ upcase_first: true
31
+ to:
32
+ sentence: ""
33
+ upcase_first: false
34
+ same_day:
35
+ one_line:
36
+ short:
37
+ from:
38
+ sentence: "%-d %B %Y"
39
+ upcase_first: false
40
+ to:
41
+ sentence: ""
42
+ upcase_first: false
43
+ long:
44
+ from:
45
+ sentence: "%A %-d %B %Y"
46
+ upcase_first: true
47
+ to:
48
+ sentence: ""
49
+ upcase_first: false
50
+ two_lines:
51
+ short:
52
+ from:
53
+ sentence: "%-d %B %Y"
54
+ upcase_first: false
55
+ to:
56
+ sentence: ""
57
+ upcase_first: false
58
+ long:
59
+ from:
60
+ sentence: "%A %-d %B %Y"
61
+ upcase_first: true
62
+ to:
63
+ sentence: ""
64
+ upcase_first: false
65
+ same_month:
66
+ one_line:
67
+ short:
68
+ from:
69
+ sentence: "From %-d"
70
+ upcase_first: false
71
+ to:
72
+ sentence: " to %-d %B %Y"
73
+ upcase_first: false
74
+ long:
75
+ from:
76
+ sentence: "From %A %-d"
77
+ upcase_first: false
78
+ to:
79
+ sentence: " to %A %-d %B %Y"
80
+ upcase_first: false
81
+ two_lines:
82
+ short:
83
+ from:
84
+ sentence: "%-d %B"
85
+ upcase_first: false
86
+ to:
87
+ sentence: "%-d %B %Y"
88
+ upcase_first: false
89
+ long:
90
+ from:
91
+ sentence: "%A %-d %B"
92
+ upcase_first: true
93
+ to:
94
+ sentence: "%A %-d %B %Y"
95
+ upcase_first: true
96
+ same_year:
97
+ one_line:
98
+ short:
99
+ from:
100
+ sentence: "From %-d %B"
101
+ upcase_first: false
102
+ to:
103
+ sentence: " to %-d %B %Y"
104
+ upcase_first: false
105
+ long:
106
+ from:
107
+ sentence: "From %A %-d %B"
108
+ upcase_first: false
109
+ to:
110
+ sentence: " to %A %-d %B %Y"
111
+ upcase_first: false
112
+ two_lines:
113
+ short:
114
+ from:
115
+ sentence: "%-d %B"
116
+ upcase_first: false
117
+ to:
118
+ sentence: "%-d %B %Y"
119
+ upcase_first: false
120
+ long:
121
+ from:
122
+ sentence: "%A %-d %B"
123
+ upcase_first: true
124
+ to:
125
+ sentence: "%A %-d %B %Y"
126
+ upcase_first: true
127
+ other:
128
+ one_line:
129
+ short:
130
+ from:
131
+ sentence: "From %-d %B %Y"
132
+ upcase_first: false
133
+ to:
134
+ sentence: " to %-d %B %Y"
135
+ upcase_first: false
136
+ long:
137
+ from:
138
+ sentence: "From %A %-d %B %Y"
139
+ upcase_first: false
140
+ to:
141
+ sentence: " to %A %-d %B %Y"
142
+ upcase_first: false
143
+ two_lines:
144
+ short:
145
+ from:
146
+ sentence: "%-d %B %Y"
147
+ upcase_first: false
148
+ to:
149
+ sentence: "%-d %B %Y"
150
+ upcase_first: false
151
+ long:
152
+ from:
153
+ sentence: "%A %-d %B %Y"
154
+ upcase_first: true
155
+ to:
156
+ sentence: "%A %-d %B %Y"
157
+ upcase_first: true
@@ -1,19 +1,157 @@
1
1
  en:
2
2
  date_range:
3
- one_line:
4
- with_to: "From %{from} to %{to}"
5
- without_to: "%{from}"
6
- two_lines:
7
- with_to: "%{from}<br>%{to}"
8
- without_to: "%{from}"
9
-
10
- date:
11
- formats:
12
- range_short:
13
- day: "%-d"
14
- day_month: "%B %-d"
15
- day_month_year: "%B %-d, %Y"
16
- range_long:
17
- day: "%A %-d"
18
- day_month: "%A, %B %-d"
19
- day_month_year: "%A, %B %-d, %Y"
3
+ no_end:
4
+ one_line:
5
+ short:
6
+ from:
7
+ sentence: "From %B %-d, %Y"
8
+ upcase_first: false
9
+ to:
10
+ sentence: ""
11
+ upcase_first: false
12
+ long:
13
+ from:
14
+ sentence: "From %A %B %-d, %Y"
15
+ upcase_first: false
16
+ to:
17
+ sentence: ""
18
+ upcase_first: false
19
+ two_lines:
20
+ short:
21
+ from:
22
+ sentence: "%B %-d, %Y"
23
+ upcase_first: true
24
+ to:
25
+ sentence: ""
26
+ upcase_first: false
27
+ long:
28
+ from:
29
+ sentence: "%A %B %-d, %Y"
30
+ upcase_first: true
31
+ to:
32
+ sentence: ""
33
+ upcase_first: false
34
+ same_day:
35
+ one_line:
36
+ short:
37
+ from:
38
+ sentence: "%B %-d, %Y"
39
+ upcase_first: true
40
+ to:
41
+ sentence: ""
42
+ upcase_first: false
43
+ long:
44
+ from:
45
+ sentence: "%A %B %-d, %Y"
46
+ upcase_first: true
47
+ to:
48
+ sentence: ""
49
+ upcase_first: false
50
+ two_lines:
51
+ short:
52
+ from:
53
+ sentence: "%B %-d, %Y"
54
+ upcase_first: true
55
+ to:
56
+ sentence: ""
57
+ upcase_first: false
58
+ long:
59
+ from:
60
+ sentence: "%A %B %-d, %Y"
61
+ upcase_first: true
62
+ to:
63
+ sentence: ""
64
+ upcase_first: false
65
+ same_month:
66
+ one_line:
67
+ short:
68
+ from:
69
+ sentence: "From %B %-d"
70
+ upcase_first: false
71
+ to:
72
+ sentence: " to %-d, %Y"
73
+ upcase_first: false
74
+ long:
75
+ from:
76
+ sentence: "From %A %B %-d"
77
+ upcase_first: false
78
+ to:
79
+ sentence: " to %A %B %-d, %Y"
80
+ upcase_first: false
81
+ two_lines:
82
+ short:
83
+ from:
84
+ sentence: "%B %-d"
85
+ upcase_first: true
86
+ to:
87
+ sentence: "%B %-d, %Y"
88
+ upcase_first: true
89
+ long:
90
+ from:
91
+ sentence: "%A %B %-d"
92
+ upcase_first: true
93
+ to:
94
+ sentence: "%A %B %-d, %Y"
95
+ upcase_first: true
96
+ same_year:
97
+ one_line:
98
+ short:
99
+ from:
100
+ sentence: "From %B %-d"
101
+ upcase_first: false
102
+ to:
103
+ sentence: " to %B %-d, %Y"
104
+ upcase_first: false
105
+ long:
106
+ from:
107
+ sentence: "From %A %B %-d"
108
+ upcase_first: false
109
+ to:
110
+ sentence: " to %A %B %-d, %Y"
111
+ upcase_first: false
112
+ two_lines:
113
+ short:
114
+ from:
115
+ sentence: "%B %-d"
116
+ upcase_first: true
117
+ to:
118
+ sentence: "%B %-d, %Y"
119
+ upcase_first: true
120
+ long:
121
+ from:
122
+ sentence: "%A %B %-d"
123
+ upcase_first: true
124
+ to:
125
+ sentence: "%A %B %-d, %Y"
126
+ upcase_first: true
127
+ other:
128
+ one_line:
129
+ short:
130
+ from:
131
+ sentence: "From %B %-d, %Y"
132
+ upcase_first: false
133
+ to:
134
+ sentence: " to %B %-d, %Y"
135
+ upcase_first: false
136
+ long:
137
+ from:
138
+ sentence: "From %A %B %-d, %Y"
139
+ upcase_first: false
140
+ to:
141
+ sentence: " to %A %B %-d, %Y"
142
+ upcase_first: false
143
+ two_lines:
144
+ short:
145
+ from:
146
+ sentence: "%B %-d, %Y"
147
+ upcase_first: true
148
+ to:
149
+ sentence: "%B %-d, %Y"
150
+ upcase_first: true
151
+ long:
152
+ from:
153
+ sentence: "%A %B %-d, %Y"
154
+ upcase_first: true
155
+ to:
156
+ sentence: "%A %B %-d, %Y"
157
+ upcase_first: true
@@ -1,19 +1,157 @@
1
1
  fr:
2
2
  date_range:
3
- one_line:
4
- with_to: "Du %{from} au %{to}"
5
- without_to: "%{from}"
6
- two_lines:
7
- with_to: "%{from}<br>%{to}"
8
- without_to: "%{from}"
9
-
10
- date:
11
- formats:
12
- range_short:
13
- day: "%-d"
14
- day_month: "%-d %B"
15
- day_month_year: "%-d %B %Y"
16
- range_long:
17
- day: "%A %-d"
18
- day_month: "%A %-d %B"
19
- day_month_year: "%A %-d %B %Y"
3
+ no_end:
4
+ one_line:
5
+ short:
6
+ from:
7
+ sentence: "À partir du %-d %B %Y"
8
+ upcase_first: false
9
+ to:
10
+ sentence: ""
11
+ upcase_first: false
12
+ long:
13
+ from:
14
+ sentence: "À partir du %A %-d %B %Y"
15
+ upcase_first: false
16
+ to:
17
+ sentence: ""
18
+ upcase_first: false
19
+ two_lines:
20
+ short:
21
+ from:
22
+ sentence: "%-d %B %Y"
23
+ upcase_first: false
24
+ to:
25
+ sentence: ""
26
+ upcase_first: false
27
+ long:
28
+ from:
29
+ sentence: "%A %-d %B %Y"
30
+ upcase_first: true
31
+ to:
32
+ sentence: ""
33
+ upcase_first: false
34
+ same_day:
35
+ one_line:
36
+ short:
37
+ from:
38
+ sentence: "%-d %B %Y"
39
+ upcase_first: false
40
+ to:
41
+ sentence: ""
42
+ upcase_first: false
43
+ long:
44
+ from:
45
+ sentence: "%A %-d %B %Y"
46
+ upcase_first: true
47
+ to:
48
+ sentence: ""
49
+ upcase_first: false
50
+ two_lines:
51
+ short:
52
+ from:
53
+ sentence: "%-d %B %Y"
54
+ upcase_first: false
55
+ to:
56
+ sentence: ""
57
+ upcase_first: false
58
+ long:
59
+ from:
60
+ sentence: "%A %-d %B %Y"
61
+ upcase_first: true
62
+ to:
63
+ sentence: ""
64
+ upcase_first: false
65
+ same_month:
66
+ one_line:
67
+ short:
68
+ from:
69
+ sentence: "Du %-d"
70
+ upcase_first: false
71
+ to:
72
+ sentence: " au %-d %B %Y"
73
+ upcase_first: false
74
+ long:
75
+ from:
76
+ sentence: "Du %A %-d"
77
+ upcase_first: false
78
+ to:
79
+ sentence: " au %A %-d %B %Y"
80
+ upcase_first: false
81
+ two_lines:
82
+ short:
83
+ from:
84
+ sentence: "%-d %B"
85
+ upcase_first: false
86
+ to:
87
+ sentence: "%-d %B %Y"
88
+ upcase_first: false
89
+ long:
90
+ from:
91
+ sentence: "%A %-d %B"
92
+ upcase_first: true
93
+ to:
94
+ sentence: "%A %-d %B %Y"
95
+ upcase_first: true
96
+ same_year:
97
+ one_line:
98
+ short:
99
+ from:
100
+ sentence: "Du %-d %B"
101
+ upcase_first: false
102
+ to:
103
+ sentence: " au %-d %B %Y"
104
+ upcase_first: false
105
+ long:
106
+ from:
107
+ sentence: "Du %A %-d %B"
108
+ upcase_first: false
109
+ to:
110
+ sentence: " au %A %-d %B %Y"
111
+ upcase_first: false
112
+ two_lines:
113
+ short:
114
+ from:
115
+ sentence: "%-d %B"
116
+ upcase_first: false
117
+ to:
118
+ sentence: "%-d %B %Y"
119
+ upcase_first: false
120
+ long:
121
+ from:
122
+ sentence: "%A %-d %B"
123
+ upcase_first: true
124
+ to:
125
+ sentence: "%A %-d %B %Y"
126
+ upcase_first: true
127
+ other:
128
+ one_line:
129
+ short:
130
+ from:
131
+ sentence: "Du %-d %B %Y"
132
+ upcase_first: false
133
+ to:
134
+ sentence: " au %-d %B %Y"
135
+ upcase_first: false
136
+ long:
137
+ from:
138
+ sentence: "Du %A %-d %B %Y"
139
+ upcase_first: false
140
+ to:
141
+ sentence: " au %A %-d %B %Y"
142
+ upcase_first: false
143
+ two_lines:
144
+ short:
145
+ from:
146
+ sentence: "%-d %B %Y"
147
+ upcase_first: false
148
+ to:
149
+ sentence: "%-d %B %Y"
150
+ upcase_first: false
151
+ long:
152
+ from:
153
+ sentence: "%A %-d %B %Y"
154
+ upcase_first: true
155
+ to:
156
+ sentence: "%A %-d %B %Y"
157
+ upcase_first: true
@@ -4,6 +4,13 @@
4
4
  class I18nDateRangeGenerator
5
5
  attr_reader :from_date, :to_date, :format, :layout
6
6
 
7
+ KIND_NO_END = :no_end
8
+ KIND_SAME_DAY = :same_day
9
+ KIND_SAME_MONTH = :same_month
10
+ KIND_SAME_YEAR = :same_year
11
+ KIND_OTHER = :other
12
+
13
+ # "format" can be :short or :long. "layout" can be :one_line or :two_lines
7
14
  def initialize(from_date, to_date = nil, format: :short, layout: :one_line)
8
15
  @from_date = from_date
9
16
  @to_date = to_date
@@ -12,50 +19,75 @@ class I18nDateRangeGenerator
12
19
  end
13
20
 
14
21
  def to_s
15
- to_date.blank? || same_date? ? without_to : with_to
22
+ layout == :two_lines && to_formatted.present? ? from_formatted + '<br>' + to_formatted : from_formatted + to_formatted
16
23
  end
17
24
 
18
25
  protected
19
26
 
20
- def same_date?
27
+ # Analyzing
28
+
29
+ def kind
30
+ unless @kind
31
+ @kind = KIND_OTHER
32
+ @kind = KIND_SAME_YEAR if same_year?
33
+ @kind = KIND_SAME_MONTH if same_month?
34
+ @kind = KIND_SAME_DAY if same_day?
35
+ @kind = KIND_NO_END if no_end?
36
+ end
37
+ @kind
38
+ end
39
+
40
+ def same_year?
41
+ from_date.year == to_date&.year
42
+ end
43
+
44
+ def same_month?
45
+ from_date.year == to_date&.year && from_date.month == to_date&.month
46
+ end
47
+
48
+ def same_day?
21
49
  to_date == from_date
22
50
  end
23
51
 
24
- def without_to
25
- I18n.t(
26
- "date_range.#{layout}.without_to",
27
- from: format_date(from_date, :day_month_year)
28
- ).capitalize
52
+ def no_end?
53
+ to_date.blank?
29
54
  end
30
55
 
31
- def with_to
32
- I18n.t(
33
- "date_range.#{layout}.with_to",
34
- from: format_date(from_date, from_format),
35
- to: format_date(to_date, :day_month_year)
36
- ).capitalize
56
+ def from_sentence
57
+ I18n.t("#{composite_key}.from.sentence")
37
58
  end
38
59
 
39
- def from_format
40
- return :day_month_year if different_year?
60
+ def from_upcase_first
61
+ I18n.t("#{composite_key}.from.upcase_first")
62
+ end
41
63
 
42
- return :day_month if different_month?
64
+ def to_sentence
65
+ I18n.t("#{composite_key}.to.sentence")
66
+ end
43
67
 
44
- :day
68
+ def to_upcase_first
69
+ I18n.t("#{composite_key}.to.upcase_first")
45
70
  end
46
71
 
47
- def format_date(date, key)
48
- I18n.l(
49
- date,
50
- format: "range_#{format}.#{key}".to_sym
51
- )
72
+ def from_formatted
73
+ @from_formatted ||= begin
74
+ from = I18n.l(from_date, format: from_sentence)
75
+ from = from.upcase_first if from_upcase_first
76
+ from
77
+ end
52
78
  end
53
79
 
54
- def different_year?
55
- from_date.year != to_date.year
80
+ def to_formatted
81
+ return '' if no_end?
82
+ @to_formatted ||= begin
83
+ to = I18n.l(to_date, format: to_sentence)
84
+ to = to.upcase_first if to_upcase_first
85
+ to
86
+ end
56
87
  end
57
88
 
58
- def different_month?
59
- from_date.month != to_date.month
89
+ def composite_key
90
+ "date_range.#{kind}.#{layout}.#{format}"
60
91
  end
61
- end
92
+
93
+ end
@@ -6,8 +6,9 @@
6
6
  # Layout can be :one_line (default) or :two_lines, other might be necessary in the future
7
7
  module I18nDateRangeHelper
8
8
 
9
- def date_range_i18n(from_date, to_date = nil, format: :short, layout: :one_line)
10
- I18nDateRangeGenerator.new(from_date, to_date, format: format, layout: layout).to_s.html_safe
9
+ def date_range_i18n(from_date, to_date = nil, **options)
10
+ generator = I18nDateRangeGenerator.new(from_date, to_date, **options.slice(:format, :layout))
11
+ generator.to_s.html_safe
11
12
  end
12
13
 
13
14
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module I18nDateRange
4
- VERSION = "1.0.3"
4
+ VERSION = "2.0.0"
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: i18n_date_range
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.3
4
+ version: 2.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - pabois
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: exe
11
11
  cert_chain: []
12
- date: 2023-10-31 00:00:00.000000000 Z
12
+ date: 2023-11-02 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rails
@@ -187,7 +187,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
187
187
  - !ruby/object:Gem::Version
188
188
  version: '0'
189
189
  requirements: []
190
- rubygems_version: 3.4.6
190
+ rubygems_version: 3.1.4
191
191
  signing_key:
192
192
  specification_version: 4
193
193
  summary: Add helper to display a date range