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.
- data/lib/approve.rb +24 -0
- data/test/approve_test.rb +42 -0
- metadata +58 -0
data/lib/approve.rb
ADDED
@@ -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
|