approve 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.
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