sti_type_customizable 0.4.0 → 0.5.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 +5 -5
- data/.gitignore +1 -0
- data/README.md +14 -8
- data/lib/sti_type_customizable.rb +9 -15
- data/lib/sti_type_customizable/definition.rb +29 -0
- data/lib/sti_type_customizable/version.rb +1 -1
- data/sti_type_customizable.gemspec +1 -1
- metadata +6 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 7dcc03b41655bdb470806fe3cda60da630378b01d8f3b27505a6d870799bba09
|
4
|
+
data.tar.gz: 04f067e28c901941bb27330be3e0b5ee8f00296118e015bd82da61647dfdc722
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7122771fdfe9cda41926b851415859bf8b2998773302491a04193d3eff78b1ddd4f88ccd8070404b022b534e44acd5474feacc660c5dcd8583e1cea67e5cd7c9
|
7
|
+
data.tar.gz: b64e57752fdacd5619843da4cb2ba6b37032c0620b7393a00d8f8c3c1ef81ed90481c281b69a72922d95b2fc7102db79c681df98870bd9da6d879298f4e7cda4
|
data/.gitignore
CHANGED
data/README.md
CHANGED
@@ -36,26 +36,32 @@ class ErrorMessage < Message
|
|
36
36
|
end
|
37
37
|
```
|
38
38
|
|
39
|
-
|
40
39
|
- type to integer sample
|
41
40
|
|
42
41
|
```ruby
|
43
|
-
# type: 0
|
44
42
|
class Message < ActiveRecord::Base
|
45
43
|
include StiTypeCustomizable
|
46
|
-
|
47
|
-
|
44
|
+
|
45
|
+
self.sti_resolver = Resolver.new
|
48
46
|
end
|
49
47
|
|
50
|
-
# type: 1
|
51
48
|
class WarningMessage < Message
|
52
|
-
self.sti_type_value = 1
|
53
49
|
end
|
54
50
|
|
55
|
-
# type: 2
|
56
51
|
class ErrorMessage < Message
|
57
|
-
self.sti_type_value = 2
|
58
52
|
end
|
53
|
+
|
54
|
+
class Resolver
|
55
|
+
include StiTypeCustomizable::Resolver
|
56
|
+
|
57
|
+
def definitions
|
58
|
+
@definitions ||= {
|
59
|
+
warning_message: 1,
|
60
|
+
error_message: 2
|
61
|
+
}
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
59
65
|
```
|
60
66
|
|
61
67
|
## Development
|
@@ -1,34 +1,28 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
require "sti_type_customizable/version"
|
3
|
-
require "
|
3
|
+
require "sti_type_customizable/definition"
|
4
|
+
|
5
|
+
require "active_support"
|
6
|
+
require "active_support/core_ext"
|
4
7
|
|
5
8
|
module StiTypeCustomizable
|
6
9
|
extend ActiveSupport::Concern
|
7
10
|
|
8
11
|
included do
|
9
|
-
|
10
|
-
class_attribute :sti_entities
|
12
|
+
cattr_accessor :_sti_definition, instance_accessor: false
|
11
13
|
end
|
12
14
|
|
13
15
|
class_methods do
|
14
|
-
def
|
15
|
-
self
|
16
|
-
{}.tap do |entities|
|
17
|
-
classes.each do |klass|
|
18
|
-
raise NotImplementedError unless klass.include? StiTypeCustomizable
|
19
|
-
|
20
|
-
entities[klass.sti_type_value] = klass
|
21
|
-
end
|
22
|
-
end
|
23
|
-
end
|
16
|
+
def sti_definition(definition)
|
17
|
+
self._sti_definition = definition
|
24
18
|
end
|
25
19
|
|
26
20
|
def find_sti_class(type)
|
27
|
-
self
|
21
|
+
self._sti_definition.resolve_class(type) || self
|
28
22
|
end
|
29
23
|
|
30
24
|
def sti_name
|
31
|
-
self
|
25
|
+
self._sti_definition.resolve_type_value(self)
|
32
26
|
end
|
33
27
|
end
|
34
28
|
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module StiTypeCustomizable
|
4
|
+
module Definition
|
5
|
+
def initialize(default_type_value)
|
6
|
+
@definitions = load_definitions
|
7
|
+
@inverted_definitions = @definitions.invert
|
8
|
+
@module_name = self.class.name.deconstantize
|
9
|
+
@default_type_value = default_type_value
|
10
|
+
end
|
11
|
+
|
12
|
+
def resolve_class(type_value)
|
13
|
+
key = @inverted_definitions.dig(type_value)
|
14
|
+
return nil if key.blank?
|
15
|
+
|
16
|
+
"#{@module_name}::#{key.to_s.classify}".safe_constantize
|
17
|
+
end
|
18
|
+
|
19
|
+
def resolve_type_value(klass)
|
20
|
+
@definitions.dig(klass.name.demodulize.underscore.to_sym) || @default_type_value
|
21
|
+
end
|
22
|
+
|
23
|
+
private
|
24
|
+
|
25
|
+
def load_definitions
|
26
|
+
raise NotImplementedError
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -21,7 +21,7 @@ Gem::Specification.new do |spec|
|
|
21
21
|
|
22
22
|
spec.add_dependency "rails", ">= 4.2"
|
23
23
|
|
24
|
-
spec.add_development_dependency "bundler", "~>
|
24
|
+
spec.add_development_dependency "bundler", "~> 2.0"
|
25
25
|
spec.add_development_dependency "rake", "~> 10.0"
|
26
26
|
spec.add_development_dependency "rspec", "~> 3.0"
|
27
27
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sti_type_customizable
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Takahiro Ooishi
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2019-05-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -30,14 +30,14 @@ dependencies:
|
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '
|
33
|
+
version: '2.0'
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: '
|
40
|
+
version: '2.0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: rake
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -83,6 +83,7 @@ files:
|
|
83
83
|
- bin/console
|
84
84
|
- bin/setup
|
85
85
|
- lib/sti_type_customizable.rb
|
86
|
+
- lib/sti_type_customizable/definition.rb
|
86
87
|
- lib/sti_type_customizable/version.rb
|
87
88
|
- sti_type_customizable.gemspec
|
88
89
|
homepage: https://github.com/sti_type_customizable
|
@@ -104,8 +105,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
104
105
|
- !ruby/object:Gem::Version
|
105
106
|
version: '0'
|
106
107
|
requirements: []
|
107
|
-
|
108
|
-
rubygems_version: 2.5.2
|
108
|
+
rubygems_version: 3.0.3
|
109
109
|
signing_key:
|
110
110
|
specification_version: 4
|
111
111
|
summary: Customize STI type column
|