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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 269604b0ffb17ef578acfa582c7842445bed4c4c
4
- data.tar.gz: 7a9f3d1fbee596ef848848b77faaf5cf535b1bc2
3
+ metadata.gz: 5908cb3b218ad541788407780c2fdf1571e2a8af
4
+ data.tar.gz: 05a69230f3cfe3952c7163bec4cc5cd167a9b8c3
5
5
  SHA512:
6
- metadata.gz: e207aaec581f73bd98f52c01e9e2906cd1a784b86dcf682b51f67923d1df59f7ae6a16a9426684b8c1e9696c9d37f2a6bb09410d02afb82905059d15df26ef9c
7
- data.tar.gz: d2b3115499c5418afa3a13589fa1f3a049fbc64c2aca21c830774c2f5897791c98c048842fbe07def6322922e7580efa5fdd6850a9dada7fb7d027d448a45e45
6
+ metadata.gz: 8e3c19a19df045e73e9d201b06f17cb2981410392cd183a0be9cdfdb1b53b32ada0db616ec5591d689ef2cce86879d277abda8c8ec332036842c50016b720516
7
+ data.tar.gz: b32f165a8d95a821f77df9ba053d7f2f15229a90bad0ae08bdda0895e32b172d9ec0cd9e3c0519b63fbdcc7874ba6efd9a5a35133989e63a4b78472ea49e5c5b
@@ -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
- Despecable::Me.new(params.deep_dup).doit(&blk)
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
- Despecable::Me.new(params).doit(&blk)
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
@@ -1,5 +1,5 @@
1
1
  class Despecable::MissingParameterError < Despecable::DespecableError
2
- def intro_message(name)
2
+ def introduction(name)
3
3
  "Missing required parameter '#{name}'."
4
4
  end
5
5
  end
@@ -0,0 +1,5 @@
1
+ class Despecable::UnrecognizedParameterError < Despecable::DespecableError
2
+ def intro_message(name)
3
+ "Unrecognized parameter name: '#{name}'"
4
+ end
5
+ end
@@ -2,14 +2,33 @@ module Despecable
2
2
  class Me
3
3
  attr_reader :params
4
4
 
5
- def initialize(params)
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.instance_eval(&blk)
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
@@ -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.2
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-10 00:00:00.000000000 Z
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