i18n_date_range 1.0.3 → 2.1.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: eccf6668937f6b5ac4859e9e93c8b7fc670148255b3770d33af7050f1ea1b759
4
+ data.tar.gz: b2a32a1b7e54919ed762c0558fa14a51faf3a8996110981f2522fd133867ad20
5
5
  SHA512:
6
- metadata.gz: af9801311b093b741615eb8c9fb2a2a34c3917cfcd88dcc60eab1016b122b61b4bd8ee68c610f64d68d257a0231e155c9974a2f392c52deff3fe93332bbc723c
7
- data.tar.gz: 32917fd6bf796a4333492f2cedaca7293a508681b826c51eeb74b564ecdabee95db9ec4b0976c555d7e477f463640ba4201a8cfc7ff21696be06906b6db33f8e
6
+ metadata.gz: '09789eb760b28e52537cb8adc815d8a7294b8bacf24f50220de04764f19bc69364a429b5742077cfa5dd8645b58417cbe59cf4f37e2fcf28851c49d18736bcfb'
7
+ data.tar.gz: d5ad0aaef74b2b8b522b3765500149e1f6e80ed392bebd296543dbe3cbe5348d243569baa4450822d3d11ed59b07611d3c8a88c82e3fb14f89a8972e83b91c01
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
@@ -1,77 +1,78 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- i18n_date_range (1.0.3)
4
+ i18n_date_range (2.1.0)
5
5
  rails
6
6
  rails-i18n
7
7
 
8
8
  GEM
9
9
  remote: https://rubygems.org/
10
10
  specs:
11
- actioncable (7.1.1)
12
- actionpack (= 7.1.1)
13
- activesupport (= 7.1.1)
11
+ actioncable (7.1.3.3)
12
+ actionpack (= 7.1.3.3)
13
+ activesupport (= 7.1.3.3)
14
14
  nio4r (~> 2.0)
15
15
  websocket-driver (>= 0.6.1)
16
16
  zeitwerk (~> 2.6)
17
- actionmailbox (7.1.1)
18
- actionpack (= 7.1.1)
19
- activejob (= 7.1.1)
20
- activerecord (= 7.1.1)
21
- activestorage (= 7.1.1)
22
- activesupport (= 7.1.1)
17
+ actionmailbox (7.1.3.3)
18
+ actionpack (= 7.1.3.3)
19
+ activejob (= 7.1.3.3)
20
+ activerecord (= 7.1.3.3)
21
+ activestorage (= 7.1.3.3)
22
+ activesupport (= 7.1.3.3)
23
23
  mail (>= 2.7.1)
24
24
  net-imap
25
25
  net-pop
26
26
  net-smtp
27
- actionmailer (7.1.1)
28
- actionpack (= 7.1.1)
29
- actionview (= 7.1.1)
30
- activejob (= 7.1.1)
31
- activesupport (= 7.1.1)
27
+ actionmailer (7.1.3.3)
28
+ actionpack (= 7.1.3.3)
29
+ actionview (= 7.1.3.3)
30
+ activejob (= 7.1.3.3)
31
+ activesupport (= 7.1.3.3)
32
32
  mail (~> 2.5, >= 2.5.4)
33
33
  net-imap
34
34
  net-pop
35
35
  net-smtp
36
36
  rails-dom-testing (~> 2.2)
37
- actionpack (7.1.1)
38
- actionview (= 7.1.1)
39
- activesupport (= 7.1.1)
37
+ actionpack (7.1.3.3)
38
+ actionview (= 7.1.3.3)
39
+ activesupport (= 7.1.3.3)
40
40
  nokogiri (>= 1.8.5)
41
+ racc
41
42
  rack (>= 2.2.4)
42
43
  rack-session (>= 1.0.1)
43
44
  rack-test (>= 0.6.3)
44
45
  rails-dom-testing (~> 2.2)
45
46
  rails-html-sanitizer (~> 1.6)
46
- actiontext (7.1.1)
47
- actionpack (= 7.1.1)
48
- activerecord (= 7.1.1)
49
- activestorage (= 7.1.1)
50
- activesupport (= 7.1.1)
47
+ actiontext (7.1.3.3)
48
+ actionpack (= 7.1.3.3)
49
+ activerecord (= 7.1.3.3)
50
+ activestorage (= 7.1.3.3)
51
+ activesupport (= 7.1.3.3)
51
52
  globalid (>= 0.6.0)
52
53
  nokogiri (>= 1.8.5)
53
- actionview (7.1.1)
54
- activesupport (= 7.1.1)
54
+ actionview (7.1.3.3)
55
+ activesupport (= 7.1.3.3)
55
56
  builder (~> 3.1)
56
57
  erubi (~> 1.11)
57
58
  rails-dom-testing (~> 2.2)
58
59
  rails-html-sanitizer (~> 1.6)
59
- activejob (7.1.1)
60
- activesupport (= 7.1.1)
60
+ activejob (7.1.3.3)
61
+ activesupport (= 7.1.3.3)
61
62
  globalid (>= 0.3.6)
62
- activemodel (7.1.1)
63
- activesupport (= 7.1.1)
64
- activerecord (7.1.1)
65
- activemodel (= 7.1.1)
66
- activesupport (= 7.1.1)
63
+ activemodel (7.1.3.3)
64
+ activesupport (= 7.1.3.3)
65
+ activerecord (7.1.3.3)
66
+ activemodel (= 7.1.3.3)
67
+ activesupport (= 7.1.3.3)
67
68
  timeout (>= 0.4.0)
68
- activestorage (7.1.1)
69
- actionpack (= 7.1.1)
70
- activejob (= 7.1.1)
71
- activerecord (= 7.1.1)
72
- activesupport (= 7.1.1)
69
+ activestorage (7.1.3.3)
70
+ actionpack (= 7.1.3.3)
71
+ activejob (= 7.1.3.3)
72
+ activerecord (= 7.1.3.3)
73
+ activesupport (= 7.1.3.3)
73
74
  marcel (~> 1.0)
74
- activesupport (7.1.1)
75
+ activesupport (7.1.3.3)
75
76
  base64
76
77
  bigdecimal
77
78
  concurrent-ruby (~> 1.0, >= 1.0.2)
@@ -82,32 +83,31 @@ GEM
82
83
  mutex_m
83
84
  tzinfo (~> 2.0)
84
85
  ast (2.4.2)
85
- base64 (0.1.1)
86
- bigdecimal (3.1.4)
86
+ base64 (0.2.0)
87
+ bigdecimal (3.1.8)
87
88
  builder (3.2.4)
88
- combustion (1.3.7)
89
+ combustion (1.4.0)
89
90
  activesupport (>= 3.0.0)
90
91
  railties (>= 3.0.0)
91
92
  thor (>= 0.14.6)
92
- concurrent-ruby (1.2.2)
93
+ concurrent-ruby (1.2.3)
93
94
  connection_pool (2.4.1)
94
95
  crass (1.0.6)
95
- date (3.3.3)
96
- diff-lcs (1.5.0)
97
- drb (2.1.1)
98
- ruby2_keywords
96
+ date (3.3.4)
97
+ diff-lcs (1.5.1)
98
+ drb (2.2.1)
99
99
  erubi (1.12.0)
100
100
  globalid (1.2.1)
101
101
  activesupport (>= 6.1)
102
- i18n (1.14.1)
102
+ i18n (1.14.5)
103
103
  concurrent-ruby (~> 1.0)
104
- io-console (0.6.0)
105
- irb (1.8.3)
106
- rdoc
107
- reline (>= 0.3.8)
108
- json (2.6.3)
104
+ io-console (0.7.2)
105
+ irb (1.13.1)
106
+ rdoc (>= 4.0.0)
107
+ reline (>= 0.4.2)
108
+ json (2.7.2)
109
109
  language_server-protocol (3.17.0.3)
110
- loofah (2.21.4)
110
+ loofah (2.22.0)
111
111
  crass (~> 1.0.2)
112
112
  nokogiri (>= 1.12.0)
113
113
  mail (2.8.1)
@@ -115,30 +115,30 @@ GEM
115
115
  net-imap
116
116
  net-pop
117
117
  net-smtp
118
- marcel (1.0.2)
118
+ marcel (1.0.4)
119
119
  mini_mime (1.1.5)
120
- minitest (5.20.0)
121
- mutex_m (0.1.2)
122
- net-imap (0.4.3)
120
+ minitest (5.23.1)
121
+ mutex_m (0.2.0)
122
+ net-imap (0.4.11)
123
123
  date
124
124
  net-protocol
125
125
  net-pop (0.1.2)
126
126
  net-protocol
127
- net-protocol (0.2.1)
127
+ net-protocol (0.2.2)
128
128
  timeout
129
- net-smtp (0.4.0)
129
+ net-smtp (0.5.0)
130
130
  net-protocol
131
- nio4r (2.5.9)
132
- nokogiri (1.15.4-x86_64-darwin)
131
+ nio4r (2.7.3)
132
+ nokogiri (1.16.5-x86_64-darwin)
133
133
  racc (~> 1.4)
134
- parallel (1.23.0)
135
- parser (3.2.2.4)
134
+ parallel (1.24.0)
135
+ parser (3.3.1.0)
136
136
  ast (~> 2.4.1)
137
137
  racc
138
- psych (5.1.1.1)
138
+ psych (5.1.2)
139
139
  stringio
140
- racc (1.7.1)
141
- rack (3.0.8)
140
+ racc (1.8.0)
141
+ rack (3.0.11)
142
142
  rack-session (2.0.0)
143
143
  rack (>= 3.0.0)
144
144
  rack-test (2.1.0)
@@ -146,20 +146,20 @@ GEM
146
146
  rackup (2.1.0)
147
147
  rack (>= 3)
148
148
  webrick (~> 1.8)
149
- rails (7.1.1)
150
- actioncable (= 7.1.1)
151
- actionmailbox (= 7.1.1)
152
- actionmailer (= 7.1.1)
153
- actionpack (= 7.1.1)
154
- actiontext (= 7.1.1)
155
- actionview (= 7.1.1)
156
- activejob (= 7.1.1)
157
- activemodel (= 7.1.1)
158
- activerecord (= 7.1.1)
159
- activestorage (= 7.1.1)
160
- activesupport (= 7.1.1)
149
+ rails (7.1.3.3)
150
+ actioncable (= 7.1.3.3)
151
+ actionmailbox (= 7.1.3.3)
152
+ actionmailer (= 7.1.3.3)
153
+ actionpack (= 7.1.3.3)
154
+ actiontext (= 7.1.3.3)
155
+ actionview (= 7.1.3.3)
156
+ activejob (= 7.1.3.3)
157
+ activemodel (= 7.1.3.3)
158
+ activerecord (= 7.1.3.3)
159
+ activestorage (= 7.1.3.3)
160
+ activesupport (= 7.1.3.3)
161
161
  bundler (>= 1.15.0)
162
- railties (= 7.1.1)
162
+ railties (= 7.1.3.3)
163
163
  rails-dom-testing (2.2.0)
164
164
  activesupport (>= 5.0.0)
165
165
  minitest
@@ -167,68 +167,70 @@ GEM
167
167
  rails-html-sanitizer (1.6.0)
168
168
  loofah (~> 2.21)
169
169
  nokogiri (~> 1.14)
170
- rails-i18n (7.0.8)
170
+ rails-i18n (7.0.9)
171
171
  i18n (>= 0.7, < 2)
172
172
  railties (>= 6.0.0, < 8)
173
- railties (7.1.1)
174
- actionpack (= 7.1.1)
175
- activesupport (= 7.1.1)
173
+ railties (7.1.3.3)
174
+ actionpack (= 7.1.3.3)
175
+ activesupport (= 7.1.3.3)
176
176
  irb
177
177
  rackup (>= 1.0.0)
178
178
  rake (>= 12.2)
179
179
  thor (~> 1.0, >= 1.2.2)
180
180
  zeitwerk (~> 2.6)
181
181
  rainbow (3.1.1)
182
- rake (13.1.0)
183
- rdoc (6.5.0)
182
+ rake (13.2.1)
183
+ rdoc (6.7.0)
184
184
  psych (>= 4.0.0)
185
- regexp_parser (2.8.2)
186
- reline (0.3.9)
185
+ regexp_parser (2.9.2)
186
+ reline (0.5.7)
187
187
  io-console (~> 0.5)
188
- rexml (3.2.6)
189
- rspec (3.12.0)
190
- rspec-core (~> 3.12.0)
191
- rspec-expectations (~> 3.12.0)
192
- rspec-mocks (~> 3.12.0)
193
- rspec-core (3.12.2)
194
- rspec-support (~> 3.12.0)
195
- rspec-expectations (3.12.3)
188
+ rexml (3.2.8)
189
+ strscan (>= 3.0.9)
190
+ rspec (3.13.0)
191
+ rspec-core (~> 3.13.0)
192
+ rspec-expectations (~> 3.13.0)
193
+ rspec-mocks (~> 3.13.0)
194
+ rspec-core (3.13.0)
195
+ rspec-support (~> 3.13.0)
196
+ rspec-expectations (3.13.0)
196
197
  diff-lcs (>= 1.2.0, < 2.0)
197
- rspec-support (~> 3.12.0)
198
- rspec-mocks (3.12.6)
198
+ rspec-support (~> 3.13.0)
199
+ rspec-mocks (3.13.1)
199
200
  diff-lcs (>= 1.2.0, < 2.0)
200
- rspec-support (~> 3.12.0)
201
- rspec-rails (6.0.3)
201
+ rspec-support (~> 3.13.0)
202
+ rspec-rails (6.1.2)
202
203
  actionpack (>= 6.1)
203
204
  activesupport (>= 6.1)
204
205
  railties (>= 6.1)
205
- rspec-core (~> 3.12)
206
- rspec-expectations (~> 3.12)
207
- rspec-mocks (~> 3.12)
208
- rspec-support (~> 3.12)
209
- rspec-support (3.12.1)
210
- rubocop (1.57.2)
206
+ rspec-core (~> 3.13)
207
+ rspec-expectations (~> 3.13)
208
+ rspec-mocks (~> 3.13)
209
+ rspec-support (~> 3.13)
210
+ rspec-support (3.13.1)
211
+ rubocop (1.64.0)
211
212
  json (~> 2.3)
212
213
  language_server-protocol (>= 3.17.0)
213
214
  parallel (~> 1.10)
214
- parser (>= 3.2.2.4)
215
+ parser (>= 3.3.0.2)
215
216
  rainbow (>= 2.2.2, < 4.0)
216
217
  regexp_parser (>= 1.8, < 3.0)
217
218
  rexml (>= 3.2.5, < 4.0)
218
- rubocop-ast (>= 1.28.1, < 2.0)
219
+ rubocop-ast (>= 1.31.1, < 2.0)
219
220
  ruby-progressbar (~> 1.7)
220
221
  unicode-display_width (>= 2.4.0, < 3.0)
221
- rubocop-ast (1.30.0)
222
- parser (>= 3.2.1.0)
223
- rubocop-rails (2.22.1)
222
+ rubocop-ast (1.31.3)
223
+ parser (>= 3.3.1.0)
224
+ rubocop-rails (2.25.0)
224
225
  activesupport (>= 4.2.0)
225
226
  rack (>= 1.1)
226
227
  rubocop (>= 1.33.0, < 2.0)
228
+ rubocop-ast (>= 1.31.1, < 2.0)
227
229
  ruby-progressbar (1.13.0)
228
- ruby2_keywords (0.0.5)
229
- stringio (3.0.8)
230
- thor (1.3.0)
231
- timeout (0.4.0)
230
+ stringio (3.1.0)
231
+ strscan (3.1.0)
232
+ thor (1.3.1)
233
+ timeout (0.4.1)
232
234
  tzinfo (2.0.6)
233
235
  concurrent-ruby (~> 1.0)
234
236
  unicode-display_width (2.5.0)
@@ -236,7 +238,7 @@ GEM
236
238
  websocket-driver (0.7.6)
237
239
  websocket-extensions (>= 0.1.0)
238
240
  websocket-extensions (0.1.5)
239
- zeitwerk (2.6.12)
241
+ zeitwerk (2.6.14)
240
242
 
241
243
  PLATFORMS
242
244
  x86_64-darwin-20
@@ -255,4 +257,4 @@ DEPENDENCIES
255
257
  rubocop-rails
256
258
 
257
259
  BUNDLED WITH
258
- 2.4.6
260
+ 2.4.22
data/README.md CHANGED
@@ -10,6 +10,7 @@ Add this line to your application's Gemfile:
10
10
  ```ruby
11
11
  gem 'i18n_date_range'
12
12
  ```
13
+
13
14
  And then execute:
14
15
 
15
16
  $ bundle install
@@ -19,13 +20,18 @@ And then execute:
19
20
  This gem comes with an integrated view helper: `date_range_i18n` which takes 3 parameters:
20
21
  - date_from
21
22
  - date_to (optional)
22
- - format (optional)
23
+ - a hash of additional formatting options(optional)
23
24
 
24
- Format can be `:short` or `:long` (default is :short)
25
+ The options hash currently support 2 arguments:
26
+ - format: can be `:short` or `:long` (default is :short)
27
+ - layout: can be `:one_line`or `:two_lines` (default is :one_line)
25
28
 
26
29
  "Short" format means without the explicit day name (September 8, 2024).
27
30
  "Long" format means with it (Friday, September 8, 2024).
28
31
 
32
+ "One line" layout means the string will be displayed on one line only (From September 8, 2024 to September 8, 2025)
33
+ "Two lines" layout means the result will be displayed on 2 lines,separated with `<br>` (September 8, 2024<br>September 8, 2025)
34
+
29
35
  ## Change texts or formats
30
36
 
31
37
  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
@@ -2,60 +2,93 @@
2
2
 
3
3
  # Computing range to choose the correct form
4
4
  class I18nDateRangeGenerator
5
- attr_reader :from_date, :to_date, :format, :layout
5
+ attr_reader :from_date, :to_date, :format, :layout, :locale
6
6
 
7
- def initialize(from_date, to_date = nil, format: :short, layout: :one_line)
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
14
+ def initialize(from_date, to_date = nil, format: :short, layout: :one_line, locale: I18n.locale)
8
15
  @from_date = from_date
9
16
  @to_date = to_date
10
17
  @format = format
11
18
  @layout = layout
19
+ @locale = locale
12
20
  end
13
21
 
14
22
  def to_s
15
- to_date.blank? || same_date? ? without_to : with_to
23
+ layout == :two_lines && to_formatted.present? ? from_formatted + '<br>' + to_formatted : from_formatted + to_formatted
16
24
  end
17
25
 
18
26
  protected
19
27
 
20
- def same_date?
28
+ # Analyzing
29
+
30
+ def kind
31
+ unless @kind
32
+ @kind = KIND_OTHER
33
+ @kind = KIND_SAME_YEAR if same_year?
34
+ @kind = KIND_SAME_MONTH if same_month?
35
+ @kind = KIND_SAME_DAY if same_day?
36
+ @kind = KIND_NO_END if no_end?
37
+ end
38
+ @kind
39
+ end
40
+
41
+ def same_year?
42
+ from_date.year == to_date&.year
43
+ end
44
+
45
+ def same_month?
46
+ from_date.year == to_date&.year && from_date.month == to_date&.month
47
+ end
48
+
49
+ def same_day?
21
50
  to_date == from_date
22
51
  end
23
52
 
24
- def without_to
25
- I18n.t(
26
- "date_range.#{layout}.without_to",
27
- from: format_date(from_date, :day_month_year)
28
- ).capitalize
53
+ def no_end?
54
+ to_date.blank?
29
55
  end
30
56
 
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
57
+ def from_sentence
58
+ I18n.t("#{composite_key}.from.sentence", locale: locale)
37
59
  end
38
60
 
39
- def from_format
40
- return :day_month_year if different_year?
61
+ def from_upcase_first
62
+ I18n.t("#{composite_key}.from.upcase_first", locale: locale)
63
+ end
41
64
 
42
- return :day_month if different_month?
65
+ def to_sentence
66
+ I18n.t("#{composite_key}.to.sentence", locale: locale)
67
+ end
43
68
 
44
- :day
69
+ def to_upcase_first
70
+ I18n.t("#{composite_key}.to.upcase_first", locale: locale)
45
71
  end
46
72
 
47
- def format_date(date, key)
48
- I18n.l(
49
- date,
50
- format: "range_#{format}.#{key}".to_sym
51
- )
73
+ def from_formatted
74
+ @from_formatted ||= begin
75
+ from = I18n.l(from_date, format: from_sentence)
76
+ from = from.upcase_first if from_upcase_first
77
+ from
78
+ end
52
79
  end
53
80
 
54
- def different_year?
55
- from_date.year != to_date.year
81
+ def to_formatted
82
+ return '' if no_end?
83
+ @to_formatted ||= begin
84
+ to = I18n.l(to_date, format: to_sentence)
85
+ to = to.upcase_first if to_upcase_first
86
+ to
87
+ end
56
88
  end
57
89
 
58
- def different_month?
59
- from_date.month != to_date.month
90
+ def composite_key
91
+ "date_range.#{kind}.#{layout}.#{format}"
60
92
  end
61
- end
93
+
94
+ 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.1.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.1.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: 2024-05-24 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rails
@@ -145,7 +145,6 @@ executables: []
145
145
  extensions: []
146
146
  extra_rdoc_files: []
147
147
  files:
148
- - ".DS_Store"
149
148
  - ".rspec"
150
149
  - ".rubocop.yml"
151
150
  - CHANGELOG.md
@@ -187,7 +186,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
187
186
  - !ruby/object:Gem::Version
188
187
  version: '0'
189
188
  requirements: []
190
- rubygems_version: 3.4.6
189
+ rubygems_version: 3.4.10
191
190
  signing_key:
192
191
  specification_version: 4
193
192
  summary: Add helper to display a date range
data/.DS_Store DELETED
Binary file