month-serializer 1.0.1 → 1.0.3

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.
data/README.md CHANGED
@@ -1,51 +1,152 @@
1
- # Month::Serializer
1
+ <a href="https://github.com/galtzo-floss"><img alt="galtzo-floss Logo by GitHub" src="https://github.com/galtzo-floss.png?size=192" width="14%" align="right"/></a>
2
+
3
+ # 🗓️ Month::Serializer
4
+
5
+ [![Version][👽versioni]][👽version] [![Ruby Users Forum][✉️ruby-forum-top-img]][✉️ruby-forum] [![GitHub tag (latest SemVer)][⛳️tag-img]][⛳️tag] [![License: MIT][📄license-img]][📄license] [![Total downloads][👽dl-ranki]][👽dl-rank] [![CodeCov Test Coverage][🏀codecovi]][🏀codecov] [![Coveralls Test Coverage][🏀coveralls-img]][🏀coveralls] [![QLTY Test Coverage][🏀qlty-covi]][🏀qlty-cov] [![QLTY Maintainability][🏀qlty-mnti]][🏀qlty-mnt] [![CI Heads][🚎3-hd-wfi]][🚎3-hd-wf] [![CI Runtime Dependencies @ HEAD][🚎12-crh-wfi]][🚎12-crh-wf] [![CI Current][🚎11-c-wfi]][🚎11-c-wf] [![CI Truffle Ruby][🚎9-t-wfi]][🚎9-t-wf] [![CI JRuby][🚎10-j-wfi]][🚎10-j-wf] [![Deps Locked][🚎13-🔒️-wfi]][🚎13-🔒️-wf] [![Deps Unlocked][🚎14-🔓️-wfi]][🚎14-🔓️-wf] [![CI Test Coverage][🚎2-cov-wfi]][🚎2-cov-wf] [![CI Style][🚎5-st-wfi]][🚎5-st-wf] [![Apache SkyWalking Eyes License Compatibility Check][🚎15-🪪-wfi]][🚎15-🪪-wf]
6
+
7
+ `if ci_badges.map(&:color).detect { it != "green"}` ☝️ [let me know on Discord][✉️discord-invite] or [RubyForum][✉️ruby-forum], as I may have missed the notification.
8
+
9
+ ---
10
+
11
+ `if ci_badges.map(&:color).all? { it == "green"}` 👇️ send money so I can do more of this. FLOSS maintenance is now my full-time job.
12
+
13
+ [![OpenCollective Backers][🖇osc-backers-i]][🖇osc-backers] [![OpenCollective Sponsors][🖇osc-sponsors-i]][🖇osc-sponsors] [![Sponsor Me on Github][🖇sponsor-img]][🖇sponsor] [![Liberapay Goal Progress][⛳liberapay-img]][⛳liberapay] [![Donate on PayPal][🖇paypal-img]][🖇paypal] [![Buy me a coffee][🖇buyme-small-img]][🖇buyme] [![Donate at ko-fi.com][🖇kofi-img]][🖇kofi]
14
+
15
+ <details markdown="1">
16
+ <summary>👣 How will this project approach the September 2025 hostile takeover of RubyGems? 🚑️</summary>
17
+
18
+ I've summarized my thoughts in [this blog post](https://dev.to/galtzo/hostile-takeover-of-rubygems-my-thoughts-5hlo).
19
+
20
+ </details>
21
+
22
+ ## 🌻 Synopsis <a href="https://discord.gg/3qme4XHNKN"><img alt="Galtzo FLOSS Logo by Aboling0, CC BY-SA 4.0" src="https://logos.galtzo.com/assets/images/galtzo-floss/avatar-128px.svg" width="8%" align="right"/></a> <a href="https://ruby-toolbox.com"><img alt="ruby-lang Logo, Yukihiro Matsumoto, Ruby Visual Identity Team, CC BY-SA 2.5" src="https://logos.galtzo.com/assets/images/ruby-lang/avatar-128px.svg" width="8%" align="right"/></a>
2
23
 
3
24
  **Integer Serialization Plugin for [Month Gem](https://github.com/timcraft/month)**
4
25
 
5
26
  Allows you to convert [`Month` objects](https://github.com/timcraft/month/blob/master/lib/month.rb) 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](https://github.com/mperham/sidekiq/wiki/The-Basics#client). Neither `Date` or `Month` can serialize properly to Resque/Sidekiq jobs.
6
27
 
7
- | Project | Month::Serializer |
8
- |------------------------ | ----------------------- |
9
- | gem name | [month-serializer](https://rubygems.org/gems/month-serializer) |
10
- | license | [![License: MIT](https://img.shields.io/badge/License-MIT-green.svg)](https://opensource.org/licenses/MIT) |
11
- | download rank | [![Downloads Today](https://img.shields.io/gem/rd/month-serializer.svg)](https://github.com/pboling/month-serializer) |
12
- | version | [![Version](https://img.shields.io/gem/v/month-serializer.svg)](https://rubygems.org/gems/month-serializer) |
13
- | dependencies | [![Depfu](https://badges.depfu.com/badges/9b99dea566c438afe054a94d464e98ea/count.svg)](https://depfu.com/github/pboling/month-serializer?project_id=6003) |
14
- | continuous integration | [![Build Status](https://travis-ci.org/pboling/month-serializer.svg?branch=master)](https://travis-ci.org/pboling/month-serializer) |
15
- | test coverage | [![Test Coverage](https://api.codeclimate.com/v1/badges/50241bf0d9c78bcce69e/test_coverage)](https://codeclimate.com/github/pboling/month-serializer/test_coverage) |
16
- | maintainability | [![Maintainability](https://api.codeclimate.com/v1/badges/50241bf0d9c78bcce69e/maintainability)](https://codeclimate.com/github/pboling/month-serializer/maintainability) |
17
- | code triage | [![Open Source Helpers](https://www.codetriage.com/pboling/month-serializer/badges/users.svg)](https://www.codetriage.com/pboling/month-serializer) |
18
- | homepage | [on Github.com][homepage], [on Railsbling.com][blogpage] |
19
- | documentation | [on RDoc.info][documentation] |
20
- | Spread ~♡ⓛⓞⓥⓔ♡~ | [🌍 🌎 🌏][peterboling], [🍚][refugees], [➕][gplus], [👼][angellist], [🐛][topcoder], [:shipit:][coderwall], [![Tweet Peter](https://img.shields.io/twitter/follow/galtzo.svg?style=social&label=Follow)][twitter] |
28
+ Compatible with 🗓️ [month gem][month-gem] v1 and v2.
29
+ Compatible with Ruby v1.9.3+ and JRuby v9.1+, and tested on all minor versions of Ruby, thanks to [🔍️appraisal2][appraisal2-gem].
30
+
31
+ [month-gem]: https://github.com/readysteady/month
32
+ [appraisal2-gem]: https://github.com/appraisal-rb/appraisal2
21
33
 
22
34
  ### Why use Month instead of Date or Time?
23
35
 
24
- - Month is lighter weight.
36
+ - 🗓️ [Month][month-gem] objects are lighter weight.
25
37
  - There are many situations where having Months incrementable by 1 is useful
26
- - e.g. Directly mappable to iteration index
38
+ - e.g., directly mappable to iteration index
27
39
  - It facilitates month-based math.
28
- - 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.
40
+ - 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.
29
41
 
30
- ## Installation
42
+ ## 💡 Info you can shake a stick at
31
43
 
32
- Add this line to your application's Gemfile:
44
+ | Tokens to Remember | [![Gem name][⛳️name-img]][⛳️gem-name] [![Gem namespace][⛳️namespace-img]][⛳️gem-namespace] |
45
+ |-------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
46
+ | Works with JRuby | [![JRuby 9.2 Compat][💎jruby-9.2i]][🚎jruby-9.2-wf] [![JRuby 9.3 Compat][💎jruby-9.3i]][🚎jruby-9.3-wf] <br/> [![JRuby 9.4 Compat][💎jruby-9.4i]][🚎jruby-9.4-wf] [![JRuby 10.0 Compat][💎jruby-10.0i]][🚎jruby-10.0-wf] [![JRuby current Compat][💎jruby-c-i]][🚎10-j-wf] [![JRuby HEAD Compat][💎jruby-headi]][🚎3-hd-wf]|
47
+ | Works with Truffle Ruby | [![Truffle Ruby 22.3 Compat][💎truby-22.3i]][🚎truby-22.3-wf] [![Truffle Ruby 23.0 Compat][💎truby-23.0i]][🚎truby-23.0-wf] [![Truffle Ruby 23.1 Compat][💎truby-23.1i]][🚎truby-23.1-wf] <br/> [![Truffle Ruby 24.2 Compat][💎truby-24.2i]][🚎truby-24.2-wf] [![Truffle Ruby 25.0 Compat][💎truby-25.0i]][🚎truby-25.0-wf] [![Truffle Ruby 33.0 Compat][💎truby-33.0i]][🚎truby-33.0-wf] [![Truffle Ruby current Compat][💎truby-c-i]][🚎9-t-wf] [![Truffle Ruby HEAD Compat][💎truby-headi]][🚎3-hd-wf]|
48
+ | Works with MRI Ruby 4 | [![Ruby current Compat][💎ruby-c-i]][🚎11-c-wf] [![Ruby HEAD Compat][💎ruby-headi]][🚎3-hd-wf]|
49
+ | Works with MRI Ruby 3 | [![Ruby 3.0 Compat][💎ruby-3.0i]][🚎ruby-3.0-wf] [![Ruby 3.1 Compat][💎ruby-3.1i]][🚎ruby-3.1-wf] [![Ruby 3.2 Compat][💎ruby-3.2i]][🚎ruby-3.2-wf] [![Ruby 3.3 Compat][💎ruby-3.3i]][🚎ruby-3.3-wf] [![Ruby 3.4 Compat][💎ruby-3.4i]][🚎ruby-3.4-wf]|
50
+ | Works with MRI Ruby 2 | ![Ruby 2.0 Compat][💎ruby-2.0i] ![Ruby 2.1 Compat][💎ruby-2.1i] ![Ruby 2.2 Compat][💎ruby-2.2i] ![Ruby 2.3 Compat][💎ruby-2.3i] <br/> [![Ruby 2.4 Compat][💎ruby-2.4i]][🚎ruby-2.4-wf] [![Ruby 2.5 Compat][💎ruby-2.5i]][🚎ruby-2.5-wf] [![Ruby 2.6 Compat][💎ruby-2.6i]][🚎ruby-2.6-wf] [![Ruby 2.7 Compat][💎ruby-2.7i]][🚎ruby-2.7-wf]|
51
+ | Works with MRI Ruby 1 | ![Ruby 1.9 Compat][💎ruby-1.9i]|
52
+ | Support & Community | [![Join Me on Daily.dev's RubyFriends][✉️ruby-friends-img]][✉️ruby-friends] [![Get help from RubyForum][✉️ruby-forum-img]][✉️ruby-forum] [![Live Chat on Discord][✉️discord-invite-img-ftb]][✉️discord-invite] [![Get help from me on Upwork][👨🏼‍🏫expsup-upwork-img]][👨🏼‍🏫expsup-upwork] [![Get help from me on Codementor][👨🏼‍🏫expsup-codementor-img]][👨🏼‍🏫expsup-codementor] |
53
+ | Source | [![Source on GitLab.com][📜src-gl-img]][📜src-gl] [![Source on CodeBerg.org][📜src-cb-img]][📜src-cb] [![Source on GitHub.com][📜src-gh-img]][📜src-gh] [![The best SHA: dQw4w9WgXcQ!][🧮kloc-img]][🧮kloc] |
54
+ | Documentation | [![Current release on RubyDoc.info][📜docs-cr-rd-img]][🚎yard-current] [![YARD on Galtzo.com][📜docs-head-rd-img]][🚎yard-head] [![Maintainer Blog][🚂maint-blog-img]][🚂maint-blog] [![GitLab Wiki][📜gl-wiki-img]][📜gl-wiki] [![GitHub Wiki][📜gh-wiki-img]][📜gh-wiki] |
55
+ | Compliance | [![License: MIT][📄license-img]][📄license] [![Apache license compatibility: Category A][📄license-compat-img]][📄license-compat] [![📄ilo-declaration-img]][📄ilo-declaration] [![Security Policy][🔐security-img]][🔐security] [![Contributor Covenant 2.1][🪇conduct-img]][🪇conduct] [![SemVer 2.0.0][📌semver-img]][📌semver] |
56
+ | Style | [![Enforced Code Style Linter][💎rlts-img]][💎rlts] [![Keep-A-Changelog 1.0.0][📗keep-changelog-img]][📗keep-changelog] [![Gitmoji Commits][📌gitmoji-img]][📌gitmoji] [![Compatibility appraised by: appraisal2][💎appraisal2-img]][💎appraisal2] |
57
+ | Maintainer 🎖️ | [![Follow Me on LinkedIn][💖🖇linkedin-img]][💖🖇linkedin] [![Follow Me on Ruby.Social][💖🐘ruby-mast-img]][💖🐘ruby-mast] [![Follow Me on Bluesky][💖🦋bluesky-img]][💖🦋bluesky] [![Contact Maintainer][🚂maint-contact-img]][🚂maint-contact] [![My technical writing][💖💁🏼‍♂️devto-img]][💖💁🏼‍♂️devto] |
58
+ | `...` 💖 | [![Find Me on WellFound:][💖✌️wellfound-img]][💖✌️wellfound] [![Find Me on CrunchBase][💖💲crunchbase-img]][💖💲crunchbase] [![My LinkTree][💖🌳linktree-img]][💖🌳linktree] [![More About Me][💖💁🏼‍♂️aboutme-img]][💖💁🏼‍♂️aboutme] [🧊][💖🧊berg] [🐙][💖🐙hub] [🛖][💖🛖hut] [🧪][💖🧪lab] |
33
59
 
34
- ```ruby
35
- gem 'month-serializer'
60
+ ### Compatibility
61
+
62
+ Compatible with MRI Ruby 1.9.3+, JRuby, and TruffleRuby.
63
+ CI workflows and Appraisals are generated for MRI Ruby 2.4+.
64
+ This test floor is configured by `ruby.test_minimum` in `.kettle-jem.yml` and
65
+ may be higher than the gem's runtime compatibility floor when legacy Rubies are
66
+ not practical for the current toolchain.
67
+
68
+ <a href="https://github.com/kettle-dev"><img alt="kettle-dev Logo by Aboling0, CC BY-SA 4.0" src="https://logos.galtzo.com/assets/images/kettle-dev/avatar-128px.svg" width="14%" align="right"/></a>
69
+
70
+ The _amazing_ test matrix is powered by the kettle-dev stack.
71
+
72
+ <details markdown="1">
73
+ <summary>How kettle-dev manages complexity in tests</summary>
74
+
75
+ | Gem | Source | Role | Total downloads |
76
+ |-----|--------|------|---------------------|
77
+ | [appraisal2](https://clickgems.clickhouse.com/dashboard/appraisal2) | [GitHub](https://github.com/appraisal-rb/appraisal2) | multi-dependency Appraisal matrix generation | [![Total downloads for appraisal2](https://img.shields.io/gem/dt/appraisal2.svg?style=flat-square)](https://clickgems.clickhouse.com/dashboard/appraisal2) |
78
+ | [appraisal2-rubocop](https://clickgems.clickhouse.com/dashboard/appraisal2-rubocop) | [GitHub](https://github.com/appraisal-rb/appraisal2-rubocop) | RuboCop Appraisal generator integration | [![Total downloads for appraisal2-rubocop](https://img.shields.io/gem/dt/appraisal2-rubocop.svg?style=flat-square)](https://clickgems.clickhouse.com/dashboard/appraisal2-rubocop) |
79
+ | [kettle-dev](https://clickgems.clickhouse.com/dashboard/kettle-dev) | [GitHub](https://github.com/kettle-dev/kettle-dev) | development, release, and CI workflow tooling | [![Total downloads for kettle-dev](https://img.shields.io/gem/dt/kettle-dev.svg?style=flat-square)](https://clickgems.clickhouse.com/dashboard/kettle-dev) |
80
+ | [kettle-jem](https://clickgems.clickhouse.com/dashboard/kettle-jem) | [GitHub](https://github.com/kettle-dev/kettle-jem) | Appraisals & CI workflow templates | [![Total downloads for kettle-jem](https://img.shields.io/gem/dt/kettle-jem.svg?style=flat-square)](https://clickgems.clickhouse.com/dashboard/kettle-jem) |
81
+ | [kettle-soup-cover](https://clickgems.clickhouse.com/dashboard/kettle-soup-cover) | [GitHub](https://github.com/kettle-dev/kettle-soup-cover) | SimpleCov coverage policy and reporting | [![Total downloads for kettle-soup-cover](https://img.shields.io/gem/dt/kettle-soup-cover.svg?style=flat-square)](https://clickgems.clickhouse.com/dashboard/kettle-soup-cover) |
82
+ | [kettle-test](https://clickgems.clickhouse.com/dashboard/kettle-test) | [GitHub](https://github.com/kettle-dev/kettle-test) | standard test runner and coverage harness | [![Total downloads for kettle-test](https://img.shields.io/gem/dt/kettle-test.svg?style=flat-square)](https://clickgems.clickhouse.com/dashboard/kettle-test) |
83
+ | [rubocop-lts](https://clickgems.clickhouse.com/dashboard/rubocop-lts) | [GitHub](https://github.com/rubocop-lts/rubocop-lts) | Ruby-version-aware linting | [![Total downloads for rubocop-lts](https://img.shields.io/gem/dt/rubocop-lts.svg?style=flat-square)](https://clickgems.clickhouse.com/dashboard/rubocop-lts) |
84
+ | [turbo_tests2](https://clickgems.clickhouse.com/dashboard/turbo_tests2) | [GitHub](https://github.com/galtzo-floss/turbo_tests2) | parallel test execution | [![Total downloads for turbo_tests2](https://img.shields.io/gem/dt/turbo_tests2.svg?style=flat-square)](https://clickgems.clickhouse.com/dashboard/turbo_tests2) |
85
+
86
+ </details>
87
+
88
+ ### Federated DVCS
89
+
90
+ <details markdown="1">
91
+ <summary>Find this repo on federated forges (Coming soon!)</summary>
92
+
93
+ | Federated [DVCS][💎d-in-dvcs] Repository | Status | Issues | PRs | Wiki | CI |
94
+ |-------------------------------------------------|-------------------------------------------|-------------------|------------------|-----------------|----------------|
95
+ | 🧪 [galtzo-floss/month-serializer on GitLab][📜src-gl] | The Truth | [💚][🤝gl-issues] | [💚][🤝gl-pulls] | [💚][📜gl-wiki] | 🐭 Tiny Matrix |
96
+ | 🧊 [galtzo-floss/month-serializer on CodeBerg][📜src-cb] | An Ethical Mirror ([Donate][🤝cb-donate]) | [💚][🤝cb-issues] | [💚][🤝cb-pulls] | ➖ | ⭕️ No Matrix |
97
+ | 🐙 [galtzo-floss/month-serializer on GitHub][📜src-gh] | Another Mirror | [💚][🤝gh-issues] | [💚][🤝gh-pulls] | [💚][📜gh-wiki] | 💯 Full Matrix |
98
+
99
+ </details>
100
+
101
+ ### Enterprise Support
102
+
103
+ [![Tidelift](https://tidelift.com/badges/package/rubygems/month-serializer)](https://tidelift.com/subscription/pkg/rubygems-month-serializer?utm_source=rubygems-month-serializer&utm_medium=referral&utm_campaign=readme)
104
+
105
+ Available as part of the Tidelift Subscription.
106
+
107
+ <details markdown="1">
108
+ <summary>Need enterprise-level guarantees?</summary>
109
+
110
+ The maintainers of this and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source packages you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact packages you use.
111
+
112
+ [![Get help from me on Tidelift][🏙️entsup-tidelift-img]][🏙️entsup-tidelift]
113
+
114
+ - 💡Subscribe for support guarantees covering _all_ your FLOSS dependencies
115
+ - 💡Tidelift is part of [Sonar][🏙️entsup-tidelift-sonar]
116
+ - 💡Tidelift pays maintainers to maintain the software you depend on!<br/>📊`@`Pointy Haired Boss: An [enterprise support][🏙️entsup-tidelift] subscription is "[never gonna let you down][🧮kloc]", and *supports* open source maintainers
117
+
118
+ Alternatively:
119
+
120
+ - [![Ruby Users Forum][✉️ruby-forum-img]][✉️ruby-forum]
121
+ - [![Live Chat on Discord][✉️discord-invite-img-ftb]][✉️discord-invite]
122
+ - [![Get help from me on Upwork][👨🏼‍🏫expsup-upwork-img]][👨🏼‍🏫expsup-upwork]
123
+ - [![Get help from me on Codementor][👨🏼‍🏫expsup-codementor-img]][👨🏼‍🏫expsup-codementor]
124
+
125
+ </details>
126
+
127
+ ## ✨ Installation
128
+
129
+ Install the gem and add to the application's Gemfile by executing:
130
+
131
+ ```console
132
+ bundle add month-serializer
36
133
  ```
37
134
 
38
- And then execute:
135
+ If bundler is not being used to manage dependencies, install the gem by executing:
39
136
 
40
- $ bundle
137
+ ```console
138
+ gem install month-serializer
139
+ ```
41
140
 
42
- Or install it yourself as:
141
+ ## ⚙️ Configuration
43
142
 
44
- $ gem install month-serializer
143
+ There is no serializer configuration object. Load the extension after `month`
144
+ and include `Month::Serializer` in `Month`; this adds the integer conversion
145
+ methods without requiring Rails or an application initializer.
45
146
 
46
- ## Usage
147
+ ## 🔧 Basic Usage
47
148
 
48
- Add this to the bootstrapping process of your app, somewhere after the [`month` gem](https://github.com/timcraft/month) is loaded.
149
+ Add this to the bootstrapping process of your app, somewhere after the [`month` gem][month-gem] is loaded.
49
150
  In Rails, `config/initializers/month-serializer.rb` would be perfect, but Rails is not required.
50
151
 
51
152
  ````ruby
@@ -53,103 +154,427 @@ Month.send(:include, Month::Serializer)
53
154
  ````
54
155
 
55
156
  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.
56
-
157
+
57
158
  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.
58
159
 
59
160
  ```ruby
60
- {
61
- -471359 => Month.new(-39280, 1), # hist: Extinction of Neanderthal
62
- 24201 => Month.new(2016, 9),
63
- 24202 => Month.new(2016, 10),
64
- # ...
65
- 24214 => Month.new(2017, 10),
66
- 24215 => Month.new(2017, 11),
67
- # ...
68
- 24227 => Month.new(2018, 11),
69
- 24228 => Month.new(2018, 12)
70
- }.each do |k, v|
71
- context "#{k} => #{v}" do
72
- it "Month converts to #{k}" do
73
- expect(v.to_i).to eq(k) # to_i is added by this gem!
74
- end
75
- context 'round trip' do
76
- it "can load #{k} to #{v}" do
77
- expect(Month.load(k)).to eq(v) # load is added by this gem!
78
- end
79
- it "can dump #{v} to #{k}" do
80
- expect(Month.dump(v)).to eq(k) # dump is added by this gem!
81
- end
82
- end
83
- end
84
- end
161
+ {
162
+ -471359 => Month.new(-39280, 1), # hist: Extinction of Neanderthal
163
+ 24201 => Month.new(2016, 9),
164
+ 24202 => Month.new(2016, 10),
165
+ # ...
166
+ 24214 => Month.new(2017, 10),
167
+ 24215 => Month.new(2017, 11),
168
+ # ...
169
+ 24227 => Month.new(2018, 11),
170
+ 24228 => Month.new(2018, 12),
171
+ }.each do |k, v|
172
+ context "#{k} => #{v}" do
173
+ it "Month converts to #{k}" do
174
+ expect(v.to_i).to(eq(k)) # to_i is added by this gem!
175
+ end
176
+ context "round trip" do
177
+ it "can load #{k} to #{v}" do
178
+ expect(Month.load(k)).to(eq(v)) # load is added by this gem!
179
+ end
180
+ it "can dump #{v} to #{k}" do
181
+ expect(Month.dump(v)).to(eq(k)) # dump is added by this gem!
182
+ end
183
+ end
184
+ end
185
+ end
85
186
  ```
86
187
 
87
- ## Development
188
+ ## 🦷 FLOSS Funding
189
+
190
+ While galtzo-floss tools are free software and will always be, the project would benefit immensely from some funding.
191
+ Raising a monthly budget of... "dollars" would make the project more sustainable.
192
+
193
+ We welcome both individual and corporate sponsors! We also offer a
194
+ wide array of funding channels to account for your preferences.
195
+ Currently, [Open Collective][🖇osc] is our preferred funding platform.
196
+
197
+ **If you're working in a company that's making significant use of galtzo-floss tools we'd
198
+ appreciate it if you suggest to your company to become a galtzo-floss sponsor.**
199
+
200
+ You can support the development of galtzo-floss tools via
201
+ [GitHub Sponsors][🖇sponsor],
202
+ [Liberapay][⛳liberapay],
203
+ [PayPal][🖇paypal],
204
+ [Open Collective][🖇osc]
205
+ and [Tidelift][🏙️entsup-tidelift].
206
+
207
+ | 📍 NOTE |
208
+ |----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
209
+ | If doing a sponsorship in the form of donation is problematic for your company <br/> from an accounting standpoint, we'd recommend the use of Tidelift, <br/> where you can get a support-like subscription instead. |
210
+
211
+ ### Open Collective for Individuals
212
+
213
+ Support us with a monthly donation and help us continue our activities. [[Become a backer](https://opencollective.com/galtzo-floss#backer)]
214
+
215
+ NOTE: [kettle-readme-backers][kettle-readme-backers] updates this list every day, automatically.
216
+
217
+ <!-- OPENCOLLECTIVE-INDIVIDUALS:START -->
218
+ No backers yet. Be the first!
219
+ <!-- OPENCOLLECTIVE-INDIVIDUALS:END -->
220
+
221
+ ### Open Collective for Organizations
88
222
 
89
- After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
223
+ Become a sponsor and get your logo on our README on GitHub with a link to your site. [[Become a sponsor](https://opencollective.com/galtzo-floss#sponsor)]
90
224
 
91
- To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
225
+ NOTE: [kettle-readme-backers][kettle-readme-backers] updates this list every day, automatically.
92
226
 
93
- ## Authors
227
+ <!-- OPENCOLLECTIVE-ORGANIZATIONS:START -->
228
+ No sponsors yet. Be the first!
229
+ <!-- OPENCOLLECTIVE-ORGANIZATIONS:END -->
94
230
 
95
- [Peter H. Boling][peterboling] of [Rails Bling][railsbling] is the author.
231
+ [kettle-readme-backers]: https://github.com/galtzo-floss/month-serializer/blob/main/bin/kettle-readme-backers
96
232
 
97
- ## Contributors
233
+ ### Another way to support open-source
98
234
 
99
- See the [Network View](https://github.com/pboling/month-serializer/network) and the [CHANGELOG](https://github.com/pboling/month-serializer/blob/master/CHANGELOG.md)
235
+ I’m driven by a passion to foster a thriving open-source community – a space where people can tackle complex problems, no matter how small. Revitalizing libraries that have fallen into disrepair, and building new libraries focused on solving real-world challenges, are my passions. I was recently affected by layoffs, and the tech jobs market is unwelcoming. I’m reaching out here because your support would significantly aid my efforts to provide for my family, and my farm (11 🐔 chickens, 2 🐶 dogs, 3 🐰 rabbits, 8 🐈‍ cats).
100
236
 
101
- ## Contributing
237
+ If you work at a company that uses my work, please encourage them to support me as a corporate sponsor. My work on gems you use might show up in `bundle fund`.
102
238
 
103
- 1. Fork it
104
- 2. Create your feature branch (`git checkout -b my-new-feature`)
105
- 3. Commit your changes (`git commit -am 'Added some feature'`)
106
- 4. Push to the branch (`git push origin my-new-feature`)
107
- 5. Make sure to add tests for it. This is important so I don't break it in a future version unintentionally.
108
- 6. Create new Pull Request
239
+ I’m developing a new library, [floss_funding][🖇floss-funding-gem], designed to empower open-source developers like myself to get paid for the work we do, in a sustainable way. Please give it a look.
109
240
 
110
- Bug reports and pull requests are welcome on GitHub at https://github.com/pboling/anonymous_active_record. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.
241
+ **[Floss-Funding.dev][🖇floss-funding.dev]: 👉️ No network calls. 👉️ No tracking. 👉️ No oversight. 👉️ Minimal crypto hashing. 💡 Easily disabled nags**
111
242
 
112
- ## Code of Conduct
243
+ [![OpenCollective Backers][🖇osc-backers-i]][🖇osc-backers] [![OpenCollective Sponsors][🖇osc-sponsors-i]][🖇osc-sponsors] [![Sponsor Me on Github][🖇sponsor-img]][🖇sponsor] [![Liberapay Goal Progress][⛳liberapay-img]][⛳liberapay] [![Donate on PayPal][🖇paypal-img]][🖇paypal] [![Buy me a coffee][🖇buyme-small-img]][🖇buyme] [![Donate to my FLOSS efforts at ko-fi.com][🖇kofi-img]][🖇kofi]
113
244
 
114
- Everyone interacting in the AnonymousActiveRecord project’s codebases, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct](https://github.com/pboling/anonymous_active_record/blob/master/CODE_OF_CONDUCT.md).
245
+ ## 🔐 Security
115
246
 
116
- ## Versioning
247
+ See [SECURITY.md][🔐security].
117
248
 
118
- This library aims to adhere to [Semantic Versioning 2.0.0][semver].
119
- Violations of this scheme should be reported as bugs. Specifically,
120
- if a minor or patch version is released that breaks backward
121
- compatibility, a new version should be immediately released that
122
- restores compatibility. Breaking changes to the public API will
123
- only be introduced with new major versions.
249
+ ## 🤝 Contributing
124
250
 
125
- As a result of this policy, you can (and should) specify a
126
- dependency on this gem using the [Pessimistic Version Constraint][pvc] with two digits of precision.
251
+ If you need some ideas of where to help, you could work on adding more code coverage,
252
+ check [issues][🤝gh-issues] or [PRs][🤝gh-pulls], or use the gem and think about how it could be better.
127
253
 
128
- For example in a `Gemfile`:
254
+ We [![Keep A Changelog][📗keep-changelog-img]][📗keep-changelog] so if you make changes, remember to update it.
129
255
 
130
- gem 'month-serializer', '~> 1.0', group: :test
256
+ See [CONTRIBUTING.md][🤝contributing] for more detailed instructions.
131
257
 
132
- or in a `gemspec`
258
+ ### 🚀 Release Instructions
133
259
 
134
- spec.add_development_dependency 'month-serializer', '~> 1.0'
260
+ See [CONTRIBUTING.md][🤝contributing].
135
261
 
136
- ## Legal
262
+ ### Code Coverage
137
263
 
138
- * MIT License - See [LICENSE][license] file in this project [![License: MIT](https://img.shields.io/badge/License-MIT-green.svg)](https://opensource.org/licenses/MIT)
264
+ <details markdown="1">
265
+ <summary>Coverage service badges</summary>
139
266
 
140
- * Copyright (c) 2018 [Peter H. Boling][peterboling] of [Rails Bling][railsbling]
267
+ [![Coverage Graph][🏀codecov-g]][🏀codecov]
268
+
269
+ [![Coveralls Test Coverage][🏀coveralls-img]][🏀coveralls]
270
+
271
+ [![QLTY Test Coverage][🏀qlty-covi]][🏀qlty-cov]
272
+
273
+ </details>
274
+
275
+ ### 🪇 Code of Conduct
276
+
277
+ Everyone interacting with this project's codebases, issue trackers,
278
+ chat rooms and mailing lists agrees to follow the [![Contributor Covenant 2.1][🪇conduct-img]][🪇conduct].
279
+
280
+ ## 🌈 Contributors
281
+
282
+ [![Contributors][🖐contributors-img]][🖐contributors]
283
+
284
+ Made with [contributors-img][🖐contrib-rocks].
285
+
286
+ Also see GitLab Contributors: [https://gitlab.com/galtzo-floss/month-serializer/-/graphs/main][🚎contributors-gl]
287
+
288
+ ## 📌 Versioning
289
+
290
+ This library follows [![Semantic Versioning 2.0.0][📌semver-img]][📌semver] for its public API where practical.
291
+ For most applications, prefer the [Pessimistic Version Constraint][📌pvc] with two digits of precision.
292
+
293
+ For example:
294
+
295
+ ```ruby
296
+ spec.add_dependency("month-serializer", "~> 1.0")
297
+ ```
141
298
 
142
- [semver]: http://semver.org/
143
- [pvc]: http://guides.rubygems.org/patterns/#pessimistic-version-constraint
144
- [documentation]: http://rdoc.info/github/pboling/month-serializer/frames
145
- [homepage]: https://github.com/pboling/month-serializer
146
- [blogpage]: http://www.railsbling.com/tags/month-serializer/
147
- [license]: LICENSE
148
- [railsbling]: http://www.railsbling.com
149
- [peterboling]: https://about.me/peter.boling
150
- [refugees]: https://www.crowdrise.com/helprefugeeswithhopefortomorrowliberia/fundraiser/peterboling
151
- [gplus]: https://plus.google.com/+PeterBoling/posts
152
- [topcoder]: https://www.topcoder.com/members/pboling/
153
- [angellist]: https://angel.co/peter-boling
154
- [coderwall]: http://coderwall.com/pboling
155
- [twitter]: http://twitter.com/galtzo
299
+ <details markdown="1">
300
+ <summary>📌 Is "Platform Support" part of the public API? More details inside.</summary>
301
+
302
+ Dropping support for a platform can be a breaking change for affected users.
303
+ If a release changes supported platforms, it should be called out clearly in the changelog and versioned with that impact in mind.
304
+
305
+ To get a better understanding of how SemVer is intended to work over a project's lifetime,
306
+ read this article from the creator of SemVer:
307
+
308
+ - ["Major Version Numbers are Not Sacred"][📌major-versions-not-sacred]
309
+
310
+ </details>
311
+
312
+ See [CHANGELOG.md][📌changelog] for a list of releases.
313
+
314
+ ## 📄 License
315
+
316
+ The gem is available as open source under the terms of
317
+ the [MIT](https://github.com/galtzo-floss/month-serializer/blob/main/MIT.md) [![License: MIT][📄license-img]][📄license-ref].
318
+
319
+ ### © Copyright
320
+
321
+ See [LICENSE.md][📄license] for the official copyright notice.
322
+
323
+ <details markdown="1">
324
+ <summary>Copyright holders</summary>
325
+
326
+ - Copyright (c) 2018, 2025-2026 Peter H. Boling
327
+ - Copyright (c) 2025 Annibelle Boling
328
+
329
+ </details>
330
+
331
+ ## 🤑 A request for help
332
+
333
+ Maintainers have teeth and need to pay their dentists.
334
+ After getting laid off in an RIF in March, and encountering difficulty finding a new one,
335
+ I began spending most of my time building open source tools.
336
+ I'm hoping to be able to pay for my kids' health insurance this month,
337
+ so if you value the work I am doing, I need your support.
338
+ Please consider sponsoring me or the project.
339
+
340
+ To join the community or get help, use the RubyForum or Discord.
341
+
342
+ [![Ruby Users Forum][✉️ruby-forum-img]][✉️ruby-forum]
343
+ [![Live Chat on Discord][✉️discord-invite-img-ftb]][✉️discord-invite]
344
+
345
+ To say "thanks!" ☝️ Join the community or 👇️ send money.
346
+
347
+ [![Sponsor galtzo-floss/month-serializer on Open Source Collective][🖇osc-all-bottom-img]][🖇osc] 💌 [![Sponsor me on GitHub Sponsors][🖇sponsor-bottom-img]][🖇sponsor] 💌 [![Sponsor me on Liberapay][⛳liberapay-bottom-img]][⛳liberapay] 💌 [![Donate on PayPal][🖇paypal-bottom-img]][🖇paypal]
348
+
349
+ ### Please give the project a star ⭐ ♥.
350
+
351
+ Many parts of this project are actively managed by a [kettle-jem](https://github.com/structuredmerge/structuredmerge-ruby/tree/main/gems/kettle-jem) smart template utilizing [StructuredMerge.org](https://structuredmerge.org) merge contracts.
352
+
353
+ Thanks for RTFM. ☺️
354
+
355
+ [⛳liberapay-img]: https://img.shields.io/liberapay/goal/pboling.svg?logo=liberapay&color=a51611&style=flat
356
+ [⛳liberapay-bottom-img]: https://img.shields.io/liberapay/goal/pboling.svg?style=for-the-badge&logo=liberapay&color=a51611
357
+ [⛳liberapay]: https://liberapay.com/pboling/donate
358
+ [🖇osc-all-img]: https://img.shields.io/opencollective/all/galtzo-floss
359
+ [🖇osc-sponsors-img]: https://img.shields.io/opencollective/sponsors/galtzo-floss
360
+ [🖇osc-backers-img]: https://img.shields.io/opencollective/backers/galtzo-floss
361
+ [🖇osc-backers]: https://opencollective.com/galtzo-floss#backer
362
+ [🖇osc-backers-i]: https://opencollective.com/galtzo-floss/backers/badge.svg?style=flat
363
+ [🖇osc-sponsors]: https://opencollective.com/galtzo-floss#sponsor
364
+ [🖇osc-sponsors-i]: https://opencollective.com/galtzo-floss/sponsors/badge.svg?style=flat
365
+ [🖇osc-all-bottom-img]: https://img.shields.io/opencollective/all/galtzo-floss?style=for-the-badge
366
+ [🖇osc-sponsors-bottom-img]: https://img.shields.io/opencollective/sponsors/galtzo-floss?style=for-the-badge
367
+ [🖇osc-backers-bottom-img]: https://img.shields.io/opencollective/backers/galtzo-floss?style=for-the-badge
368
+ [🖇osc]: https://opencollective.com/galtzo-floss
369
+ [🖇sponsor-img]: https://img.shields.io/badge/Sponsor_Me!-pboling.svg?style=social&logo=github
370
+ [🖇sponsor-bottom-img]: https://img.shields.io/badge/Sponsor_Me!-pboling-blue?style=for-the-badge&logo=github
371
+ [🖇sponsor]: https://github.com/sponsors/pboling
372
+ [🖇kofi-img]: https://img.shields.io/badge/ko--fi-%E2%9C%93-a51611.svg?style=flat
373
+ [🖇kofi]: https://ko-fi.com/pboling
374
+ [🖇buyme-small-img]: https://img.shields.io/badge/buy_me_a_coffee-%E2%9C%93-a51611.svg?style=flat
375
+ [🖇buyme-img]: https://img.buymeacoffee.com/button-api/?text=Buy%20me%20a%20latte&emoji=&slug=pboling&button_colour=FFDD00&font_colour=000000&font_family=Cookie&outline_colour=000000&coffee_colour=ffffff
376
+ [🖇buyme]: https://www.buymeacoffee.com/pboling
377
+ [🖇paypal-img]: https://img.shields.io/badge/donate-paypal-a51611.svg?style=flat&logo=paypal
378
+ [🖇paypal-bottom-img]: https://img.shields.io/badge/donate-paypal-a51611.svg?style=for-the-badge&logo=paypal&color=0A0A0A
379
+ [🖇paypal]: https://www.paypal.com/paypalme/peterboling
380
+ [🖇floss-funding.dev]: https://floss-funding.dev
381
+ [🖇floss-funding-gem]: https://github.com/galtzo-floss/floss_funding
382
+ [✉️discord-invite]: https://discord.gg/3qme4XHNKN
383
+ [✉️discord-invite-img-ftb]: https://img.shields.io/discord/1373797679469170758?style=for-the-badge&logo=discord
384
+ [✉️ruby-friends-img]: https://img.shields.io/badge/daily.dev-%F0%9F%92%8E_Ruby_Friends-0A0A0A?style=for-the-badge&logo=dailydotdev&logoColor=white
385
+ [✉️ruby-friends]: https://app.daily.dev/squads/rubyfriends
386
+ [✉️ruby-forum-top-img]: https://img.shields.io/discourse/topics?server=https%3A%2F%2Fwww.rubyforum.org&style=flat&logo=discourse&label=Ruby%20Users%20Forum
387
+ [✉️ruby-forum-img]: https://img.shields.io/discourse/topics?server=https%3A%2F%2Fwww.rubyforum.org&style=for-the-badge&logo=discourse&label=Ruby%20Users%20Forum
388
+ [✉️ruby-forum]: https://www.rubyforum.org/tag/galtzo-floss
389
+
390
+ [✇bundle-group-pattern]: https://gist.github.com/pboling/4564780
391
+ [⛳️gem-namespace]: https://github.com/galtzo-floss/month-serializer
392
+ [⛳️namespace-img]: https://img.shields.io/badge/namespace-Month::Serializer-3C2D2D.svg?style=square&logo=ruby&logoColor=white
393
+ [⛳️gem-name]: https://clickgems.clickhouse.com/dashboard/month-serializer
394
+ [⛳️name-img]: https://img.shields.io/badge/name-month--serializer-3C2D2D.svg?style=square&logo=rubygems&logoColor=red
395
+ [⛳️tag-img]: https://img.shields.io/github/tag/galtzo-floss/month-serializer.svg
396
+ [⛳️tag]: https://github.com/galtzo-floss/month-serializer/releases
397
+ [🚂maint-blog]: http://www.railsbling.com/tags/month-serializer
398
+ [🚂maint-blog-img]: https://img.shields.io/badge/blog-railsbling-0093D0.svg?style=for-the-badge&logo=rubyonrails&logoColor=orange
399
+ [🚂maint-contact]: http://www.railsbling.com/contact
400
+ [🚂maint-contact-img]: https://img.shields.io/badge/Contact-Maintainer-0093D0.svg?style=flat&logo=rubyonrails&logoColor=red
401
+ [💖🖇linkedin]: http://www.linkedin.com/in/peterboling
402
+ [💖🖇linkedin-img]: https://img.shields.io/badge/LinkedIn-Profile-0B66C2?style=flat&logo=newjapanprowrestling
403
+ [💖✌️wellfound]: https://wellfound.com/u/peter-boling
404
+ [💖✌️wellfound-img]: https://img.shields.io/badge/peter--boling-orange?style=flat&logo=wellfound
405
+ [💖💲crunchbase]: https://www.crunchbase.com/person/peter-boling
406
+ [💖💲crunchbase-img]: https://img.shields.io/badge/peter--boling-purple?style=flat&logo=crunchbase
407
+ [💖🐘ruby-mast]: https://ruby.social/@galtzo
408
+ [💖🐘ruby-mast-img]: https://img.shields.io/mastodon/follow/109447111526622197?domain=https://ruby.social&style=flat&logo=mastodon&label=Ruby%20@galtzo
409
+ [💖🦋bluesky]: https://bsky.app/profile/galtzo.com
410
+ [💖🦋bluesky-img]: https://img.shields.io/badge/@galtzo.com-0285FF?style=flat&logo=bluesky&logoColor=white
411
+ [💖🌳linktree]: https://linktr.ee/galtzo
412
+ [💖🌳linktree-img]: https://img.shields.io/badge/galtzo-purple?style=flat&logo=linktree
413
+ [💖💁🏼‍♂️devto]: https://dev.to/galtzo
414
+ [💖💁🏼‍♂️devto-img]: https://img.shields.io/badge/dev.to-0A0A0A?style=flat&logo=devdotto&logoColor=white
415
+ [💖💁🏼‍♂️aboutme]: https://about.me/peter.boling
416
+ [💖💁🏼‍♂️aboutme-img]: https://img.shields.io/badge/about.me-0A0A0A?style=flat&logo=aboutme&logoColor=white
417
+ [💖🧊berg]: https://codeberg.org/pboling
418
+ [💖🐙hub]: https://github.org/pboling
419
+ [💖🛖hut]: https://sr.ht/~galtzo/
420
+ [💖🧪lab]: https://gitlab.com/pboling
421
+ [👨🏼‍🏫expsup-upwork]: https://www.upwork.com/freelancers/~014942e9b056abdf86?mp_source=share
422
+ [👨🏼‍🏫expsup-upwork-img]: https://img.shields.io/badge/UpWork-13544E?style=for-the-badge&logo=Upwork&logoColor=white
423
+ [👨🏼‍🏫expsup-codementor]: https://www.codementor.io/peterboling?utm_source=github&utm_medium=button&utm_term=peterboling&utm_campaign=github
424
+ [👨🏼‍🏫expsup-codementor-img]: https://img.shields.io/badge/CodeMentor-Get_Help-1abc9c?style=for-the-badge&logo=CodeMentor&logoColor=white
425
+ [🏙️entsup-tidelift]: https://tidelift.com/subscription/pkg/rubygems-month-serializer?utm_source=rubygems-month-serializer&utm_medium=referral&utm_campaign=readme
426
+ [🏙️entsup-tidelift-img]: https://img.shields.io/badge/Tidelift_and_Sonar-Enterprise_Support-FD3456?style=for-the-badge&logo=sonar&logoColor=white
427
+ [🏙️entsup-tidelift-sonar]: https://blog.tidelift.com/tidelift-joins-sonar
428
+ [💁🏼‍♂️peterboling]: http://www.peterboling.com
429
+ [🚂railsbling]: http://www.railsbling.com
430
+ [📜src-gl-img]: https://img.shields.io/badge/GitLab-FBA326?style=for-the-badge&logo=Gitlab&logoColor=orange
431
+ [📜src-gl]: https://gitlab.com/galtzo-floss/month-serializer
432
+ [📜src-cb-img]: https://img.shields.io/badge/CodeBerg-4893CC?style=for-the-badge&logo=CodeBerg&logoColor=blue
433
+ [📜src-cb]: https://codeberg.org/galtzo-floss/month-serializer
434
+ [📜src-gh-img]: https://img.shields.io/badge/GitHub-238636?style=for-the-badge&logo=GitHub&logoColor=green
435
+ [📜src-gh]: https://github.com/galtzo-floss/month-serializer
436
+ [📜docs-cr-rd-img]: https://img.shields.io/badge/RubyDoc-Current_Release-943CD2?style=for-the-badge&logo=readthedocs&logoColor=white
437
+ [📜docs-head-rd-img]: https://img.shields.io/badge/YARD_on_Galtzo.com-HEAD-943CD2?style=for-the-badge&logo=readthedocs&logoColor=white
438
+ [📜gl-wiki]: https://gitlab.com/galtzo-floss/month-serializer/-/wikis/home
439
+ [📜gh-wiki]: https://github.com/galtzo-floss/month-serializer/wiki
440
+ [📜gl-wiki-img]: https://img.shields.io/badge/wiki-gitlab-943CD2.svg?style=for-the-badge&logo=gitlab&logoColor=white
441
+ [📜gh-wiki-img]: https://img.shields.io/badge/wiki-github-943CD2.svg?style=for-the-badge&logo=github&logoColor=white
442
+ [👽dl-rank]: https://clickgems.clickhouse.com/dashboard/month-serializer
443
+ [👽dl-ranki]: https://img.shields.io/gem/dt/month-serializer.svg
444
+ [👽version]: https://clickgems.clickhouse.com/dashboard/month-serializer
445
+ [👽versioni]: https://img.shields.io/gem/v/month-serializer.svg
446
+ [🏀qlty-mnt]: https://qlty.sh/gh/galtzo-floss/projects/month-serializer
447
+ [🏀qlty-mnti]: https://qlty.sh/gh/galtzo-floss/projects/month-serializer/maintainability.svg
448
+ [🏀qlty-cov]: https://qlty.sh/gh/galtzo-floss/projects/month-serializer/metrics/code?sort=coverageRating
449
+ [🏀qlty-covi]: https://qlty.sh/gh/galtzo-floss/projects/month-serializer/coverage.svg
450
+ [🏀codecov]: https://codecov.io/gh/galtzo-floss/month-serializer
451
+ [🏀codecovi]: https://codecov.io/gh/galtzo-floss/month-serializer/graph/badge.svg
452
+ [🏀coveralls]: https://coveralls.io/github/galtzo-floss/month-serializer?branch=main
453
+ [🏀coveralls-img]: https://coveralls.io/repos/github/galtzo-floss/month-serializer/badge.svg?branch=main
454
+ [🚎ruby-2.4-wf]: https://github.com/galtzo-floss/month-serializer/actions/workflows/ruby-2.4.yml
455
+ [🚎ruby-2.5-wf]: https://github.com/galtzo-floss/month-serializer/actions/workflows/ruby-2.5.yml
456
+ [🚎ruby-2.6-wf]: https://github.com/galtzo-floss/month-serializer/actions/workflows/ruby-2.6.yml
457
+ [🚎ruby-2.7-wf]: https://github.com/galtzo-floss/month-serializer/actions/workflows/ruby-2.7.yml
458
+ [🚎ruby-3.0-wf]: https://github.com/galtzo-floss/month-serializer/actions/workflows/ruby-3.0.yml
459
+ [🚎ruby-3.1-wf]: https://github.com/galtzo-floss/month-serializer/actions/workflows/ruby-3.1.yml
460
+ [🚎ruby-3.2-wf]: https://github.com/galtzo-floss/month-serializer/actions/workflows/ruby-3.2.yml
461
+ [🚎ruby-3.3-wf]: https://github.com/galtzo-floss/month-serializer/actions/workflows/ruby-3.3.yml
462
+ [🚎ruby-3.4-wf]: https://github.com/galtzo-floss/month-serializer/actions/workflows/ruby-3.4.yml
463
+ [🚎jruby-9.2-wf]: https://github.com/galtzo-floss/month-serializer/actions/workflows/jruby-9.2.yml
464
+ [🚎jruby-9.3-wf]: https://github.com/galtzo-floss/month-serializer/actions/workflows/jruby-9.3.yml
465
+ [🚎jruby-9.4-wf]: https://github.com/galtzo-floss/month-serializer/actions/workflows/jruby-9.4.yml
466
+ [🚎jruby-10.0-wf]: https://github.com/galtzo-floss/month-serializer/actions/workflows/jruby-10.0.yml
467
+ [🚎truby-22.3-wf]: https://github.com/galtzo-floss/month-serializer/actions/workflows/truffleruby-22.3.yml
468
+ [🚎truby-23.0-wf]: https://github.com/galtzo-floss/month-serializer/actions/workflows/truffleruby-23.0.yml
469
+ [🚎truby-23.1-wf]: https://github.com/galtzo-floss/month-serializer/actions/workflows/truffleruby-23.1.yml
470
+ [🚎truby-24.2-wf]: https://github.com/galtzo-floss/month-serializer/actions/workflows/truffleruby-24.2.yml
471
+ [🚎truby-25.0-wf]: https://github.com/galtzo-floss/month-serializer/actions/workflows/truffleruby-25.0.yml
472
+ [🚎truby-33.0-wf]: https://github.com/galtzo-floss/month-serializer/actions/workflows/truffleruby-33.0.yml
473
+ [🚎2-cov-wf]: https://github.com/galtzo-floss/month-serializer/actions/workflows/coverage.yml
474
+ [🚎2-cov-wfi]: https://github.com/galtzo-floss/month-serializer/actions/workflows/coverage.yml/badge.svg
475
+ [🚎3-hd-wf]: https://github.com/galtzo-floss/month-serializer/actions/workflows/heads.yml
476
+ [🚎3-hd-wfi]: https://github.com/galtzo-floss/month-serializer/actions/workflows/heads.yml/badge.svg
477
+ [🚎5-st-wf]: https://github.com/galtzo-floss/month-serializer/actions/workflows/style.yml
478
+ [🚎5-st-wfi]: https://github.com/galtzo-floss/month-serializer/actions/workflows/style.yml/badge.svg
479
+ [🚎9-t-wf]: https://github.com/galtzo-floss/month-serializer/actions/workflows/truffle.yml
480
+ [🚎9-t-wfi]: https://github.com/galtzo-floss/month-serializer/actions/workflows/truffle.yml/badge.svg
481
+ [🚎10-j-wf]: https://github.com/galtzo-floss/month-serializer/actions/workflows/jruby.yml
482
+ [🚎10-j-wfi]: https://github.com/galtzo-floss/month-serializer/actions/workflows/jruby.yml/badge.svg
483
+ [🚎11-c-wf]: https://github.com/galtzo-floss/month-serializer/actions/workflows/current.yml
484
+ [🚎11-c-wfi]: https://github.com/galtzo-floss/month-serializer/actions/workflows/current.yml/badge.svg
485
+ [🚎12-crh-wf]: https://github.com/galtzo-floss/month-serializer/actions/workflows/dep-heads.yml
486
+ [🚎12-crh-wfi]: https://github.com/galtzo-floss/month-serializer/actions/workflows/dep-heads.yml/badge.svg
487
+ [🚎13-🔒️-wf]: https://github.com/galtzo-floss/month-serializer/actions/workflows/locked_deps.yml
488
+ [🚎13-🔒️-wfi]: https://github.com/galtzo-floss/month-serializer/actions/workflows/locked_deps.yml/badge.svg
489
+ [🚎14-🔓️-wf]: https://github.com/galtzo-floss/month-serializer/actions/workflows/unlocked_deps.yml
490
+ [🚎14-🔓️-wfi]: https://github.com/galtzo-floss/month-serializer/actions/workflows/unlocked_deps.yml/badge.svg
491
+ [🚎15-🪪-wf]: https://github.com/galtzo-floss/month-serializer/actions/workflows/license-eye.yml
492
+ [🚎15-🪪-wfi]: https://github.com/galtzo-floss/month-serializer/actions/workflows/license-eye.yml/badge.svg
493
+ [💎ruby-1.9i]: https://img.shields.io/badge/Ruby-1.9_(%F0%9F%9A%ABCI)-AABBCC?style=for-the-badge&logo=ruby&logoColor=white
494
+ [💎ruby-2.0i]: https://img.shields.io/badge/Ruby-2.0_(%F0%9F%9A%ABCI)-AABBCC?style=for-the-badge&logo=ruby&logoColor=white
495
+ [💎ruby-2.1i]: https://img.shields.io/badge/Ruby-2.1_(%F0%9F%9A%ABCI)-AABBCC?style=for-the-badge&logo=ruby&logoColor=white
496
+ [💎ruby-2.2i]: https://img.shields.io/badge/Ruby-2.2_(%F0%9F%9A%ABCI)-AABBCC?style=for-the-badge&logo=ruby&logoColor=white
497
+ [💎ruby-2.3i]: https://img.shields.io/badge/Ruby-2.3_(%F0%9F%9A%ABCI)-AABBCC?style=for-the-badge&logo=ruby&logoColor=white
498
+ [💎ruby-2.4i]: https://img.shields.io/badge/Ruby-2.4-DF00CA?style=for-the-badge&logo=ruby&logoColor=white
499
+ [💎ruby-2.5i]: https://img.shields.io/badge/Ruby-2.5-DF00CA?style=for-the-badge&logo=ruby&logoColor=white
500
+ [💎ruby-2.6i]: https://img.shields.io/badge/Ruby-2.6-DF00CA?style=for-the-badge&logo=ruby&logoColor=white
501
+ [💎ruby-2.7i]: https://img.shields.io/badge/Ruby-2.7-DF00CA?style=for-the-badge&logo=ruby&logoColor=white
502
+ [💎ruby-3.0i]: https://img.shields.io/badge/Ruby-3.0-CC342D?style=for-the-badge&logo=ruby&logoColor=white
503
+ [💎ruby-3.1i]: https://img.shields.io/badge/Ruby-3.1-CC342D?style=for-the-badge&logo=ruby&logoColor=white
504
+ [💎ruby-3.2i]: https://img.shields.io/badge/Ruby-3.2-CC342D?style=for-the-badge&logo=ruby&logoColor=white
505
+ [💎ruby-3.3i]: https://img.shields.io/badge/Ruby-3.3-CC342D?style=for-the-badge&logo=ruby&logoColor=white
506
+ [💎ruby-3.4i]: https://img.shields.io/badge/Ruby-3.4-CC342D?style=for-the-badge&logo=ruby&logoColor=white
507
+ [💎ruby-c-i]: https://img.shields.io/badge/Ruby-current-CC342D?style=for-the-badge&logo=ruby&logoColor=green
508
+ [💎ruby-headi]: https://img.shields.io/badge/Ruby-HEAD-CC342D?style=for-the-badge&logo=ruby&logoColor=blue
509
+ [💎truby-22.3i]: https://img.shields.io/badge/Truffle_Ruby-22.3-34BCB1?style=for-the-badge&logo=ruby&logoColor=pink
510
+ [💎truby-23.0i]: https://img.shields.io/badge/Truffle_Ruby-23.0-34BCB1?style=for-the-badge&logo=ruby&logoColor=pink
511
+ [💎truby-23.1i]: https://img.shields.io/badge/Truffle_Ruby-23.1-34BCB1?style=for-the-badge&logo=ruby&logoColor=pink
512
+ [💎truby-24.2i]: https://img.shields.io/badge/Truffle_Ruby-24.2-34BCB1?style=for-the-badge&logo=ruby&logoColor=pink
513
+ [💎truby-25.0i]: https://img.shields.io/badge/Truffle_Ruby-25.0-34BCB1?style=for-the-badge&logo=ruby&logoColor=pink
514
+ [💎truby-33.0i]: https://img.shields.io/badge/Truffle_Ruby-33.0-34BCB1?style=for-the-badge&logo=ruby&logoColor=pink
515
+ [💎truby-c-i]: https://img.shields.io/badge/Truffle_Ruby-current-34BCB1?style=for-the-badge&logo=ruby&logoColor=green
516
+ [💎truby-headi]: https://img.shields.io/badge/Truffle_Ruby-HEAD-34BCB1?style=for-the-badge&logo=ruby&logoColor=blue
517
+ [💎jruby-9.2i]: https://img.shields.io/badge/JRuby-9.2-FBE742?style=for-the-badge&logo=ruby&logoColor=red
518
+ [💎jruby-9.3i]: https://img.shields.io/badge/JRuby-9.3-FBE742?style=for-the-badge&logo=ruby&logoColor=red
519
+ [💎jruby-9.4i]: https://img.shields.io/badge/JRuby-9.4-FBE742?style=for-the-badge&logo=ruby&logoColor=red
520
+ [💎jruby-10.0i]: https://img.shields.io/badge/JRuby-10.0-FBE742?style=for-the-badge&logo=ruby&logoColor=red
521
+ [💎jruby-c-i]: https://img.shields.io/badge/JRuby-current-FBE742?style=for-the-badge&logo=ruby&logoColor=green
522
+ [💎jruby-headi]: https://img.shields.io/badge/JRuby-HEAD-FBE742?style=for-the-badge&logo=ruby&logoColor=blue
523
+ [🤝gh-issues]: https://github.com/galtzo-floss/month-serializer/issues
524
+ [🤝gh-pulls]: https://github.com/galtzo-floss/month-serializer/pulls
525
+ [🤝gl-issues]: https://gitlab.com/galtzo-floss/month-serializer/-/issues
526
+ [🤝gl-pulls]: https://gitlab.com/galtzo-floss/month-serializer/-/merge_requests
527
+ [🤝cb-issues]: https://codeberg.org/galtzo-floss/month-serializer/issues
528
+ [🤝cb-pulls]: https://codeberg.org/galtzo-floss/month-serializer/pulls
529
+ [🤝cb-donate]: https://donate.codeberg.org/
530
+ [🤝contributing]: https://github.com/galtzo-floss/month-serializer/blob/main/CONTRIBUTING.md
531
+ [🏀codecov-g]: https://codecov.io/gh/galtzo-floss/month-serializer/graph/badge.svg
532
+ [🖐contrib-rocks]: https://contrib.rocks
533
+ [🖐contributors]: https://github.com/galtzo-floss/month-serializer/graphs/contributors
534
+ [🖐contributors-img]: https://contrib.rocks/image?repo=galtzo-floss/month-serializer
535
+ [🚎contributors-gl]: https://gitlab.com/galtzo-floss/month-serializer/-/graphs/main
536
+ [🪇conduct]: https://github.com/galtzo-floss/month-serializer/blob/main/CODE_OF_CONDUCT.md
537
+ [🪇conduct-img]: https://img.shields.io/badge/Contributor_Covenant-2.1-259D6C.svg
538
+ [📌pvc]: http://guides.rubygems.org/patterns/#pessimistic-version-constraint
539
+ [📌semver]: https://semver.org/spec/v2.0.0.html
540
+ [📌semver-img]: https://img.shields.io/badge/semver-2.0.0-259D6C.svg?style=flat
541
+ [📌semver-breaking]: https://github.com/semver/semver/issues/716#issuecomment-869336139
542
+ [📌major-versions-not-sacred]: https://tom.preston-werner.com/2022/05/23/major-version-numbers-are-not-sacred.html
543
+ [📌changelog]: https://github.com/galtzo-floss/month-serializer/blob/main/CHANGELOG.md
544
+ [📗keep-changelog]: https://keepachangelog.com/en/1.0.0/
545
+ [📗keep-changelog-img]: https://img.shields.io/badge/keep--a--changelog-1.0.0-34495e.svg?style=flat
546
+ [📌gitmoji]: https://gitmoji.dev
547
+ [📌gitmoji-img]: https://img.shields.io/badge/gitmoji_commits-%20%F0%9F%98%9C%20%F0%9F%98%8D-34495e.svg?style=flat-square
548
+ [🧮kloc]: https://www.youtube.com/watch?v=dQw4w9WgXcQ
549
+ [🧮kloc-img]: https://img.shields.io/badge/KLOC-0.040-FFDD67.svg?style=for-the-badge&logo=YouTube&logoColor=blue
550
+ [🔐security]: https://github.com/galtzo-floss/month-serializer/blob/main/SECURITY.md
551
+ [🔐security-img]: https://img.shields.io/badge/security-policy-259D6C.svg?style=flat
552
+ [📄copyright-notice-explainer]: https://opensource.stackexchange.com/questions/5778/why-do-licenses-such-as-the-mit-license-specify-a-single-year
553
+ [📄license]: LICENSE.md
554
+ [📄license-ref]: https://github.com/galtzo-floss/month-serializer/blob/main/MIT.md
555
+ [📄license-img]: https://img.shields.io/badge/License-MIT-259D6C.svg
556
+ [📄license-compat]: https://www.apache.org/legal/resolved.html#category-a
557
+ [📄license-compat-img]: https://img.shields.io/badge/Apache_Compatible:_Category_A-%E2%9C%93-259D6C.svg?style=flat&logo=Apache
558
+
559
+ [📄ilo-declaration]: https://www.ilo.org/declaration/lang--en/index.htm
560
+ [📄ilo-declaration-img]: https://img.shields.io/badge/ILO_Fundamental_Principles-✓-259D6C.svg?style=flat
561
+ [🚎yard-current]: http://rubydoc.info/gems/month-serializer
562
+ [🚎yard-head]: https://month-serializer.galtzo.com
563
+ [💎stone_checksums]: https://github.com/galtzo-floss/stone_checksums
564
+ [💎SHA_checksums]: https://gitlab.com/galtzo-floss/month-serializer/-/tree/main/checksums
565
+ [💎rlts]: https://github.com/rubocop-lts/rubocop-lts
566
+ [💎rlts-img]: https://img.shields.io/badge/code_style_&_linting-rubocop--lts-34495e.svg?plastic&logo=ruby&logoColor=white
567
+ [💎appraisal2]: https://github.com/appraisal-rb/appraisal2
568
+ [💎appraisal2-img]: https://img.shields.io/badge/appraised_by-appraisal2-34495e.svg?plastic&logo=ruby&logoColor=white
569
+ [💎d-in-dvcs]: https://railsbling.com/posts/dvcs/put_the_d_in_dvcs/
570
+
571
+ <!-- kettle-jem:metadata:start -->
572
+ | Field | Value |
573
+ |---|---|
574
+ | Package | month-serializer |
575
+ | Description | 🗓️ Serialize Month objects to Integer |
576
+ | Homepage | https://github.com/galtzo-floss/month-serializer |
577
+ | Source | https://github.com/galtzo-floss/month-serializer |
578
+ | License | `MIT` |
579
+ | Funding | https://github.com/sponsors/pboling, https://ko-fi.com/pboling, https://liberapay.com/pboling/donate, https://opencollective.com/galtzo-floss, https://thanks.dev/u/gh/pboling, https://tidelift.com/funding/github/rubygems/month-serializer, https://www.buymeacoffee.com/pboling |
580
+ <!-- kettle-jem:metadata:end -->