expects 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: b50c094da2c7d2537282c168b355c2b43ed2c429
4
- data.tar.gz: 769948b439dff5937954fd746270da88113420d4
3
+ metadata.gz: fdfcda338868a65ed97a21eb3fa5515a10c9af39
4
+ data.tar.gz: 522ee4b68b5ff826512abb16a215de422dd58dd6
5
5
  SHA512:
6
- metadata.gz: 7444dcdeb60ab0d81d0d42d8a63ada0fa90753d668725a0eb0cbe608a934c09f4c466829aac5d963d9c9cab41f6af2b6d2fe14f98c1b755bffc8cf62daba7a21
7
- data.tar.gz: 03a368aa04c7e2446fc885edd972cc2cfd79cbc65508a414b1759360daa4fa43b064140ab18cfb93daa17cd80f7d27f300cfaa9cd9c37f8488108a5fa1446cea
6
+ metadata.gz: 4ebf2013447a9e805ad9a00441e1704cfd61647003c6492abce25ec21d664e4428ed99b8b9ca0e01130b1417661a32f7602da94975b97d8162b0fe783dd9d69f
7
+ data.tar.gz: 8ba988153fcc2f9a25a5767d729bdc34144e685ff582412e865041682ec127ae103338ac09dec3cec603afe6a5b7a8ddd87e110f3bc365ddfb49113414e11fe7
@@ -0,0 +1,18 @@
1
+ language: ruby
2
+ rvm:
3
+ - 1.8.7
4
+ - 1.9.3
5
+ - 2.0.0
6
+ - rbx-18mode
7
+ - rbx-19mode
8
+ - ruby-head
9
+ env:
10
+ - "rake=0.9"
11
+ script: "bundle exec rspec -c"
12
+ notifications:
13
+ email: false
14
+ matrix:
15
+ allow_failures:
16
+ - rvm: 1.8.7
17
+ - rvm: rbx-18mode
18
+ - rvm: ruby-head
data/Gemfile CHANGED
@@ -1,4 +1,6 @@
1
1
  source 'https://rubygems.org'
2
2
 
3
+ gem 'coveralls', require: false
4
+
3
5
  # Specify your gem's dependencies in expects.gemspec
4
- gemspec
6
+ gemspec
data/README.md CHANGED
@@ -1,6 +1,8 @@
1
1
  # Expects
2
2
 
3
- A DSL for defining input expectations for methods
3
+ A DSL for validating input for methods
4
+
5
+ [![Coverage Status](https://coveralls.io/repos/Arcath/expects/badge.png?branch=master)](https://coveralls.io/r/Arcath/expects?branch=master) [![Build Status](https://travis-ci.org/Arcath/expects.png?branch=master)](https://travis-ci.org/Arcath/expects) [![Code Climate](https://codeclimate.com/github/Arcath/expects.png)](https://codeclimate.com/github/Arcath/expects)
4
6
 
5
7
  ## Installation
6
8
 
@@ -1,18 +1,31 @@
1
1
  # Version Number
2
2
  require 'expects/version'
3
- # Error
3
+ # Classes
4
4
  require 'expects/error'
5
+ require 'expects/handler'
5
6
 
6
7
  module Expects
7
8
  module ClassMethods
8
9
  def expects(subject, objects)
9
- objects = [objects] unless objects.is_a? Array
10
- raise UnexpectedInput.new(subject, objects) unless objects.include? subject.class
10
+ if objects.is_a? Regexp
11
+ handler = Expects::Handlers::Regex.new(subject, objects)
12
+ elsif objects.is_a? Proc
13
+ handler = Expects::Handlers::Proc.new(subject, objects)
14
+ else
15
+ handler = Expects::Handler.new(subject, [*objects])
16
+ end
17
+ handler.accept!
11
18
  end
12
19
 
13
20
  def reject(subject, objects)
14
- objects = [objects] unless objects.is_a? Array
15
- raise UnexpectedInput.new(subject, objects) if objects.include? subject.class
21
+ if objects.is_a? Regexp
22
+ handler = Expects::Handlers::Regex.new(subject, objects)
23
+ elsif objects.is_a? Proc
24
+ handler = Expects::Handlers::Proc.new(subject, objects)
25
+ else
26
+ handler = Expects::Handler.new(subject, [*objects])
27
+ end
28
+ handler.reject!
16
29
  end
17
30
  end
18
31
 
@@ -30,3 +43,7 @@ module Expects
30
43
 
31
44
  private :expects, :reject
32
45
  end
46
+
47
+ # Handlers
48
+ require 'expects/handlers/proc'
49
+ require 'expects/handlers/regex'
@@ -1,15 +1,12 @@
1
1
  class UnexpectedInput < StandardError
2
2
  attr_reader :subject, :expected
3
3
 
4
- def initialize(subject = nil, expected = nil)
5
- @subject, @expected = subject, expected
4
+ def initialize(handler)
5
+ @handler = handler
6
+ @subject, @expected = handler.subject, handler.objects
6
7
  end
7
8
 
8
9
  def message
9
- @message ||= build_message
10
- end
11
-
12
- def build_message
13
- "Expected #{@subject.inspect} to be #{expected.join(", ")}"
10
+ @message ||= @handler.build_message
14
11
  end
15
12
  end
@@ -0,0 +1,26 @@
1
+ module Expects
2
+ class Handler
3
+ attr_reader :subject, :objects
4
+
5
+ def initialize(subject, objects)
6
+ @subject = subject
7
+ @objects = objects
8
+ end
9
+
10
+ def valid?
11
+ @objects.include? @subject.class
12
+ end
13
+
14
+ def accept!
15
+ raise UnexpectedInput.new(self) unless valid?
16
+ end
17
+
18
+ def reject!
19
+ raise UnexpectedInput.new(self) if valid?
20
+ end
21
+
22
+ def build_message
23
+ "Expected #{@subject.inspect} to be #{@objects.join(", ")}"
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,20 @@
1
+ module Expects
2
+ module Handlers
3
+ class Proc < Expects::Handler
4
+ include Expects
5
+
6
+ def initialize(subject, objects)
7
+ expects objects, ::Proc
8
+ super
9
+ end
10
+
11
+ def valid?
12
+ @objects.call(@subject)
13
+ end
14
+
15
+ def build_message
16
+ "Expected #{@subject.inspect} to get a true from the proc"
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,21 @@
1
+ module Expects
2
+ module Handlers
3
+ class Regex < Expects::Handler
4
+ include Expects
5
+
6
+ def initialize(subject, objects)
7
+ expects subject, String
8
+ expects objects, Regexp
9
+ super
10
+ end
11
+
12
+ def valid?
13
+ @subject.match(@objects)
14
+ end
15
+
16
+ def build_message
17
+ "Expected #{@subject.inspect} match \"#{@objects.inspect}\""
18
+ end
19
+ end
20
+ end
21
+ end
@@ -1,3 +1,3 @@
1
1
  module Expects
2
- VERSION = "0.0.2"
2
+ VERSION = "0.0.3"
3
3
  end
@@ -2,7 +2,7 @@ require 'spec_helper'
2
2
 
3
3
  describe UnexpectedInput do
4
4
  let(:error) do
5
- UnexpectedInput.new(1234, [String])
5
+ UnexpectedInput.new(Expects::Handler.new(1234, [String]))
6
6
  end
7
7
 
8
8
  let(:test_class) do
@@ -0,0 +1,42 @@
1
+ require 'spec_helper'
2
+
3
+ describe Expects::Handlers::Proc do
4
+
5
+ let(:test_class) do
6
+ Class.new do
7
+ include Expects
8
+
9
+ def initialize(array)
10
+ expects array, Proc.new(){ |array| array.length >= 3 }
11
+ end
12
+
13
+ def not_good(array)
14
+ reject array, Proc.new(){ |array| array.length >= 3 }
15
+ end
16
+ end
17
+ end
18
+
19
+ let(:fail_array) do
20
+ [1,2]
21
+ end
22
+
23
+ let(:pass_array) do
24
+ [1,2,3,4,5]
25
+ end
26
+
27
+ let(:working_instance) do
28
+ test_class.new(pass_array)
29
+ end
30
+
31
+ it "should take a proc" do
32
+ lambda { test_class.new(pass_array) }.should_not raise_exception
33
+ end
34
+
35
+ it "should raise an error if the proc returns false" do
36
+ lambda { test_class.new(fail_array) }.should raise_exception UnexpectedInput
37
+ end
38
+
39
+ it "should support rejection" do
40
+ lambda { working_instance.not_good(pass_array) }.should raise_exception UnexpectedInput
41
+ end
42
+ end
@@ -0,0 +1,36 @@
1
+ require 'spec_helper'
2
+
3
+ describe Expects::Handlers::Regex do
4
+
5
+ let(:user) do
6
+ Class.new do
7
+ include Expects
8
+
9
+ def initialize(name, email)
10
+ expects name, String
11
+ expects email, /^.*\@.*$/
12
+ end
13
+
14
+ def not_email(email)
15
+ reject email, /^.*\@.*$/
16
+ end
17
+ end
18
+ end
19
+
20
+ it "should only take a string and a regex pattern" do
21
+ lambda { Expects::Handlers::Regex.new("foo", /foo/) }.should_not raise_exception
22
+ lambda { Expects::Handlers::Regex.new(/foo/, "foo") }.should raise_exception
23
+ end
24
+
25
+ it "should let you pass regex to expects" do
26
+ lambda { user.new("foo", "foo@bar.com") }.should_not raise_exception
27
+ end
28
+
29
+ it "should raise an exception if the subject doesn't match the supplied pattern" do
30
+ lambda { user.new("foo", "foobar.com") }.should raise_exception
31
+ end
32
+
33
+ it "should support reject aswell" do
34
+ lambda { user.new("foo", "foo@bar.com").not_email("foo@bar.com") }.should raise_exception
35
+ end
36
+ end
@@ -1 +1,4 @@
1
+ require 'coveralls'
2
+ Coveralls.wear!
3
+
1
4
  require 'expects'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: expects
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Adam Laycock
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-07-18 00:00:00.000000000 Z
11
+ date: 2013-09-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -46,6 +46,7 @@ extensions: []
46
46
  extra_rdoc_files: []
47
47
  files:
48
48
  - .gitignore
49
+ - .travis.yml
49
50
  - Gemfile
50
51
  - LICENSE.txt
51
52
  - README.md
@@ -53,9 +54,14 @@ files:
53
54
  - expects.gemspec
54
55
  - lib/expects.rb
55
56
  - lib/expects/error.rb
57
+ - lib/expects/handler.rb
58
+ - lib/expects/handlers/proc.rb
59
+ - lib/expects/handlers/regex.rb
56
60
  - lib/expects/version.rb
57
61
  - spec/expects_error_spec.rb
58
62
  - spec/expects_spec.rb
63
+ - spec/handlers/proc_handler_spec.rb
64
+ - spec/handlers/regex_handler_spec.rb
59
65
  - spec/spec_helper.rb
60
66
  homepage: ''
61
67
  licenses:
@@ -84,5 +90,7 @@ summary: A DSL for method inpu expectations
84
90
  test_files:
85
91
  - spec/expects_error_spec.rb
86
92
  - spec/expects_spec.rb
93
+ - spec/handlers/proc_handler_spec.rb
94
+ - spec/handlers/regex_handler_spec.rb
87
95
  - spec/spec_helper.rb
88
96
  has_rdoc: