date_values-rails 0.1.1 → 0.1.2

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: 28319635d0f7b1e9ddca5bfc17e74df6b0ad0cb308dc65cffd080b2a96c99f1f
4
- data.tar.gz: df34b698dac23056c4c3a096b9026e6b7f53c3f7e5d1b3d0f9a50b80c43a4e5d
3
+ metadata.gz: 9d69e9f5fb786a06d1d506e6d9d6c9b0fce4732e67dd27e0ddd5baa339da9558
4
+ data.tar.gz: 715f6f5ce06d89af3cfce70b83a4b13e409588e98842e0174d1e335e2d9d7e03
5
5
  SHA512:
6
- metadata.gz: 90bdb664d09a2ce4d6cd69f3687e27a0ded0a7eac553070b391a6937eb2316b93a15bd6806574b7842380de4d3635b284edd9fac6e35c9857058c993197f8229
7
- data.tar.gz: 300877d373eb661d50a4982a5eeca86a20c6dbdbb7459dd6d33a9e59ab9ce06f287c195c699d3bf893edc8f0bb70fc40846f140106f41356c88994fda78331e2
6
+ metadata.gz: 67855c8a6e39ebfd6142d11879b1338e4e01bf9e5661bcd3f2d86d722f6139b300da8ad4ae66724a236a84954f00b8c9442a60f61be2c93b4d9a80850d3037d3
7
+ data.tar.gz: 9297fc6c03be8b45c73bfea934177c3452205ce42d9aff5d20627124c6199dd39c3f0e47774d2a0ca521a6e44940bfb00b99ab16e4a161dcadfebf29e14fa002
data/CHANGELOG.md CHANGED
@@ -1,5 +1,9 @@
1
1
  ## [Unreleased]
2
2
 
3
+ ## [0.1.2] - 2026-03-21
4
+
5
+ - Add ActiveJob serializers for `YearMonth`, `MonthDay`, and `TimeOfDay` (auto-registered)
6
+
3
7
  ## [0.1.1] - 2026-03-20
4
8
 
5
9
  - Auto-require via Bundler — no explicit `require 'date_values/rails'` needed in Rails apps
data/README.md CHANGED
@@ -20,17 +20,24 @@ class Shop < ApplicationRecord
20
20
  end
21
21
  ```
22
22
 
23
- ### Form Input
23
+ ### Type Casting
24
24
 
25
- Cast accepts Hash params from forms, so select-based inputs work naturally:
25
+ Attributes accept strings, Hash params, and native objects:
26
26
 
27
27
  ```ruby
28
+ # String (lenient — "3/19", "03-19", "--03-19" all work)
29
+ shop = Shop.new(anniversary: '3/19')
30
+
31
+ # Hash (from select-based form inputs)
28
32
  # params[:shop][:anniversary] => {"month" => "3", "day" => "19"}
33
+ shop = Shop.new(anniversary: params[:shop][:anniversary])
34
+
35
+ # Native object
36
+ shop = Shop.new(anniversary: MonthDay.new(3, 19))
37
+
29
38
  shop.anniversary # => #<DateValues::MonthDay --03-19>
30
39
  ```
31
40
 
32
- String input is lenient — `"3/19"`, `"03-19"`, and `"--03-19"` are all accepted.
33
-
34
41
  ### Queries
35
42
 
36
43
  Values are automatically serialized in queries:
@@ -110,6 +117,20 @@ I18n.l YearMonth.new(2026, 3), locale: :ja # => "2026年3月"
110
117
  I18n.l TimeOfDay.new(14, 30), format: :long # => "2:30:00 PM"
111
118
  ```
112
119
 
120
+ ### ActiveJob
121
+
122
+ Values can be passed directly as job arguments — serializers are registered automatically:
123
+
124
+ ```ruby
125
+ class BillingJob < ApplicationJob
126
+ def perform(month)
127
+ # month is a YearMonth
128
+ end
129
+ end
130
+
131
+ BillingJob.perform_later(YearMonth.new(2026, 3))
132
+ ```
133
+
113
134
  ## License
114
135
 
115
136
  The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
@@ -0,0 +1,41 @@
1
+ # frozen_string_literal: true
2
+
3
+ module DateValues
4
+ module Rails
5
+ class YearMonthSerializer < ActiveJob::Serializers::ObjectSerializer
6
+ def serialize(value)
7
+ super('value' => value.to_s)
8
+ end
9
+
10
+ def deserialize(hash)
11
+ DateValues::YearMonth.parse(hash['value'])
12
+ end
13
+
14
+ def klass = DateValues::YearMonth
15
+ end
16
+
17
+ class MonthDaySerializer < ActiveJob::Serializers::ObjectSerializer
18
+ def serialize(value)
19
+ super('value' => value.to_s)
20
+ end
21
+
22
+ def deserialize(hash)
23
+ DateValues::MonthDay.parse(hash['value'])
24
+ end
25
+
26
+ def klass = DateValues::MonthDay
27
+ end
28
+
29
+ class TimeOfDaySerializer < ActiveJob::Serializers::ObjectSerializer
30
+ def serialize(value)
31
+ super('value' => value.to_s)
32
+ end
33
+
34
+ def deserialize(hash)
35
+ DateValues::TimeOfDay.parse(hash['value'])
36
+ end
37
+
38
+ def klass = DateValues::TimeOfDay
39
+ end
40
+ end
41
+ end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module DateValues
4
4
  module Rails
5
- VERSION = '0.1.1'
5
+ VERSION = '0.1.2'
6
6
  end
7
7
  end
@@ -21,3 +21,13 @@ ActiveSupport.on_load(:active_record) do
21
21
  end
22
22
 
23
23
  I18n::Backend::Base.prepend(DateValues::Rails::I18nBackend)
24
+
25
+ ActiveSupport.on_load(:active_job) do
26
+ require_relative 'rails/active_job_serializer'
27
+
28
+ ActiveJob::Serializers.add_serializers(
29
+ DateValues::Rails::YearMonthSerializer,
30
+ DateValues::Rails::MonthDaySerializer,
31
+ DateValues::Rails::TimeOfDaySerializer
32
+ )
33
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: date_values-rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Keita Urashima
@@ -49,6 +49,7 @@ files:
49
49
  - Rakefile
50
50
  - lib/date_values-rails.rb
51
51
  - lib/date_values/rails.rb
52
+ - lib/date_values/rails/active_job_serializer.rb
52
53
  - lib/date_values/rails/date_value_validator.rb
53
54
  - lib/date_values/rails/i18n_backend.rb
54
55
  - lib/date_values/rails/month_day_type.rb