despecable 0.0.2 → 0.0.3
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 +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
|