safety_check 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.
- checksums.yaml +7 -0
- data/.gitignore +8 -0
- data/.rspec +3 -0
- data/.ruby-gemset +1 -0
- data/.ruby-version +1 -0
- data/Gemfile +3 -0
- data/README.md +3 -0
- data/Rakefile +11 -0
- data/lib/safety_check.rb +39 -0
- data/lib/version.rb +3 -0
- data/safety_check.gemspec +22 -0
- data/spec/safety_check/safety_check_spec.rb +35 -0
- data/spec/spec_helper.rb +5 -0
- data/spec/test_models/hello.rb +13 -0
- metadata +73 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 768cb88cef157bf5b487f5f988cf3ce0adfccfb7
|
4
|
+
data.tar.gz: c0b8b0dfd8ac6c2f3fd7ad6cde6ffd39246fd362
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: a2af22acea0fe6318a8daa3751b894e1818e1eb6387dd804d06ce0bd4b5938aa6c7303b879056ca194f7bdbc8f30d8cee7413f8946b0647b1241222e81b1483a
|
7
|
+
data.tar.gz: 8dab9529587167d1738ec89a2c07b045e54d0ac236563b5fae2f1587576a86e27df14ddecc59c7b64d4ddc8737d51aeb9f6d907b0fc82e336fe33df2cd4d344e
|
data/.gitignore
ADDED
data/.rspec
ADDED
data/.ruby-gemset
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
safety_check
|
data/.ruby-version
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
2.1.2
|
data/Gemfile
ADDED
data/README.md
ADDED
data/Rakefile
ADDED
data/lib/safety_check.rb
ADDED
@@ -0,0 +1,39 @@
|
|
1
|
+
module SafetyCheck
|
2
|
+
def self.included(base)
|
3
|
+
base.send :extend, ClassMethods
|
4
|
+
end
|
5
|
+
|
6
|
+
module ClassMethods
|
7
|
+
def safety_check(method_name, *arg_types)
|
8
|
+
if self.methods.include?(method_name)
|
9
|
+
receiver = self.singleton_class
|
10
|
+
elsif self.instance_methods.include?(method_name)
|
11
|
+
receiver = self
|
12
|
+
else
|
13
|
+
raise NoMethodError, "undefined method '#{method_name}' for #{receiver.inspect}"
|
14
|
+
end
|
15
|
+
|
16
|
+
unsafe_method_name = "#{method_name.to_s}_without_type_safety".to_sym
|
17
|
+
|
18
|
+
if arg_types.length != receiver.instance_method(method_name).arity
|
19
|
+
raise ArgumentError, "wrong number of arguments for #{method_name.inspect} (#{arg_types.length} for #{receiver.instance_method(method_name).arity})"
|
20
|
+
end
|
21
|
+
|
22
|
+
receiver.send(:alias_method, unsafe_method_name, method_name)
|
23
|
+
|
24
|
+
receiver.send(:define_method, method_name) do |*args|
|
25
|
+
if args.length != arg_types.length
|
26
|
+
raise ArgumentError, "wrong number of arguments (#{args.length} for #{arg_types.length}) when calling #{method_name.inspect}"
|
27
|
+
end
|
28
|
+
|
29
|
+
arg_types.zip(args).each do |arg_type, arg|
|
30
|
+
unless arg.is_a? arg_type
|
31
|
+
raise ArgumentError, "expected #{arg.inspect} to be a #{arg_type} when calling #{method_name.inspect}"
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
self.send(unsafe_method_name, *args)
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
data/lib/version.rb
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path('../lib', __FILE__)
|
3
|
+
require 'version'
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = 'safety_check'
|
7
|
+
s.version = SafetyCheck::VERSION
|
8
|
+
s.authors = ['Sean Eshbaugh']
|
9
|
+
s.email = ['seaneshbaugh@gmail.com']
|
10
|
+
s.homepage = 'https://github.com/seaneshbaugh/safety_check'
|
11
|
+
s.summary = %q{Selectively add type safety to your methods.}
|
12
|
+
s.description = %q{Selectively add type safety to your methods.}
|
13
|
+
|
14
|
+
s.rubyforge_project = 'safety_check'
|
15
|
+
|
16
|
+
s.files = `git ls-files`.split("\n")
|
17
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
18
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
19
|
+
s.require_paths = ['lib']
|
20
|
+
|
21
|
+
s.add_development_dependency 'rspec'
|
22
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe SafetyCheck do
|
4
|
+
describe 'safety_check' do
|
5
|
+
it 'instance methods should not raise an error when the correct type of argument is used' do
|
6
|
+
hi = Hello.new
|
7
|
+
|
8
|
+
expect(hi.greetings('world')).to eq("Hello, world!")
|
9
|
+
end
|
10
|
+
|
11
|
+
it 'instance methods should raise an error when the wrong type of argument is used' do
|
12
|
+
hi = Hello.new
|
13
|
+
|
14
|
+
expect { hi.greetings(5) }.to raise_error
|
15
|
+
end
|
16
|
+
|
17
|
+
it 'instance methods should raise an error when the wrong number of argument is used' do
|
18
|
+
hi = Hello.new
|
19
|
+
|
20
|
+
expect { hi.greetings('world', 'lol') }.to raise_error
|
21
|
+
end
|
22
|
+
|
23
|
+
it 'class methods should not raise an error when the correct type of argument is used' do
|
24
|
+
expect(Hello.salutations('world')).to eq("Good day, world!")
|
25
|
+
end
|
26
|
+
|
27
|
+
it 'class methods should raise an error when the wrong type of argument is used' do
|
28
|
+
expect { Hello.salutations(5) }.to raise_error
|
29
|
+
end
|
30
|
+
|
31
|
+
it 'class methods should raise an error when the wrong number of argument is used' do
|
32
|
+
expect { Hello.salutations('world', 'lol') }.to raise_error
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
data/spec/spec_helper.rb
ADDED
metadata
ADDED
@@ -0,0 +1,73 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: safety_check
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Sean Eshbaugh
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2014-07-04 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: rspec
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
description: Selectively add type safety to your methods.
|
28
|
+
email:
|
29
|
+
- seaneshbaugh@gmail.com
|
30
|
+
executables: []
|
31
|
+
extensions: []
|
32
|
+
extra_rdoc_files: []
|
33
|
+
files:
|
34
|
+
- ".gitignore"
|
35
|
+
- ".rspec"
|
36
|
+
- ".ruby-gemset"
|
37
|
+
- ".ruby-version"
|
38
|
+
- Gemfile
|
39
|
+
- README.md
|
40
|
+
- Rakefile
|
41
|
+
- lib/safety_check.rb
|
42
|
+
- lib/version.rb
|
43
|
+
- safety_check.gemspec
|
44
|
+
- spec/safety_check/safety_check_spec.rb
|
45
|
+
- spec/spec_helper.rb
|
46
|
+
- spec/test_models/hello.rb
|
47
|
+
homepage: https://github.com/seaneshbaugh/safety_check
|
48
|
+
licenses: []
|
49
|
+
metadata: {}
|
50
|
+
post_install_message:
|
51
|
+
rdoc_options: []
|
52
|
+
require_paths:
|
53
|
+
- lib
|
54
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
55
|
+
requirements:
|
56
|
+
- - ">="
|
57
|
+
- !ruby/object:Gem::Version
|
58
|
+
version: '0'
|
59
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
60
|
+
requirements:
|
61
|
+
- - ">="
|
62
|
+
- !ruby/object:Gem::Version
|
63
|
+
version: '0'
|
64
|
+
requirements: []
|
65
|
+
rubyforge_project: safety_check
|
66
|
+
rubygems_version: 2.2.2
|
67
|
+
signing_key:
|
68
|
+
specification_version: 4
|
69
|
+
summary: Selectively add type safety to your methods.
|
70
|
+
test_files:
|
71
|
+
- spec/safety_check/safety_check_spec.rb
|
72
|
+
- spec/spec_helper.rb
|
73
|
+
- spec/test_models/hello.rb
|