human_attributes 0.1.1 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 282f2534047a15a9d75f50f7a92c8fa5ba414d8a
4
- data.tar.gz: 3d8b7f1973cf61c0840987faa76d0f9f6a71c14d
3
+ metadata.gz: 6852d543a6bd4e642ae907b2ad208261151c26d8
4
+ data.tar.gz: bee00b07e2bb8bbc6dd2995b92c03e3e64fbe42f
5
5
  SHA512:
6
- metadata.gz: f057cfda8bba4f6ad6553f85ebf82fed78af75b5c88f26312c5a7932d61627ea6f0a8dee39191ff4dc5443b9243980ae82c3e852df2b31fcc4d3dac8f2ad83ed
7
- data.tar.gz: cd593d5a11fae7e0aff811dfe6def1660e12ffdba94e8954220b1fe38c8e04804c92146271b09ae5b7e34e0f18750bd9aaa1cee6d1958aab18d254fbaa1b66e0
6
+ metadata.gz: 6d86cc67c665b2ba71de7a755dca9f9955880a726be5161fd21e6fe21bc7d74f16637ea91ac75d69fdb7287812d67b7bddcb11ff8d7f710101fedb4bcc2fb8e2
7
+ data.tar.gz: a49ef0b112c2a756960b5d8408c0ef13a5f8696f55c3f4d24918a69cd1ec51aa4303875c382b6552ab8e6c2ffebdb9a57951824b790cfdb8d4859dcbe981bd90
data/CHANGELOG.md CHANGED
@@ -2,8 +2,16 @@
2
2
  All notable changes to this project will be documented in this file.
3
3
  This project adheres to [Semantic Versioning](http://semver.org/).
4
4
 
5
+ ### v0.2.0
6
+
7
+ ##### Added
8
+
9
+ * DateTime formatter
10
+
5
11
  ### v0.1.1
6
12
 
13
+ ##### Fixed
14
+
7
15
  * Broken specs. Shame on me :(
8
16
 
9
17
  ### v0.1.0
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- human_attributes (0.1.1)
4
+ human_attributes (0.2.0)
5
5
  enumerize (~> 1, >= 1.1.1)
6
6
  factory_girl_rails (~> 4.6)
7
7
  rails (~> 4.2, >= 4.2.0)
data/README.md CHANGED
@@ -7,6 +7,7 @@ It's a Gem to convert ActiveRecord models' attributes and methods to human reada
7
7
  - [Formatters](#formatters)
8
8
  - [Numeric](#numeric)
9
9
  - [Date](#date)
10
+ - [DateTime](#datetime)
10
11
  - [Boolean](#boolean)
11
12
  - [Enumerize](#enumerize)
12
13
  - [Custom Formatter](#custom-formatter)
@@ -109,13 +110,62 @@ purchase.created_at = "04/06/1984 09:20:00"
109
110
  purchase.updated_at = "04/06/1984 09:20:00"
110
111
  ```
111
112
 
113
+ And `/your_app/config/locales/en.yml`
114
+
115
+ ```yaml
116
+ en:
117
+ date:
118
+ formats:
119
+ default: "%Y-%m-%d"
120
+ short: "%b %d"
121
+ ```
122
+
112
123
  And having...
113
124
 
114
125
  ```ruby
115
126
  class Purchase < ActiveRecord::Base
116
127
  humanize :expired_at, date: { format: :short }
117
128
  humanize :created_at, date: true
118
- humanize :updated_at, , date: { format: "%Y" }
129
+ humanize :updated_at, date: { format: "%Y" }
130
+ end
131
+ ```
132
+
133
+ You can do...
134
+
135
+ ```ruby
136
+ purchase.human_expired_at #=> "04 Jun"
137
+ purchase.human_created_at #=> "1984-06-04"
138
+ purchase.human_updated_at #=> "1984"
139
+ ```
140
+
141
+ #### DateTime
142
+
143
+ With...
144
+
145
+ ```ruby
146
+ pruchase = Purchase.new
147
+ purchase.expired_at = "04/06/1984 09:20:00"
148
+ purchase.created_at = "04/06/1984 09:20:00"
149
+ purchase.updated_at = "04/06/1984 09:20:00"
150
+ ```
151
+
152
+ And `/your_app/config/locales/en.yml`
153
+
154
+ ```yaml
155
+ en:
156
+ time:
157
+ formats:
158
+ default: "%a, %d %b %Y %H:%M:%S %z"
159
+ short: "%d %b %H:%M"
160
+ ```
161
+
162
+ And having...
163
+
164
+ ```ruby
165
+ class Purchase < ActiveRecord::Base
166
+ humanize :expired_at, datetime: { format: :short }
167
+ humanize :created_at, datetime: true
168
+ humanize :updated_at, datetime: { format: "%Y" }
119
169
  end
120
170
  ```
121
171
 
@@ -127,8 +177,6 @@ purchase.human_created_at #=> "Mon, 04 Jun 1984 09:20:00 +0000"
127
177
  purchase.human_updated_at #=> "1984"
128
178
  ```
129
179
 
130
- The options you can use with the date type are the same as in [Rails guides](http://guides.rubyonrails.org/v4.2/i18n.html#adding-date-time-formats)
131
-
132
180
  #### Boolean
133
181
 
134
182
  With...
@@ -316,17 +364,27 @@ The `humanize_attributes` method will infer from the attribute's data type which
316
364
  With our `Purchase` model we will get:
317
365
 
318
366
  ```ruby
319
- purchase.human_id
320
- purchase.human_paid
321
- purchase.human_quantity
322
- purchase.human_commission
323
- purchase.human_amount
324
- purchase.human_expired_at
325
- purchase.expired_at_to_short_date
326
- purchase.human_created_at
327
- purchase.created_at_to_short_date
328
- purchase.human_updated_at
329
- purchase.updated_at_to_short_date
367
+ human_id => Purchase: #1
368
+ human_paid => Yes
369
+ human_commission => 1000.990%
370
+ human_quantity => 1
371
+ human_expired_at => Fri, 06 Apr 1984 09:00:00 +0000
372
+ expired_at_to_short_date => Apr 06
373
+ expired_at_to_long_date => Apr 06
374
+ expired_at_to_short_datetime => 06 Apr 09:00
375
+ expired_at_to_long_datetime => 06 Apr 09:00
376
+ human_amount => $2,000,000.95
377
+ human_created_at => Sat, 10 Dec 2016 21:18:15 +0000
378
+ created_at_to_short_date => Dec 10
379
+ created_at_to_long_date => Dec 10
380
+ created_at_to_short_datetime => 10 Dec 21:18
381
+ created_at_to_long_datetime => 10 Dec 21:18
382
+ human_updated_at => Sat, 10 Dec 2016 21:18:15 +0000
383
+ updated_at_to_short_date => Dec 10
384
+ updated_at_to_long_date => Dec 10
385
+ updated_at_to_short_datetime => 10 Dec 21:18
386
+ updated_at_to_long_datetime => 10 Dec 21:18
387
+ human_state => Pending
330
388
  ```
331
389
 
332
390
  > You can pass to `humanize_attributes` the option `only: [:attr1, :attr2]` to humanize specific attributes. The `except` option works in similar way.
@@ -33,8 +33,11 @@ module HumanAttributes
33
33
  def humanize_from_type(col)
34
34
  if col.name == "id"
35
35
  humanize(:id, custom: { formatter: ->(_o, value) { "#{model_name.human}: ##{value}" } })
36
- elsif [:date, :datetime].include?(col.type)
36
+ elsif col.type == :date
37
37
  humanize_date(col.name)
38
+ elsif col.type == :datetime
39
+ humanize_date(col.name)
40
+ humanize_datetime(col.name)
38
41
  elsif [:decimal, :float, :integer].include?(col.type)
39
42
  humanize(col.name, delimiter: true)
40
43
  elsif col.type == :boolean
@@ -45,6 +48,13 @@ module HumanAttributes
45
48
  def humanize_date(attr_name)
46
49
  humanize(attr_name, date: true)
47
50
  humanize(attr_name, date: { format: :short, suffix: "to_short_date" })
51
+ humanize(attr_name, date: { format: :short, suffix: "to_long_date" })
52
+ end
53
+
54
+ def humanize_datetime(attr_name)
55
+ humanize(attr_name, datetime: true)
56
+ humanize(attr_name, datetime: { format: :short, suffix: "to_short_datetime" })
57
+ humanize(attr_name, datetime: { format: :short, suffix: "to_long_datetime" })
48
58
  end
49
59
  end
50
60
  end
@@ -48,6 +48,11 @@ module HumanAttributes
48
48
  category: :date,
49
49
  suffix: :to_human_date
50
50
  },
51
+ {
52
+ name: :datetime,
53
+ category: :datetime,
54
+ suffix: :to_human_datetime
55
+ },
51
56
  {
52
57
  name: :boolean,
53
58
  category: :boolean,
@@ -14,6 +14,7 @@ module HumanAttributes
14
14
  require_relative "./formatters/base"
15
15
  require_relative "./formatters/numeric"
16
16
  require_relative "./formatters/date"
17
+ require_relative "./formatters/datetime"
17
18
  require_relative "./formatters/boolean"
18
19
  require_relative "./formatters/enumerize"
19
20
  require_relative "./formatters/custom"
@@ -2,7 +2,9 @@ module HumanAttributes
2
2
  module Formatters
3
3
  class Date < Base
4
4
  def apply(_instance, value)
5
- I18n.l(value, options)
5
+ I18n.l(value.to_date, options)
6
+ rescue
7
+ nil
6
8
  end
7
9
  end
8
10
  end
@@ -0,0 +1,11 @@
1
+ module HumanAttributes
2
+ module Formatters
3
+ class Datetime < Base
4
+ def apply(_instance, value)
5
+ I18n.l(value.to_datetime, options)
6
+ rescue
7
+ nil
8
+ end
9
+ end
10
+ end
11
+ end
@@ -1,3 +1,3 @@
1
1
  module HumanAttributes
2
- VERSION = "0.1.1"
2
+ VERSION = "0.2.0"
3
3
  end
@@ -291,47 +291,56 @@ RSpec.describe "ActiveRecordExtension" do
291
291
  end
292
292
  end
293
293
 
294
- context "with date format" do
294
+ context "with date and datetime formats" do
295
295
  before { purchase.expired_at = "04/06/1984 09:20:00" }
296
+ before { purchase.created_at = "04/06/1985 09:20:00" }
296
297
 
297
298
  context "passing custom format" do
298
299
  before do
299
300
  class Purchase < ActiveRecord::Base
300
301
  humanize :expired_at, date: { format: "%Y" }
302
+ humanize :created_at, datetime: { format: "%Y" }
301
303
  end
302
304
  end
303
305
 
304
306
  it { expect(purchase.human_expired_at).to eq("1984") }
307
+ it { expect(purchase.human_created_at).to eq("1985") }
305
308
  end
306
309
 
307
310
  context "without options" do
308
311
  before do
309
312
  class Purchase < ActiveRecord::Base
310
313
  humanize :expired_at, date: true
314
+ humanize :created_at, datetime: true
311
315
  end
312
316
  end
313
317
 
314
- it { expect(purchase.human_expired_at).to eq("Mon, 04 Jun 1984 09:20:00 +0000") }
318
+ it { expect(purchase.human_expired_at).to eq("1984-06-04") }
319
+ it { expect(purchase.human_created_at).to eq("Tue, 04 Jun 1985 09:20:00 +0000") }
315
320
  end
316
321
 
317
322
  context "with short format" do
318
323
  before do
319
324
  class Purchase < ActiveRecord::Base
320
325
  humanize :expired_at, date: { format: :short }
326
+ humanize :created_at, datetime: { format: :short }
321
327
  end
322
328
  end
323
329
 
324
- it { expect(purchase.human_expired_at).to eq("04 Jun 09:20") }
330
+ it { expect(purchase.human_expired_at).to eq("Jun 04") }
331
+ it { expect(purchase.human_created_at).to eq("04 Jun 09:20") }
325
332
  end
326
333
 
327
334
  context "with long format" do
328
335
  before do
329
336
  class Purchase < ActiveRecord::Base
330
337
  humanize :expired_at, date: { format: :long }
338
+ humanize :created_at, datetime: { format: :long }
331
339
  end
332
340
  end
333
341
 
334
- it { expect(purchase.human_expired_at).to eq("June 04, 1984 09:20") }
342
+ it { expect(purchase.human_expired_at).to eq("June 04, 1984") }
343
+ it { expect(purchase.human_created_at).to eq("June 04, 1985 09:20") }
335
344
  end
336
345
  end
337
346
  end
@@ -352,11 +361,11 @@ RSpec.describe "ActiveRecordExtension" do
352
361
  it { expect(purchase.human_commission).to eq("1,000.99") }
353
362
  it { expect(purchase.human_amount).to eq("2,000,000.95") }
354
363
  it { expect(purchase.human_expired_at).to eq("Fri, 06 Apr 1984 09:00:00 +0000") }
355
- it { expect(purchase.expired_at_to_short_date).to eq("06 Apr 09:00") }
364
+ it { expect(purchase.expired_at_to_short_datetime).to eq("06 Apr 09:00") }
356
365
  it { expect(purchase).to respond_to(:human_created_at) }
357
- it { expect(purchase).to respond_to(:created_at_to_short_date) }
366
+ it { expect(purchase).to respond_to(:created_at_to_short_datetime) }
358
367
  it { expect(purchase).to respond_to(:human_updated_at) }
359
- it { expect(purchase).to respond_to(:updated_at_to_short_date) }
368
+ it { expect(purchase).to respond_to(:updated_at_to_short_datetime) }
360
369
  end
361
370
 
362
371
  context "with only option" do
@@ -372,11 +381,11 @@ RSpec.describe "ActiveRecordExtension" do
372
381
  it { expect(purchase).not_to respond_to(:human_commission) }
373
382
  it { expect(purchase.human_amount).to eq("2,000,000.95") }
374
383
  it { expect(purchase).not_to respond_to(:human_expired_at) }
375
- it { expect(purchase).not_to respond_to(:expired_at_to_short_date) }
384
+ it { expect(purchase).not_to respond_to(:expired_at_to_short_datetime) }
376
385
  it { expect(purchase).not_to respond_to(:human_created_at) }
377
- it { expect(purchase).not_to respond_to(:created_at_to_short_date) }
386
+ it { expect(purchase).not_to respond_to(:created_at_to_short_datetime) }
378
387
  it { expect(purchase).not_to respond_to(:human_updated_at) }
379
- it { expect(purchase).not_to respond_to(:updated_at_to_short_date) }
388
+ it { expect(purchase).not_to respond_to(:updated_at_to_short_datetime) }
380
389
  end
381
390
 
382
391
  context "with except option" do
@@ -392,11 +401,11 @@ RSpec.describe "ActiveRecordExtension" do
392
401
  it { expect(purchase.human_commission).to eq("1,000.99") }
393
402
  it { expect(purchase).not_to respond_to(:human_amount) }
394
403
  it { expect(purchase.human_expired_at).to eq("Fri, 06 Apr 1984 09:00:00 +0000") }
395
- it { expect(purchase.expired_at_to_short_date).to eq("06 Apr 09:00") }
404
+ it { expect(purchase.expired_at_to_short_datetime).to eq("06 Apr 09:00") }
396
405
  it { expect(purchase).to respond_to(:human_created_at) }
397
- it { expect(purchase).to respond_to(:created_at_to_short_date) }
406
+ it { expect(purchase).to respond_to(:created_at_to_short_datetime) }
398
407
  it { expect(purchase).to respond_to(:human_updated_at) }
399
- it { expect(purchase).to respond_to(:updated_at_to_short_date) }
408
+ it { expect(purchase).to respond_to(:updated_at_to_short_datetime) }
400
409
  end
401
410
  end
402
411
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: human_attributes
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Platanus
@@ -164,6 +164,7 @@ files:
164
164
  - lib/human_attributes/formatters/boolean.rb
165
165
  - lib/human_attributes/formatters/custom.rb
166
166
  - lib/human_attributes/formatters/date.rb
167
+ - lib/human_attributes/formatters/datetime.rb
167
168
  - lib/human_attributes/formatters/enumerize.rb
168
169
  - lib/human_attributes/formatters/numeric.rb
169
170
  - lib/human_attributes/formatters_builder.rb