simple_params 1.3.4 → 1.3.5
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 +8 -8
- data/Gemfile.lock +1 -1
- data/lib/simple_params.rb +1 -1
- data/lib/simple_params/concerns/rails_helpers.rb +32 -2
- data/lib/simple_params/nested_params.rb +10 -1
- data/lib/simple_params/nil_params.rb +32 -3
- data/lib/simple_params/params.rb +9 -3
- data/lib/simple_params/version.rb +1 -1
- data/spec/acceptance_spec.rb +2 -2
- data/spec/nested_params_spec.rb +4 -5
- data/spec/nil_params_spec.rb +115 -38
- data/spec/rails_integration_spec.rb +2 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
OGI2NjkyN2FkNzY5NDVjYjQ0NmNlYjBhMzllYjFlNTk3ZWMwZWE4MA==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
ZWNhNzhlZDVlYzJhZjU5OTFiNTU4ZGYxYWRlMDcxMGJkMjg3MWZjZA==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
NWFlMTkxZDdkMGNiZjA3NWE1ZTgxZTFlMTdiMDU5YjY2M2NkM2M3ZmU1ZjU0
|
10
|
+
YTUyOWY2Mzc1Mjg3MjEzY2I5MGYwYWEwOTFmMmYxNDQxNmUyM2ZlZTAwYzFk
|
11
|
+
ZGU3NGY4OTkyZDgxNTBjNjM1MjE1YTIzNGUxMjIzODcyYTYxMWE=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
YzQxM2QxZjFjZjEwOGJjODY1MDg5N2M2YWYwYTJhZjAzNGFhMGJmNmQxMzc1
|
14
|
+
NzEyMjRhZWNkOThjNjk4MWQyNTMxYmNhNmQ3MThmMDQwODE4OGNmZDNjMDgx
|
15
|
+
NGJjMjEwMWYzZDI4NjViMmU2MzhmYjE0ZjI2M2RhYWY2NDQ5M2M=
|
data/Gemfile.lock
CHANGED
data/lib/simple_params.rb
CHANGED
@@ -10,8 +10,8 @@ require 'simple_params/concerns/rails_helpers'
|
|
10
10
|
require 'simple_params/concerns/strict_params'
|
11
11
|
require 'simple_params/concerns/validations'
|
12
12
|
require 'simple_params/params'
|
13
|
-
require 'simple_params/nil_params'
|
14
13
|
require 'simple_params/nested_params'
|
14
|
+
require 'simple_params/nil_params'
|
15
15
|
require 'simple_params/simple_params_error'
|
16
16
|
require 'simple_params/type_mappings'
|
17
17
|
require 'simple_params/api_pie_doc'
|
@@ -4,13 +4,39 @@ module SimpleParams
|
|
4
4
|
module RailsHelpers
|
5
5
|
extend ActiveSupport::Concern
|
6
6
|
included do
|
7
|
+
def to_model
|
8
|
+
self
|
9
|
+
end
|
10
|
+
def name_came_from_user?; end
|
11
|
+
def _destroy_came_from_user?; end
|
12
|
+
|
7
13
|
# Required for ActiveModel
|
8
14
|
def persisted?
|
9
15
|
false
|
10
16
|
end
|
17
|
+
|
18
|
+
# Needed for nested_model helpers that try to iterate over
|
19
|
+
# all associations
|
20
|
+
def each
|
21
|
+
self
|
22
|
+
end
|
23
|
+
|
24
|
+
def marked_for_destruction?
|
25
|
+
_destroy.eql?(true)
|
26
|
+
end
|
11
27
|
end
|
12
28
|
|
13
29
|
module ClassMethods
|
30
|
+
attr_accessor :rails_helpers
|
31
|
+
|
32
|
+
def with_rails_helpers
|
33
|
+
@rails_helpers = true
|
34
|
+
end
|
35
|
+
|
36
|
+
def using_rails_helpers?
|
37
|
+
@rails_helpers||= false
|
38
|
+
!!@rails_helpers
|
39
|
+
end
|
14
40
|
# http://apidock.com/rails/ActiveRecord/Reflection/AssociationReflection/klass
|
15
41
|
# class Author < ActiveRecord::Base
|
16
42
|
# has_many :books
|
@@ -22,16 +48,20 @@ module SimpleParams
|
|
22
48
|
nested_classes[assoc_sym]
|
23
49
|
end
|
24
50
|
|
25
|
-
# Used with reflect_on_association
|
51
|
+
# # Used with reflect_on_association
|
26
52
|
def klass
|
27
53
|
self
|
28
54
|
end
|
29
55
|
|
30
56
|
def define_rails_helpers(name, klass)
|
57
|
+
# define a _destroy param (Boolean, default: false)
|
58
|
+
unless method_defined?(:_destroy_attribute)
|
59
|
+
define_attribute(:_destroy, {type: :boolean, default: false})
|
60
|
+
end
|
61
|
+
|
31
62
|
# E.g. if we have a nested_class named :phones, then we need:
|
32
63
|
# - a method called :phones_attributes that also sets :phones
|
33
64
|
# - a method called :build_phone
|
34
|
-
|
35
65
|
define_method("#{name}_attributes=") do |value|
|
36
66
|
send("#{name}=", value)
|
37
67
|
end
|
@@ -31,7 +31,16 @@ module SimpleParams
|
|
31
31
|
def define_new_class(parent, name, options, &block)
|
32
32
|
klass_name = name.to_s.split('_').collect(&:capitalize).join
|
33
33
|
Class.new(self).tap do |klass|
|
34
|
+
parent.send(:remove_const, klass_name) if parent.const_defined?(klass_name)
|
34
35
|
parent.const_set(klass_name, klass)
|
36
|
+
klass.instance_eval <<-DEF
|
37
|
+
def parent_class
|
38
|
+
#{parent}
|
39
|
+
end
|
40
|
+
DEF
|
41
|
+
if klass.parent_class.using_rails_helpers?
|
42
|
+
klass.instance_eval("with_rails_helpers")
|
43
|
+
end
|
35
44
|
extend ActiveModel::Naming
|
36
45
|
klass.class_eval(&block)
|
37
46
|
klass.class_eval("self.options = #{options}")
|
@@ -45,7 +54,7 @@ module SimpleParams
|
|
45
54
|
end
|
46
55
|
|
47
56
|
def id
|
48
|
-
@id
|
57
|
+
@id ||= nil
|
49
58
|
end
|
50
59
|
|
51
60
|
def set_accessors(params={})
|
@@ -1,7 +1,27 @@
|
|
1
1
|
module SimpleParams
|
2
|
-
class NilParams <
|
3
|
-
|
4
|
-
|
2
|
+
class NilParams < NestedParams
|
3
|
+
class << self
|
4
|
+
def define_nil_class(parent)
|
5
|
+
define_new_class(parent, :nil_params, {}) do
|
6
|
+
end
|
7
|
+
end
|
8
|
+
|
9
|
+
def nested_classes
|
10
|
+
if respond_to?(:parent_class) && parent_class.present?
|
11
|
+
parent_class.nested_classes
|
12
|
+
else
|
13
|
+
{}
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
def initialize(params = {})
|
19
|
+
self.class.options ||= {}
|
20
|
+
@mocked_object = if parent_class
|
21
|
+
parent_class.new
|
22
|
+
else
|
23
|
+
nil
|
24
|
+
end
|
5
25
|
super(params)
|
6
26
|
end
|
7
27
|
|
@@ -32,5 +52,14 @@ module SimpleParams
|
|
32
52
|
super
|
33
53
|
end
|
34
54
|
end
|
55
|
+
|
56
|
+
private
|
57
|
+
def parent_class
|
58
|
+
if self.class.respond_to?(:parent_class)
|
59
|
+
self.class.parent_class
|
60
|
+
else
|
61
|
+
nil
|
62
|
+
end
|
63
|
+
end
|
35
64
|
end
|
36
65
|
end
|
data/lib/simple_params/params.rb
CHANGED
@@ -6,12 +6,12 @@ module SimpleParams
|
|
6
6
|
include Virtus.model
|
7
7
|
include ActiveModel::Validations
|
8
8
|
extend ActiveModel::Naming
|
9
|
+
include SimpleParams::RailsHelpers
|
9
10
|
include SimpleParams::Validations
|
10
11
|
include SimpleParams::HasAttributes
|
11
12
|
include SimpleParams::HasTypedParams
|
12
13
|
include SimpleParams::HashHelpers
|
13
14
|
include SimpleParams::DateTimeHelpers
|
14
|
-
include SimpleParams::RailsHelpers
|
15
15
|
include SimpleParams::StrictParams
|
16
16
|
|
17
17
|
class << self
|
@@ -59,7 +59,9 @@ module SimpleParams
|
|
59
59
|
@nested_classes ||= {}
|
60
60
|
@nested_classes[name.to_sym] = klass
|
61
61
|
define_nested_accessor(name, klass, opts)
|
62
|
-
|
62
|
+
if using_rails_helpers?
|
63
|
+
define_rails_helpers(name, klass)
|
64
|
+
end
|
63
65
|
end
|
64
66
|
|
65
67
|
def define_nested_accessor(name, klass, opts)
|
@@ -70,7 +72,11 @@ module SimpleParams
|
|
70
72
|
# This logic basically sets the nested class to an instance of itself, unless
|
71
73
|
# it is optional.
|
72
74
|
klass_instance = klass.new({}, self)
|
73
|
-
init_value = opts[:optional]
|
75
|
+
init_value = if opts[:optional]
|
76
|
+
NilParams.define_nil_class(klass).new
|
77
|
+
else
|
78
|
+
klass_instance
|
79
|
+
end
|
74
80
|
init_value = klass.hash? ? init_value : [init_value]
|
75
81
|
instance_variable_set("@#{name}", init_value)
|
76
82
|
end
|
data/spec/acceptance_spec.rb
CHANGED
@@ -193,11 +193,11 @@ describe SimpleParams::Params do
|
|
193
193
|
"current_time(6i)" => "56",
|
194
194
|
"current_time(5i)" => "11",
|
195
195
|
"current_time(4i)" => "9",
|
196
|
-
"current_time(3i)" => "
|
196
|
+
"current_time(3i)" => "29",
|
197
197
|
"current_time(2i)" => "10",
|
198
198
|
"current_time(1i)" => "2015"
|
199
199
|
)
|
200
|
-
params.current_time.should eq(DateTime.new(2015, 10,
|
200
|
+
params.current_time.should eq(DateTime.new(2015, 10, 29, 9, 11, 56))
|
201
201
|
end
|
202
202
|
end
|
203
203
|
|
data/spec/nested_params_spec.rb
CHANGED
@@ -2,11 +2,6 @@ require 'spec_helper'
|
|
2
2
|
require 'fixtures/dummy_params'
|
3
3
|
|
4
4
|
describe SimpleParams::NestedParams do
|
5
|
-
# Turn off Constant Redefined errors
|
6
|
-
before(:each) do
|
7
|
-
$VERBOSE = nil
|
8
|
-
end
|
9
|
-
|
10
5
|
class DummyParentClass < SimpleParams::Params
|
11
6
|
end
|
12
7
|
|
@@ -33,6 +28,10 @@ describe SimpleParams::NestedParams do
|
|
33
28
|
defined_class.name.should eq("DummyParentClass::MySpecialParams")
|
34
29
|
end
|
35
30
|
|
31
|
+
it "has correct parent class" do
|
32
|
+
defined_class.parent_class.should eq(DummyParentClass)
|
33
|
+
end
|
34
|
+
|
36
35
|
it "has correct options" do
|
37
36
|
defined_class.options.should eq(
|
38
37
|
{
|
data/spec/nil_params_spec.rb
CHANGED
@@ -1,58 +1,135 @@
|
|
1
1
|
require 'spec_helper'
|
2
|
-
require 'fixtures/dummy_params'
|
3
2
|
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
3
|
+
class DummyPersonParams < SimpleParams::Params
|
4
|
+
param :name
|
5
|
+
param :age, type: :integer
|
6
|
+
nested_hash :address do
|
7
|
+
param :street
|
8
|
+
param :city
|
9
|
+
end
|
10
|
+
nested_array :phones do
|
11
|
+
param :phone_number
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
class DummyDogParams < SimpleParams::Params
|
16
|
+
param :name
|
17
|
+
param :age, type: :integer
|
18
|
+
nested_hash :owners_address do
|
19
|
+
param :street
|
20
|
+
param :city
|
8
21
|
end
|
22
|
+
nested_array :puppies do
|
23
|
+
param :name
|
24
|
+
param :age
|
25
|
+
end
|
26
|
+
end
|
9
27
|
|
10
|
-
|
28
|
+
describe SimpleParams::NilParams do
|
29
|
+
describe "class methods", class_methods: true do
|
30
|
+
describe "define_nil_class" do
|
31
|
+
let(:defined_class) do
|
32
|
+
described_class.define_nil_class(DummyPersonParams)
|
33
|
+
end
|
11
34
|
|
12
|
-
|
13
|
-
|
35
|
+
it "has correct name" do
|
36
|
+
defined_class.name.should eq("DummyPersonParams::NilParams")
|
37
|
+
end
|
14
38
|
|
15
|
-
|
16
|
-
|
39
|
+
it "has correct parent class" do
|
40
|
+
defined_class.parent_class.should eq(DummyPersonParams)
|
41
|
+
end
|
42
|
+
|
43
|
+
it "has correct nested_classes" do
|
44
|
+
defined_class.nested_classes.should eq({
|
45
|
+
address: DummyPersonParams::Address,
|
46
|
+
phones: DummyPersonParams::Phones
|
47
|
+
})
|
48
|
+
end
|
17
49
|
end
|
18
50
|
end
|
19
51
|
|
20
|
-
describe "
|
21
|
-
|
52
|
+
describe "public methods", public_methods: true do
|
53
|
+
context "with no parent_class" do
|
54
|
+
let!(:instance) { described_class.new({})}
|
22
55
|
|
23
|
-
|
24
|
-
|
25
|
-
|
56
|
+
describe "#valid" do
|
57
|
+
it "is valid" do
|
58
|
+
instance.should be_valid
|
59
|
+
end
|
60
|
+
end
|
26
61
|
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
62
|
+
describe "#errors" do
|
63
|
+
it "has no errors" do
|
64
|
+
instance.errors.should be_empty
|
65
|
+
end
|
31
66
|
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
end
|
67
|
+
it "can clear errors" do
|
68
|
+
instance.valid?
|
69
|
+
instance.errors.clear.should eq([])
|
70
|
+
end
|
37
71
|
|
38
|
-
|
39
|
-
|
72
|
+
it "has no error messages" do
|
73
|
+
instance.valid?
|
74
|
+
instance.errors.messages.should be_empty
|
75
|
+
end
|
76
|
+
end
|
40
77
|
|
41
|
-
|
42
|
-
|
78
|
+
describe "#to_hash" do
|
79
|
+
it "is empty" do
|
80
|
+
instance.to_hash.should be_empty
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
describe "#mocked_params accessors" do
|
85
|
+
it "does not respond to random accessors" do
|
86
|
+
instance.should_not respond_to(:name)
|
87
|
+
instance.should_not respond_to(:age)
|
88
|
+
end
|
89
|
+
end
|
43
90
|
end
|
44
|
-
end
|
45
91
|
|
46
|
-
|
47
|
-
|
92
|
+
context "with parent class" do
|
93
|
+
let!(:instance) { described_class.define_nil_class(DummyPersonParams).new({})}
|
94
|
+
|
95
|
+
describe "#valid" do
|
96
|
+
it "is valid" do
|
97
|
+
instance.should be_valid
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
describe "#errors" do
|
102
|
+
it "has no errors" do
|
103
|
+
instance.errors.should be_empty
|
104
|
+
end
|
105
|
+
|
106
|
+
it "can clear errors" do
|
107
|
+
instance.valid?
|
108
|
+
instance.errors.clear.should eq([])
|
109
|
+
end
|
110
|
+
|
111
|
+
it "has no error messages" do
|
112
|
+
instance.valid?
|
113
|
+
instance.errors.messages.should be_empty
|
114
|
+
end
|
115
|
+
end
|
116
|
+
|
117
|
+
describe "#to_hash" do
|
118
|
+
it "is empty" do
|
119
|
+
instance.to_hash.should be_empty
|
120
|
+
end
|
121
|
+
end
|
48
122
|
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
123
|
+
describe "#mocked_params accessors" do
|
124
|
+
it "responds to parent class instance's accessors" do
|
125
|
+
instance.name.should be_nil
|
126
|
+
instance.age.should be_nil
|
127
|
+
instance.name = "Amy"
|
128
|
+
instance.age = 33
|
129
|
+
instance.name.should eq("Amy")
|
130
|
+
instance.age.should eq(33)
|
131
|
+
end
|
132
|
+
end
|
56
133
|
end
|
57
134
|
end
|
58
135
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: simple_params
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.3.
|
4
|
+
version: 1.3.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- brycesenz
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-09-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activemodel
|