stealth_dom_id 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 1b2873eeed2f0437b75fe061a5261673f08992c186a60349c2460f63bdfbc007
4
+ data.tar.gz: 8ba04b34323b83b852f172a97a3ff4af9bc7756da6a1185e47ea34501465bd52
5
+ SHA512:
6
+ metadata.gz: 6bf8818c874009b129f470fb5d9742ecb58e8f8bdf3abe81b20f725a80b62ccb7c20bf0f8b2e7535c1d5f7a8ca8aa8e336884d849b781e3a4ea1858d7a5ac441
7
+ data.tar.gz: 7deef458663e54886b5ed878bab0b2365fe4c61509cb0446899d228ada8d404ab45046c2e542043cbdfc6a475b56f41a446d0c2080b2ecc1963051553c7c1c97
data/Gemfile ADDED
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gemspec
6
+
7
+ gem "rake", "~> 13.0"
8
+ gem "minitest", "~> 5.16"
9
+ gem 'standard', "~> 1.41"
data/Gemfile.lock ADDED
@@ -0,0 +1,124 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ stealth_dom_id (0.2.0)
5
+ actionview (>= 3.0, < 8.1)
6
+ activesupport (>= 3.0, < 8.1)
7
+
8
+ GEM
9
+ remote: https://rubygems.org/
10
+ specs:
11
+ actionview (7.2.2)
12
+ activesupport (= 7.2.2)
13
+ builder (~> 3.1)
14
+ erubi (~> 1.11)
15
+ rails-dom-testing (~> 2.2)
16
+ rails-html-sanitizer (~> 1.6)
17
+ activesupport (7.2.2)
18
+ base64
19
+ benchmark (>= 0.3)
20
+ bigdecimal
21
+ concurrent-ruby (~> 1.0, >= 1.3.1)
22
+ connection_pool (>= 2.2.5)
23
+ drb
24
+ i18n (>= 1.6, < 2)
25
+ logger (>= 1.4.2)
26
+ minitest (>= 5.1)
27
+ securerandom (>= 0.3)
28
+ tzinfo (~> 2.0, >= 2.0.5)
29
+ ast (2.4.2)
30
+ base64 (0.2.0)
31
+ benchmark (0.3.0)
32
+ bigdecimal (3.1.8)
33
+ builder (3.3.0)
34
+ concurrent-ruby (1.3.4)
35
+ connection_pool (2.4.1)
36
+ crass (1.0.6)
37
+ drb (2.2.1)
38
+ erubi (1.13.0)
39
+ i18n (1.14.6)
40
+ concurrent-ruby (~> 1.0)
41
+ json (2.7.5)
42
+ language_server-protocol (3.17.0.3)
43
+ lint_roller (1.1.0)
44
+ logger (1.6.1)
45
+ loofah (2.23.1)
46
+ crass (~> 1.0.2)
47
+ nokogiri (>= 1.12.0)
48
+ minitest (5.25.1)
49
+ nokogiri (1.16.7-aarch64-linux)
50
+ racc (~> 1.4)
51
+ nokogiri (1.16.7-arm-linux)
52
+ racc (~> 1.4)
53
+ nokogiri (1.16.7-arm64-darwin)
54
+ racc (~> 1.4)
55
+ nokogiri (1.16.7-x86-linux)
56
+ racc (~> 1.4)
57
+ nokogiri (1.16.7-x86_64-darwin)
58
+ racc (~> 1.4)
59
+ nokogiri (1.16.7-x86_64-linux)
60
+ racc (~> 1.4)
61
+ parallel (1.26.3)
62
+ parser (3.3.5.1)
63
+ ast (~> 2.4.1)
64
+ racc
65
+ racc (1.8.1)
66
+ rails-dom-testing (2.2.0)
67
+ activesupport (>= 5.0.0)
68
+ minitest
69
+ nokogiri (>= 1.6)
70
+ rails-html-sanitizer (1.6.0)
71
+ loofah (~> 2.21)
72
+ nokogiri (~> 1.14)
73
+ rainbow (3.1.1)
74
+ rake (13.2.1)
75
+ regexp_parser (2.9.2)
76
+ rubocop (1.66.1)
77
+ json (~> 2.3)
78
+ language_server-protocol (>= 3.17.0)
79
+ parallel (~> 1.10)
80
+ parser (>= 3.3.0.2)
81
+ rainbow (>= 2.2.2, < 4.0)
82
+ regexp_parser (>= 2.4, < 3.0)
83
+ rubocop-ast (>= 1.32.2, < 2.0)
84
+ ruby-progressbar (~> 1.7)
85
+ unicode-display_width (>= 2.4.0, < 3.0)
86
+ rubocop-ast (1.33.1)
87
+ parser (>= 3.3.1.0)
88
+ rubocop-performance (1.22.1)
89
+ rubocop (>= 1.48.1, < 2.0)
90
+ rubocop-ast (>= 1.31.1, < 2.0)
91
+ ruby-progressbar (1.13.0)
92
+ securerandom (0.3.1)
93
+ standard (1.41.1)
94
+ language_server-protocol (~> 3.17.0.2)
95
+ lint_roller (~> 1.0)
96
+ rubocop (~> 1.66.0)
97
+ standard-custom (~> 1.0.0)
98
+ standard-performance (~> 1.5)
99
+ standard-custom (1.0.2)
100
+ lint_roller (~> 1.0)
101
+ rubocop (~> 1.50)
102
+ standard-performance (1.5.0)
103
+ lint_roller (~> 1.1)
104
+ rubocop-performance (~> 1.22.0)
105
+ tzinfo (2.0.6)
106
+ concurrent-ruby (~> 1.0)
107
+ unicode-display_width (2.6.0)
108
+
109
+ PLATFORMS
110
+ aarch64-linux
111
+ arm-linux
112
+ arm64-darwin
113
+ x86-linux
114
+ x86_64-darwin
115
+ x86_64-linux
116
+
117
+ DEPENDENCIES
118
+ minitest (~> 5.16)
119
+ rake (~> 13.0)
120
+ standard (~> 1.41)
121
+ stealth_dom_id!
122
+
123
+ BUNDLED WITH
124
+ 2.5.22
data/README.md ADDED
@@ -0,0 +1,51 @@
1
+ # StealthDomId
2
+
3
+ stealth_dom_id extends Rails' [`dom_id`](https://github.com/rails/rails/blob/main/actionview/lib/action_view/record_identifier.rb) helper to generate DOM IDs using alternative columns instead of database primary keys. This helps prevent exposing internal database IDs
4
+
5
+
6
+ ## Installation
7
+
8
+ Install the gem and add to the application's Gemfile by executing:
9
+
10
+ ```bash
11
+ bundle add stealth_dom_id
12
+ ```
13
+
14
+ If bundler is not being used to manage dependencies, install the gem by executing:
15
+
16
+ ```bash
17
+ gem install stealth_dom_id
18
+ ```
19
+
20
+
21
+ ## Usage
22
+
23
+ This gem extends Rails' `dom_id` helper to use alternative columns instead of exposing database IDs in your HTML elements.
24
+
25
+ Instead of:
26
+ ```erb
27
+ <%= dom_id(@user) %>
28
+ # => "user_1"
29
+
30
+ <%= dom_id(@user, column: :public_id) %>
31
+ # => Outputs: "user_a1b2c3"
32
+ ```
33
+
34
+ The `column` attribute is optional. `prefix` attribute is also supported.
35
+
36
+ ```erb
37
+ <%= dom_id(@user, :admin, column: :public_id) %>
38
+ # => Outputs: "admin_user_a1b2c3"
39
+ ```
40
+
41
+
42
+ ## Development
43
+
44
+ After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake test` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
45
+
46
+ To install this gem onto your local machine, run `bundle exec rake install`.
47
+
48
+
49
+ ## License
50
+
51
+ The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
data/Rakefile ADDED
@@ -0,0 +1,10 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "bundler/gem_tasks"
4
+ require "minitest/test_task"
5
+
6
+ Minitest::TestTask.create
7
+
8
+ require "standard/rake"
9
+
10
+ task default: %i[test standard]
data/bin/console ADDED
@@ -0,0 +1,11 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ require "bundler/setup"
5
+ require "stealth_dom_id"
6
+
7
+ # You can add fixtures and/or initialization code here to make experimenting
8
+ # with your gem easier. You can also use a different console, if you like.
9
+
10
+ require "irb"
11
+ IRB.start(__FILE__)
data/bin/release ADDED
@@ -0,0 +1,19 @@
1
+ #!/usr/bin/env bash
2
+
3
+ VERSION=$1
4
+
5
+ if [ -z "$VERSION" ]; then
6
+ echo "Error: The version number is required."
7
+ echo "Usage: $0 <version-number>"
8
+ exit 1
9
+ fi
10
+
11
+ printf "# frozen_string_literal: true\n\nmodule StealthDomId\n VERSION = \"$VERSION\"\nend\n" > ./lib/stealth_dom_id/version.rb
12
+ bundle
13
+ git add Gemfile.lock lib/stealth_dom_id/version.rb
14
+ git commit -m "Bump version for $VERSION"
15
+ git push
16
+ git tag v$VERSION
17
+ git push --tags
18
+ gem build stealth_dom_id.gemspec
19
+ gem push "stealth_dom_id-$VERSION.gem"
data/bin/setup ADDED
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+ IFS=$'\n\t'
4
+ set -vx
5
+
6
+ bundle install
@@ -0,0 +1,34 @@
1
+ module StealthDomId
2
+ class ColumnError < ArgumentError; end
3
+
4
+ module Core
5
+ def dom_id(record_or_class, prefix = nil, column: nil)
6
+ unless record_or_class.is_a?(Class)
7
+ record_id = if column
8
+ record_key_for_dom_id_by_column(record_or_class, column: column)
9
+ else
10
+ record_key_for_dom_id(record_or_class)
11
+ end
12
+ end
13
+
14
+ if record_id
15
+ "#{dom_class(record_or_class, prefix)}#{JOIN}#{record_id}"
16
+ else
17
+ dom_class(record_or_class, prefix || NEW)
18
+ end
19
+ end
20
+
21
+ private
22
+
23
+ JOIN = "_".freeze
24
+ NEW = "new".freeze
25
+
26
+ def record_key_for_dom_id_by_column(record, column:)
27
+ key = [convert_to_model(record).send(column)]
28
+
29
+ key ? key.join(JOIN) : key
30
+ rescue NoMethodError => e
31
+ raise ColumnError, "[StealthDomId] Column '#{column}' not found on #{record.class}"
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,9 @@
1
+ module StealthDomId
2
+ class Railtie < Rails::Railtie
3
+ initializer "stealth_dom_id.action_view" do
4
+ ActiveSupport.on_load(:action_view) do
5
+ include StealthDomId::Core
6
+ end
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ module StealthDomId
4
+ VERSION = "0.2.0"
5
+ end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "stealth_dom_id/version"
4
+ require "stealth_dom_id/core"
5
+ require "active_support"
6
+
7
+ module StealthDomId
8
+ class Error < StandardError; end
9
+ end
10
+
11
+ ActiveSupport.on_load(:action_view) do
12
+ include StealthDomId::Core
13
+ end
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "lib/stealth_dom_id/version"
4
+
5
+ Gem::Specification.new do |spec|
6
+ spec.name = "stealth_dom_id"
7
+ spec.version = StealthDomId::VERSION
8
+ spec.authors = ["Rails Designer Developers"]
9
+ spec.email = ["devs@railsdesigner.com"]
10
+
11
+ spec.summary = "Extends Rails `dom_id` helper to support custom column-based identifiers"
12
+ spec.description = "StealthDomId extends Rails' `dom_id` helper to generate DOM IDs using alternative columns instead of database primary keys. This helps prevent exposing internal database IDs."
13
+ spec.homepage = "https://github.com/Rails-Designer/stealth_dom_id/"
14
+ spec.license = "MIT"
15
+ spec.required_ruby_version = ">= 3.0.0"
16
+
17
+ spec.metadata["homepage_uri"] = spec.homepage
18
+ spec.metadata["source_code_uri"] = "https://github.com/Rails-Designer/stealth_dom_id/"
19
+
20
+ spec.files = Dir["{bin,app,config,db,lib,public}/**/*", "Rakefile", "README.md", "stealth_dom_id.gemspec", "Gemfile", "Gemfile.lock"]
21
+
22
+ spec.required_ruby_version = ">= 3.0.0"
23
+ spec.add_dependency "actionview", ">= 3.0", "< 8.1"
24
+ spec.add_dependency "activesupport", ">= 3.0", "< 8.1"
25
+ end
metadata ADDED
@@ -0,0 +1,99 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: stealth_dom_id
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.2.0
5
+ platform: ruby
6
+ authors:
7
+ - Rails Designer Developers
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2024-11-06 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: actionview
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '3.0'
20
+ - - "<"
21
+ - !ruby/object:Gem::Version
22
+ version: '8.1'
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - ">="
28
+ - !ruby/object:Gem::Version
29
+ version: '3.0'
30
+ - - "<"
31
+ - !ruby/object:Gem::Version
32
+ version: '8.1'
33
+ - !ruby/object:Gem::Dependency
34
+ name: activesupport
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - ">="
38
+ - !ruby/object:Gem::Version
39
+ version: '3.0'
40
+ - - "<"
41
+ - !ruby/object:Gem::Version
42
+ version: '8.1'
43
+ type: :runtime
44
+ prerelease: false
45
+ version_requirements: !ruby/object:Gem::Requirement
46
+ requirements:
47
+ - - ">="
48
+ - !ruby/object:Gem::Version
49
+ version: '3.0'
50
+ - - "<"
51
+ - !ruby/object:Gem::Version
52
+ version: '8.1'
53
+ description: StealthDomId extends Rails' `dom_id` helper to generate DOM IDs using
54
+ alternative columns instead of database primary keys. This helps prevent exposing
55
+ internal database IDs.
56
+ email:
57
+ - devs@railsdesigner.com
58
+ executables: []
59
+ extensions: []
60
+ extra_rdoc_files: []
61
+ files:
62
+ - Gemfile
63
+ - Gemfile.lock
64
+ - README.md
65
+ - Rakefile
66
+ - bin/console
67
+ - bin/release
68
+ - bin/setup
69
+ - lib/stealth_dom_id.rb
70
+ - lib/stealth_dom_id/core.rb
71
+ - lib/stealth_dom_id/railtie.rb
72
+ - lib/stealth_dom_id/version.rb
73
+ - stealth_dom_id.gemspec
74
+ homepage: https://github.com/Rails-Designer/stealth_dom_id/
75
+ licenses:
76
+ - MIT
77
+ metadata:
78
+ homepage_uri: https://github.com/Rails-Designer/stealth_dom_id/
79
+ source_code_uri: https://github.com/Rails-Designer/stealth_dom_id/
80
+ post_install_message:
81
+ rdoc_options: []
82
+ require_paths:
83
+ - lib
84
+ required_ruby_version: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - ">="
87
+ - !ruby/object:Gem::Version
88
+ version: 3.0.0
89
+ required_rubygems_version: !ruby/object:Gem::Requirement
90
+ requirements:
91
+ - - ">="
92
+ - !ruby/object:Gem::Version
93
+ version: '0'
94
+ requirements: []
95
+ rubygems_version: 3.5.23
96
+ signing_key:
97
+ specification_version: 4
98
+ summary: Extends Rails `dom_id` helper to support custom column-based identifiers
99
+ test_files: []