oval 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.
@@ -0,0 +1,34 @@
1
+ require 'spec_helper'
2
+ require 'oval/subclass_of'
3
+
4
+
5
+ describe Oval::SubclassOf do
6
+ it "should be subclass of Oval::ClassDeclBase" do
7
+ described_class.should < Oval::ClassDeclBase
8
+ end
9
+ describe "#validate" do
10
+ [
11
+ [Integer,[Fixnum]],
12
+ ].each do |klass,args|
13
+ context "#{described_class.name}[#{klass.name}].validate(#{args.map{|x| x.inspect}.join(', ')})" do
14
+ let(:klass) { klass }
15
+ let(:args) { args }
16
+ let(:subject) { described_class[klass] }
17
+ it { expect { subject.validate(*args) }.to_not raise_error }
18
+ end
19
+ end
20
+ [
21
+ [Integer,[:foo], "Invalid class :foo. Should be subclass of Integer"],
22
+ [Integer,[String], "Invalid class String. Should be subclass of Integer"],
23
+ [Integer,[String,'foo'], "Invalid class String for foo. Should be subclass of Integer"],
24
+ ].each do |klass,args,msg|
25
+ context "#{described_class.name}[#{klass.name}].validate(#{args.map{|x| x.inspect}.join(', ')})" do
26
+ let(:klass) { klass }
27
+ let(:args) { args }
28
+ let(:msg) { msg }
29
+ let(:subject) { described_class[klass] }
30
+ it { expect { subject.validate(*args) }.to raise_error Oval::ValueError, msg}
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,75 @@
1
+ require 'spec_helper'
2
+ require 'oval'
3
+
4
+ describe Oval do
5
+ let(:subject) { Class.new { extend Oval; def to_s; 'OvalReceiver'; end } }
6
+ describe "the receiver" do
7
+ let(:subject) { Class.new { extend Oval } }
8
+ it { should respond_to :ov_anything }
9
+ it { should respond_to :ov_collection }
10
+ it { should respond_to :ov_instance_of }
11
+ it { should respond_to :ov_kind_of }
12
+ it { should respond_to :ov_one_of }
13
+ it { should respond_to :ov_options }
14
+ it { should respond_to :ov_subclass_of }
15
+ end
16
+
17
+ its(:ov_anything) { should be Oval::Anything }
18
+ its(:ov_collection) { should be Oval::Collection }
19
+ its(:ov_instance_of) { should be Oval::InstanceOf }
20
+ its(:ov_kind_of) { should be Oval::KindOf }
21
+ its(:ov_one_of) { should be Oval::OneOf }
22
+ its(:ov_options) { should be Oval::Options }
23
+ its(:ov_subclass_of) { should be Oval::SubclassOf }
24
+ end
25
+
26
+ # examples from README.md and other sources
27
+ describe Oval do
28
+ describe "Example 1" do
29
+ let(:subject) do
30
+ Class.new do
31
+ extend Oval
32
+ def self.foo(ops = {})
33
+ ov_options[ :foo => ov_anything ].validate(ops, 'ops')
34
+ end
35
+ end
36
+ end
37
+ it("should compile"){ subject }
38
+ context "foo" do
39
+ it { expect { subject.foo }.to_not raise_error }
40
+ end
41
+ context "foo :foo => 10" do
42
+ it { expect { subject.foo :foo => 10 }.to_not raise_error }
43
+ end
44
+ context "foo :foo => 10, :bar => 20" do
45
+ let(:msg) { "Invalid option :bar for ops. Allowed options are :foo" }
46
+ it { expect { subject.foo :foo => 10, :bar => 20 }.to raise_error Oval::ValueError, msg}
47
+ end
48
+ end
49
+ describe "Example 2" do
50
+ let(:subject) do
51
+ Class.new do
52
+ extend Oval
53
+ # create a singleton declaration ov
54
+ def self.ov
55
+ @ov ||= ov_options[ :foo => ov_anything ]
56
+ end
57
+ # use ov to validate ops
58
+ def self.foo(ops = {})
59
+ ov.validate(ops, 'ops')
60
+ end
61
+ end
62
+ end
63
+ it("should compile"){ subject }
64
+ context "foo" do
65
+ it { expect { subject.foo }.to_not raise_error }
66
+ end
67
+ context "foo :foo => 10" do
68
+ it { expect { subject.foo :foo => 10 }.to_not raise_error }
69
+ end
70
+ context "foo :foo => 10, :bar => 20" do
71
+ let(:msg) { "Invalid option :bar for ops. Allowed options are :foo" }
72
+ it { expect { subject.foo :foo => 10, :bar => 20 }.to raise_error Oval::ValueError, msg}
73
+ end
74
+ end
75
+ end
metadata ADDED
@@ -0,0 +1,123 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: oval
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Pawel Tomulik
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2014-02-02 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: rake
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :development
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '0'
30
+ description: Validate options when passed to methods
31
+ email:
32
+ - ptomulik@meil.pw.edu.pl
33
+ executables: []
34
+ extensions: []
35
+ extra_rdoc_files: []
36
+ files:
37
+ - .fixtures.yml
38
+ - .gitignore
39
+ - .rspec
40
+ - .scripts/build-module.sh
41
+ - .travis.yml
42
+ - .yardopts
43
+ - CHANGELOG
44
+ - Gemfile
45
+ - LICENSE
46
+ - Modulefile
47
+ - README.md
48
+ - README_DEVEL.md
49
+ - Rakefile
50
+ - lib/oval.rb
51
+ - lib/oval/anything.rb
52
+ - lib/oval/array_item.rb
53
+ - lib/oval/base.rb
54
+ - lib/oval/class_decl_base.rb
55
+ - lib/oval/collection.rb
56
+ - lib/oval/hash_item.rb
57
+ - lib/oval/instance_of.rb
58
+ - lib/oval/kind_of.rb
59
+ - lib/oval/one_of.rb
60
+ - lib/oval/options.rb
61
+ - lib/oval/subclass_of.rb
62
+ - oval.gemspec
63
+ - spec/spec_helper.rb
64
+ - spec/unit/oval/anything_spec.rb
65
+ - spec/unit/oval/array_item_spec.rb
66
+ - spec/unit/oval/base_spec.rb
67
+ - spec/unit/oval/class_decl_base_spec.rb
68
+ - spec/unit/oval/collection_spec.rb
69
+ - spec/unit/oval/hash_item_spec.rb
70
+ - spec/unit/oval/instance_of_spec.rb
71
+ - spec/unit/oval/kind_of_spec.rb
72
+ - spec/unit/oval/one_of_spec.rb
73
+ - spec/unit/oval/options_spec.rb
74
+ - spec/unit/oval/subclass_of_spec.rb
75
+ - spec/unit/oval_spec.rb
76
+ homepage: https://github.com/ptomulik/rubygems-oval
77
+ licenses:
78
+ - Apache 2.0
79
+ post_install_message:
80
+ rdoc_options: []
81
+ require_paths:
82
+ - lib
83
+ required_ruby_version: !ruby/object:Gem::Requirement
84
+ none: false
85
+ requirements:
86
+ - - ! '>='
87
+ - !ruby/object:Gem::Version
88
+ version: '0'
89
+ segments:
90
+ - 0
91
+ hash: 2694836225048202330
92
+ required_rubygems_version: !ruby/object:Gem::Requirement
93
+ none: false
94
+ requirements:
95
+ - - ! '>='
96
+ - !ruby/object:Gem::Version
97
+ version: '0'
98
+ segments:
99
+ - 0
100
+ hash: 2694836225048202330
101
+ requirements: []
102
+ rubyforge_project:
103
+ rubygems_version: 1.8.23
104
+ signing_key:
105
+ specification_version: 3
106
+ summary: Using hashes to pass options to methods is a very common ruby practice. With
107
+ **Oval** method authors may restrict callers to pass only declared options that
108
+ meet requirements described in a hash declaration.
109
+ test_files:
110
+ - spec/spec_helper.rb
111
+ - spec/unit/oval/anything_spec.rb
112
+ - spec/unit/oval/array_item_spec.rb
113
+ - spec/unit/oval/base_spec.rb
114
+ - spec/unit/oval/class_decl_base_spec.rb
115
+ - spec/unit/oval/collection_spec.rb
116
+ - spec/unit/oval/hash_item_spec.rb
117
+ - spec/unit/oval/instance_of_spec.rb
118
+ - spec/unit/oval/kind_of_spec.rb
119
+ - spec/unit/oval/one_of_spec.rb
120
+ - spec/unit/oval/options_spec.rb
121
+ - spec/unit/oval/subclass_of_spec.rb
122
+ - spec/unit/oval_spec.rb
123
+ has_rdoc: