safe_params 0.1.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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 92c40ab05cfbf747a0102e131d10e9b38cf7aa9e7f8927606d8c2d8545698a85
4
+ data.tar.gz: 47c3f973d54db4ff9d991b58aadeb200499e3b88a1ce777e841eec0fa660d62d
5
+ SHA512:
6
+ metadata.gz: dcf9b7804bdae3758ca84a2ca232b8a8e76b007876d11986ee5fc52c1de9ed5ba2148d8c4b337b4a48b2bc31814add26e9cd11f56059cdcb276ac44c10ded0ee
7
+ data.tar.gz: 6a9386ed739424f0f6283287a4ce716088d4e56f4b2d5c0df8c3c65e56f37f8807639724351cc0bfcd7f5d444ef1cbf0b5117c8fee33dfa092cad097b9c64c39
data/README.md ADDED
@@ -0,0 +1,102 @@
1
+ # SafeParams
2
+
3
+ A Rails gem that simplifies strong parameter handling by defining permitted attributes in the model.
4
+
5
+ ## Features
6
+
7
+ - Define strong parameters in the model
8
+ - Supports nested attributes
9
+ - Load attributes from a YAML or JSON config
10
+ - CLI generator for auto-generating safe_params lines
11
+
12
+ ## Installation
13
+
14
+ Add this line to your application's Gemfile:
15
+
16
+ ```ruby
17
+ gem 'safe_params'
18
+ ```
19
+
20
+ And then execute:
21
+
22
+ ```bash
23
+ bundle install
24
+ ```
25
+
26
+ Or install it yourself as:
27
+
28
+ ```bash
29
+ gem install safe_params
30
+ ```
31
+
32
+ ## Usage
33
+
34
+ ### In the Model
35
+
36
+ ```ruby
37
+ class User < ApplicationRecord
38
+ include SafeParams
39
+ safe_params :name, :email, nested: { address_attributes: [:city, :zip] }
40
+ end
41
+ ```
42
+
43
+ ### In the Controller
44
+
45
+ ```ruby
46
+ def user_params
47
+ safe_params(User)
48
+ end
49
+ ```
50
+
51
+ ### YAML Config (Optional)
52
+
53
+ `config/safe_params.yml`
54
+
55
+ ```yaml
56
+ User:
57
+ - name
58
+ - email
59
+ - address_attributes:
60
+ - city
61
+ - zip
62
+ ```
63
+
64
+ ### CLI Generator
65
+
66
+ ```bash
67
+ bundle exec ruby -Ilib -r safe_params/cli -e "SafeParams::CLI.start(['generate', 'User'])"
68
+ ```
69
+
70
+ Output:
71
+
72
+ ```ruby
73
+ safe_params :name, :email, :address_attributes => [:city, :zip]
74
+ ```
75
+
76
+ ## CLI Usage
77
+
78
+ After installing the gem, you can use the CLI to generate a `safe_params` line for any ActiveRecord model:
79
+
80
+ ```bash
81
+ safe_params generate User
82
+ ```
83
+
84
+ Output:
85
+
86
+ ```
87
+ safe_params :name, :email, :address_attributes
88
+ ```
89
+
90
+ Show the gem version:
91
+
92
+ ```bash
93
+ safe_params version
94
+ ```
95
+
96
+ ## Contributing
97
+
98
+ Bug reports and pull requests are welcome on GitHub at [https://github.com/tewarideepak/safe_params_gem](https://github.com/tewarideepak/safe_params_gem).
99
+
100
+ ## License
101
+
102
+ This project is licensed under the MIT License.
data/bin/safe_params ADDED
@@ -0,0 +1,4 @@
1
+ #!/usr/bin/env ruby
2
+ # CLI entrypoint for SafeParams
3
+ require 'safe_params/cli'
4
+ SafeParams::CLI.start(ARGV)
@@ -0,0 +1,34 @@
1
+ require 'thor'
2
+
3
+ # Command-line interface for SafeParams
4
+ module SafeParams
5
+ class CLI < Thor
6
+ desc "generate MODEL", "Print a safe_params line for the given ActiveRecord model."
7
+ def generate(model_name)
8
+ model_class = Object.const_get(model_name)
9
+ unless model_class.respond_to?(:columns)
10
+ warn "Model '#{model_name}' does not support .columns. Is it an ActiveRecord model?"
11
+ exit(1)
12
+ end
13
+ columns = model_class.columns.reject { |c| %w[id created_at updated_at].include?(c.name) }
14
+ if columns.empty?
15
+ puts "safe_params"
16
+ else
17
+ keys = columns.map { |c| c.name.to_sym }
18
+ puts "safe_params #{keys.map(&:inspect).join(', ')}"
19
+ end
20
+ rescue NameError
21
+ warn "Model '#{model_name}' not found. Please check the model name."
22
+ exit(1)
23
+ rescue => e
24
+ warn "Unexpected error: #{e.class}: #{e.message}"
25
+ exit(1)
26
+ end
27
+
28
+ desc "version", "Show SafeParams version"
29
+ def version
30
+ require 'safe_params/version'
31
+ puts "SafeParams v#{SafeParams::VERSION}"
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,15 @@
1
+ require "yaml"
2
+ require "json"
3
+
4
+ module SafeParams
5
+ module ConfigLoader
6
+ def self.load_for(model_name)
7
+ file = Dir[Rails.root.join("config/safe_params.{yml,json}")].first
8
+ return [] unless file && File.exist?(file)
9
+
10
+ data = file.end_with?(".json") ? JSON.parse(File.read(file)) : YAML.load_file(file)
11
+ data ||= {}
12
+ data[model_name.to_s] || []
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,25 @@
1
+ module SafeParams
2
+ module Helper
3
+ def safe_params(model)
4
+ name = model.name.underscore
5
+ config_params = SafeParams::ConfigLoader.load_for(model.name)
6
+
7
+ if Array(config_params).any?
8
+ params.require(name.to_sym).permit(*symbolize_deep(config_params))
9
+ else
10
+ permitted = model.respond_to?(:permitted_attributes) ? model.permitted_attributes : nil
11
+ params.require(name.to_sym).permit(permitted)
12
+ end
13
+ end
14
+
15
+ private
16
+
17
+ def symbolize_deep(obj)
18
+ case obj
19
+ when Hash then obj.transform_keys(&:to_sym).transform_values { |v| symbolize_deep(v) }
20
+ when Array then obj.map { |e| symbolize_deep(e) }
21
+ else obj
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,11 @@
1
+ require 'rails/railtie'
2
+
3
+ module SafeParams
4
+ class Railtie < Rails::Railtie
5
+ initializer 'safe_params.helper' do
6
+ ActiveSupport.on_load(:action_controller) do
7
+ include SafeParams::Helper
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,3 @@
1
+ module SafeParams
2
+ VERSION = "0.1.0"
3
+ end
@@ -0,0 +1,23 @@
1
+ require "safe_params/version"
2
+ require "safe_params/railtie" if defined?(Rails)
3
+ require "safe_params/helper"
4
+ require "safe_params/config_loader"
5
+ require "safe_params/cli"
6
+
7
+ module SafeParams
8
+ def self.included(base)
9
+ base.extend ClassMethods
10
+ end
11
+
12
+ module ClassMethods
13
+ def safe_params(*attrs, nested: {})
14
+ @safe_attrs = attrs.map(&:to_sym)
15
+ @nested_attrs = nested.transform_keys(&:to_sym)
16
+ end
17
+
18
+ def permitted_attributes
19
+ nested = @nested_attrs.map { |key, val| { key => val } }
20
+ @safe_attrs + nested
21
+ end
22
+ end
23
+ end
metadata ADDED
@@ -0,0 +1,83 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: safe_params
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Deepak Tewari
8
+ bindir: bin
9
+ cert_chain: []
10
+ date: 1980-01-02 00:00:00.000000000 Z
11
+ dependencies:
12
+ - !ruby/object:Gem::Dependency
13
+ name: rails
14
+ requirement: !ruby/object:Gem::Requirement
15
+ requirements:
16
+ - - ">="
17
+ - !ruby/object:Gem::Version
18
+ version: '0'
19
+ type: :runtime
20
+ prerelease: false
21
+ version_requirements: !ruby/object:Gem::Requirement
22
+ requirements:
23
+ - - ">="
24
+ - !ruby/object:Gem::Version
25
+ version: '0'
26
+ - !ruby/object:Gem::Dependency
27
+ name: rspec
28
+ requirement: !ruby/object:Gem::Requirement
29
+ requirements:
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: '0'
33
+ type: :development
34
+ prerelease: false
35
+ version_requirements: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - ">="
38
+ - !ruby/object:Gem::Version
39
+ version: '0'
40
+ description: SafeParams is a Rails gem for strong parameter handling. Define permitted
41
+ attributes in your model or a YAML/JSON config. Supports nested attributes and includes
42
+ a CLI for generating safe_params lines.
43
+ email:
44
+ - tewarid69@gmail.com
45
+ executables:
46
+ - safe_params
47
+ extensions: []
48
+ extra_rdoc_files: []
49
+ files:
50
+ - README.md
51
+ - bin/safe_params
52
+ - lib/safe_params.rb
53
+ - lib/safe_params/cli.rb
54
+ - lib/safe_params/config_loader.rb
55
+ - lib/safe_params/helper.rb
56
+ - lib/safe_params/railtie.rb
57
+ - lib/safe_params/version.rb
58
+ homepage: https://github.com/tewarideepak/safe_params
59
+ licenses:
60
+ - MIT
61
+ metadata:
62
+ source_code_uri: https://github.com/tewarideepak/safe_params
63
+ changelog_uri: https://github.com/tewarideepak/safe_params/blob/main/CHANGELOG.md
64
+ bug_tracker_uri: https://github.com/tewarideepak/safe_params/issues
65
+ rdoc_options: []
66
+ require_paths:
67
+ - lib
68
+ required_ruby_version: !ruby/object:Gem::Requirement
69
+ requirements:
70
+ - - ">="
71
+ - !ruby/object:Gem::Version
72
+ version: '0'
73
+ required_rubygems_version: !ruby/object:Gem::Requirement
74
+ requirements:
75
+ - - ">="
76
+ - !ruby/object:Gem::Version
77
+ version: '0'
78
+ requirements: []
79
+ rubygems_version: 3.7.1
80
+ specification_version: 4
81
+ summary: Strong parameters helper for Rails. Define permitted attributes in your model
82
+ or config, with CLI support.
83
+ test_files: []