parameter_sets 0.0.1
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 +7 -0
- data/lib/parameter_sets/controller_class_delegate.rb +17 -0
- data/lib/parameter_sets/controller_extension.rb +36 -0
- data/lib/parameter_sets/controller_instance_delegate.rb +26 -0
- data/lib/parameter_sets/error.rb +10 -0
- data/lib/parameter_sets/railtie.rb +13 -0
- data/lib/parameter_sets/schema.rb +34 -0
- data/lib/parameter_sets/schema_dsl.rb +24 -0
- data/lib/parameter_sets/version.rb +3 -0
- data/lib/parameter_sets.rb +3 -0
- metadata +54 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: cf4d020e1fd5ac660c72ce5c00e973237c2a469cf6ec326b26a17c0de3c58564
|
4
|
+
data.tar.gz: f92a2eb6dde40a6cefffdac63ec8eefe8deb96a2edb2feffedaaae266f6a046f
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: d3407e09f74ca259275ed27b99ee5a3cb749bf70e1d77420360dbec78dd5b1d3eb1c7a78af00432c9b7e861272ac2f4d134403510e40191bb0e610bd4a457beb
|
7
|
+
data.tar.gz: 73d67bda692338e7bfd5e5e39e72caf78e0f8bb4ca0d47491d16dfe01ea987853a74f46b5557f82f02da868294f1bdc6c799b99b56bc5052c687153c7e15b44b
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'parameter_sets/schema'
|
2
|
+
|
3
|
+
module ParameterSets
|
4
|
+
class ControllerClassDelegate
|
5
|
+
|
6
|
+
def initialize(controller_class)
|
7
|
+
@controller_class = controller_class
|
8
|
+
end
|
9
|
+
|
10
|
+
def param_set(name, options = {}, &block)
|
11
|
+
name = name.to_sym
|
12
|
+
schema = Schema.new(name, options, &block)
|
13
|
+
@controller_class.parameter_sets[name] = schema
|
14
|
+
end
|
15
|
+
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
require 'parameter_sets/controller_instance_delegate'
|
2
|
+
require 'parameter_sets/controller_class_delegate'
|
3
|
+
|
4
|
+
module ParameterSets
|
5
|
+
module ControllerExtension
|
6
|
+
|
7
|
+
module InstanceMethods
|
8
|
+
def param_set(*args)
|
9
|
+
parameter_sets_delegate.param_set(*args)
|
10
|
+
end
|
11
|
+
|
12
|
+
private
|
13
|
+
|
14
|
+
def parameter_sets_delegate
|
15
|
+
@parameter_sets_delegate ||= ControllerInstanceDelegate.new(self)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
module ClassMethods
|
20
|
+
def param_set(*args, &block)
|
21
|
+
parameter_sets_delegate.param_set(*args, &block)
|
22
|
+
end
|
23
|
+
|
24
|
+
def parameter_sets
|
25
|
+
@parameter_sets ||= {}
|
26
|
+
end
|
27
|
+
|
28
|
+
private
|
29
|
+
|
30
|
+
def parameter_sets_delegate
|
31
|
+
@parameter_sets_delegate ||= ControllerClassDelegate.new(self)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
module ParameterSets
|
2
|
+
class ControllerInstanceDelegate
|
3
|
+
|
4
|
+
def initialize(controller)
|
5
|
+
@controller = controller
|
6
|
+
end
|
7
|
+
|
8
|
+
def param_set(name, object = nil, options = {})
|
9
|
+
if name.is_a?(Symbol) || name.is_a?(String)
|
10
|
+
if schema = @controller.class.parameter_sets[name.to_sym]
|
11
|
+
schema.parameters(@controller, object, options)
|
12
|
+
else
|
13
|
+
raise ParameterSetNotDefinedError, "No parameter set named #{name} is defined"
|
14
|
+
end
|
15
|
+
else
|
16
|
+
param_set_for(name)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
def param_set_for(object, options = {})
|
21
|
+
param_set_name = object.model_name.param_key
|
22
|
+
param_set(param_set_name.to_sym, object, options)
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
module ParameterSets
|
2
|
+
class Railtie < Rails::Railtie
|
3
|
+
|
4
|
+
initializer 'parameter_sets.initialize' do
|
5
|
+
ActiveSupport.on_load(:action_controller) do
|
6
|
+
require 'parameter_sets/controller_extension'
|
7
|
+
include ParameterSets::ControllerExtension::InstanceMethods
|
8
|
+
extend ParameterSets::ControllerExtension::ClassMethods
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
require 'parameter_sets/error'
|
2
|
+
require 'parameter_sets/schema_dsl'
|
3
|
+
|
4
|
+
module ParameterSets
|
5
|
+
class Schema
|
6
|
+
|
7
|
+
def initialize(name, options = {}, &block)
|
8
|
+
@name = name
|
9
|
+
@options = options
|
10
|
+
@block = block
|
11
|
+
end
|
12
|
+
|
13
|
+
# Return the base parameter name to get from the request's parameters.
|
14
|
+
def base_param_name
|
15
|
+
@options[:param_name] || @name
|
16
|
+
end
|
17
|
+
|
18
|
+
# Return a suitablely scoped ActionController::Parameters object based on the
|
19
|
+
# rules defined for this param set.
|
20
|
+
#
|
21
|
+
# @param controller [ActionController::Base] the controller we're working within
|
22
|
+
# @param object [ActiveModel::Base] an object to generate attributes for
|
23
|
+
def parameters(controller, object = nil, options = {})
|
24
|
+
dsl = SchemaDSL.new
|
25
|
+
controller.instance_exec(dsl, object, options, &@block) if @block
|
26
|
+
if dsl.fields.empty?
|
27
|
+
raise NoParametersPermittedError, "No fields were permitted"
|
28
|
+
else
|
29
|
+
controller.params.require(base_param_name).permit(*dsl.fields)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
module ParameterSets
|
2
|
+
class SchemaDSL
|
3
|
+
|
4
|
+
def initialize
|
5
|
+
@fields = []
|
6
|
+
end
|
7
|
+
|
8
|
+
attr_reader :fields
|
9
|
+
|
10
|
+
def permit(field, *other_fields)
|
11
|
+
if other_fields[0].is_a?(Symbol)
|
12
|
+
permit(field)
|
13
|
+
other_fields.each { |field| permit(field) }
|
14
|
+
else
|
15
|
+
if options = other_fields[0]
|
16
|
+
@fields << {field => options}
|
17
|
+
else
|
18
|
+
@fields << field
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
24
|
+
end
|
metadata
ADDED
@@ -0,0 +1,54 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: parameter_sets
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Adam Cooke
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2018-02-19 00:00:00.000000000 Z
|
12
|
+
dependencies: []
|
13
|
+
description: A friendly schema for defining permitted parameters in Rails.
|
14
|
+
email:
|
15
|
+
- me@adamcooke.io
|
16
|
+
executables: []
|
17
|
+
extensions: []
|
18
|
+
extra_rdoc_files: []
|
19
|
+
files:
|
20
|
+
- lib/parameter_sets.rb
|
21
|
+
- lib/parameter_sets/controller_class_delegate.rb
|
22
|
+
- lib/parameter_sets/controller_extension.rb
|
23
|
+
- lib/parameter_sets/controller_instance_delegate.rb
|
24
|
+
- lib/parameter_sets/error.rb
|
25
|
+
- lib/parameter_sets/railtie.rb
|
26
|
+
- lib/parameter_sets/schema.rb
|
27
|
+
- lib/parameter_sets/schema_dsl.rb
|
28
|
+
- lib/parameter_sets/version.rb
|
29
|
+
homepage: https://github.com/adamcooke/strong_parameters
|
30
|
+
licenses:
|
31
|
+
- MIT
|
32
|
+
metadata: {}
|
33
|
+
post_install_message:
|
34
|
+
rdoc_options: []
|
35
|
+
require_paths:
|
36
|
+
- lib
|
37
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
38
|
+
requirements:
|
39
|
+
- - ">="
|
40
|
+
- !ruby/object:Gem::Version
|
41
|
+
version: '0'
|
42
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
43
|
+
requirements:
|
44
|
+
- - ">="
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: '0'
|
47
|
+
requirements: []
|
48
|
+
rubyforge_project:
|
49
|
+
rubygems_version: 2.7.4
|
50
|
+
signing_key:
|
51
|
+
specification_version: 4
|
52
|
+
summary: This gem provides a simple framework allowing greater controler over which
|
53
|
+
parameters to allow in Active Model mass assignment.
|
54
|
+
test_files: []
|