simple_enumeration 0.2.1 → 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
2
  SHA256:
3
- metadata.gz: 9f607cb4dec057ddd252e3cbe5a59c1d8cb785dc45ce18edeaf00bf5d6506dd9
4
- data.tar.gz: 872b7be3fc3ca5d2a2aaede66330c619e342338e59f37bb930c8cfd5d28d8df5
3
+ metadata.gz: ec872ff72f5493bf9a559f6389c2fe334afacd8e0ede01a70f3d3d5bb021d7de
4
+ data.tar.gz: aac86cd8fa4d5421d4a0a95ef15ae8e69ea8e65107b0f3f3a2f5764e483077c3
5
5
  SHA512:
6
- metadata.gz: 88b6b07d6ebb1f9124d117033df3ad0e47c9da9c019281e3baa213f95f41de8fc866b5bebe105a52c6ba24e7b19730fd93281b6501426310c78ef7c939f243cf
7
- data.tar.gz: 585579183a525ab76a0f0d64bda899b0812c92edcfcf6d6acc4eca17b700fac99193c00407c1610b662021e286e364c4b0553e0bc1e0fc0eb8ffa5a76afdb9c2
6
+ metadata.gz: 5768db3946b101fb91677ba1b66ed8ee7be592e0009e72d2606a172f2e0e5ecdddd12488cac4507b25282b8d48be89cfbcea7b7d5ca41afa4ee9edfd3df8b502
7
+ data.tar.gz: da4892021ce865eac7f5ea81277df579774ac656cd1f68f1b44b2507828c402995a5bb49cd5c8ed9aca62aa5cf9390263bf4e2cd372fb79fa6f4539a318933b3
@@ -0,0 +1,6 @@
1
+ version: 2
2
+ updates:
3
+ - package-ecosystem: "bundler"
4
+ directory: "/"
5
+ schedule:
6
+ interval: "daily"
@@ -5,12 +5,17 @@ on: [push,pull_request]
5
5
  jobs:
6
6
  build:
7
7
  runs-on: ubuntu-latest
8
+ strategy:
9
+ fail-fast: false
10
+ matrix:
11
+ ruby:
12
+ - "2.7"
8
13
  steps:
9
14
  - uses: actions/checkout@v2
10
15
  - name: Set up Ruby
11
16
  uses: ruby/setup-ruby@v1
12
17
  with:
13
- ruby-version: 3.0.2
18
+ ruby-version: ${{matrix.ruby}}
14
19
  bundler-cache: true
15
20
  - name: Run rubocop
16
21
  run: bundle exec rake rubocop
@@ -5,12 +5,19 @@ on: [push,pull_request]
5
5
  jobs:
6
6
  build:
7
7
  runs-on: ubuntu-latest
8
+ strategy:
9
+ fail-fast: false
10
+ matrix:
11
+ ruby:
12
+ - "3.1"
13
+ - "3.0"
14
+ - "2.7"
8
15
  steps:
9
16
  - uses: actions/checkout@v2
10
17
  - name: Set up Ruby
11
18
  uses: ruby/setup-ruby@v1
12
19
  with:
13
- ruby-version: 3.0.2
20
+ ruby-version: ${{matrix.ruby}}
14
21
  bundler-cache: true
15
22
  - name: Run specs
16
23
  run: bundle exec rake spec
data/.rubocop.yml CHANGED
@@ -4,6 +4,7 @@ require:
4
4
 
5
5
  AllCops:
6
6
  NewCops: enable
7
+ TargetRubyVersion: 2.7
7
8
 
8
9
  Layout/LineLength:
9
10
  Max: 150
data/CHANGELOG.md CHANGED
@@ -4,12 +4,20 @@ All notable changes to this project will be documented in this file.
4
4
 
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
6
6
 
7
+ ## [0.3.0] - 2022-01-08
8
+
9
+ ### Removed
10
+ - Removed dry and active-support dependencies
11
+
12
+ ### Added
13
+ - Added Ruby 3.1.0 to specs matrix
14
+
7
15
  ## [0.2.1] - 2021-10-28
8
16
 
9
17
  ### Added
10
- - Fill gem summary and description
11
- - Fill "Usage" section in readme
12
- - Add new model definiton using `define_simple_enumeration` method
18
+ - Filled gem summary and description
19
+ - Filled "Usage" section in readme
20
+ - Added new model definiton using `define_simple_enumeration` method
13
21
 
14
22
  ## [0.2.0] - 2021-10-27
15
23
 
data/Gemfile.lock CHANGED
@@ -2,40 +2,27 @@ PATH
2
2
  remote: .
3
3
  specs:
4
4
  simple_enumeration (0.2.1)
5
- activesupport
6
- callee
7
- dry-initializer
8
5
  i18n
9
6
 
10
7
  GEM
11
8
  remote: https://rubygems.org/
12
9
  specs:
13
- activesupport (6.1.4.1)
14
- concurrent-ruby (~> 1.0, >= 1.0.2)
15
- i18n (>= 1.6, < 2)
16
- minitest (>= 5.1)
17
- tzinfo (~> 2.0)
18
- zeitwerk (~> 2.3)
19
10
  ast (2.4.2)
20
- callee (0.3.5)
21
- dry-initializer (>= 2.5, < 4.0)
22
11
  coderay (1.1.3)
23
12
  concurrent-ruby (1.1.9)
24
13
  diff-lcs (1.4.4)
25
- dry-initializer (3.0.4)
26
- i18n (1.8.10)
14
+ i18n (1.8.11)
27
15
  concurrent-ruby (~> 1.0)
28
16
  method_source (1.0.0)
29
- minitest (5.14.4)
30
17
  parallel (1.21.0)
31
- parser (3.0.2.0)
18
+ parser (3.1.0.0)
32
19
  ast (~> 2.4.1)
33
20
  pry (0.14.1)
34
21
  coderay (~> 1.1)
35
22
  method_source (~> 1.0)
36
23
  rainbow (3.0.0)
37
24
  rake (13.0.6)
38
- regexp_parser (2.1.1)
25
+ regexp_parser (2.2.0)
39
26
  rexml (3.2.5)
40
27
  rspec (3.10.0)
41
28
  rspec-core (~> 3.10.0)
@@ -50,32 +37,30 @@ GEM
50
37
  diff-lcs (>= 1.2.0, < 2.0)
51
38
  rspec-support (~> 3.10.0)
52
39
  rspec-support (3.10.2)
53
- rubocop (1.22.2)
40
+ rubocop (1.24.1)
54
41
  parallel (~> 1.10)
55
42
  parser (>= 3.0.0.0)
56
43
  rainbow (>= 2.2.2, < 4.0)
57
44
  regexp_parser (>= 1.8, < 3.0)
58
45
  rexml
59
- rubocop-ast (>= 1.12.0, < 2.0)
46
+ rubocop-ast (>= 1.15.1, < 2.0)
60
47
  ruby-progressbar (~> 1.7)
61
48
  unicode-display_width (>= 1.4.0, < 3.0)
62
- rubocop-ast (1.12.0)
49
+ rubocop-ast (1.15.1)
63
50
  parser (>= 3.0.1.1)
64
- rubocop-performance (1.11.5)
51
+ rubocop-performance (1.13.1)
65
52
  rubocop (>= 1.7.0, < 2.0)
66
53
  rubocop-ast (>= 0.4.0)
67
54
  rubocop-rake (0.6.0)
68
55
  rubocop (~> 1.0)
69
- rubocop-rspec (2.5.0)
56
+ rubocop-rspec (2.7.0)
70
57
  rubocop (~> 1.19)
71
58
  ruby-progressbar (1.11.0)
72
- tzinfo (2.0.4)
73
- concurrent-ruby (~> 1.0)
74
59
  unicode-display_width (2.1.0)
75
- zeitwerk (2.5.1)
76
60
 
77
61
  PLATFORMS
78
62
  x86_64-darwin-20
63
+ x86_64-darwin-21
79
64
  x86_64-linux
80
65
 
81
66
  DEPENDENCIES
data/README.md CHANGED
@@ -224,7 +224,7 @@ The I18n strings are located on `simple_enumeration.<enumeration_name>.<value>.t
224
224
  ```yaml
225
225
  pl:
226
226
  simple_enumeration:
227
- payments_status:
227
+ payment_status:
228
228
  unpaid:
229
229
  text: "Nieopłacone"
230
230
  color: yellow
@@ -2,12 +2,14 @@
2
2
 
3
3
  module SimpleEnumeration
4
4
  class Collection
5
- extend Dry::Initializer
6
-
7
5
  MissingTypeError = Class.new(StandardError)
8
6
 
9
- option :name
10
- option :types, default: proc { {} }
7
+ attr_reader :name, :types
8
+
9
+ def initialize(name:, types: {})
10
+ @name = name
11
+ @types = types
12
+ end
11
13
 
12
14
  METHOD_NAME_SUFFIX = '_collection'
13
15
  VALUE_METHOD_NAME_SUFFIX = '_collection_values'
@@ -16,23 +18,23 @@ module SimpleEnumeration
16
18
  HUMANIZED_METHOD_NAME_SUFFIX = '_collection_humanized'
17
19
 
18
20
  def self.collection_name_from_method_name(method_name)
19
- method_name.to_s.remove(METHOD_NAME_SUFFIX)
21
+ method_name.to_s.gsub(METHOD_NAME_SUFFIX, '')
20
22
  end
21
23
 
22
24
  def self.collection_name_from_value_method_name(method_name)
23
- method_name.to_s.remove(VALUE_METHOD_NAME_SUFFIX)
25
+ method_name.to_s.gsub(VALUE_METHOD_NAME_SUFFIX, '')
24
26
  end
25
27
 
26
28
  def self.collection_name_from_value_predicate_method_name(method_name)
27
- method_name.to_s.remove(VALUE_PREDICATE_METHOD_NAME_SUFFIX)
29
+ method_name.to_s.gsub(VALUE_PREDICATE_METHOD_NAME_SUFFIX, '')
28
30
  end
29
31
 
30
32
  def self.collection_name_from_for_select_method_name(method_name)
31
- method_name.to_s.remove(FOR_SELECT_METHOD_NAME_SUFFIX)
33
+ method_name.to_s.gsub(FOR_SELECT_METHOD_NAME_SUFFIX, '')
32
34
  end
33
35
 
34
36
  def self.collection_name_from_humanized_method_name(method_name)
35
- method_name.to_s.remove(HUMANIZED_METHOD_NAME_SUFFIX)
37
+ method_name.to_s.gsub(HUMANIZED_METHOD_NAME_SUFFIX, '')
36
38
  end
37
39
 
38
40
  def method_name
@@ -2,10 +2,16 @@
2
2
 
3
3
  module SimpleEnumeration
4
4
  class CollectionMethodsDefiner
5
- include Callee
5
+ attr_reader :enum_class, :collection
6
6
 
7
- option :enum_class
8
- option :collection
7
+ def initialize(enum_class:, collection:)
8
+ @enum_class = enum_class
9
+ @collection = collection
10
+ end
11
+
12
+ def self.call(*params, **options, &block)
13
+ new(*params, **options).call(&block)
14
+ end
9
15
 
10
16
  def call
11
17
  set_collection
@@ -3,14 +3,19 @@
3
3
  module SimpleEnumeration
4
4
  module Collections
5
5
  class BasicFactory
6
- include Callee
6
+ attr_reader :enum_class, :definitions
7
7
 
8
- option :enum_class
9
- option :collection_name, default: proc { :basic }
10
- option :definitions
8
+ def initialize(enum_class:, definitions:)
9
+ @enum_class = enum_class
10
+ @definitions = definitions
11
+ end
12
+
13
+ def self.call(*params, **options, &block)
14
+ new(*params, **options).call(&block)
15
+ end
11
16
 
12
17
  def call
13
- collection = Collection.new(name: collection_name)
18
+ collection = Collection.new(name: :basic)
14
19
 
15
20
  CollectionMethodsDefiner.call(enum_class: enum_class, collection: collection)
16
21
 
@@ -3,11 +3,17 @@
3
3
  module SimpleEnumeration
4
4
  module Collections
5
5
  class CustomFactory
6
- include Callee
6
+ attr_reader :enum_class, :collection_name, :types
7
7
 
8
- option :enum_class
9
- option :collection_name
10
- option :types
8
+ def initialize(enum_class:, collection_name:, types:)
9
+ @enum_class = enum_class
10
+ @collection_name = collection_name
11
+ @types = types
12
+ end
13
+
14
+ def self.call(*params, **options, &block)
15
+ new(*params, **options).call(&block)
16
+ end
11
17
 
12
18
  def call
13
19
  collection = Collection.new(name: collection_name)
@@ -3,11 +3,19 @@
3
3
  module SimpleEnumeration
4
4
  module DefineSimpleEnumeration
5
5
  def define_simple_enumeration(attribute, options = {})
6
- enum_class = options[:with] || const_get([attribute.to_s.camelcase, 'Enumeration'].join)
6
+ enum_class_name = options[:with] || enum_class_name_for(attribute)
7
+ enum_class = const_get(enum_class_name)
7
8
 
8
9
  define_method "#{attribute}_enumeration" do
9
10
  enum_class.new(converted_value: send(attribute))
10
11
  end
11
12
  end
13
+
14
+ def enum_class_name_for(attribute)
15
+ [
16
+ SimpleEnumeration.camelcase(attribute.to_s),
17
+ 'Enumeration'
18
+ ].join
19
+ end
12
20
  end
13
21
  end
@@ -2,9 +2,18 @@
2
2
 
3
3
  module SimpleEnumeration
4
4
  class Entity
5
- extend Dry::Initializer
5
+ attr_reader :converted_value
6
6
 
7
- option :converted_value
7
+ def initialize(converted_value:)
8
+ @converted_value = converted_value
9
+ end
10
+
11
+ def self.i18n_scope
12
+ [
13
+ 'simple_enumeration',
14
+ SimpleEnumeration.underscore(name.gsub('Enumeration', ''))
15
+ ].join('.')
16
+ end
8
17
 
9
18
  def self.define_basic_collection(*definitions)
10
19
  Collections::BasicFactory.call(
@@ -2,12 +2,14 @@
2
2
 
3
3
  module SimpleEnumeration
4
4
  class Type
5
- extend Dry::Initializer
5
+ attr_reader :definition, :value, :converted_value, :enum_class
6
6
 
7
- option :definition
8
- option :value
9
- option :converted_value
10
- option :enum_class
7
+ def initialize(definition:, value:, converted_value:, enum_class:)
8
+ @definition = definition
9
+ @value = value
10
+ @converted_value = converted_value
11
+ @enum_class = enum_class
12
+ end
11
13
 
12
14
  VALUE_METHOD_NAME_SUFFIX = '_value'
13
15
  VALUE_PREDICATE_METHOD_NAME_SUFFIX = '_value?'
@@ -17,11 +19,11 @@ module SimpleEnumeration
17
19
  end
18
20
 
19
21
  def self.type_value_for_value_method_name(method_name)
20
- method_name.to_s.remove(VALUE_METHOD_NAME_SUFFIX)
22
+ method_name.to_s.gsub(VALUE_METHOD_NAME_SUFFIX, '')
21
23
  end
22
24
 
23
25
  def self.type_value_for_value_predicate_method_name(method_name)
24
- method_name.to_s.remove(VALUE_PREDICATE_METHOD_NAME_SUFFIX)
26
+ method_name.to_s.gsub(VALUE_PREDICATE_METHOD_NAME_SUFFIX, '')
25
27
  end
26
28
 
27
29
  def method_name
@@ -52,10 +54,7 @@ module SimpleEnumeration
52
54
  I18n.t(
53
55
  value,
54
56
  raise: true,
55
- scope: [
56
- 'simple_enumeration',
57
- enum_class.name.remove('Enumeration').underscore
58
- ].join('.')
57
+ scope: enum_class.i18n_scope
59
58
  )
60
59
  end
61
60
  end
@@ -2,10 +2,16 @@
2
2
 
3
3
  module SimpleEnumeration
4
4
  class TypeBuilder
5
- include Callee
5
+ attr_reader :enum_class, :definition
6
6
 
7
- option :enum_class
8
- option :definition
7
+ def initialize(enum_class:, definition:)
8
+ @enum_class = enum_class
9
+ @definition = definition
10
+ end
11
+
12
+ def self.call(*params, **options, &block)
13
+ new(*params, **options).call(&block)
14
+ end
9
15
 
10
16
  def call
11
17
  factory_klass.call(
@@ -2,11 +2,17 @@
2
2
 
3
3
  module SimpleEnumeration
4
4
  class TypeMethodsDefiner
5
- include Callee
5
+ attr_reader :enum_class, :collection, :type
6
6
 
7
- option :enum_class
8
- option :collection
9
- option :type
7
+ def initialize(enum_class:, collection:, type:)
8
+ @enum_class = enum_class
9
+ @collection = collection
10
+ @type = type
11
+ end
12
+
13
+ def self.call(*params, **options, &block)
14
+ new(*params, **options).call(&block)
15
+ end
10
16
 
11
17
  def call
12
18
  define_singleton_type_method
@@ -3,10 +3,16 @@
3
3
  module SimpleEnumeration
4
4
  module Types
5
5
  class BaseFactory
6
- include Callee
6
+ attr_reader :enum_class, :definition
7
7
 
8
- option :definition
9
- option :enum_class
8
+ def initialize(enum_class:, definition:)
9
+ @enum_class = enum_class
10
+ @definition = definition
11
+ end
12
+
13
+ def self.call(*params, **options, &block)
14
+ new(*params, **options).call(&block)
15
+ end
10
16
 
11
17
  def call
12
18
  Type.new(
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module SimpleEnumeration
4
- VERSION = '0.2.1'
4
+ VERSION = '0.3.0'
5
5
  end
@@ -1,9 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'active_support/core_ext/string/filters'
4
- require 'active_support/core_ext/string/inflections'
5
- require 'callee'
6
- require 'dry/initializer'
7
3
  require 'i18n'
8
4
 
9
5
  require_relative 'simple_enumeration/version'
@@ -24,4 +20,19 @@ module SimpleEnumeration
24
20
  def self.extended(receiver)
25
21
  receiver.extend DefineSimpleEnumeration
26
22
  end
23
+
24
+ def self.camelcase(string)
25
+ string.split('_').map do |w|
26
+ w[0] = w[0].upcase
27
+ w
28
+ end.join
29
+ end
30
+
31
+ def self.underscore(string)
32
+ string
33
+ .gsub('::', '/')
34
+ .gsub(/([A-Z]+)([A-Z][a-z])/, '\1_\2')
35
+ .gsub(/([a-z\d])([A-Z])/, '\1_\2')
36
+ .downcase
37
+ end
27
38
  end
@@ -16,11 +16,12 @@ Gem::Specification.new do |spec|
16
16
 
17
17
  spec.homepage = 'https://github.com/norbertmaleckii/simple-enumeration-rb'
18
18
  spec.license = 'MIT'
19
- spec.required_ruby_version = '>= 2.5.0'
19
+ spec.required_ruby_version = '>= 2.7.0'
20
20
 
21
21
  spec.metadata['homepage_uri'] = spec.homepage
22
22
  spec.metadata['source_code_uri'] = spec.homepage
23
23
  spec.metadata['changelog_uri'] = "#{spec.homepage}/CHANGELOG.md"
24
+ spec.metadata['rubygems_mfa_required'] = 'true'
24
25
 
25
26
  # Specify which files should be added to the gem when it is released.
26
27
  # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
@@ -32,9 +33,6 @@ Gem::Specification.new do |spec|
32
33
  spec.executables = spec.files.grep(%r{\Aexe/}) { |f| File.basename(f) }
33
34
  spec.require_paths = ['lib']
34
35
 
35
- spec.add_dependency 'activesupport'
36
- spec.add_dependency 'callee'
37
- spec.add_dependency 'dry-initializer'
38
36
  spec.add_dependency 'i18n'
39
37
 
40
38
  spec.add_development_dependency 'pry'
metadata CHANGED
@@ -1,57 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: simple_enumeration
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Norbert Małecki
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-10-28 00:00:00.000000000 Z
11
+ date: 2022-01-08 00:00:00.000000000 Z
12
12
  dependencies:
13
- - !ruby/object:Gem::Dependency
14
- name: activesupport
15
- requirement: !ruby/object:Gem::Requirement
16
- requirements:
17
- - - ">="
18
- - !ruby/object:Gem::Version
19
- version: '0'
20
- type: :runtime
21
- prerelease: false
22
- version_requirements: !ruby/object:Gem::Requirement
23
- requirements:
24
- - - ">="
25
- - !ruby/object:Gem::Version
26
- version: '0'
27
- - !ruby/object:Gem::Dependency
28
- name: callee
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - ">="
32
- - !ruby/object:Gem::Version
33
- version: '0'
34
- type: :runtime
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: dry-initializer
43
- requirement: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - ">="
46
- - !ruby/object:Gem::Version
47
- version: '0'
48
- type: :runtime
49
- prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - ">="
53
- - !ruby/object:Gem::Version
54
- version: '0'
55
13
  - !ruby/object:Gem::Dependency
56
14
  name: i18n
57
15
  requirement: !ruby/object:Gem::Requirement
@@ -89,6 +47,7 @@ executables: []
89
47
  extensions: []
90
48
  extra_rdoc_files: []
91
49
  files:
50
+ - ".github/dependabot.yml"
92
51
  - ".github/workflows/lint.yml"
93
52
  - ".github/workflows/specs.yml"
94
53
  - ".gitignore"
@@ -126,6 +85,7 @@ metadata:
126
85
  homepage_uri: https://github.com/norbertmaleckii/simple-enumeration-rb
127
86
  source_code_uri: https://github.com/norbertmaleckii/simple-enumeration-rb
128
87
  changelog_uri: https://github.com/norbertmaleckii/simple-enumeration-rb/CHANGELOG.md
88
+ rubygems_mfa_required: 'true'
129
89
  post_install_message:
130
90
  rdoc_options: []
131
91
  require_paths:
@@ -134,14 +94,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
134
94
  requirements:
135
95
  - - ">="
136
96
  - !ruby/object:Gem::Version
137
- version: 2.5.0
97
+ version: 2.7.0
138
98
  required_rubygems_version: !ruby/object:Gem::Requirement
139
99
  requirements:
140
100
  - - ">="
141
101
  - !ruby/object:Gem::Version
142
102
  version: '0'
143
103
  requirements: []
144
- rubygems_version: 3.2.22
104
+ rubygems_version: 3.3.3
145
105
  signing_key:
146
106
  specification_version: 4
147
107
  summary: Enumerations system for Ruby with awesome features!