str_enum 0.1.4 → 0.3.0

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
- 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