strelka 0.5.0.pre.393 → 0.5.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|