despecable 0.0.2 → 0.0.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/despecable.rb +1 -0
- data/lib/despecable/action_controller.rb +9 -4
- data/lib/despecable/errors/missing_parameter_error.rb +1 -1
- data/lib/despecable/errors/unrecognized_parameter_error.rb +5 -0
- data/lib/despecable/me.rb +22 -3
- data/lib/despecable/spectator.rb +3 -1
- metadata +4 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5908cb3b218ad541788407780c2fdf1571e2a8af
|
4
|
+
data.tar.gz: 05a69230f3cfe3952c7163bec4cc5cd167a9b8c3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8e3c19a19df045e73e9d201b06f17cb2981410392cd183a0be9cdfdb1b53b32ada0db616ec5591d689ef2cce86879d277abda8c8ec332036842c50016b720516
|
7
|
+
data.tar.gz: b32f165a8d95a821f77df9ba053d7f2f15229a90bad0ae08bdda0895e32b172d9ec0cd9e3c0519b63fbdcc7874ba6efd9a5a35133989e63a4b78472ea49e5c5b
|
data/lib/despecable.rb
CHANGED
@@ -6,6 +6,7 @@ require "despecable/spectator.rb"
|
|
6
6
|
require "despecable/spectacles.rb"
|
7
7
|
|
8
8
|
require "despecable/errors/despecable_error.rb"
|
9
|
+
require "despecable/errors/unrecognized_parameter_error.rb"
|
9
10
|
require "despecable/errors/missing_parameter_error.rb"
|
10
11
|
require "despecable/errors/incorrect_parameter_error.rb"
|
11
12
|
require "despecable/errors/invalid_parameter_error.rb"
|
@@ -1,11 +1,16 @@
|
|
1
1
|
module Despecable
|
2
2
|
module ActionController
|
3
|
-
def despec(&blk)
|
4
|
-
|
3
|
+
def despec(*args, strict: false, &blk)
|
4
|
+
despecable_me(params.deep_dup).doit(*args, strict: strict, &blk)
|
5
5
|
end
|
6
6
|
|
7
|
-
def despec!(&blk)
|
8
|
-
|
7
|
+
def despec!(*args, &blk)
|
8
|
+
despec(*args, &blk)
|
9
|
+
params.merge!(despecable_me.params)
|
10
|
+
end
|
11
|
+
|
12
|
+
def despecable_me(params = {})
|
13
|
+
@despecable_me ||= Despecable::Me.new(params, request.query_parameters.merge(request.request_parameters))
|
9
14
|
end
|
10
15
|
end
|
11
16
|
end
|
data/lib/despecable/me.rb
CHANGED
@@ -2,14 +2,33 @@ module Despecable
|
|
2
2
|
class Me
|
3
3
|
attr_reader :params
|
4
4
|
|
5
|
-
|
5
|
+
# supplied_params are the params that were actually passed in by the user.
|
6
|
+
# In Rails, params has some additional keys (e.g. controller, action), so you can
|
7
|
+
# pass in request.query_parameters (GET) and/or request.request_parameters (POST)
|
8
|
+
# for supplied_params to correctly get only the user-supplied parameters.
|
9
|
+
def initialize(params, supplied_params = nil)
|
10
|
+
@supplied_params = (supplied_params || params).deep_dup
|
6
11
|
@params = params
|
12
|
+
@specd = []
|
7
13
|
end
|
8
14
|
|
9
|
-
def doit(&blk)
|
15
|
+
def doit(*args, strict: false, &blk)
|
10
16
|
spectator = Despecable::Spectator.new(@params)
|
11
|
-
spectator.
|
17
|
+
spectator.instance_exec(*args, &blk) unless blk.nil?
|
18
|
+
@specd += spectator.specd
|
19
|
+
despecably_strict if strict
|
12
20
|
return spectator.params
|
13
21
|
end
|
22
|
+
|
23
|
+
def unspecd
|
24
|
+
@supplied_params.keys.map(&:to_s) - @specd.map(&:to_s)
|
25
|
+
end
|
26
|
+
|
27
|
+
def despecably_strict
|
28
|
+
if !unspecd.empty?
|
29
|
+
list = unspecd.map{|x| "'#{x}'"}.join(", ")
|
30
|
+
raise Despecable::UnrecognizedParameterError, "Unrecognized parameters: #{list}"
|
31
|
+
end
|
32
|
+
end
|
14
33
|
end
|
15
34
|
end
|
data/lib/despecable/spectator.rb
CHANGED
@@ -1,10 +1,11 @@
|
|
1
1
|
module Despecable
|
2
2
|
class Spectator < BasicObject
|
3
|
-
attr_reader :params
|
3
|
+
attr_reader :params, :specd
|
4
4
|
|
5
5
|
def initialize(params)
|
6
6
|
@params = params
|
7
7
|
@spectacles = ::Despecable::Spectacles.new
|
8
|
+
@specd = []
|
8
9
|
end
|
9
10
|
|
10
11
|
def integer(name, options = {})
|
@@ -30,6 +31,7 @@ module Despecable
|
|
30
31
|
private
|
31
32
|
|
32
33
|
def _spec(name, type, options = {})
|
34
|
+
@specd.append(name)
|
33
35
|
if !params.key?(name) && options[:default]
|
34
36
|
params[name] = options[:default]
|
35
37
|
elsif options[:arrayable] && @spectacles.arrayable?(params[name])
|
metadata
CHANGED
@@ -1,17 +1,17 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: despecable
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Andrew Schwartz
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-10-
|
11
|
+
date: 2017-10-13 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: Write self-documenting parameter validation and type-casting in your
|
14
|
-
API actions.
|
14
|
+
API actions. Docs and development at https://github.com/ozydingo/despecable.
|
15
15
|
email: ozydingo@gmail.com
|
16
16
|
executables: []
|
17
17
|
extensions: []
|
@@ -23,6 +23,7 @@ files:
|
|
23
23
|
- lib/despecable/errors/incorrect_parameter_error.rb
|
24
24
|
- lib/despecable/errors/invalid_parameter_error.rb
|
25
25
|
- lib/despecable/errors/missing_parameter_error.rb
|
26
|
+
- lib/despecable/errors/unrecognized_parameter_error.rb
|
26
27
|
- lib/despecable/me.rb
|
27
28
|
- lib/despecable/spectacles.rb
|
28
29
|
- lib/despecable/spectator.rb
|