bp3-string 0.1.1 → 0.1.2

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: 0a2a72aa199dac5c0afd601a19d696e3080d47481e667e177c9313ce946811b2
4
- data.tar.gz: 8bf1ae10f2a4ca108419e2e3b77c0b8a330fbf0549cac06dd3825d0b42eca90e
3
+ metadata.gz: f5aa34697599efbe2157aac9bd6d0d370b808ade7c341c926537a991e6e43b52
4
+ data.tar.gz: 869be1330e5be8f772c01710137d67c105e2433331122e334df17d707529acd1
5
5
  SHA512:
6
- metadata.gz: 15d156f4895fa9340ffdefc5c0b8ba6bda70eb26b9ccec9fd701f26859a075855b3498325930027666a733860cb685a14f949e96b9feb1a6a8b614cb2e11798d
7
- data.tar.gz: 82d1a3e8952cf9469b153ef92b5c6e75c9133c50625d82bc4767a7efb4d7974e0f71d9ccadbbb0650123000ea277f79893aaaa9c84acc2d2dd02fad88895845e
6
+ metadata.gz: c3368540180a9dd6ced17398086a39cf3d9d6fbf7b508ee999d03defb34609b7f4448a4b8e4edf7ac38d898f18a1158e6d167d75f54265817e9cef800e43da86
7
+ data.tar.gz: fbd9fa9d774405f4671a9fe42216fedcefe22838390442123ded91de608975a3be869ae71171f17cce419aeaf56b71acea96ceec776e0b2532fa4a3d9d1c64a0
data/CHANGELOG.md CHANGED
@@ -1,6 +1,12 @@
1
1
  ## [Unreleased]
2
2
 
3
- ## [0.1.0] - 2024-06-03
3
+ ## [0.1.2] - 2024-08-19
4
+
5
+ - Use all ActionController descendents to populate the `TableControllerMap` hash.
6
+ - Pluralize default controller class
7
+ - Refactoring
8
+
9
+ ## [0.1.1] - 2024-06-03
4
10
 
5
11
  - Tweaks and documentation
6
12
 
data/Gemfile.lock CHANGED
@@ -1,80 +1,82 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- bp3-string (0.1.1)
5
- activerecord (~> 7.1)
4
+ bp3-string (0.1.2)
5
+ activerecord (>= 7.1.2, < 8)
6
6
  activesupport (>= 7.1.2, < 8)
7
- railties (~> 7.1)
7
+ railties (>= 7.1.2, < 8)
8
8
 
9
9
  GEM
10
10
  remote: https://rubygems.org/
11
11
  specs:
12
- actionpack (7.1.3.2)
13
- actionview (= 7.1.3.2)
14
- activesupport (= 7.1.3.2)
12
+ actionpack (7.2.0)
13
+ actionview (= 7.2.0)
14
+ activesupport (= 7.2.0)
15
15
  nokogiri (>= 1.8.5)
16
16
  racc
17
- rack (>= 2.2.4)
17
+ rack (>= 2.2.4, < 3.2)
18
18
  rack-session (>= 1.0.1)
19
19
  rack-test (>= 0.6.3)
20
20
  rails-dom-testing (~> 2.2)
21
21
  rails-html-sanitizer (~> 1.6)
22
- actionview (7.1.3.2)
23
- activesupport (= 7.1.3.2)
22
+ useragent (~> 0.16)
23
+ actionview (7.2.0)
24
+ activesupport (= 7.2.0)
24
25
  builder (~> 3.1)
25
26
  erubi (~> 1.11)
26
27
  rails-dom-testing (~> 2.2)
27
28
  rails-html-sanitizer (~> 1.6)
28
- activemodel (7.1.3.2)
29
- activesupport (= 7.1.3.2)
30
- activerecord (7.1.3.2)
31
- activemodel (= 7.1.3.2)
32
- activesupport (= 7.1.3.2)
29
+ activemodel (7.2.0)
30
+ activesupport (= 7.2.0)
31
+ activerecord (7.2.0)
32
+ activemodel (= 7.2.0)
33
+ activesupport (= 7.2.0)
33
34
  timeout (>= 0.4.0)
34
- activesupport (7.1.3.2)
35
+ activesupport (7.2.0)
35
36
  base64
36
37
  bigdecimal
37
- concurrent-ruby (~> 1.0, >= 1.0.2)
38
+ concurrent-ruby (~> 1.0, >= 1.3.1)
38
39
  connection_pool (>= 2.2.5)
39
40
  drb
40
41
  i18n (>= 1.6, < 2)
42
+ logger (>= 1.4.2)
41
43
  minitest (>= 5.1)
42
- mutex_m
43
- tzinfo (~> 2.0)
44
+ securerandom (>= 0.3)
45
+ tzinfo (~> 2.0, >= 2.0.5)
44
46
  ast (2.4.2)
45
47
  base64 (0.2.0)
46
- bigdecimal (3.1.7)
47
- builder (3.2.4)
48
+ bigdecimal (3.1.8)
49
+ builder (3.3.0)
48
50
  byebug (11.1.3)
49
- concurrent-ruby (1.2.3)
51
+ concurrent-ruby (1.3.4)
50
52
  connection_pool (2.4.1)
51
53
  crass (1.0.6)
52
54
  diff-lcs (1.5.1)
53
55
  drb (2.2.1)
54
- erubi (1.12.0)
55
- i18n (1.14.4)
56
+ erubi (1.13.0)
57
+ i18n (1.14.5)
56
58
  concurrent-ruby (~> 1.0)
57
59
  io-console (0.7.2)
58
- irb (1.12.0)
59
- rdoc
60
+ irb (1.14.0)
61
+ rdoc (>= 4.0.0)
60
62
  reline (>= 0.4.2)
61
63
  json (2.7.2)
62
64
  language_server-protocol (3.17.0.3)
65
+ logger (1.6.0)
63
66
  loofah (2.22.0)
64
67
  crass (~> 1.0.2)
65
68
  nokogiri (>= 1.12.0)
66
- minitest (5.22.3)
67
- mutex_m (0.2.0)
68
- nokogiri (1.16.3-x86_64-darwin)
69
+ minitest (5.25.1)
70
+ nokogiri (1.16.7-x86_64-darwin)
69
71
  racc (~> 1.4)
70
- parallel (1.24.0)
71
- parser (3.3.0.5)
72
+ parallel (1.26.3)
73
+ parser (3.3.4.2)
72
74
  ast (~> 2.4.1)
73
75
  racc
74
76
  psych (5.1.2)
75
77
  stringio
76
- racc (1.7.3)
77
- rack (3.0.10)
78
+ racc (1.8.1)
79
+ rack (3.1.7)
78
80
  rack-session (2.0.0)
79
81
  rack (>= 3.0.0)
80
82
  rack-test (2.1.0)
@@ -89,70 +91,74 @@ GEM
89
91
  rails-html-sanitizer (1.6.0)
90
92
  loofah (~> 2.21)
91
93
  nokogiri (~> 1.14)
92
- railties (7.1.3.2)
93
- actionpack (= 7.1.3.2)
94
- activesupport (= 7.1.3.2)
95
- irb
94
+ railties (7.2.0)
95
+ actionpack (= 7.2.0)
96
+ activesupport (= 7.2.0)
97
+ irb (~> 1.13)
96
98
  rackup (>= 1.0.0)
97
99
  rake (>= 12.2)
98
100
  thor (~> 1.0, >= 1.2.2)
99
101
  zeitwerk (~> 2.6)
100
102
  rainbow (3.1.1)
101
103
  rake (13.2.1)
102
- rdoc (6.6.3.1)
104
+ rdoc (6.7.0)
103
105
  psych (>= 4.0.0)
104
- regexp_parser (2.9.0)
105
- reline (0.5.0)
106
+ regexp_parser (2.9.2)
107
+ reline (0.5.9)
106
108
  io-console (~> 0.5)
107
- rexml (3.2.6)
109
+ rexml (3.3.5)
110
+ strscan
108
111
  rspec (3.13.0)
109
112
  rspec-core (~> 3.13.0)
110
113
  rspec-expectations (~> 3.13.0)
111
114
  rspec-mocks (~> 3.13.0)
112
115
  rspec-core (3.13.0)
113
116
  rspec-support (~> 3.13.0)
114
- rspec-expectations (3.13.0)
117
+ rspec-expectations (3.13.2)
115
118
  diff-lcs (>= 1.2.0, < 2.0)
116
119
  rspec-support (~> 3.13.0)
117
- rspec-mocks (3.13.0)
120
+ rspec-mocks (3.13.1)
118
121
  diff-lcs (>= 1.2.0, < 2.0)
119
122
  rspec-support (~> 3.13.0)
120
123
  rspec-support (3.13.1)
121
- rubocop (1.62.1)
124
+ rubocop (1.65.1)
122
125
  json (~> 2.3)
123
126
  language_server-protocol (>= 3.17.0)
124
127
  parallel (~> 1.10)
125
128
  parser (>= 3.3.0.2)
126
129
  rainbow (>= 2.2.2, < 4.0)
127
- regexp_parser (>= 1.8, < 3.0)
130
+ regexp_parser (>= 2.4, < 3.0)
128
131
  rexml (>= 3.2.5, < 4.0)
129
132
  rubocop-ast (>= 1.31.1, < 2.0)
130
133
  ruby-progressbar (~> 1.7)
131
134
  unicode-display_width (>= 2.4.0, < 3.0)
132
- rubocop-ast (1.31.2)
133
- parser (>= 3.3.0.4)
134
- rubocop-capybara (2.20.0)
135
- rubocop (~> 1.41)
136
- rubocop-factory_bot (2.25.1)
135
+ rubocop-ast (1.32.1)
136
+ parser (>= 3.3.1.0)
137
+ rubocop-capybara (2.21.0)
137
138
  rubocop (~> 1.41)
139
+ rubocop-factory_bot (2.26.1)
140
+ rubocop (~> 1.61)
138
141
  rubocop-rake (0.6.0)
139
142
  rubocop (~> 1.0)
140
- rubocop-rspec (2.29.1)
143
+ rubocop-rspec (2.31.0)
141
144
  rubocop (~> 1.40)
142
145
  rubocop-capybara (~> 2.17)
143
146
  rubocop-factory_bot (~> 2.22)
144
147
  rubocop-rspec_rails (~> 2.28)
145
- rubocop-rspec_rails (2.28.2)
146
- rubocop (~> 1.40)
148
+ rubocop-rspec_rails (2.29.1)
149
+ rubocop (~> 1.61)
147
150
  ruby-progressbar (1.13.0)
148
- stringio (3.1.0)
151
+ securerandom (0.3.1)
152
+ stringio (3.1.1)
153
+ strscan (3.1.0)
149
154
  thor (1.3.1)
150
155
  timeout (0.4.1)
151
156
  tzinfo (2.0.6)
152
157
  concurrent-ruby (~> 1.0)
153
158
  unicode-display_width (2.5.0)
159
+ useragent (0.16.10)
154
160
  webrick (1.8.1)
155
- zeitwerk (2.6.13)
161
+ zeitwerk (2.6.17)
156
162
 
157
163
  PLATFORMS
158
164
  x86_64-darwin-22
data/bp3-string.gemspec CHANGED
@@ -31,9 +31,9 @@ Gem::Specification.new do |spec|
31
31
  spec.executables = spec.files.grep(%r{\Aexe/}) { |f| File.basename(f) }
32
32
  spec.require_paths = ['lib']
33
33
 
34
- spec.add_dependency 'activerecord', '~> 7.1'
34
+ spec.add_dependency 'activerecord', ['>= 7.1.2', '< 8']
35
35
  spec.add_dependency 'activesupport', ['>= 7.1.2', '< 8']
36
- spec.add_dependency 'railties', '~> 7.1'
36
+ spec.add_dependency 'railties', ['>= 7.1.2', '< 8']
37
37
 
38
38
  spec.add_development_dependency 'byebug'
39
39
  spec.add_development_dependency 'rake', '~> 13.0'
@@ -6,7 +6,7 @@ module Bp3
6
6
  module String
7
7
  module Controllerize
8
8
  def controllerize
9
- TableControllerMap.hash[self] || "#{classify}Controller"
9
+ TableControllerMap.hash[self] || "#{classify.pluralize}Controller"
10
10
  end
11
11
  end
12
12
  end
@@ -0,0 +1,41 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Bp3
4
+ module String
5
+ # MapperBase provides the base class for controller and model mappings
6
+ class MapperBase
7
+ include Subclassable
8
+
9
+ # override in testing if needed
10
+ def self.testing?
11
+ false
12
+ end
13
+
14
+ def self.reset_cached_hash
15
+ @cached_hash = nil
16
+ end
17
+
18
+ def self.build_hash
19
+ new.build_hash
20
+ end
21
+
22
+ def self.hash
23
+ cached_hash
24
+ end
25
+
26
+ def hash
27
+ self.class.hash
28
+ end
29
+
30
+ private
31
+
32
+ def sti_subclass?(model)
33
+ self.class.sti_subclass?(model)
34
+ end
35
+
36
+ def subclassed?(model)
37
+ self.class.subclassed?(model)
38
+ end
39
+ end
40
+ end
41
+ end
@@ -2,17 +2,11 @@
2
2
 
3
3
  module Bp3
4
4
  module String
5
- # TableControllerMap provides for mappings between tables and controllers
6
- class TableControllerMap
7
- include Subclassable
8
-
5
+ # TableControllerMap provides for mappings between table-like strings and controller class names
6
+ class TableControllerMap < MapperBase
9
7
  @cached_hash = nil
10
8
  CACHED_HASH_MUTEX = Mutex.new
11
9
 
12
- def self.testing?
13
- Rails.env.test?
14
- end
15
-
16
10
  def self.cached_hash
17
11
  return build_hash if testing?
18
12
  return @cached_hash if @cached_hash.present?
@@ -24,11 +18,18 @@ module Bp3
24
18
  end
25
19
  end
26
20
 
27
- def self.reset_cached_hash
28
- @cached_hash = nil
21
+ def build_hash
22
+ @encoding = 'string'.encoding # TODO: not sure why encoding sometimes doesn't match
23
+ @ar_hash = build_hash_from_active_record
24
+ @ac_hash = build_hash_from_action_controller
25
+ @ar_hash.merge(@ac_hash)
29
26
  end
30
27
 
31
- def self.build_hash
28
+ private
29
+
30
+ attr_reader :ar_hash, :ac_hash, :encoding
31
+
32
+ def build_hash_from_active_record
32
33
  hash = {}
33
34
  ActiveRecord::Base.descendants.each do |model|
34
35
  table_name = model.table_name
@@ -42,12 +43,29 @@ module Bp3
42
43
  hash
43
44
  end
44
45
 
45
- def self.hash
46
- cached_hash
46
+ def build_hash_from_action_controller
47
+ hash = {}
48
+ ActionController::Base.descendants.each do |controller|
49
+ hash.merge!(build_hash_from_controller(controller))
50
+ end
51
+ hash
47
52
  end
48
53
 
49
- def hash
50
- self.class.hash
54
+ def build_hash_from_controller(controller)
55
+ hash = {}
56
+ if controller.descendants.empty?
57
+ if controller.name.present?
58
+ controller_name = controller.name.encode(encoding)
59
+ tableish_name = controller_name.gsub(/Controller\z/, '').underscore.tr('/', '_').pluralize
60
+ hash[tableish_name] = controller_name unless @ar_hash.key?(tableish_name)
61
+ hash[tableish_name.singularize] = controller_name unless @ar_hash.key?(tableish_name.singularize)
62
+ end
63
+ else
64
+ controller.descendants.each do |ctrlr|
65
+ hash.merge!(build_hash_from_controller(ctrlr))
66
+ end
67
+ end
68
+ hash
51
69
  end
52
70
  end
53
71
  end
@@ -4,17 +4,11 @@ require 'active_record'
4
4
 
5
5
  module Bp3
6
6
  module String
7
- # TableModelMap provides for mappings between tables and models
8
- class TableModelMap
9
- include Subclassable
10
-
7
+ # TableModelMap provides for mappings between tables and model class names
8
+ class TableModelMap < MapperBase
11
9
  @cached_hash = nil
12
10
  CACHED_HASH_MUTEX = Mutex.new
13
11
 
14
- def self.testing?
15
- Rails.env.test?
16
- end
17
-
18
12
  def self.cached_hash
19
13
  return build_hash if testing?
20
14
  return @cached_hash if @cached_hash.present?
@@ -26,39 +20,27 @@ module Bp3
26
20
  end
27
21
  end
28
22
 
29
- def self.reset_cached_hash
30
- @cached_hash = nil
31
- end
32
-
33
- def self.build_hash
34
- enc = 'string'.encoding # TODO: not sure why encoding sometimes doesn't match
23
+ def build_hash
24
+ encoding = 'string'.encoding # TODO: not sure why encoding sometimes doesn't match
35
25
  hash = {}
36
26
  ActiveRecord::Base.descendants.each do |model|
37
27
  table_name = model.table_name
38
28
  next if table_name.blank?
39
29
 
40
30
  table_name = table_name.split('.').last # remove the schema
41
- model_name = determine_model_name(model).encode(enc)
31
+ model_name = determine_model_name(model).encode(encoding)
42
32
  hash[table_name] = model_name
43
33
  hash[table_name.singularize] = model_name
44
34
  end
45
35
  hash
46
36
  end
47
37
 
48
- def self.determine_model_name(model)
38
+ def determine_model_name(model)
49
39
  return determine_model_name(model.superclass) if sti_subclass?(model)
50
40
  return determine_model_name(model.descendants.first) if subclassed?(model)
51
41
 
52
42
  model.name
53
43
  end
54
-
55
- def self.hash
56
- cached_hash
57
- end
58
-
59
- def hash
60
- self.class.hash
61
- end
62
44
  end
63
45
  end
64
46
  end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Bp3
4
4
  module String
5
- VERSION = '0.1.1'
5
+ VERSION = '0.1.2'
6
6
  end
7
7
  end
data/lib/bp3/string.rb CHANGED
@@ -2,6 +2,7 @@
2
2
 
3
3
  require 'active_support/concern'
4
4
  require_relative 'string/subclassable'
5
+ require_relative 'string/mapper_base'
5
6
  require_relative 'string/table_model_map'
6
7
  require_relative 'string/table_controller_map'
7
8
  require_relative 'string/modelize'
metadata CHANGED
@@ -1,29 +1,35 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bp3-string
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Wim den Braven
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2024-06-03 00:00:00.000000000 Z
11
+ date: 2024-08-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "~>"
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: 7.1.2
20
+ - - "<"
18
21
  - !ruby/object:Gem::Version
19
- version: '7.1'
22
+ version: '8'
20
23
  type: :runtime
21
24
  prerelease: false
22
25
  version_requirements: !ruby/object:Gem::Requirement
23
26
  requirements:
24
- - - "~>"
27
+ - - ">="
28
+ - !ruby/object:Gem::Version
29
+ version: 7.1.2
30
+ - - "<"
25
31
  - !ruby/object:Gem::Version
26
- version: '7.1'
32
+ version: '8'
27
33
  - !ruby/object:Gem::Dependency
28
34
  name: activesupport
29
35
  requirement: !ruby/object:Gem::Requirement
@@ -48,16 +54,22 @@ dependencies:
48
54
  name: railties
49
55
  requirement: !ruby/object:Gem::Requirement
50
56
  requirements:
51
- - - "~>"
57
+ - - ">="
58
+ - !ruby/object:Gem::Version
59
+ version: 7.1.2
60
+ - - "<"
52
61
  - !ruby/object:Gem::Version
53
- version: '7.1'
62
+ version: '8'
54
63
  type: :runtime
55
64
  prerelease: false
56
65
  version_requirements: !ruby/object:Gem::Requirement
57
66
  requirements:
58
- - - "~>"
67
+ - - ">="
68
+ - !ruby/object:Gem::Version
69
+ version: 7.1.2
70
+ - - "<"
59
71
  - !ruby/object:Gem::Version
60
- version: '7.1'
72
+ version: '8'
61
73
  - !ruby/object:Gem::Dependency
62
74
  name: byebug
63
75
  requirement: !ruby/object:Gem::Requirement
@@ -162,6 +174,7 @@ files:
162
174
  - lib/bp3-string.rb
163
175
  - lib/bp3/string.rb
164
176
  - lib/bp3/string/controllerize.rb
177
+ - lib/bp3/string/mapper_base.rb
165
178
  - lib/bp3/string/modelize.rb
166
179
  - lib/bp3/string/railtie.rb
167
180
  - lib/bp3/string/subclassable.rb