swifter_enum 0.9.0 → 0.9.1

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
  SHA256:
3
- metadata.gz: 4faeac3f2e6714d5af882726817712536924044c725a0aa252de4f0e89072f43
4
- data.tar.gz: 5c818c9815c9e4e5165475260ffd42b503b815ca7eb92307ea98a703b8c2a933
3
+ metadata.gz: 9b72cb72dc43be470b8170fd34843f2f2e7ddb4d64a2856c7094b63c0ba091e2
4
+ data.tar.gz: 791abe5497d7c623e9b5e5ef9554a00f2c242b74b4f0668e018d7cc7be2d0752
5
5
  SHA512:
6
- metadata.gz: 813389dc72d261ac9aa903484829009f8853ce4a0e6c017f8529996f2816858bdd13b4e5294f10b6a1c6dd93d3c1341e5c4e9a651f6b14712bf8fdddf49255a9
7
- data.tar.gz: 39941760574f2ac9438ab61537273ed593e0a813200169dcdb68f863251992b8973aada7f3b094ef0aeb6182e7f87fe5bd30d61303bbd643e5bb0313a7f0e1c5
6
+ metadata.gz: b4f5bf8eab4588d23098bf11bab794205369820c0b6900b7dfa9f2d51cc85d489af4a9007a807d65c392b313cfb1201249a12650e4674cc77ed682cbb52f305e
7
+ data.tar.gz: 0a6226463dd0041d3c4999813b483ca274af966d82665cb0b10c7385ea682012775d835196edd231f2400a542c63f14148da2abfab61c0fda825e2af9ab9e8f9
data/CHANGELOG.md CHANGED
@@ -1,5 +1,10 @@
1
- ## [Unreleased]
2
1
 
3
- ## [0.1.0] - 2024-01-22
2
+
3
+ ## [0.9.0] - 2024-03-10
4
4
 
5
5
  - Initial release
6
+
7
+
8
+ ## [0.9.1] - 2024-03-10
9
+
10
+ - Fix use of options to use current syntax. Use prefix: true, rather than _prefix: true
data/README.md CHANGED
@@ -1,9 +1,8 @@
1
1
  # SwifterEnum
2
2
 
3
3
  SwifterEnum is a Ruby gem for creating enumerated types (enums) in Ruby on Rails applications.
4
- It is inspired by Swift's enums, and allows for more expressive and feature-rich enums in your models.
5
4
 
6
- Rather than simply having a key/value, enums are Classes, and can have defined methods.
5
+ It is inspired by Swift's enums, and allows you to keep logic related to your enum directly in your enum class.
7
6
 
8
7
  so - after defining
9
8
 
@@ -14,7 +13,43 @@ so - after defining
14
13
  you can then define and access methods on your enum like
15
14
 
16
15
  `video.camera.icon`
17
- or `video.camera.default_exposure`
16
+
17
+ This avoids helper methods which distribute your enum logic around your application.
18
+
19
+ **Before**
20
+
21
+ helper method somewhere in the app
22
+
23
+ #app/helpers/controller_helper.rb
24
+
25
+ def icon_for(camera:)
26
+ ...
27
+ end
28
+
29
+ called with
30
+
31
+ icon_for(camera:my_model.camera)
32
+
33
+ **After**
34
+
35
+ logic encapsluated within the enum class
36
+
37
+ #app/models/swifter_enum/camera_enum.rb
38
+ class CameraEnum < SwifterEnum::Base
39
+ def self.values
40
+ { videographer: 0, handcam: 1 }.freeze
41
+ end
42
+
43
+ def icon
44
+ ...
45
+ end
46
+ end
47
+
48
+ called with
49
+
50
+ my_model.camera.icon
51
+
52
+ I was prompted to create this gem by reading about enum approaches in [the RailsNotes Newsletter](https://railsnotes.beehiiv.com/p/issue-17-enums-value-objects-field-guide-enum-sort-in-order-of). Like any good programmer, none of those solutions *quite* met my requirements. Hopefully it will be useful. I welcome feedback, fixes and pull requests.
18
53
 
19
54
 
20
55
  ## Installation
@@ -23,16 +58,14 @@ Add this line to your application's Gemfile:
23
58
 
24
59
  gem 'swifter_enum'
25
60
 
26
- And then execute:
27
-
28
- bundle install
29
-
30
61
  ## Usage
31
62
 
32
63
  ### Overview
33
64
 
34
65
 
35
- SwifterEnums act like a normal Rails enum - except that instead of returning symbol values, they return an instance of your selected class
66
+ SwifterEnums act like a normal Rails enum - except that instead of returning string values, they return an instance of your selected class.
67
+
68
+ They also have various affordances so that in many cases, you can treat them as if they return symbol values.
36
69
 
37
70
  We have a Video ActiveModel with an enum defined by
38
71
 
@@ -153,6 +186,8 @@ Now replace the definition in your model file with
153
186
 
154
187
  swifter_enum :album_status, AlbumStatusEnum, prefix: true
155
188
 
189
+ (note - prefix: optional. I'm adding it here because it was an option I used on my original standard Rails enum)
190
+
156
191
  Optionally, add
157
192
 
158
193
  validates :album_status, swifter_enum: true
data/Rakefile CHANGED
@@ -12,4 +12,35 @@ Rake::TestTask.new do |t|
12
12
  t.verbose = true
13
13
  end
14
14
 
15
+
16
+ # publish with rake release:publish
17
+ namespace :release do
18
+ desc "Read version, build gem, tag and push release"
19
+ task :publish do
20
+ # Read version
21
+ version_file_path = File.expand_path("../lib/swifter_enum/version.rb", __FILE__)
22
+ version_file_content = File.read(version_file_path)
23
+ version_match = version_file_content.match(/VERSION = "(\d+\.\d+\.\d+)"/)
24
+ unless version_match
25
+ puts "Version could not be found in #{version_file_path}"
26
+ exit 1
27
+ end
28
+ version = version_match[1]
29
+ gem_name = "swifter_enum-#{version}.gem"
30
+
31
+ # Build gem
32
+ Rake::Task["build"].invoke
33
+
34
+ # Git tag
35
+ system("git add .")
36
+ system("git commit -m 'Release version #{version}'")
37
+ system("git tag -a #{version} -m 'Version #{version} release'")
38
+ system("git push origin main --tags")
39
+
40
+ # Push gem to RubyGems
41
+ system("gem push pkg/#{gem_name}")
42
+ end
43
+ end
44
+
45
+
15
46
  task default: [:standard, :test]
@@ -5,8 +5,9 @@ module SwifterEnum
5
5
 
6
6
  class_methods do
7
7
  def swifter_enum(enum_name, enum_klass, enum_options = {})
8
+
8
9
  # Define the enum using values from the enum class
9
- enum(enum_name => enum_klass.values, **enum_options)
10
+ enum(enum_name, enum_klass.values, **enum_options)
10
11
 
11
12
  # Define getter method
12
13
  define_method(enum_name) do
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module SwifterEnum
4
- VERSION = "0.9.0"
4
+ VERSION = "0.9.1"
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: swifter_enum
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.0
4
+ version: 0.9.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Rob Jonson
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2024-03-09 00:00:00.000000000 Z
11
+ date: 2024-03-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord
@@ -80,10 +80,24 @@ dependencies:
80
80
  - - "~>"
81
81
  - !ruby/object:Gem::Version
82
82
  version: '5.22'
83
+ - !ruby/object:Gem::Dependency
84
+ name: debug
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
83
97
  description: Simple enum for active record that takes inspiration from Swift's enums
84
- to allow you to add logic to your enum definition. This is easy to drop-in as a
85
- replacement for regular rails enums, with minimal changes required. Once you switch,
86
- then you can easily extend your enums with methods.
98
+ to allow you to encapsulate enum logic within an enum class. This is easy to drop-in
99
+ as a replacement for regular rails enums, with minimal changes required. Once you
100
+ switch, then you can easily extend your enums with methods.
87
101
  email:
88
102
  - rob@hobbyistsoftware.com
89
103
  executables: []
@@ -104,7 +118,6 @@ files:
104
118
  - lib/swifter_enum/swifter_enum_validator.rb
105
119
  - lib/swifter_enum/version.rb
106
120
  - sig/swifter_enum.rbs
107
- - swifter_enum.gemspec
108
121
  homepage: https://github.com/ConfusedVorlon/SwifterEnum
109
122
  licenses:
110
123
  - MIT
data/swifter_enum.gemspec DELETED
@@ -1,45 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative "lib/swifter_enum/version"
4
-
5
- Gem::Specification.new do |spec|
6
- spec.name = "swifter_enum"
7
- spec.version = SwifterEnum::VERSION
8
- spec.authors = ["Rob Jonson"]
9
- spec.email = ["rob@hobbyistsoftware.com"]
10
-
11
- spec.summary = "Active Record enum that uses a class, so you can add methods."
12
- spec.description = "Simple enum for active record that takes inspiration from Swift's enums to allow you to add logic to your enum definition. This is easy to drop-in as a replacement for regular rails enums, with minimal changes required. Once you switch, then you can easily extend your enums with methods."
13
- spec.homepage = "https://github.com/ConfusedVorlon/SwifterEnum"
14
- spec.license = "MIT"
15
-
16
- #I'm using 3.2 and above. If you're willing/able to test on lower rubies, then please let me know and feel free to change this.
17
- spec.required_ruby_version = ">= 3.2.0"
18
-
19
- spec.metadata["homepage_uri"] = spec.homepage
20
- spec.metadata["source_code_uri"] = "https://github.com/ConfusedVorlon/SwifterEnum"
21
- spec.metadata["changelog_uri"] = "https://github.com/ConfusedVorlon/SwifterEnum"
22
-
23
- # Specify which files should be added to the gem when it is released.
24
- # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
25
- spec.files = Dir.chdir(__dir__) do
26
- `git ls-files -z`.split("\x0").reject do |f|
27
- (File.expand_path(f) == __FILE__) ||
28
- f.start_with?(*%w[bin/ test/ spec/ features/ .git appveyor Gemfile])
29
- end
30
- end
31
- spec.bindir = "exe"
32
- spec.executables = spec.files.grep(%r{\Aexe/}) { |f| File.basename(f) }
33
- spec.require_paths = ["lib"]
34
-
35
- spec.add_dependency "activerecord", "~> 7.0"
36
- spec.add_dependency "activesupport", "~> 7.0"
37
- spec.add_dependency "activemodel", "~> 7.0"
38
-
39
- # Specify development dependencies
40
- spec.add_development_dependency "sqlite3", "~> 1.4" # For using SQL
41
- spec.add_development_dependency "minitest", "~> 5.22"
42
-
43
- # For more information and examples about making a new gem, check out our
44
- # guide at: https://bundler.io/guides/creating_gem.html
45
- end