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 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