human_attributes 0.1.1 → 0.2.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
  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