assert_type 0.0.1
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.
- data/.gitignore +4 -0
- data/Gemfile +3 -0
- data/Rakefile +1 -0
- data/assert_type.gemspec +23 -0
- data/lib/assert_type/assertion_error.rb +14 -0
- data/lib/assert_type/call_error.rb +4 -0
- data/lib/assert_type/version.rb +3 -0
- data/lib/assert_type.rb +56 -0
- data/spec/assert_type_spec.rb +24 -0
- data/spec/spec_helper.rb +7 -0
- metadata +75 -0
data/.gitignore
ADDED
data/Gemfile
ADDED
data/Rakefile
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require "bundler/gem_tasks"
|
data/assert_type.gemspec
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require "assert_type/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = "assert_type"
|
7
|
+
s.version = AssertType::VERSION
|
8
|
+
s.authors = ["Joel Plane"]
|
9
|
+
s.email = ["joel.plane@gmail.com"]
|
10
|
+
s.homepage = ""
|
11
|
+
s.summary = %q{simple method to do type assertions}
|
12
|
+
s.description = %q{A method for very basic nested type assertions}
|
13
|
+
|
14
|
+
s.files = `git ls-files`.split("\n")
|
15
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
16
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
17
|
+
s.require_paths = ["lib"]
|
18
|
+
|
19
|
+
# specify any dependencies here; for example:
|
20
|
+
# s.add_development_dependency "rspec"
|
21
|
+
# s.add_runtime_dependency "rest-client"
|
22
|
+
end
|
23
|
+
|
@@ -0,0 +1,14 @@
|
|
1
|
+
module AssertType
|
2
|
+
class AssertionError < RuntimeError
|
3
|
+
|
4
|
+
def initialize expected, actual, expected_is_nested_type
|
5
|
+
@expected = expected_is_nested_type ? expected.to_s : expected.inspect
|
6
|
+
@actual = expected_is_nested_type ? actual.to_s : actual.inspect
|
7
|
+
end
|
8
|
+
|
9
|
+
def message
|
10
|
+
"assertion failed - expected #{@expected} but was #{@actual}"
|
11
|
+
end
|
12
|
+
|
13
|
+
end
|
14
|
+
end
|
data/lib/assert_type.rb
ADDED
@@ -0,0 +1,56 @@
|
|
1
|
+
require "assert_type/version"
|
2
|
+
require "assert_type/assertion_error"
|
3
|
+
require "assert_type/call_error"
|
4
|
+
|
5
|
+
module AssertType
|
6
|
+
|
7
|
+
module AssertMethods
|
8
|
+
def at_assert truth
|
9
|
+
unless truth
|
10
|
+
raise AssertionError, "Expected truthy but was #{truth.inspect}"
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
def at_assert_equal expected, actual
|
15
|
+
unless expected == actual
|
16
|
+
raise AssertionError.new expected, actual, false
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
def at_assert_type expected_type, value
|
21
|
+
if expected_type.is_a? Class
|
22
|
+
unless expected_type === value
|
23
|
+
raise AssertionError.new expected_type, value, false
|
24
|
+
end
|
25
|
+
elsif expected_type.is_a? Array
|
26
|
+
unless expected_type.any? {|t| t === value}
|
27
|
+
types = expected_type.collect do |t|
|
28
|
+
"<#{t}>"
|
29
|
+
end.join(' or ')
|
30
|
+
raise AssertionError.new types, value, true
|
31
|
+
end
|
32
|
+
else
|
33
|
+
if (matches = expected_type.match /([a-zA-Z0-9]+)\<([a-zA-Z0-9]+)\>/)
|
34
|
+
enumerable_type = matches[1]
|
35
|
+
child_type = matches[2]
|
36
|
+
e_type = Object.const_get(enumerable_type)
|
37
|
+
c_type = Object.const_get(child_type)
|
38
|
+
unless e_type === value
|
39
|
+
raise AssertionError.new e_type, value, false
|
40
|
+
end
|
41
|
+
unless value.first.nil? || c_type === value.first
|
42
|
+
raise AssertionError.new "#{e_type}<#{c_type}>", "#{e_type}<#{value.first.class}>", true
|
43
|
+
end
|
44
|
+
else
|
45
|
+
raise CallError.new
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
end
|
52
|
+
|
53
|
+
# # Left this for the client application to decide - to add to Object or use otherwise
|
54
|
+
# class Object
|
55
|
+
# include AssertType::AssertMethods
|
56
|
+
# end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
include AssertType::AssertMethods
|
4
|
+
|
5
|
+
describe AssertType do
|
6
|
+
|
7
|
+
it "quick and nasty tests" do
|
8
|
+
|
9
|
+
at_assert_type Array, []
|
10
|
+
expect { at_assert_type "Array", [] }.to raise_error AssertType::CallError
|
11
|
+
at_assert_type "Array<Fixnum>", [1,2,3]
|
12
|
+
at_assert_type "Array<Fixnum>", []
|
13
|
+
expect { at_assert_type "Array<Fixnum>", ["one", "two", "three"] }.to raise_error(AssertType::AssertionError) { |error|
|
14
|
+
error.message.should include %{expected Array<Fixnum> but was Array<String>}
|
15
|
+
}
|
16
|
+
at_assert_type [Fixnum, String], 1
|
17
|
+
at_assert_type [Fixnum, String], "1"
|
18
|
+
expect { at_assert_type [Fixnum, String], 1.1 }.to raise_error(AssertType::AssertionError) { |error|
|
19
|
+
error.message.should include %{expected <Fixnum> or <String> but was 1.1}
|
20
|
+
}
|
21
|
+
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
data/spec/spec_helper.rb
ADDED
metadata
ADDED
@@ -0,0 +1,75 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: assert_type
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
hash: 29
|
5
|
+
prerelease:
|
6
|
+
segments:
|
7
|
+
- 0
|
8
|
+
- 0
|
9
|
+
- 1
|
10
|
+
version: 0.0.1
|
11
|
+
platform: ruby
|
12
|
+
authors:
|
13
|
+
- Joel Plane
|
14
|
+
autorequire:
|
15
|
+
bindir: bin
|
16
|
+
cert_chain: []
|
17
|
+
|
18
|
+
date: 2013-01-14 00:00:00 Z
|
19
|
+
dependencies: []
|
20
|
+
|
21
|
+
description: A method for very basic nested type assertions
|
22
|
+
email:
|
23
|
+
- joel.plane@gmail.com
|
24
|
+
executables: []
|
25
|
+
|
26
|
+
extensions: []
|
27
|
+
|
28
|
+
extra_rdoc_files: []
|
29
|
+
|
30
|
+
files:
|
31
|
+
- .gitignore
|
32
|
+
- Gemfile
|
33
|
+
- Rakefile
|
34
|
+
- assert_type.gemspec
|
35
|
+
- lib/assert_type.rb
|
36
|
+
- lib/assert_type/assertion_error.rb
|
37
|
+
- lib/assert_type/call_error.rb
|
38
|
+
- lib/assert_type/version.rb
|
39
|
+
- spec/assert_type_spec.rb
|
40
|
+
- spec/spec_helper.rb
|
41
|
+
homepage: ""
|
42
|
+
licenses: []
|
43
|
+
|
44
|
+
post_install_message:
|
45
|
+
rdoc_options: []
|
46
|
+
|
47
|
+
require_paths:
|
48
|
+
- lib
|
49
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
50
|
+
none: false
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
hash: 3
|
55
|
+
segments:
|
56
|
+
- 0
|
57
|
+
version: "0"
|
58
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
59
|
+
none: false
|
60
|
+
requirements:
|
61
|
+
- - ">="
|
62
|
+
- !ruby/object:Gem::Version
|
63
|
+
hash: 3
|
64
|
+
segments:
|
65
|
+
- 0
|
66
|
+
version: "0"
|
67
|
+
requirements: []
|
68
|
+
|
69
|
+
rubyforge_project:
|
70
|
+
rubygems_version: 1.7.2
|
71
|
+
signing_key:
|
72
|
+
specification_version: 3
|
73
|
+
summary: simple method to do type assertions
|
74
|
+
test_files: []
|
75
|
+
|