approve 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. data/lib/approve.rb +24 -0
  2. data/test/approve_test.rb +42 -0
  3. metadata +58 -0
@@ -0,0 +1,24 @@
1
+ class Approve
2
+ def self.approve(obj, fallback=nil, &block)
3
+ new(obj, fallback, &block).finish
4
+ end
5
+
6
+ def initialize(obj, fallback=nil, &block)
7
+ @values = []
8
+ @obj = obj
9
+ @fallback = fallback
10
+ instance_eval(&block) if block_given?
11
+ end
12
+
13
+ def try(expression)
14
+ @values << expression
15
+ end
16
+
17
+ def valid?
18
+ @values.all?
19
+ end
20
+
21
+ def finish
22
+ valid? ? @obj : @fallback
23
+ end
24
+ end
@@ -0,0 +1,42 @@
1
+ class ApproveTest < MiniTest::Unit::TestCase
2
+
3
+ def approve(obj, fallback=nil, &block)
4
+ Approve.approve(obj, fallback, &block)
5
+ end
6
+
7
+ def test_returns_object_if_all_statements_are_true
8
+ items = %w(foo bar baz)
9
+ ret = approve(items) do
10
+ try items.all?
11
+ try items.any? {|i| i =~ /^f/ }
12
+ try items.size == 3
13
+ end
14
+ assert_equal items, ret
15
+ end
16
+
17
+ def test_returns_nil_unless_all_statements_are_true
18
+ items = %w(foo bar baz)
19
+ ret = approve(items) do
20
+ try items.size == 1000
21
+ end
22
+ assert_nil ret
23
+ end
24
+
25
+ def test_returns_fallback_if_supplied
26
+ items = %w(foo bar baz)
27
+ ret = approve(items, []) do
28
+ try items.first == 'baz'
29
+ end
30
+ assert ret == []
31
+ end
32
+
33
+ def test_without_block
34
+ items = {:foo => 'bar'}
35
+ approve = Approve.new({:foo => 'bar'}, {})
36
+ approve.try items.respond_to?(:each)
37
+ approve.try items.values.all?
38
+ assert approve.valid?
39
+ assert items, approve.finish
40
+ end
41
+
42
+ end
metadata ADDED
@@ -0,0 +1,58 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: approve
3
+ version: !ruby/object:Gem::Version
4
+ prerelease:
5
+ version: 0.0.1
6
+ platform: ruby
7
+ authors:
8
+ - Lee Jarvis
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+
13
+ date: 2011-03-13 00:00:00 +00:00
14
+ default_executable:
15
+ dependencies: []
16
+
17
+ description: ""
18
+ email:
19
+ - lee@jarvis.co
20
+ executables: []
21
+
22
+ extensions: []
23
+
24
+ extra_rdoc_files: []
25
+
26
+ files:
27
+ - lib/approve.rb
28
+ - test/approve_test.rb
29
+ has_rdoc: true
30
+ homepage: http://github.com/injekt/approve
31
+ licenses: []
32
+
33
+ post_install_message:
34
+ rdoc_options: []
35
+
36
+ require_paths:
37
+ - lib
38
+ required_ruby_version: !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ">="
42
+ - !ruby/object:Gem::Version
43
+ version: "0"
44
+ required_rubygems_version: !ruby/object:Gem::Requirement
45
+ none: false
46
+ requirements:
47
+ - - ">="
48
+ - !ruby/object:Gem::Version
49
+ version: "0"
50
+ requirements: []
51
+
52
+ rubyforge_project:
53
+ rubygems_version: 1.5.0
54
+ signing_key:
55
+ specification_version: 3
56
+ summary: Approve an objects integrity or return a fallback
57
+ test_files:
58
+ - test/approve_test.rb