Checked 0.1.4 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (49) hide show
  1. data/Checked.gemspec +2 -3
  2. data/lib/Checked.rb +21 -9
  3. data/lib/Checked/Ask/Arrays.rb +31 -0
  4. data/lib/Checked/Ask/Ask.rb +21 -0
  5. data/lib/Checked/Ask/Strings.rb +27 -0
  6. data/lib/Checked/Ask/Vars.rb +21 -0
  7. data/lib/Checked/Base/Arch.rb +20 -0
  8. data/lib/Checked/Base/Base.rb +110 -0
  9. data/lib/Checked/Base/DSL.rb +73 -0
  10. data/lib/Checked/Base/DSL_Obj.rb +35 -0
  11. data/lib/Checked/{Clean.rb → Clean/Clean.rb} +1 -4
  12. data/lib/Checked/Clean/Strings.rb +94 -0
  13. data/lib/Checked/Demand/Arrays.rb +78 -0
  14. data/lib/Checked/Demand/Bools.rb +28 -0
  15. data/lib/Checked/{Demand.rb → Demand/Demand.rb} +12 -11
  16. data/lib/Checked/Demand/File_Paths.rb +63 -0
  17. data/lib/Checked/Demand/Hashs.rb +29 -0
  18. data/lib/Checked/Demand/Strings.rb +66 -0
  19. data/lib/Checked/Demand/Symbols.rb +21 -0
  20. data/lib/Checked/Demand/Vars.rb +65 -0
  21. data/lib/Checked/version.rb +1 -1
  22. data/spec/main.rb +5 -1
  23. data/spec/tests/Ask.rb +126 -8
  24. data/spec/tests/Clean.rb +66 -8
  25. data/spec/tests/DSL.rb +31 -0
  26. data/spec/tests/Demand.rb +220 -29
  27. metadata +38 -32
  28. data/lib/Checked/Args.rb +0 -55
  29. data/lib/Checked/Ask.rb +0 -69
  30. data/lib/Checked/Ask/DSL.rb +0 -31
  31. data/lib/Checked/Ask/Mods/Arrays.rb +0 -25
  32. data/lib/Checked/Ask/Mods/Strings.rb +0 -26
  33. data/lib/Checked/Ask/Mods/Vars.rb +0 -12
  34. data/lib/Checked/Base.rb +0 -119
  35. data/lib/Checked/Clean/DSL.rb +0 -16
  36. data/lib/Checked/Clean/Mods/Strings.rb +0 -104
  37. data/lib/Checked/Demand/DSL.rb +0 -29
  38. data/lib/Checked/Demand/Mods/Arrays.rb +0 -72
  39. data/lib/Checked/Demand/Mods/Bools.rb +0 -37
  40. data/lib/Checked/Demand/Mods/File_Addresses.rb +0 -59
  41. data/lib/Checked/Demand/Mods/Strings.rb +0 -51
  42. data/lib/Checked/Demand/Mods/Symbols.rb +0 -20
  43. data/lib/Checked/Demand/Mods/Vars.rb +0 -91
  44. data/spec/tests/Ask_Strings.rb +0 -57
  45. data/spec/tests/Checked.rb +0 -43
  46. data/spec/tests/Clean_Strings.rb +0 -76
  47. data/spec/tests/Demand_Arrays.rb +0 -31
  48. data/spec/tests/Demand_File_Addresses.rb +0 -61
  49. data/spec/tests/Demand_Vars.rb +0 -19
@@ -0,0 +1,78 @@
1
+ module Checked
2
+ class Demand
3
+ class Arrays
4
+
5
+ include Demand::Base
6
+
7
+ namespace '/array!'
8
+
9
+ before
10
+ def validate_target_class
11
+ fail! "...is not an Array." unless array?(target)
12
+ end
13
+
14
+ route
15
+ def no_nils!
16
+ if target.include?(nil)
17
+ fail!("...can't contain nils.")
18
+ end
19
+ end
20
+
21
+ route
22
+ def no_empty_strings!
23
+ target.each { |s|
24
+
25
+ if s.respond_to?(:rewind)
26
+ s.rewind
27
+ end
28
+
29
+ final = if s.respond_to?(:readlines)
30
+ s.readlines
31
+ else
32
+ s
33
+ end
34
+
35
+ if !final.is_a?(::String)
36
+ fail!("Array contains unknown class: #{final.inspect}")
37
+ end
38
+
39
+ if final.is_a?(String) && final.strip.empty?
40
+ fail!("...can't contain empty strings.")
41
+ end
42
+ }
43
+ end
44
+
45
+ route
46
+ def symbols!
47
+ not_empty!
48
+ if !target.all? { |v| v.is_a?(Symbol) }
49
+ fail! "...contains a non-symbol."
50
+ end
51
+ end
52
+
53
+ route
54
+ def include!
55
+ return true if target.include?(matcher)
56
+ fail!("...must contain: #{matcher.inspect}")
57
+ end
58
+
59
+ route
60
+ def exclude!
61
+ raise_e = val.include?(matcher)
62
+ return true unless raise_e
63
+ fail!("...can't contain #{matcher.inspect}")
64
+ end
65
+
66
+ route
67
+ def matches_only!
68
+ arr = target.reject { |val| val == matcher }
69
+ fail!( "...invalid elements: #{arr.inspect}" ) if !arr.empty?
70
+ end
71
+
72
+ private
73
+
74
+
75
+ end # === class Arrays
76
+ end # === class Demand
77
+ end # === module Checked
78
+
@@ -0,0 +1,28 @@
1
+ module Checked
2
+ class Demand
3
+ class Bools
4
+
5
+ include Demand::Base
6
+
7
+ namespace '/bool!'
8
+
9
+ before
10
+ def validate
11
+ fail!("...must be either of TrueClass or FalseClass.") unless [TrueClass, FalseClass].include?(target.class)
12
+ end
13
+
14
+ route
15
+ def true!
16
+ fail! "...must be true (TrueClass)." unless target.class == TrueClass
17
+ end
18
+
19
+ route
20
+ def false!
21
+ fail! "...must be false (FalseClass)." unless target.class == FalseClass
22
+ end
23
+
24
+ end # === class Bools
25
+ end # === class Demand
26
+ end # === module Checked
27
+
28
+
@@ -1,19 +1,19 @@
1
- require "Checked/Base"
2
- require "Checked/Demand/DSL"
3
1
 
4
2
 
5
3
  module Checked
6
-
7
4
  class Demand
8
5
 
9
6
  Failed = Class.new(RuntimeError)
10
-
7
+
11
8
  module Base
12
9
 
13
- include DSL
14
- include ::Checked::Base
15
-
16
-
10
+ include Checked::Base
11
+
12
+ route "/!w!!/check!/"
13
+ def check!
14
+ # do nothing
15
+ end
16
+
17
17
  def err_msg msg = "...is invalid."
18
18
  message = if msg.strip[ %r!^\.\.\.! ]
19
19
  msg.sub('...', '').strip
@@ -21,7 +21,7 @@ module Checked
21
21
  msg
22
22
  end
23
23
 
24
- @err_msg || "#{target_name} #{message}"
24
+ @err_msg || "#{target_name}, #{original_target.inspect}, #{message}"
25
25
  end
26
26
 
27
27
  def err_msg= msg
@@ -37,10 +37,11 @@ module Checked
37
37
 
38
38
  end # === module Base
39
39
 
40
- include Base
40
+ def initialize *args
41
+ raise "Demand not allowed to be used."
42
+ end
41
43
 
42
44
  end # === class Demand
43
-
44
45
  end # === module Checked
45
46
 
46
47
 
@@ -0,0 +1,63 @@
1
+ module Checked
2
+ class Demand
3
+ class File_Paths
4
+
5
+ include Demand::Base
6
+
7
+ namespace '/file_path!'
8
+
9
+ before
10
+ def validate
11
+ fail!('...must be a String.') unless target.is_a?(String)
12
+
13
+ strip_target
14
+ not_empty!
15
+ validate_format!
16
+ expand_target if fs_path?
17
+ end
18
+
19
+ route
20
+ def hostname!
21
+ matches_only! %r![\dA-Za-z_-]!
22
+ end
23
+
24
+ route
25
+ def not_dir!
26
+ if File.directory?(target)
27
+ fail! "...can't be an existing directory."
28
+ end
29
+ end
30
+
31
+ route
32
+ def not_file!
33
+ fail! "...can't be a file." if File.file?(target)
34
+ end
35
+
36
+ route
37
+ def dir!
38
+ fail! "...must be an existing directory." unless File.directory?(target)
39
+ end
40
+
41
+ private
42
+
43
+ def validate_format!
44
+ if target[%r!([^a-zA-Z0-9\.\_\-\/~,]+)!]
45
+ fail! "...has invalid characters: #{$1.inspect}"
46
+ end
47
+ end
48
+
49
+ def expand_target
50
+ request.response.body= File.expand_path(target)
51
+ end
52
+
53
+ #
54
+ # fs_path => File system object path
55
+ #
56
+ def fs_path?
57
+ request.path[%r!(_|/)(dir|file)[^a-zA-Z]+\Z!]
58
+ end
59
+
60
+ end # === class File_Addresses
61
+ end # === class Demand
62
+ end # === module Checked
63
+
@@ -0,0 +1,29 @@
1
+ module Checked
2
+ class Demand
3
+ class Hashs
4
+
5
+ include Demand::Base
6
+
7
+ namespace '/hash!'
8
+
9
+ before
10
+ def validate_target_class
11
+ fail!("...must be a Hash") unless hash?(target)
12
+ end
13
+
14
+ route
15
+ def symbol_keys!
16
+ keys = target.keys
17
+
18
+ if keys.all? { |k| k.is_a?(Symbol) }
19
+ # do nothing
20
+ else
21
+ fail! '...must have all symbol keys.'
22
+ end
23
+ end
24
+
25
+ end # === class Hashs
26
+ end # === class Demand
27
+ end # === module Checked
28
+
29
+
@@ -0,0 +1,66 @@
1
+
2
+ module Checked
3
+ class Demand
4
+ class Strings
5
+
6
+ include Demand::Base
7
+
8
+ namespace '/string!'
9
+
10
+ before
11
+ def validate
12
+ case target
13
+ when String
14
+ when StringIO
15
+ target.rewind
16
+ request.response.body= target.readlines
17
+ target.rewind
18
+ else
19
+ fail! "...must be a String or StringIO"
20
+ end
21
+ end
22
+
23
+ route
24
+ def include!
25
+ included = target[matcher]
26
+ return true if included
27
+ fail!("...must contain: #{matcher.inspect}")
28
+ end
29
+
30
+ route
31
+ def exclude! matcher
32
+ raise_e = val[matcher]
33
+ return true unless raise_e
34
+ fail!("...can't contain #{matcher.inspect}")
35
+ end
36
+
37
+ route
38
+ def matches_only!
39
+ str = target.gsub(matcher, '')
40
+ if !str.empty?
41
+ fail!( "...has invalid characters: #{str.inspect}" )
42
+ end
43
+ end
44
+
45
+ route
46
+ def not_empty!
47
+ if target.strip.empty?
48
+ fail!("...can't be empty.")
49
+ end
50
+ end
51
+
52
+ route
53
+ def file_read!
54
+ request.response.body= target.gsub("\r\n", "\n")
55
+ end
56
+
57
+ route
58
+ def file_content!
59
+ not_empty!
60
+ file_read!
61
+ end
62
+
63
+ end # === class String
64
+ end # === class Demand
65
+ end # === module Checked
66
+
@@ -0,0 +1,21 @@
1
+
2
+ module Checked
3
+ class Demand
4
+ class Symbols
5
+
6
+ include Demand::Base
7
+
8
+ namespace '/symbol!'
9
+
10
+ before
11
+ def validate
12
+ case target
13
+ when Symbol
14
+ else
15
+ fail! '...must be a Symbol.'
16
+ end
17
+ end
18
+
19
+ end # === class Symbols
20
+ end # === class Demand
21
+ end # === module Checked
@@ -0,0 +1,65 @@
1
+ module Checked
2
+ class Demand
3
+ class Vars
4
+
5
+ include Demand::Base
6
+
7
+ namespace '/var!'
8
+
9
+ route
10
+ def either!
11
+ request.headers.args.flatten.detect { |m|
12
+ begin
13
+ target.send m
14
+ true
15
+ rescue Failed
16
+ false
17
+ end
18
+ }
19
+ end
20
+
21
+ route
22
+ def be!
23
+ rejected = request.headers.args.flatten.select { |m|
24
+ !(target.send m)
25
+ }
26
+ fail!("...must be: #{rejected.map(&:to_s).join(', ')}") unless rejected.empty?
27
+ end
28
+
29
+ route
30
+ def not_be!
31
+ rejected = request.headers.args.flatten.select { |m|
32
+ !!(target.send m)
33
+ }
34
+ fail!("...must not be: #{rejected.map(&:to_s).join(', ')}") unless rejected.empty?
35
+ end
36
+
37
+ route
38
+ def one_of!
39
+ klasses = request.headers.args
40
+ return true if klasses.flatten.any? { |k| target.is_a?(k) }
41
+ fail! "...can only be of class/module: #{klasses.map(&:to_s).join(', ')}"
42
+ end
43
+
44
+ route
45
+ def nil!
46
+ fail!("...must be nil.") unless target.nil?
47
+ end
48
+
49
+ route
50
+ def not_nil!
51
+ fail!("...can't be nil.") if target.nil?
52
+ end
53
+
54
+ route
55
+ def respond_to!
56
+ rejected = request.headers.args.reject { |m|
57
+ !target.respond_to?(m)
58
+ }
59
+ fail!("...must respond to #{rejected.inspect}") unless rejected.empty?
60
+ end
61
+
62
+ end # === class Vars
63
+ end # === class Demand
64
+ end # === module Checked
65
+
@@ -1,3 +1,3 @@
1
1
  module Checked
2
- VERSION = "0.1.4"
2
+ VERSION = "1.0.0"
3
3
  end
data/spec/main.rb CHANGED
@@ -3,6 +3,11 @@ require File.expand_path('spec/helper')
3
3
  require "Bacon_Colored"
4
4
  require 'Checked'
5
5
 
6
+ class Box
7
+ include Checked::DSL
8
+ end
9
+
10
+ BOX = Box.new
6
11
 
7
12
  FOLDER = ("/tmp/Checked_Test")
8
13
  %x! mkdir -p #{FOLDER}!
@@ -26,7 +31,6 @@ def ruby_e cmd
26
31
  end
27
32
  end
28
33
 
29
-
30
34
  Dir.glob('spec/tests/*.rb').each { |file|
31
35
  require File.expand_path(file.sub('.rb', '')) if File.file?(file)
32
36
  }
data/spec/tests/Ask.rb CHANGED
@@ -1,13 +1,131 @@
1
1
 
2
2
 
3
- describe "require 'Checked/Ask'" do
3
+ # ============================
4
+ # ============================ ARRAYS
5
+ # ============================
6
+
7
+ describe "array! :include?" do
8
+
9
+ it "returns true if array contains element." do
10
+ BOX.array!([:a]).include?(:a)
11
+ .should.be == true
12
+ end
13
+
14
+ it "returns false if array does not contain element" do
15
+ BOX.array!([:a]).include?(:b)
16
+ .should.be == false
17
+ end
18
+
19
+ end # === describe Ask :includes
20
+
21
+ describe "array! :exclude?" do
22
+
23
+ it "returns true if array excludes element." do
24
+ BOX.array!([:a]).exclude?(:b)
25
+ .should.be == true
26
+ end
27
+
28
+ it "returns false if array does contains element" do
29
+ BOX.array!([:a]).exclude?(:a)
30
+ .should.be == false
31
+ end
32
+
33
+ end # === describe Ask :exclude
34
+
35
+ describe "array! symbols?" do
36
+
37
+ it 'returns true if all elements are symbols' do
38
+ BOX.array!([:a, :b]).symbols?
39
+ .should.be == true
40
+ end
41
+
42
+ end # === describe array! symbols?
43
+ #
44
+ # describe "Ask :excludes" do
45
+ #
46
+ # behaves_like 'Ask'
47
+ #
48
+ # it "returns true if string excludes a Regexp matcher" do
49
+ # Checked::Ask.new(" :a ") { |a|
50
+ # a.< :excludes?, / :b /
51
+ # }.true?.should.be == true
52
+ # end
53
+ #
54
+ # it 'returns false if string includes a Regexp matcher' do
55
+ # Checked::Ask.new(" :a ") { |a|
56
+ # a.< :excludes?, / :a /
57
+ # }.true?.should.be == false
58
+ # end
59
+ #
60
+ # end # === describe Ask :excludes
61
+
62
+
63
+
64
+ # ============================
65
+ # ============================ STRINGS
66
+ # ============================
67
+
68
+ describe "string! :include?" do
69
+
70
+ it "returns true if string contains regexp." do
71
+ BOX.string!(": a").include?(/: a/)
72
+ .should.be == true
73
+ end
74
+
75
+ it "returns false if string does not element" do
76
+ BOX.string!(" :a ").include?(/ :b /)
77
+ .should.be == false
78
+ end
79
+
80
+ end # === describe Ask :includes
81
+
82
+ describe "string! :exclude?" do
83
+
84
+ it "returns true if string excludes regexp." do
85
+ BOX.string!(": a").exclude?(/: b/)
86
+ .should.be == true
87
+ end
88
+
89
+ it "returns false if string does not excludes element" do
90
+ BOX.string!(" :a ").exclude?(/ :a /)
91
+ .should.be == false
92
+ end
93
+
94
+ end # === describe Ask :excludes
95
+
96
+
97
+ describe "ask empty?" do
98
+
99
+ it "returns true if string is :empty? after applying :strip" do
100
+ BOX.string!(" \n ").empty?.should.be === true
101
+ end
102
+
103
+ it "returns false if string is not :empty? after applying :strip" do
104
+ BOX.string!(" n ").empty?.should.be === false
105
+ end
106
+
107
+
108
+ end # === describe Ask Strings
109
+
110
+ # ============================
111
+ # ============================ VARS
112
+ # ============================
113
+
114
+ describe "var! :respond_to?" do
115
+
116
+ it 'returns true if it responds to methods' do
117
+ BOX.var!( [] ).respond_to?(:[], :to_s, :pop)
118
+ .should == true
119
+ end
120
+
121
+ it 'returns false if it does not to at least one method' do
122
+ BOX.var!( [] ).respond_to?(:[], :to_s, :keys)
123
+ .should == false
124
+ end
4
125
 
5
- it 'must include DSL' do
6
- ruby_e(%!
7
- require 'Checked/Ask'
8
- puts Checked::Ask::DSL.to_s
9
- !)
10
- .should.be == 'Checked::Ask::DSL'
126
+ it 'returns false if arg list is empty' do
127
+ BOX.var!( [] ).respond_to?
128
+ .should == false
11
129
  end
12
130
 
13
- end # === describe require 'Checked/Ask'
131
+ end # === describe var! :respond_to?