Integer Serialization Plugin for Month Gem
Allows you to convert Month
objects to Integer
, and vice versa. This is useful for serializing Months into other data structures, like String
, or to pass values in JSON
, or send as parameters to Resque / Sidekiq jobs (which parameters are only compatible with simple JSON data types. Neither Date
or Month
can serialize properly to Resque/Sidekiq jobs.
Compatible with ๐๏ธ month gem v1 and v2. Compatible with Ruby v1.9.3+ and JRuby v9.1+, and tested on all minor versions of Ruby, thanks to ๐๏ธappraisal2.
- ๐๏ธ Month objects are lighter weight.
- There are many situations where having Months incrementable by 1 is useful
- e.g., directly mappable to iteration index
- It facilitates month-based math.
- Adding a day when a day is not relevant, such as for data with a 1-month resolution, can result in very overcomplicated systems that try to work around or ignore the stray days.
Need enterprise-level guarantees?
- ๐กSubscribe for support guarantees covering all FLOSS dependencies
- ๐กTidelift is part of Sonar
- ๐กTidelift pays maintainers to maintain the software you depend on!
๐@
Pointy Haired Boss: An enterprise support subscription is "never gonna let you down", and supports open source maintainers
Alternatively:
Tokens to Remember | |
---|---|
Works with JRuby | |
Works with Truffle Ruby | |
Works with MRI Ruby 3 | |
Works with MRI Ruby 2 | |
Works with MRI Ruby 1 | |
Source | |
Documentation | |
Compliance | |
Style | |
Support | |
Maintainer ๐๏ธ | |
... ๐ |
Install the gem and add to the application's Gemfile by executing:
$ bundle add month-serializer
If bundler is not being used to manage dependencies, install the gem by executing:
$ gem install month-serializer
For Medium or High Security Installations
month-serializer
is cryptographically signed, and has verifiable SHA-256 and SHA-512 checksums by
stone_checksums. Be sure the gem you install hasnโt been tampered with
by following the instructions below.
Add my public key (if you havenโt already, expires 2045-04-29) as a trusted certificate:
gem cert --add <(curl -Ls https://raw.github.com/galtzo-floss/certs/main/pboling.pem)
You only need to do that once. Then proceed to install with:
gem install month-serializer -P HighSecurity
The HighSecurity
trust profile will verify signed gems, and not allow the installation of unsigned dependencies.
If you want to up your security game full-time:
bundle config set --global trust-policy MediumSecurity
MediumSecurity
instead of HighSecurity
is necessary if not all the gems you use are signed.
NOTE: Be prepared to track down certs for signed gems and add them the same way you added mine.
Add this to the bootstrapping process of your app, somewhere after the month
gem is loaded.
In Rails, config/initializers/month-serializer.rb
would be perfect, but Rails is not required.
Month.send(:include, Month::Serializer)
This spec below, copied from the actual test suite, makes usage pretty clear. Note how the serialized Months as integer increment by one. If you think about counting time by months this makes sense. We often speak this way about babies, an 18 month old, or 24 month old.
How old is the Common Era right now? About 24.2k months! Is a millenimonth, millimes, or kilomonth, a thing? The Common Era is roughly 24 kilomonths old. ๐ And Neanderthal man went extinct about 471 kilomonths ago.
{
-471359 => Month.new(-39280, 1), # hist: Extinction of Neanderthal
24201 => Month.new(2016, 9),
24202 => Month.new(2016, 10),
# ...
24214 => Month.new(2017, 10),
24215 => Month.new(2017, 11),
# ...
24227 => Month.new(2018, 11),
24228 => Month.new(2018, 12),
}.each do |k, v|
context "#{k} => #{v}" do
it "Month converts to #{k}" do
expect(v.to_i).to(eq(k)) # to_i is added by this gem!
end
context "round trip" do
it "can load #{k} to #{v}" do
expect(Month.load(k)).to(eq(v)) # load is added by this gem!
end
it "can dump #{v} to #{k}" do
expect(Month.dump(v)).to(eq(k)) # dump is added by this gem!
end
end
end
end
We migrated from master
to main
as the default branch. If this affected your local checkout:
git branch -m master main
git fetch origin
git branch -u origin/main main
git remote set-head origin -a
See SECURITY.md.
If you need some ideas of where to help, you could work on adding more code coverage, or if it is already ๐ฏ (see below) check issues, or PRs, or use the gem and think about how it could be better.
We so if you make changes, remember to update it.
See CONTRIBUTING.md for more detailed instructions.
See CONTRIBUTING.md.
Everyone interacting with this project's codebases, issue trackers,
chat rooms and mailing lists agrees to follow the .
Made with contributors-img.
Also see GitLab Contributors: https://gitlab.com/galtzo-floss/month-serializer/-/graphs/main
This Library adheres to .
Violations of this scheme should be reported as bugs.
Specifically, if a minor or patch version is released that breaks backward compatibility,
a new version should be immediately released that restores compatibility.
Breaking changes to the public API will only be introduced with new major versions.
Yes. But I'm obligated to include notes...
SemVer should, but doesn't explicitly, say that dropping support for specific Platforms is a breaking change to an API. It is obvious to many, but not all, and since the spec is silent, the bike shedding is endless.
dropping support for a platform is both obviously and objectively a breaking change
- Jordan Harband (@ljharb, maintainer of SemVer) in SemVer issue 716
To get a better understanding of how SemVer is intended to work over a project's lifetime, read this article from the creator of SemVer:
As a result of this policy, and the interpretive lens used by the maintainer, you can (and should) specify a dependency on these libraries using the Pessimistic Version Constraint with two digits of precision.
For example:
spec.add_dependency("month-serializer", "~> 1.0")
See CHANGELOG.md for a list of releases.
The gem is available as open source under the terms of
the MIT License .
See LICENSE.txt for the official Copyright Notice.
-
Copyright (c) 2018-2020, 2024-2025 Peter H.ย Boling, of
Galtzo.com
, and month-serializer contributors
Having arrived at the bottom of the page, please endure a final supplication. The primary maintainer of this gem, Peter Boling, wants Ruby to be a great place for people to solve problems, big and small. Please consider supporting his efforts via the giant yellow link below, or one of the smaller ones, depending on button size preference.
P.S. If you need help๏ธ or want to say thanks, ๐ Join the Discord.