str_enum 0.1.4 → 0.3.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
- SHA1:
3
- metadata.gz: c7a007594ea44a4ff3d3793df4cb9bdb3340bbde
4
- data.tar.gz: 839f233f5aeb3abd9ed3662063803b59f29783be
2
+ SHA256:
3
+ metadata.gz: 620b3321fd0fa64430af924b39bb0f07bfb3564868e7b56e5667b3df94f895f3
4
+ data.tar.gz: 5bf7bb0b10750e5134fef78fc9176f222f0d2d98abfabff2c6d969400fa589cb
5
5
  SHA512:
6
- metadata.gz: 131fc82a1bdf5f70d7611321c5b2c93d3ca2ab4d3274f9f16e37a58de98ea86d66048ab14c52b2d5cd4fa2dcc4b24c83eb613b96217c24bbc562c275c4f308db
7
- data.tar.gz: f1c2a90d1fe6bf60e321a6c0c7b7449427ef42797ee791403c52e7d6846e61ce6dc4dcd8c1cd594321b9c0724083ebbd7134e8626576aef263a807347f8cc050
6
+ metadata.gz: e9ced975c17b9bec4077dbdd7a0efc52bcf939c3579533656065001c98c77d374efcf22f330c891fd37f1df18c71e4f0fea987a09cfea8843d7401584ad6be94
7
+ data.tar.gz: 22de16567abcd58b9e8e5eb5e0e60fe5e68879e4c687c0bb574d3c0d925296118bacee4d00265368b81306984e8620f57ff3da639297be8921057195a454f904
data/CHANGELOG.md CHANGED
@@ -1,19 +1,37 @@
1
- ## 0.1.4
1
+ ## 0.3.0 (2022-01-10)
2
+
3
+ - Dropped support for Ruby < 2.6 and Active Record < 5.2
4
+
5
+ ## 0.2.0 (2019-10-28)
6
+
7
+ - Added negative scopes
8
+ - Moved presence validation message before inclusion message
9
+
10
+ ## 0.1.6 (2019-07-15)
11
+
12
+ - Added update methods
13
+
14
+ ## 0.1.5 (2016-12-12)
15
+
16
+ - Added `default` option
17
+ - Added ability to include manually
18
+
19
+ ## 0.1.4 (2016-10-28)
2
20
 
3
21
  - Fixed error with `select`
4
22
 
5
- ## 0.1.3
23
+ ## 0.1.3 (2016-10-24)
6
24
 
7
25
  - Added `suffix` option
8
26
 
9
- ## 0.1.2
27
+ ## 0.1.2 (2016-10-24)
10
28
 
11
29
  - Added method to list values
12
30
 
13
- ## 0.1.1
31
+ ## 0.1.1 (2016-10-23)
14
32
 
15
33
  - Added `prefix` option
16
34
 
17
- ## 0.1.0
35
+ ## 0.1.0 (2016-10-23)
18
36
 
19
37
  - First release
data/LICENSE.txt CHANGED
@@ -1,4 +1,4 @@
1
- Copyright (c) 2016 Andrew Kane
1
+ Copyright (c) 2016-2022 Andrew Kane
2
2
 
3
3
  MIT License
4
4
 
data/README.md CHANGED
@@ -7,13 +7,16 @@ String enums for Rails!! :tada:
7
7
  - scopes
8
8
  - validations
9
9
  - accessor methods
10
+ - update methods
11
+
12
+ [![Build Status](https://github.com/ankane/str_enum/workflows/build/badge.svg?branch=master)](https://github.com/ankane/str_enum/actions)
10
13
 
11
14
  ## Getting Started
12
15
 
13
16
  Add this line to your application’s Gemfile:
14
17
 
15
18
  ```ruby
16
- gem 'str_enum'
19
+ gem "str_enum"
17
20
  ```
18
21
 
19
22
  Add a string column to your model.
@@ -39,6 +42,13 @@ User.active
39
42
  User.archived
40
43
  ```
41
44
 
45
+ And negative scopes
46
+
47
+ ```ruby
48
+ User.not_active
49
+ User.not_archived
50
+ ```
51
+
42
52
  #### Validations
43
53
 
44
54
  ```ruby
@@ -53,6 +63,13 @@ user.active?
53
63
  user.archived?
54
64
  ```
55
65
 
66
+ #### Update Methods
67
+
68
+ ```ruby
69
+ user.active!
70
+ user.archived!
71
+ ```
72
+
56
73
  #### Forms
57
74
 
58
75
  ```erb
@@ -65,7 +82,12 @@ Choose which features you want with:
65
82
 
66
83
  ```ruby
67
84
  class User < ActiveRecord::Base
68
- str_enum :status, [:active, :archived], scopes: false, validate: false, accessor_methods: false
85
+ str_enum :status, [:active, :archived],
86
+ scopes: false,
87
+ validate: false,
88
+ accessor_methods: false,
89
+ update_methods: false,
90
+ default: nil
69
91
  end
70
92
  ```
71
93
 
@@ -83,6 +105,10 @@ User.archived_address
83
105
  # accessor methods
84
106
  user.active_address?
85
107
  user.archived_address?
108
+
109
+ # update methods
110
+ user.active_address!
111
+ user.archived_address!
86
112
  ```
87
113
 
88
114
  ## History
@@ -97,3 +123,12 @@ Everyone is encouraged to help improve this project. Here are a few ways you can
97
123
  - Fix bugs and [submit pull requests](https://github.com/ankane/str_enum/pulls)
98
124
  - Write, clarify, or fix documentation
99
125
  - Suggest or add new features
126
+
127
+ To get started with development and testing:
128
+
129
+ ```sh
130
+ git clone https://github.com/ankane/str_enum.git
131
+ cd str_enum
132
+ bundle install
133
+ bundle exec rake test
134
+ ```
@@ -0,0 +1,49 @@
1
+ require "active_support/concern"
2
+
3
+ module StrEnum
4
+ module Model
5
+ extend ActiveSupport::Concern
6
+
7
+ class_methods do
8
+ def str_enum(column, values, validate: true, scopes: true, accessor_methods: true, update_methods: true, prefix: false, suffix: false, default: true, allow_nil: false)
9
+ values = values.map(&:to_s)
10
+ if validate
11
+ validate_options = {}
12
+ if allow_nil
13
+ validate_options[:allow_nil] = true
14
+ else
15
+ validate_options[:presence] = true
16
+ end
17
+ validate_options[:inclusion] = {in: values}
18
+ validates column, validate_options
19
+ end
20
+ values.each do |value|
21
+ prefix = column if prefix == true
22
+ suffix = column if suffix == true
23
+ method_name = [prefix, value, suffix].select { |v| v }.join("_")
24
+ if scopes
25
+ scope method_name, -> { where(column => value) } unless respond_to?(method_name)
26
+ scope "not_#{method_name}", -> { where.not(column => value) } unless respond_to?("not_#{method_name}")
27
+ end
28
+ if accessor_methods && !method_defined?("#{method_name}?")
29
+ define_method "#{method_name}?" do
30
+ read_attribute(column) == value
31
+ end
32
+ end
33
+ if update_methods && !method_defined?("#{method_name}!")
34
+ define_method "#{method_name}!" do
35
+ update!(column => value)
36
+ end
37
+ end
38
+ end
39
+ default_value = default == true ? values.first : default
40
+ after_initialize do
41
+ send("#{column}=", default_value) unless try(column)
42
+ end
43
+ define_singleton_method column.to_s.pluralize do
44
+ values
45
+ end
46
+ end
47
+ end
48
+ end
49
+ end
@@ -1,3 +1,3 @@
1
1
  module StrEnum
2
- VERSION = "0.1.4"
2
+ VERSION = "0.3.0"
3
3
  end
data/lib/str_enum.rb CHANGED
@@ -1,30 +1,10 @@
1
- require "str_enum/version"
1
+ # dependencies
2
2
  require "active_support"
3
3
 
4
- module StrEnum
5
- def str_enum(column, values, validate: true, scopes: true, accessor_methods: true, prefix: false, suffix: false)
6
- values = values.map(&:to_s)
7
- validates column, presence: true, inclusion: {in: values} if validate
8
- values.each do |value|
9
- prefix = column if prefix == true
10
- suffix = column if suffix == true
11
- method_name = [prefix, value, suffix].select { |v| v }.join("_")
12
- scope method_name, -> { where(column => value) } if scopes && !respond_to?(method_name)
13
- if accessor_methods && !method_defined?("#{method_name}?")
14
- define_method "#{method_name}?" do
15
- read_attribute(column) == value
16
- end
17
- end
18
- end
19
- after_initialize do
20
- send("#{column}=", values.first) unless try(column)
21
- end
22
- define_singleton_method column.to_s.pluralize do
23
- values
24
- end
25
- end
26
- end
4
+ # modules
5
+ require "str_enum/model"
6
+ require "str_enum/version"
27
7
 
28
8
  ActiveSupport.on_load(:active_record) do
29
- extend(StrEnum)
9
+ include StrEnum::Model
30
10
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: str_enum
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.4
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrew Kane
8
- autorequire:
9
- bindir: exe
8
+ autorequire:
9
+ bindir: bin
10
10
  cert_chain: []
11
- date: 2016-10-29 00:00:00.000000000 Z
11
+ date: 2022-01-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -16,76 +16,31 @@ dependencies:
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: '0'
19
+ version: '5.2'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: '0'
27
- - !ruby/object:Gem::Dependency
28
- name: bundler
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - ">="
32
- - !ruby/object:Gem::Version
33
- version: '0'
34
- type: :development
35
- prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - ">="
39
- - !ruby/object:Gem::Version
40
- version: '0'
41
- - !ruby/object:Gem::Dependency
42
- name: rake
43
- requirement: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - ">="
46
- - !ruby/object:Gem::Version
47
- version: '0'
48
- type: :development
49
- prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - ">="
53
- - !ruby/object:Gem::Version
54
- version: '0'
55
- - !ruby/object:Gem::Dependency
56
- name: minitest
57
- requirement: !ruby/object:Gem::Requirement
58
- requirements:
59
- - - ">="
60
- - !ruby/object:Gem::Version
61
- version: '0'
62
- type: :development
63
- prerelease: false
64
- version_requirements: !ruby/object:Gem::Requirement
65
- requirements:
66
- - - ">="
67
- - !ruby/object:Gem::Version
68
- version: '0'
69
- description:
70
- email:
71
- - andrew@chartkick.com
26
+ version: '5.2'
27
+ description:
28
+ email: andrew@ankane.org
72
29
  executables: []
73
30
  extensions: []
74
31
  extra_rdoc_files: []
75
32
  files:
76
- - ".gitignore"
77
33
  - CHANGELOG.md
78
- - Gemfile
79
34
  - LICENSE.txt
80
35
  - README.md
81
- - Rakefile
82
36
  - lib/str_enum.rb
37
+ - lib/str_enum/model.rb
83
38
  - lib/str_enum/version.rb
84
- - str_enum.gemspec
85
39
  homepage: https://github.com/ankane/str_enum
86
- licenses: []
40
+ licenses:
41
+ - MIT
87
42
  metadata: {}
88
- post_install_message:
43
+ post_install_message:
89
44
  rdoc_options: []
90
45
  require_paths:
91
46
  - lib
@@ -93,16 +48,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
93
48
  requirements:
94
49
  - - ">="
95
50
  - !ruby/object:Gem::Version
96
- version: '0'
51
+ version: '2.6'
97
52
  required_rubygems_version: !ruby/object:Gem::Requirement
98
53
  requirements:
99
54
  - - ">="
100
55
  - !ruby/object:Gem::Version
101
56
  version: '0'
102
57
  requirements: []
103
- rubyforge_project:
104
- rubygems_version: 2.5.1
105
- signing_key:
58
+ rubygems_version: 3.3.3
59
+ signing_key:
106
60
  specification_version: 4
107
61
  summary: String enums for Rails
108
62
  test_files: []
data/.gitignore DELETED
@@ -1,9 +0,0 @@
1
- /.bundle/
2
- /.yardoc
3
- /Gemfile.lock
4
- /_yardoc/
5
- /coverage/
6
- /doc/
7
- /pkg/
8
- /spec/reports/
9
- /tmp/
data/Gemfile DELETED
@@ -1,7 +0,0 @@
1
- source "https://rubygems.org"
2
-
3
- # Specify your gem's dependencies in str_enum.gemspec
4
- gemspec
5
-
6
- gem "activerecord", "~> 5.0.0"
7
- gem "sqlite3"
data/Rakefile DELETED
@@ -1,10 +0,0 @@
1
- require "bundler/gem_tasks"
2
- require "rake/testtask"
3
-
4
- Rake::TestTask.new(:test) do |t|
5
- t.libs << "test"
6
- t.libs << "lib"
7
- t.test_files = FileList["test/**/*_test.rb"]
8
- end
9
-
10
- task default: :test
data/str_enum.gemspec DELETED
@@ -1,25 +0,0 @@
1
- # coding: utf-8
2
- lib = File.expand_path("../lib", __FILE__)
3
- $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
- require "str_enum/version"
5
-
6
- Gem::Specification.new do |spec|
7
- spec.name = "str_enum"
8
- spec.version = StrEnum::VERSION
9
- spec.authors = ["Andrew Kane"]
10
- spec.email = ["andrew@chartkick.com"]
11
-
12
- spec.summary = "String enums for Rails"
13
- spec.homepage = "https://github.com/ankane/str_enum"
14
-
15
- spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
16
- spec.bindir = "exe"
17
- spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
18
- spec.require_paths = ["lib"]
19
-
20
- spec.add_dependency "activesupport"
21
-
22
- spec.add_development_dependency "bundler"
23
- spec.add_development_dependency "rake"
24
- spec.add_development_dependency "minitest"
25
- end