enumbler 0.6.9 → 0.7.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: 8023f1c813e4ecfd32ca382d1fb6ea0fe4d195d046a232fc3650d185c17e1fc4
4
- data.tar.gz: 14b35d77a8491b27a2d93059851a8ce01e7e9852c04e5ee22460f6637b3d43e0
3
+ metadata.gz: bd8d1d86b3abe14b9454f4b36519d41c7d21e6544c749e5db19215d790a4b3dc
4
+ data.tar.gz: 44a694212c3feaa9aad8ea5dacd0ca370105e8dc69fe6196b67b158fd0f4ba63
5
5
  SHA512:
6
- metadata.gz: fd0044a895d518a5c3615bd3bb021b58262c7c376074bcfa409ad6bf3c78bea42a7afebdeec16f38a27bcc0a62e0b51107c89caec0de45f0c26e874c411b3123
7
- data.tar.gz: 193c7a98d2c496ce9339f4ff1c6b5bd27b6a3b2a2f9ee7a2182ed61832ee243895c02b0bdd0e0c31d207d4b1f6f0a91601e5f0c9c1c85f5358020aba08d40860
6
+ metadata.gz: 374e370ed1e6ff6575b0d494d57f20b95ebf25116382dbabe723a4450a06e4bf53a1ae688576e632fbbaabd97c4d5aa35f8a048fc71d76caf7d739a2a7d5676a
7
+ data.tar.gz: 51772747de3d1e9e3ac2012c1a91223c68470f7caa96127807b30c398870965e781fa813f297fc2a28fa8dfe25bc8a4174836ab8035ce2bcb6eae4e7d41ddf9a
@@ -3,6 +3,8 @@ name: CI Matrix Testing
3
3
  on:
4
4
  push:
5
5
  branches: [ master ]
6
+ tags:
7
+ - "*"
6
8
  pull_request:
7
9
  branches: [ master ]
8
10
 
@@ -51,6 +53,7 @@ jobs:
51
53
  ruby-version: 2.7.x
52
54
 
53
55
  - name: Publish to RubyGems
56
+ if: contains(github.ref, 'refs/tags/')
54
57
  run: |
55
58
  mkdir -p $HOME/.gem
56
59
  touch $HOME/.gem/credentials
data/.gitignore CHANGED
@@ -9,5 +9,6 @@
9
9
 
10
10
  # rspec failure tracking
11
11
  .rspec_status
12
+ .byebug_history
12
13
 
13
14
  tags*
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- enumbler (0.6.9)
4
+ enumbler (0.7.0)
5
5
  activerecord (>= 5.2.3, < 6.1)
6
6
  activesupport (>= 5.2.3, < 6.1)
7
7
 
@@ -19,7 +19,8 @@ GEM
19
19
  minitest (~> 5.1)
20
20
  tzinfo (~> 1.1)
21
21
  zeitwerk (~> 2.2, >= 2.2.2)
22
- ast (2.4.0)
22
+ ast (2.4.1)
23
+ coderay (1.1.2)
23
24
  concurrent-ruby (1.1.6)
24
25
  database_cleaner (1.8.5)
25
26
  database_cleaner-active_record (1.8.0)
@@ -31,13 +32,17 @@ GEM
31
32
  ruby-progressbar (~> 1.4)
32
33
  i18n (1.8.2)
33
34
  concurrent-ruby (~> 1.0)
34
- jaro_winkler (1.5.4)
35
+ method_source (1.0.0)
35
36
  minitest (5.14.1)
36
37
  parallel (1.19.1)
37
- parser (2.7.1.3)
38
- ast (~> 2.4.0)
38
+ parser (2.7.1.4)
39
+ ast (~> 2.4.1)
40
+ pry (0.13.1)
41
+ coderay (~> 1.1)
42
+ method_source (~> 1.0)
39
43
  rainbow (3.0.0)
40
44
  rake (12.3.3)
45
+ regexp_parser (1.7.1)
41
46
  rexml (3.2.4)
42
47
  rspec (3.9.0)
43
48
  rspec-core (~> 3.9.0)
@@ -52,14 +57,17 @@ GEM
52
57
  diff-lcs (>= 1.2.0, < 2.0)
53
58
  rspec-support (~> 3.9.0)
54
59
  rspec-support (3.9.3)
55
- rubocop (0.81.0)
56
- jaro_winkler (~> 1.5.1)
60
+ rubocop (0.91.0)
57
61
  parallel (~> 1.10)
58
- parser (>= 2.7.0.1)
62
+ parser (>= 2.7.1.1)
59
63
  rainbow (>= 2.2.2, < 4.0)
64
+ regexp_parser (>= 1.7)
60
65
  rexml
66
+ rubocop-ast (>= 0.4.0, < 1.0)
61
67
  ruby-progressbar (~> 1.7)
62
68
  unicode-display_width (>= 1.4.0, < 2.0)
69
+ rubocop-ast (0.4.0)
70
+ parser (>= 2.7.1.4)
63
71
  ruby-progressbar (1.10.1)
64
72
  sqlite3 (1.4.2)
65
73
  thread_safe (0.3.6)
@@ -75,9 +83,10 @@ DEPENDENCIES
75
83
  database_cleaner-active_record (~> 1.8.0)
76
84
  enumbler!
77
85
  fuubar (~> 2.5)
86
+ pry
78
87
  rake (~> 12.0)
79
88
  rspec (~> 3.9.0)
80
- rubocop (~> 0.81.0)
89
+ rubocop (~> 0.91.0)
81
90
  sqlite3 (~> 1.4.0)
82
91
 
83
92
  BUNDLED WITH
data/README.md CHANGED
@@ -108,12 +108,14 @@ House.color(Color.black, :white) # => ActiveRecord::Relation<house, house2>
108
108
 
109
109
  ### Use a column other than `label`
110
110
 
111
- By default, the Enumbler expects a table in the database with a column `label`. However, you can change this to another underlying column name. Note that the enumbler still treats it as a `label` column; however it will be saved to the correct place in the database.
111
+ By default, the Enumbler expects a table in the database with a column `label`. However, you can change this to another underlying column name. Note that the enumbler still treats it as a `label` column; however it will be saved to the correct place in the database. Your model now can have its own `label` separate from whatever attribute/column was
112
+ specified for Enumbler usage.
112
113
 
113
114
  ```ruby
114
115
  ActiveRecord::Schema.define do
115
116
  create_table :feelings, force: true do |t|
116
117
  t.string :emotion, null: false, index: { unique: true }
118
+ t.string :label
117
119
  end
118
120
  end
119
121
 
@@ -125,8 +127,15 @@ class Feeling < ApplicationRecord
125
127
 
126
128
  enumble :sad, 1
127
129
  enumble :happy, 2
128
- enumble :verklempt, 3, label: 'overcome with emotion'
130
+ enumble :verklempt, 3, label: "Verklempt!", emotion: 'overcome with emotion'
129
131
  end
132
+
133
+ # Now the `Feeling` model can use `label` if it wants to
134
+ # and not conflict with Enumbler usage (:emotion in this case)
135
+ # .enumble.label & .emotion is used internally by Enumbler
136
+ Feeling.verklempt.label # => 'Verklempt!'
137
+ Feeling.verklempt.enumble.label # => 'overcome with emotion'
138
+ Feeling.verklempt.emotion # => 'overcome with emotion'
130
139
  ```
131
140
 
132
141
  ## Core ext
@@ -140,6 +149,7 @@ when :black
140
149
  when :blue, :purple
141
150
  'very surprised'
142
151
  end
152
+ ```
143
153
 
144
154
  ## Development
145
155
 
@@ -34,8 +34,9 @@ Gem::Specification.new do |spec|
34
34
 
35
35
  spec.add_development_dependency 'database_cleaner-active_record', '~> 1.8.0'
36
36
  spec.add_development_dependency 'fuubar', '~> 2.5'
37
+ spec.add_development_dependency 'pry'
37
38
  spec.add_development_dependency 'rake', '~> 12.0'
38
39
  spec.add_development_dependency 'rspec', '~> 3.9.0'
39
- spec.add_development_dependency 'rubocop', '~> 0.81.0'
40
+ spec.add_development_dependency 'rubocop', '~> 0.91.0'
40
41
  spec.add_development_dependency 'sqlite3', '~> 1.4.0'
41
42
  end
@@ -57,7 +57,7 @@ module Enumbler
57
57
  # example: `where_by` will make it `House.where_by_color(:black)`
58
58
  # @param **options [Hash] additional options passed to `belongs_to`
59
59
  def enumbled_to(name, scope = nil, prefix: false, scope_prefix: nil, **options)
60
- class_name = name.to_s.classify
60
+ class_name = options.fetch(:class_name, name.to_s.classify)
61
61
  enumbled_model = class_name.constantize
62
62
 
63
63
  unless enumbled_model.respond_to?(:enumbles)
@@ -68,7 +68,7 @@ module Enumbler
68
68
  belongs_to(name, scope, **options)
69
69
 
70
70
  define_helper_attributes(name)
71
- define_dynamic_methods_for_enumbled_to_models(enumbled_model, prefix: prefix, scope_prefix: scope_prefix)
71
+ define_dynamic_methods_for_enumbled_to_models(name, enumbled_model, prefix: prefix, scope_prefix: scope_prefix)
72
72
  rescue NameError
73
73
  raise Error, "The model #{class_name} cannot be found. Uninitialized constant."
74
74
  end
@@ -80,11 +80,10 @@ module Enumbler
80
80
  # @todo - we should check for naming conflicts!
81
81
  # dangerous_attribute_method?(method_name)
82
82
  # method_defined_within?(method_name, self, Module)
83
- def define_dynamic_methods_for_enumbled_to_models(enumbled_model, prefix: false, scope_prefix: nil)
84
- model_name = enumbled_model.to_s.underscore
85
- column_name = "#{model_name}_id"
83
+ def define_dynamic_methods_for_enumbled_to_models(name, enumbled_model, prefix: false, scope_prefix: nil)
84
+ column_name = "#{name}_id"
86
85
 
87
- cmethod = scope_prefix.blank? ? model_name : "#{scope_prefix}_#{model_name}"
86
+ cmethod = scope_prefix.blank? ? name : "#{scope_prefix}_#{name}"
88
87
  define_singleton_method(cmethod) do |*args|
89
88
  where(column_name => enumbled_model.ids_from_enumbler(args))
90
89
  end
@@ -94,8 +93,8 @@ module Enumbler
94
93
  end
95
94
 
96
95
  enumbled_model.enumbles.each do |enumble|
97
- method_name = prefix ? "#{model_name}_#{enumble.enum}?" : "#{enumble.enum}?"
98
- not_method_name = prefix ? "#{model_name}_not_#{enumble.enum}?" : "not_#{enumble.enum}?"
96
+ method_name = prefix ? "#{name}_#{enumble.enum}?" : "#{enumble.enum}?"
97
+ not_method_name = prefix ? "#{name}_not_#{enumble.enum}?" : "not_#{enumble.enum}?"
99
98
  define_method(method_name) { self[column_name] == enumble.id }
100
99
  define_method(not_method_name) { self[column_name] != enumble.id }
101
100
  end
@@ -17,22 +17,29 @@ module Enumbler
17
17
  @enumble
18
18
  end
19
19
 
20
+ # The enumble graphql_enum if it exists.
21
+ # @return [Symbol]
22
+ def to_graphql_enum
23
+ to_enumble_attribute(:graphql_enum) || super
24
+ end
25
+
20
26
  # The enumble label if it exists.
21
27
  # @return [String]
22
28
  def to_s
23
- enumble = self.class.find_enumble(id)
24
- return enumble.label if enumble.present?
25
-
26
- super
29
+ to_enumble_attribute(:label) || super
27
30
  end
28
31
 
29
32
  # The enumble symbol if it exists.
30
33
  # @return [Symbol]
31
34
  def to_sym
32
- enumble = self.class.find_enumble(id)
33
- return enumble.enum if enumble.present?
35
+ to_enumble_attribute(:enum) || super
36
+ end
34
37
 
35
- super
38
+ private
39
+
40
+ def to_enumble_attribute(attribute)
41
+ enumble = self.class.find_enumble(id)
42
+ return enumble.send(attribute) if enumble.present?
36
43
  end
37
44
 
38
45
  # These ClassMethods can be included in any model that you wish to
@@ -8,9 +8,10 @@ module Enumbler
8
8
  def initialize(enum, id, label: nil, label_column_name: :label, **attributes)
9
9
  @id = id
10
10
  @enum = enum
11
- @label = label || enum.to_s.dasherize
12
11
  @label_column_name = label_column_name
12
+ @label = (label_col_specified? ? attributes[label_column_name] : label) || enum.to_s.dasherize
13
13
  @additional_attributes = attributes || {}
14
+ @additional_attributes.merge!({ label: label }) if label_col_specified?
14
15
  end
15
16
 
16
17
  def ==(other)
@@ -19,10 +20,9 @@ module Enumbler
19
20
  end
20
21
 
21
22
  def attributes
22
- @additional_attributes.merge({
23
- id: id,
24
- label_column_name => label,
25
- })
23
+ hash = { id: id, label_column_name => label }
24
+ hash.merge!({ label: @additional_attributes[:label] }) if label_col_specified?
25
+ @additional_attributes.merge(hash)
26
26
  end
27
27
 
28
28
  # Used to return itself from a class method.
@@ -50,5 +50,11 @@ module Enumbler
50
50
  def to_s
51
51
  enum
52
52
  end
53
+
54
+ private
55
+
56
+ def label_col_specified?
57
+ label_column_name != :label
58
+ end
53
59
  end
54
60
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Enumbler
4
- VERSION = '0.6.9'
4
+ VERSION = '0.7.0'
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: enumbler
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.9
4
+ version: 0.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Damon Timm
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-09-13 00:00:00.000000000 Z
11
+ date: 2020-10-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord
@@ -78,6 +78,20 @@ dependencies:
78
78
  - - "~>"
79
79
  - !ruby/object:Gem::Version
80
80
  version: '2.5'
81
+ - !ruby/object:Gem::Dependency
82
+ name: pry
83
+ requirement: !ruby/object:Gem::Requirement
84
+ requirements:
85
+ - - ">="
86
+ - !ruby/object:Gem::Version
87
+ version: '0'
88
+ type: :development
89
+ prerelease: false
90
+ version_requirements: !ruby/object:Gem::Requirement
91
+ requirements:
92
+ - - ">="
93
+ - !ruby/object:Gem::Version
94
+ version: '0'
81
95
  - !ruby/object:Gem::Dependency
82
96
  name: rake
83
97
  requirement: !ruby/object:Gem::Requirement
@@ -112,14 +126,14 @@ dependencies:
112
126
  requirements:
113
127
  - - "~>"
114
128
  - !ruby/object:Gem::Version
115
- version: 0.81.0
129
+ version: 0.91.0
116
130
  type: :development
117
131
  prerelease: false
118
132
  version_requirements: !ruby/object:Gem::Requirement
119
133
  requirements:
120
134
  - - "~>"
121
135
  - !ruby/object:Gem::Version
122
- version: 0.81.0
136
+ version: 0.91.0
123
137
  - !ruby/object:Gem::Dependency
124
138
  name: sqlite3
125
139
  requirement: !ruby/object:Gem::Requirement