strelka 0.5.0.pre.393 → 0.5.0
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
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +0 -0
- data/History.rdoc +8 -0
- data/lib/strelka.rb +1 -1
- data/lib/strelka/app/restresources.rb +11 -1
- data/lib/strelka/paramvalidator.rb +14 -0
- data/spec/strelka/paramvalidator_spec.rb +218 -54
- metadata +4 -4
- metadata.gz.sig +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e6d4fe519bbd4afaacce50262948b7a079041378
|
4
|
+
data.tar.gz: 8c38f999384187837c9b15b9786c60a8099aa4fe
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 367d122a8c1ca23bb8e49a172e273a5a2b6baba2f0bdae38f576871649ae76637dcd75cf90d3f926852010058c7fab7b9d4ca081da5e056b5d3d1cf91169ff3c
|
7
|
+
data.tar.gz: 7da4ade4e80c6a066e20d20748167f583f2536ae18d078798db28a428742f52c76c57ff527e5dfa400f81a175a3cad9988d96b9658f00c0ff0b74fee54aa051d
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
data.tar.gz.sig
CHANGED
Binary file
|
data/History.rdoc
CHANGED
@@ -1,3 +1,11 @@
|
|
1
|
+
== v0.5.0 [2013-05-17] Michael Granger <ged@FaerieMUD.org>
|
2
|
+
|
3
|
+
- Add :datetime builtin validator
|
4
|
+
- Add builtin validators for various checksums.
|
5
|
+
- Wire up custom mediatype handlers to content negotiation. Fixes #5.
|
6
|
+
- Bump Pluggability dependency
|
7
|
+
|
8
|
+
|
1
9
|
== v0.4.0 [2013-03-26] Michael Granger <ged@FaerieMUD.org>
|
2
10
|
|
3
11
|
- Handle Strelka::App subclass inheritance, add Strelka::App syntactic
|
data/lib/strelka.rb
CHANGED
@@ -65,6 +65,17 @@ require 'strelka/app' unless defined?( Strelka::App )
|
|
65
65
|
# end
|
66
66
|
#
|
67
67
|
#
|
68
|
+
# == Supported/Planned Options
|
69
|
+
#
|
70
|
+
# The 'resource' directive accepts options that control which methods it
|
71
|
+
# creates for the specified resource:
|
72
|
+
#
|
73
|
+
# [√] :readonly => false
|
74
|
+
# [ ] :include => <array of verbs>
|
75
|
+
# [ ] :exclude => <array of verbs>
|
76
|
+
# [ ] :subsets => <boolean or array>
|
77
|
+
# [ ] :associations => <boolean or array>
|
78
|
+
#
|
68
79
|
module Strelka::App::RestResources
|
69
80
|
extend Strelka::Plugin
|
70
81
|
|
@@ -203,7 +214,6 @@ module Strelka::App::RestResources
|
|
203
214
|
attributes.map {|name,type| " "}
|
204
215
|
end
|
205
216
|
|
206
|
-
|
207
217
|
return res
|
208
218
|
end
|
209
219
|
|
@@ -427,7 +427,13 @@ class Strelka::ParamValidator
|
|
427
427
|
:uri => /^(?<uri>#{URI::URI_REF})$/,
|
428
428
|
:uuid => /^(?<uuid>[[:xdigit:]]{8}(?:-[[:xdigit:]]{4}){3}-[[:xdigit:]]{12})$/i,
|
429
429
|
:date => /.*\d.*/,
|
430
|
+
:datetime => /.*\d.*/,
|
430
431
|
:json => JSON_VALIDATOR_RE,
|
432
|
+
:md5sum => /^(?<md5sum>[[:xdigit:]]{32})$/i,
|
433
|
+
:sha1sum => /^(?<sha1sum>[[:xdigit:]]{40})$/i,
|
434
|
+
:sha256sum => /^(?<sha256sum>[[:xdigit:]]{64})$/i,
|
435
|
+
:sha384sum => /^(?<sha384sum>[[:xdigit:]]{96})$/i,
|
436
|
+
:sha512sum => /^(?<sha512sum>[[:xdigit:]]{128})$/i,
|
431
437
|
}
|
432
438
|
|
433
439
|
# Field values which result in a valid ‘true’ value for :boolean constraints
|
@@ -517,6 +523,14 @@ class Strelka::ParamValidator
|
|
517
523
|
end
|
518
524
|
|
519
525
|
|
526
|
+
### Constrain a value to a parseable Date
|
527
|
+
def post_process_datetime( val )
|
528
|
+
return Time.parse( val )
|
529
|
+
rescue ArgumentError
|
530
|
+
return nil
|
531
|
+
end
|
532
|
+
|
533
|
+
|
520
534
|
### Constrain a value to a Float
|
521
535
|
def post_process_float( val )
|
522
536
|
return Float( val.to_s )
|
@@ -360,6 +360,60 @@ describe Strelka::ParamValidator do
|
|
360
360
|
|
361
361
|
end # describe "hash parameters"
|
362
362
|
|
363
|
+
describe "merging new parameters" do
|
364
|
+
|
365
|
+
it "can be merged with another set of parameters" do
|
366
|
+
@validator.add( :foo, :integer, :required )
|
367
|
+
@validator.validate( {} )
|
368
|
+
newval = @validator.merge( 'foo' => '1' )
|
369
|
+
|
370
|
+
newval.should_not equal( @validator )
|
371
|
+
|
372
|
+
@validator.should_not be_okay()
|
373
|
+
@validator.should have_errors()
|
374
|
+
newval.should be_okay()
|
375
|
+
newval.should_not have_errors()
|
376
|
+
|
377
|
+
@validator[:foo].should == nil
|
378
|
+
newval[:foo].should == 1
|
379
|
+
end
|
380
|
+
|
381
|
+
it "can have required parameters merged into it after the initial validation" do
|
382
|
+
@validator.add( :foo, :integer, :required )
|
383
|
+
@validator.validate( {} )
|
384
|
+
@validator.merge!( 'foo' => '1' )
|
385
|
+
|
386
|
+
@validator.should be_okay()
|
387
|
+
@validator.should_not have_errors()
|
388
|
+
|
389
|
+
@validator[:foo].should == 1
|
390
|
+
end
|
391
|
+
|
392
|
+
it "can have optional parameters merged into it after the initial validation" do
|
393
|
+
@validator.add( :foom, /^\d+$/ )
|
394
|
+
@validator.validate( {} )
|
395
|
+
@validator.merge!( 'foom' => '5' )
|
396
|
+
|
397
|
+
@validator.should be_okay()
|
398
|
+
@validator.should_not have_errors()
|
399
|
+
|
400
|
+
@validator[:foom].should == '5'
|
401
|
+
end
|
402
|
+
|
403
|
+
it "rejects invalid parameters when they're merged after initial validation" do
|
404
|
+
@validator.add( :foom, /^\d+$/ )
|
405
|
+
@validator.add( :bewm, /^\d+$/ )
|
406
|
+
@validator.validate( 'foom' => "1" )
|
407
|
+
|
408
|
+
@validator.merge!( 'bewm' => 'buckwheat noodles' )
|
409
|
+
|
410
|
+
@validator.should_not be_okay()
|
411
|
+
@validator.should have_errors()
|
412
|
+
@validator[:bewm].should == nil
|
413
|
+
end
|
414
|
+
|
415
|
+
end # describe "merging new parameters"
|
416
|
+
|
363
417
|
describe "builtin constraint type" do
|
364
418
|
|
365
419
|
it "treats ArgumentErrors as validation failures" do
|
@@ -715,6 +769,41 @@ describe Strelka::ParamValidator do
|
|
715
769
|
|
716
770
|
end
|
717
771
|
|
772
|
+
describe ":datetime constaints" do
|
773
|
+
|
774
|
+
before( :each ) do
|
775
|
+
@validator.add( :expires, :datetime )
|
776
|
+
end
|
777
|
+
|
778
|
+
it "accepts dates" do
|
779
|
+
@validator.validate( 'expires' => '2008-11-18' )
|
780
|
+
|
781
|
+
@validator.should be_okay()
|
782
|
+
@validator.should_not have_errors()
|
783
|
+
|
784
|
+
@validator[:expires].should == Time.parse( '2008-11-18' )
|
785
|
+
end
|
786
|
+
|
787
|
+
it "accepts a date with a time" do
|
788
|
+
@validator.validate( 'expires' => '2008-11-18T12:31:18.818Z' )
|
789
|
+
|
790
|
+
@validator.should be_okay()
|
791
|
+
@validator.should_not have_errors()
|
792
|
+
|
793
|
+
@validator[:expires].should == Time.parse( '2008-11-18T12:31:18.818Z' )
|
794
|
+
end
|
795
|
+
|
796
|
+
it "rejects non-dates" do
|
797
|
+
@validator.validate( 'expires' => 'someday' )
|
798
|
+
|
799
|
+
@validator.should_not be_okay()
|
800
|
+
@validator.should have_errors()
|
801
|
+
|
802
|
+
@validator[:expires].should be_nil()
|
803
|
+
end
|
804
|
+
|
805
|
+
end
|
806
|
+
|
718
807
|
describe ":uri constraints" do
|
719
808
|
VALID_URIS = %w{
|
720
809
|
http://127.0.0.1
|
@@ -1066,60 +1155,6 @@ describe Strelka::ParamValidator do
|
|
1066
1155
|
|
1067
1156
|
end
|
1068
1157
|
|
1069
|
-
describe "merging new parameters" do
|
1070
|
-
|
1071
|
-
it "can be merged with another set of parameters" do
|
1072
|
-
@validator.add( :foo, :integer, :required )
|
1073
|
-
@validator.validate( {} )
|
1074
|
-
newval = @validator.merge( 'foo' => '1' )
|
1075
|
-
|
1076
|
-
newval.should_not equal( @validator )
|
1077
|
-
|
1078
|
-
@validator.should_not be_okay()
|
1079
|
-
@validator.should have_errors()
|
1080
|
-
newval.should be_okay()
|
1081
|
-
newval.should_not have_errors()
|
1082
|
-
|
1083
|
-
@validator[:foo].should == nil
|
1084
|
-
newval[:foo].should == 1
|
1085
|
-
end
|
1086
|
-
|
1087
|
-
it "can have required parameters merged into it after the initial validation" do
|
1088
|
-
@validator.add( :foo, :integer, :required )
|
1089
|
-
@validator.validate( {} )
|
1090
|
-
@validator.merge!( 'foo' => '1' )
|
1091
|
-
|
1092
|
-
@validator.should be_okay()
|
1093
|
-
@validator.should_not have_errors()
|
1094
|
-
|
1095
|
-
@validator[:foo].should == 1
|
1096
|
-
end
|
1097
|
-
|
1098
|
-
it "can have optional parameters merged into it after the initial validation" do
|
1099
|
-
@validator.add( :foom, /^\d+$/ )
|
1100
|
-
@validator.validate( {} )
|
1101
|
-
@validator.merge!( 'foom' => '5' )
|
1102
|
-
|
1103
|
-
@validator.should be_okay()
|
1104
|
-
@validator.should_not have_errors()
|
1105
|
-
|
1106
|
-
@validator[:foom].should == '5'
|
1107
|
-
end
|
1108
|
-
|
1109
|
-
it "rejects invalid parameters when they're merged after initial validation" do
|
1110
|
-
@validator.add( :foom, /^\d+$/ )
|
1111
|
-
@validator.add( :bewm, /^\d+$/ )
|
1112
|
-
@validator.validate( 'foom' => "1" )
|
1113
|
-
|
1114
|
-
@validator.merge!( 'bewm' => 'buckwheat noodles' )
|
1115
|
-
|
1116
|
-
@validator.should_not be_okay()
|
1117
|
-
@validator.should have_errors()
|
1118
|
-
@validator[:bewm].should == nil
|
1119
|
-
end
|
1120
|
-
|
1121
|
-
end
|
1122
|
-
|
1123
1158
|
describe ":json constraint" do
|
1124
1159
|
|
1125
1160
|
# Some tests derived from the json-smart feature test matrix by Uriel Chemouni:
|
@@ -1344,9 +1379,138 @@ describe Strelka::ParamValidator do
|
|
1344
1379
|
end
|
1345
1380
|
end
|
1346
1381
|
|
1382
|
+
describe ":md5sum constraint" do
|
1383
|
+
|
1384
|
+
let( :sum ) { Digest::MD5.hexdigest('an api key') }
|
1385
|
+
|
1386
|
+
it "accepts a 32-character hex string" do
|
1387
|
+
@validator.add( :apikey, :md5sum )
|
1388
|
+
@validator.validate( 'apikey' => sum )
|
1389
|
+
|
1390
|
+
@validator.should_not have_errors()
|
1391
|
+
@validator.should be_okay()
|
1392
|
+
|
1393
|
+
@validator[:apikey].should == sum
|
1394
|
+
end
|
1395
|
+
|
1396
|
+
it "rejects anything but a 32-character hex string" do
|
1397
|
+
@validator.add( :apikey, :md5sum )
|
1398
|
+
@validator.validate( 'apikey' => 'my ponies have WINGS!!!11' )
|
1399
|
+
|
1400
|
+
@validator.should have_errors()
|
1401
|
+
@validator.should_not be_okay()
|
1402
|
+
|
1403
|
+
@validator[:apikey].should be_nil()
|
1404
|
+
end
|
1405
|
+
|
1406
|
+
end
|
1407
|
+
|
1408
|
+
describe ":sha1sum constraint" do
|
1409
|
+
|
1410
|
+
let( :sum ) { Digest::SHA1.hexdigest('an api key') }
|
1411
|
+
|
1412
|
+
it "accepts a 40-character hex string" do
|
1413
|
+
@validator.add( :apikey, :sha1sum )
|
1414
|
+
@validator.validate( 'apikey' => sum )
|
1415
|
+
|
1416
|
+
@validator.should_not have_errors()
|
1417
|
+
@validator.should be_okay()
|
1418
|
+
|
1419
|
+
@validator[:apikey].should == sum
|
1420
|
+
end
|
1421
|
+
|
1422
|
+
it "rejects anything but a 40-character hex string" do
|
1423
|
+
@validator.add( :apikey, :sha1sum )
|
1424
|
+
@validator.validate( 'apikey' => '084444a9979487f43a238e45afc1ec1277a' )
|
1425
|
+
|
1426
|
+
@validator.should have_errors()
|
1427
|
+
@validator.should_not be_okay()
|
1428
|
+
|
1429
|
+
@validator[:apikey].should be_nil()
|
1430
|
+
end
|
1431
|
+
|
1432
|
+
end
|
1433
|
+
|
1434
|
+
describe ":sha256sum constraint" do
|
1435
|
+
|
1436
|
+
let( :sum ) { Digest::SHA256.hexdigest('an api key') }
|
1437
|
+
|
1438
|
+
it "accepts a 64-character hex string" do
|
1439
|
+
@validator.add( :apikey, :sha256sum )
|
1440
|
+
@validator.validate( 'apikey' => sum )
|
1441
|
+
|
1442
|
+
@validator.should_not have_errors()
|
1443
|
+
@validator.should be_okay()
|
1444
|
+
|
1445
|
+
@validator[:apikey].should == sum
|
1446
|
+
end
|
1447
|
+
|
1448
|
+
it "rejects anything but a 64-character hex string" do
|
1449
|
+
@validator.add( :apikey, :sha256sum )
|
1450
|
+
@validator.validate( 'apikey' => 'a_key' )
|
1451
|
+
|
1452
|
+
@validator.should have_errors()
|
1453
|
+
@validator.should_not be_okay()
|
1454
|
+
|
1455
|
+
@validator[:apikey].should be_nil()
|
1456
|
+
end
|
1457
|
+
|
1458
|
+
end
|
1459
|
+
|
1460
|
+
describe ":sha384sum constraint" do
|
1461
|
+
|
1462
|
+
let( :sum ) { Digest::SHA384.hexdigest('an api key') }
|
1463
|
+
|
1464
|
+
it "accepts a 96-character hex string" do
|
1465
|
+
@validator.add( :apikey, :sha384sum )
|
1466
|
+
@validator.validate( 'apikey' => sum )
|
1467
|
+
|
1468
|
+
@validator.should_not have_errors()
|
1469
|
+
@validator.should be_okay()
|
1470
|
+
|
1471
|
+
@validator[:apikey].should == sum
|
1472
|
+
end
|
1473
|
+
|
1474
|
+
it "rejects anything but a 96-character hex string" do
|
1475
|
+
@validator.add( :apikey, :sha384sum )
|
1476
|
+
@validator.validate( 'apikey' => ' ' + sum )
|
1477
|
+
|
1478
|
+
@validator.should have_errors()
|
1479
|
+
@validator.should_not be_okay()
|
1480
|
+
|
1481
|
+
@validator[:apikey].should be_nil()
|
1482
|
+
end
|
1483
|
+
|
1484
|
+
end
|
1485
|
+
|
1486
|
+
describe ":sha512sum constraint" do
|
1487
|
+
|
1488
|
+
let( :sum ) { Digest::SHA512.hexdigest('an api key') }
|
1489
|
+
|
1490
|
+
it "accepts a 128-character hex string" do
|
1491
|
+
@validator.add( :apikey, :sha512sum )
|
1492
|
+
@validator.validate( 'apikey' => sum )
|
1493
|
+
|
1494
|
+
@validator.should_not have_errors()
|
1495
|
+
@validator.should be_okay()
|
1496
|
+
|
1497
|
+
@validator[:apikey].should == sum
|
1498
|
+
end
|
1499
|
+
|
1500
|
+
it "rejects anything but a 128-character hex string" do
|
1501
|
+
@validator.add( :apikey, :sha512sum )
|
1502
|
+
@validator.validate( 'apikey' => '..,,..' )
|
1503
|
+
|
1504
|
+
@validator.should have_errors()
|
1505
|
+
@validator.should_not be_okay()
|
1506
|
+
|
1507
|
+
@validator[:apikey].should be_nil()
|
1508
|
+
end
|
1347
1509
|
|
1510
|
+
end
|
1348
1511
|
|
1349
1512
|
end # describe "constraints"
|
1350
1513
|
|
1514
|
+
|
1351
1515
|
end
|
1352
1516
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: strelka
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.5.0
|
4
|
+
version: 0.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Michael Granger
|
@@ -30,7 +30,7 @@ cert_chain:
|
|
30
30
|
6mKCwjpegytE0oifXfF8k75A9105cBnNiMZOe1tXiqYc/exCgWvbggurzDOcRkZu
|
31
31
|
/YSusaiDXHKU2O3Akc3htA==
|
32
32
|
-----END CERTIFICATE-----
|
33
|
-
date: 2013-05-
|
33
|
+
date: 2013-05-17 00:00:00.000000000 Z
|
34
34
|
dependencies:
|
35
35
|
- !ruby/object:Gem::Dependency
|
36
36
|
name: configurability
|
@@ -206,14 +206,14 @@ dependencies:
|
|
206
206
|
requirements:
|
207
207
|
- - ~>
|
208
208
|
- !ruby/object:Gem::Version
|
209
|
-
version: '
|
209
|
+
version: '4.0'
|
210
210
|
type: :development
|
211
211
|
prerelease: false
|
212
212
|
version_requirements: !ruby/object:Gem::Requirement
|
213
213
|
requirements:
|
214
214
|
- - ~>
|
215
215
|
- !ruby/object:Gem::Version
|
216
|
-
version: '
|
216
|
+
version: '4.0'
|
217
217
|
- !ruby/object:Gem::Dependency
|
218
218
|
name: hoe-deveiate
|
219
219
|
requirement: !ruby/object:Gem::Requirement
|
metadata.gz.sig
CHANGED
Binary file
|