lebowski 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/History.md +3 -0
- data/License.txt +20 -0
- data/Manifest.txt +84 -0
- data/README.md +146 -0
- data/Rakefile +42 -0
- data/bin/lebowski +26 -0
- data/bin/lebowski-spec +29 -0
- data/bin/lebowski-start-server +24 -0
- data/lib/lebowski.rb +15 -0
- data/lib/lebowski/core.rb +35 -0
- data/lib/lebowski/foundation.rb +52 -0
- data/lib/lebowski/foundation/application.rb +315 -0
- data/lib/lebowski/foundation/core.rb +61 -0
- data/lib/lebowski/foundation/core_query.rb +231 -0
- data/lib/lebowski/foundation/dom_element.rb +114 -0
- data/lib/lebowski/foundation/errors/argument_invalid_type.rb +31 -0
- data/lib/lebowski/foundation/errors/unexpected_type.rb +30 -0
- data/lib/lebowski/foundation/mixins/collection_item_view_support.rb +87 -0
- data/lib/lebowski/foundation/mixins/delegate_support.rb +22 -0
- data/lib/lebowski/foundation/mixins/inline_text_field_support.rb +29 -0
- data/lib/lebowski/foundation/mixins/key_check.rb +35 -0
- data/lib/lebowski/foundation/mixins/list_item_view_support.rb +36 -0
- data/lib/lebowski/foundation/mixins/positioned_element.rb +20 -0
- data/lib/lebowski/foundation/mixins/stall_support.rb +79 -0
- data/lib/lebowski/foundation/mixins/user_actions.rb +302 -0
- data/lib/lebowski/foundation/mixins/wait_actions.rb +44 -0
- data/lib/lebowski/foundation/object_array.rb +305 -0
- data/lib/lebowski/foundation/panes/alert.rb +117 -0
- data/lib/lebowski/foundation/panes/main.rb +20 -0
- data/lib/lebowski/foundation/panes/menu.rb +100 -0
- data/lib/lebowski/foundation/panes/modal.rb +21 -0
- data/lib/lebowski/foundation/panes/palette.rb +21 -0
- data/lib/lebowski/foundation/panes/pane.rb +24 -0
- data/lib/lebowski/foundation/panes/panel.rb +25 -0
- data/lib/lebowski/foundation/panes/picker.rb +43 -0
- data/lib/lebowski/foundation/panes/sheet.rb +21 -0
- data/lib/lebowski/foundation/proxy_factory.rb +87 -0
- data/lib/lebowski/foundation/proxy_object.rb +670 -0
- data/lib/lebowski/foundation/sc_object.rb +38 -0
- data/lib/lebowski/foundation/views/button.rb +20 -0
- data/lib/lebowski/foundation/views/checkbox.rb +63 -0
- data/lib/lebowski/foundation/views/collection.rb +304 -0
- data/lib/lebowski/foundation/views/container.rb +32 -0
- data/lib/lebowski/foundation/views/disclosure.rb +59 -0
- data/lib/lebowski/foundation/views/grid.rb +21 -0
- data/lib/lebowski/foundation/views/label.rb +30 -0
- data/lib/lebowski/foundation/views/list.rb +67 -0
- data/lib/lebowski/foundation/views/list_item.rb +280 -0
- data/lib/lebowski/foundation/views/menu_item.rb +27 -0
- data/lib/lebowski/foundation/views/radio.rb +32 -0
- data/lib/lebowski/foundation/views/segmented.rb +97 -0
- data/lib/lebowski/foundation/views/select_field.rb +139 -0
- data/lib/lebowski/foundation/views/support/simple_item_array.rb +249 -0
- data/lib/lebowski/foundation/views/text_field.rb +108 -0
- data/lib/lebowski/foundation/views/view.rb +108 -0
- data/lib/lebowski/runtime.rb +7 -0
- data/lib/lebowski/runtime/errors/remote_control_command_execution_error.rb +9 -0
- data/lib/lebowski/runtime/errors/remote_control_command_timeout_error.rb +9 -0
- data/lib/lebowski/runtime/errors/remote_control_error.rb +9 -0
- data/lib/lebowski/runtime/errors/selenium_server_error.rb +9 -0
- data/lib/lebowski/runtime/object_encoder.rb +123 -0
- data/lib/lebowski/runtime/sprout_core_driver.rb +14 -0
- data/lib/lebowski/runtime/sprout_core_extensions.rb +600 -0
- data/lib/lebowski/scui.rb +18 -0
- data/lib/lebowski/scui/mixins/node_item_view_support.rb +136 -0
- data/lib/lebowski/scui/mixins/terminal_view_support.rb +25 -0
- data/lib/lebowski/scui/views/combo_box.rb +119 -0
- data/lib/lebowski/scui/views/date_picker.rb +148 -0
- data/lib/lebowski/scui/views/linkit.rb +36 -0
- data/lib/lebowski/spec.rb +17 -0
- data/lib/lebowski/spec/core.rb +21 -0
- data/lib/lebowski/spec/matchers/be.rb +63 -0
- data/lib/lebowski/spec/matchers/has.rb +40 -0
- data/lib/lebowski/spec/matchers/match_supporters/has_object_function.rb +67 -0
- data/lib/lebowski/spec/matchers/match_supporters/has_predicate_with_no_prefix.rb +50 -0
- data/lib/lebowski/spec/matchers/match_supporters/has_predicate_with_prefix_has.rb +50 -0
- data/lib/lebowski/spec/matchers/match_supporters/match_supporter.rb +29 -0
- data/lib/lebowski/spec/matchers/method_missing.rb +24 -0
- data/lib/lebowski/spec/operators/operator.rb +20 -0
- data/lib/lebowski/spec/operators/that.rb +116 -0
- data/lib/lebowski/spec/util.rb +26 -0
- data/lib/lebowski/version.rb +17 -0
- data/resources/selenium-server.jar +0 -0
- data/resources/user-extensions.js +1421 -0
- metadata +198 -0
@@ -0,0 +1,36 @@
|
|
1
|
+
module Lebowski
|
2
|
+
module SCUI
|
3
|
+
module Views
|
4
|
+
|
5
|
+
class CanvasView < Lebowski::Foundation::Views::CollectionView
|
6
|
+
representing_sc_class 'LinkIt.CanvasView'
|
7
|
+
|
8
|
+
def nodes
|
9
|
+
return item_views
|
10
|
+
end
|
11
|
+
|
12
|
+
def empty?
|
13
|
+
return self['isEmpty']
|
14
|
+
end
|
15
|
+
|
16
|
+
protected
|
17
|
+
def create_item_views_object_array()
|
18
|
+
return Support::NodeItemViewArray.new self
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
module Support
|
23
|
+
|
24
|
+
class NodeItemViewArray < Lebowski::Foundation::Views::Support::CollectionItemViewArray
|
25
|
+
def mix_in_support_for_object(obj)
|
26
|
+
if not obj.class.ancestors.member? Lebowski::SCUI::Mixins::NodeItemViewSupport
|
27
|
+
obj.extend Lebowski::SCUI::Mixins::NodeItemViewSupport
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
end
|
33
|
+
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
# ==========================================================================
|
2
|
+
# Project: Lebowski Framework - The SproutCore Test Automation Framework
|
3
|
+
# License: Licensed under MIT license (see License.txt)
|
4
|
+
# ==========================================================================
|
5
|
+
|
6
|
+
require File.expand_path(File.dirname(__FILE__) + '/../lebowski')
|
7
|
+
require File.expand_path(File.dirname(__FILE__) + '/spec/core')
|
8
|
+
require File.expand_path(File.dirname(__FILE__) + '/spec/util')
|
9
|
+
require File.expand_path(File.dirname(__FILE__) + '/spec/operators/operator')
|
10
|
+
require File.expand_path(File.dirname(__FILE__) + '/spec/operators/that')
|
11
|
+
require File.expand_path(File.dirname(__FILE__) + '/spec/matchers/match_supporters/match_supporter')
|
12
|
+
require File.expand_path(File.dirname(__FILE__) + '/spec/matchers/match_supporters/has_object_function')
|
13
|
+
require File.expand_path(File.dirname(__FILE__) + '/spec/matchers/match_supporters/has_predicate_with_no_prefix')
|
14
|
+
require File.expand_path(File.dirname(__FILE__) + '/spec/matchers/match_supporters/has_predicate_with_prefix_has')
|
15
|
+
require File.expand_path(File.dirname(__FILE__) + '/spec/matchers/be')
|
16
|
+
require File.expand_path(File.dirname(__FILE__) + '/spec/matchers/has')
|
17
|
+
require File.expand_path(File.dirname(__FILE__) + '/spec/matchers/method_missing')
|
@@ -0,0 +1,21 @@
|
|
1
|
+
# ==========================================================================
|
2
|
+
# Project: Lebowski Framework - The SproutCore Test Automation Framework
|
3
|
+
# License: Licensed under MIT license (see License.txt)
|
4
|
+
# ==========================================================================
|
5
|
+
|
6
|
+
#
|
7
|
+
# matcher is to only be applied to an object that derives from
|
8
|
+
# Lebowksi::Foundation::Object class otherwise an exception will
|
9
|
+
# be raised
|
10
|
+
#
|
11
|
+
# Usage:
|
12
|
+
#
|
13
|
+
# myobject.should exist_in_app => myobject.exists? == true
|
14
|
+
# myobject.should_not exist_in_app => myobject.exists? == false
|
15
|
+
#
|
16
|
+
Spec::Matchers.define :exist_in_app do
|
17
|
+
match do |object|
|
18
|
+
object.exists?
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
@@ -0,0 +1,63 @@
|
|
1
|
+
# ==========================================================================
|
2
|
+
# Project: Lebowski Framework - The SproutCore Test Automation Framework
|
3
|
+
# License: Licensed under MIT license (see License.txt)
|
4
|
+
# ==========================================================================
|
5
|
+
|
6
|
+
module Lebowski
|
7
|
+
module Spec
|
8
|
+
module Matchers
|
9
|
+
|
10
|
+
#
|
11
|
+
# Create owr own Be class that inherits from RSpec's Be class. This class
|
12
|
+
# adds some logic to check for predicates that have a prefix is_. If
|
13
|
+
# there is no such prefix then we hand back control to parent class to
|
14
|
+
# apply the default pattern matching
|
15
|
+
#
|
16
|
+
# We are trying to accomplish the following:
|
17
|
+
#
|
18
|
+
# myobject.should be_orange ==> myobject.is_orange? == true
|
19
|
+
#
|
20
|
+
# RSpec's default implementation of Be does not support checks for the is_
|
21
|
+
# prefix.
|
22
|
+
#
|
23
|
+
# Ideally, it would've been better if the original class had hooks in it
|
24
|
+
# to try custom patterns before ultimately applying the default pattern
|
25
|
+
# checks
|
26
|
+
#
|
27
|
+
class Be < ::Spec::Matchers::BePredicate
|
28
|
+
|
29
|
+
def matches?(actual)
|
30
|
+
|
31
|
+
begin
|
32
|
+
return @result = actual.__send__("is_#{@expected.to_s}?".to_sym, *@args)
|
33
|
+
rescue NoMethodError => nme
|
34
|
+
rescue ArgumentError => ae
|
35
|
+
end
|
36
|
+
|
37
|
+
begin
|
38
|
+
return @result = actual.__send__("#{@expected.to_s}?".to_sym, *@args)
|
39
|
+
rescue NoMethodError => nme
|
40
|
+
rescue ArgumentError => ae
|
41
|
+
end
|
42
|
+
|
43
|
+
begin
|
44
|
+
return @result = actual.__send__("is_#{@expected.to_s}".to_sym, *@args)
|
45
|
+
rescue NoMethodError => nme
|
46
|
+
rescue ArgumentError => ae
|
47
|
+
end
|
48
|
+
|
49
|
+
begin
|
50
|
+
return @result = actual.__send__(@expected, *@args)
|
51
|
+
rescue NoMethodError => nme
|
52
|
+
rescue ArgumentError => ae
|
53
|
+
end
|
54
|
+
|
55
|
+
# None of the above options worked. Now we can default back to the
|
56
|
+
# parent object's approach
|
57
|
+
super
|
58
|
+
end
|
59
|
+
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
# ==========================================================================
|
2
|
+
# Project: Lebowski Framework - The SproutCore Test Automation Framework
|
3
|
+
# License: Licensed under MIT license (see License.txt)
|
4
|
+
# ==========================================================================
|
5
|
+
|
6
|
+
module Lebowski
|
7
|
+
module Spec
|
8
|
+
module Matchers
|
9
|
+
|
10
|
+
#
|
11
|
+
# Create owr own Has class that inherits from RSpec's Has class. This class
|
12
|
+
# adds some logic to check if the given "actual" object has a property with
|
13
|
+
# the name extracted from @expected. If not, then pass control back to the
|
14
|
+
# parent class.
|
15
|
+
#
|
16
|
+
# Ideally it would have been better if the original Has class provided hooks
|
17
|
+
# to include custom pattern checks that are used before the default pattern
|
18
|
+
# checks are performed.
|
19
|
+
#
|
20
|
+
class Has < ::Spec::Matchers::Has
|
21
|
+
|
22
|
+
def matches?(actual)
|
23
|
+
support = HasPredicateWithPrefixHas.new(actual, @expected, *@args)
|
24
|
+
return support.result if support.has_match?
|
25
|
+
|
26
|
+
support = HasPredicateWithNoPrefix.new(actual, @expected, *@args)
|
27
|
+
return support.result if support.has_match?
|
28
|
+
|
29
|
+
support = HasObjectFunction.new(actual, @expected, *@args)
|
30
|
+
return support.result if support.has_match?
|
31
|
+
|
32
|
+
# None of the above options worked. Now we can default back to the
|
33
|
+
# parent object's approach
|
34
|
+
super
|
35
|
+
end
|
36
|
+
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,67 @@
|
|
1
|
+
# ==========================================================================
|
2
|
+
# Project: Lebowski Framework - The SproutCore Test Automation Framework
|
3
|
+
# License: Licensed under MIT license (see License.txt)
|
4
|
+
# ==========================================================================
|
5
|
+
|
6
|
+
module Lebowski
|
7
|
+
module Spec
|
8
|
+
module Matchers
|
9
|
+
|
10
|
+
class HasObjectFunction < MatchSupporter
|
11
|
+
|
12
|
+
def has_match?()
|
13
|
+
|
14
|
+
return false if @args.length == 0
|
15
|
+
|
16
|
+
method_name = obj_property(@expected)
|
17
|
+
|
18
|
+
ret_val = nil
|
19
|
+
invoked_method = false
|
20
|
+
|
21
|
+
# Try with arguments
|
22
|
+
begin
|
23
|
+
args = @args.clone; args.pop
|
24
|
+
ret_val = @object.__send__(method_name, *args)
|
25
|
+
invoked_method = true
|
26
|
+
rescue NoMethodError => nme
|
27
|
+
rescue ArgumentError => ae
|
28
|
+
end
|
29
|
+
|
30
|
+
# Try with no arguments
|
31
|
+
begin
|
32
|
+
if not invoked_method
|
33
|
+
ret_val = @object.__send__(method_name)
|
34
|
+
invoked_method = true
|
35
|
+
end
|
36
|
+
rescue NoMethodError => nme
|
37
|
+
rescue ArgumentError => ae
|
38
|
+
end
|
39
|
+
|
40
|
+
return false if not invoked_method
|
41
|
+
|
42
|
+
operator = @args[@args.length - 1]
|
43
|
+
if operator.kind_of? Lebowski::Spec::Operators::Operator
|
44
|
+
@result = operator.evaluate(ret_val)
|
45
|
+
return true
|
46
|
+
end
|
47
|
+
|
48
|
+
@result = Lebowski::Spec::Util.match?(@args[@args.length - 1], ret_val)
|
49
|
+
|
50
|
+
return true
|
51
|
+
|
52
|
+
end
|
53
|
+
|
54
|
+
private
|
55
|
+
|
56
|
+
def obj_property(sym)
|
57
|
+
["has_", "have_"].each do |prefix|
|
58
|
+
if sym.to_s =~ /^#{prefix}/
|
59
|
+
return sym.to_s.sub(prefix, "").to_sym
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
# ==========================================================================
|
2
|
+
# Project: Lebowski Framework - The SproutCore Test Automation Framework
|
3
|
+
# License: Licensed under MIT license (see License.txt)
|
4
|
+
# ==========================================================================
|
5
|
+
|
6
|
+
module Lebowski
|
7
|
+
module Spec
|
8
|
+
module Matchers
|
9
|
+
|
10
|
+
class HasPredicateWithNoPrefix < MatchSupporter
|
11
|
+
|
12
|
+
def has_match?()
|
13
|
+
|
14
|
+
executed_method = false
|
15
|
+
|
16
|
+
method_name = predicate_with_no_prefix(@expected)
|
17
|
+
|
18
|
+
# Try with arguments
|
19
|
+
begin
|
20
|
+
@result = @object.__send__(method_name, *@args)
|
21
|
+
executed_method = true
|
22
|
+
rescue NoMethodError => nme
|
23
|
+
rescue ArgumentError => ae
|
24
|
+
end
|
25
|
+
|
26
|
+
return true if executed_method
|
27
|
+
|
28
|
+
# Try with no arguments
|
29
|
+
begin
|
30
|
+
@result = @object.__send__(method_name)
|
31
|
+
executed_method = true
|
32
|
+
rescue NoMethodError => nme
|
33
|
+
rescue ArgumentError => ae
|
34
|
+
end
|
35
|
+
|
36
|
+
return executed_method
|
37
|
+
|
38
|
+
end
|
39
|
+
|
40
|
+
private
|
41
|
+
|
42
|
+
def predicate_with_no_prefix(sym)
|
43
|
+
return (sym.to_s.sub('have_', '') << '?').to_sym
|
44
|
+
end
|
45
|
+
|
46
|
+
end
|
47
|
+
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
# ==========================================================================
|
2
|
+
# Project: Lebowski Framework - The SproutCore Test Automation Framework
|
3
|
+
# License: Licensed under MIT license (see License.txt)
|
4
|
+
# ==========================================================================
|
5
|
+
|
6
|
+
module Lebowski
|
7
|
+
module Spec
|
8
|
+
module Matchers
|
9
|
+
|
10
|
+
class HasPredicateWithPrefixHas < MatchSupporter
|
11
|
+
|
12
|
+
def has_match?()
|
13
|
+
|
14
|
+
executed_method = false
|
15
|
+
|
16
|
+
method_name = predicate_with_prefix_has(@expected)
|
17
|
+
|
18
|
+
# Try with arguments
|
19
|
+
begin
|
20
|
+
@result = @object.__send__(method_name, *@args)
|
21
|
+
executed_method = true
|
22
|
+
rescue NoMethodError => nme
|
23
|
+
rescue ArgumentError => ae
|
24
|
+
end
|
25
|
+
|
26
|
+
return true if executed_method
|
27
|
+
|
28
|
+
# Try with no arguments
|
29
|
+
begin
|
30
|
+
@result = @object.__send__(method_name)
|
31
|
+
executed_method = true
|
32
|
+
rescue NoMethodError => nme
|
33
|
+
rescue ArgumentError => ae
|
34
|
+
end
|
35
|
+
|
36
|
+
return executed_method
|
37
|
+
|
38
|
+
end
|
39
|
+
|
40
|
+
private
|
41
|
+
|
42
|
+
def predicate_with_prefix_has(sym)
|
43
|
+
return (sym.to_s.sub('have_', 'has_') << '?').to_sym
|
44
|
+
end
|
45
|
+
|
46
|
+
end
|
47
|
+
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
# ==========================================================================
|
2
|
+
# Project: Lebowski Framework - The SproutCore Test Automation Framework
|
3
|
+
# License: Licensed under MIT license (see License.txt)
|
4
|
+
# ==========================================================================
|
5
|
+
|
6
|
+
module Lebowski
|
7
|
+
module Spec
|
8
|
+
module Matchers
|
9
|
+
|
10
|
+
class MatchSupporter
|
11
|
+
|
12
|
+
attr_reader :result
|
13
|
+
|
14
|
+
def initialize(object, expected, *args)
|
15
|
+
@object = object
|
16
|
+
@expected = expected
|
17
|
+
@args = args
|
18
|
+
@result = nil
|
19
|
+
end
|
20
|
+
|
21
|
+
def has_match?()
|
22
|
+
return false
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
# ==========================================================================
|
2
|
+
# Project: Lebowski Framework - The SproutCore Test Automation Framework
|
3
|
+
# License: Licensed under MIT license (see License.txt)
|
4
|
+
# ==========================================================================
|
5
|
+
|
6
|
+
module Spec
|
7
|
+
module Matchers
|
8
|
+
|
9
|
+
#
|
10
|
+
# Replacing RSpec's default method_missing implementation so that we can
|
11
|
+
# include our own special default hooks that allows spec tests to look
|
12
|
+
# more readable.
|
13
|
+
#
|
14
|
+
# Ideally it would have been better if RSpec provided some nice hooks to
|
15
|
+
# try other default pattern matchers
|
16
|
+
#
|
17
|
+
def method_missing(sym, *args, &block)
|
18
|
+
return Lebowski::Spec::Matchers::Be.new(sym, *args) if sym.to_s =~ /^be_/
|
19
|
+
return Lebowski::Spec::Matchers::Has.new(sym, *args) if sym.to_s =~ /^have_/
|
20
|
+
return Lebowski::Spec::Operators::That.new(sym, *args) if sym.to_s =~ /^that_/
|
21
|
+
super
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
# ==========================================================================
|
2
|
+
# Project: Lebowski Framework - The SproutCore Test Automation Framework
|
3
|
+
# License: Licensed under MIT license (see License.txt)
|
4
|
+
# ==========================================================================
|
5
|
+
|
6
|
+
module Lebowski
|
7
|
+
module Spec
|
8
|
+
module Operators
|
9
|
+
|
10
|
+
class Operator
|
11
|
+
|
12
|
+
def evaluate(value)
|
13
|
+
|
14
|
+
end
|
15
|
+
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,116 @@
|
|
1
|
+
# ==========================================================================
|
2
|
+
# Project: Lebowski Framework - The SproutCore Test Automation Framework
|
3
|
+
# License: Licensed under MIT license (see License.txt)
|
4
|
+
# ==========================================================================
|
5
|
+
|
6
|
+
module Lebowski
|
7
|
+
module Spec
|
8
|
+
module Operators
|
9
|
+
|
10
|
+
class That < Operator
|
11
|
+
|
12
|
+
def initialize(sym, *args)
|
13
|
+
@sym = sym
|
14
|
+
@args = args
|
15
|
+
end
|
16
|
+
|
17
|
+
def evaluate(value)
|
18
|
+
case operator
|
19
|
+
when :not_empty
|
20
|
+
return not_empty? value
|
21
|
+
when :empty
|
22
|
+
return empty? value
|
23
|
+
when :between
|
24
|
+
return between? value
|
25
|
+
when :at_most
|
26
|
+
return at_most? value
|
27
|
+
when :at_least
|
28
|
+
return at_least? value
|
29
|
+
when :greater_than
|
30
|
+
return greater_than? value
|
31
|
+
when :less_than
|
32
|
+
return less_than? value
|
33
|
+
when :contains
|
34
|
+
return contains? value
|
35
|
+
when :matches
|
36
|
+
return matches? value
|
37
|
+
when :equals
|
38
|
+
return equals? value
|
39
|
+
when :equal_to
|
40
|
+
return equals? value
|
41
|
+
else
|
42
|
+
raise ArgumentError "Invalid that operator: #{operator}"
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
def operator()
|
47
|
+
["that_is_", "that_"].each do |prefix|
|
48
|
+
if @sym =~ /^#{prefix}/
|
49
|
+
return @sym.to_s.sub(prefix, "").to_sym
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
def method_missing(sym, *args, &block)
|
55
|
+
return self
|
56
|
+
end
|
57
|
+
|
58
|
+
private
|
59
|
+
|
60
|
+
def not_empty?(value)
|
61
|
+
return (not empty? value)
|
62
|
+
end
|
63
|
+
|
64
|
+
def empty?(value)
|
65
|
+
return true if value.nil?
|
66
|
+
return value.length == 0 if value.kind_of?(Array) or value.kind_of?(String)
|
67
|
+
return false
|
68
|
+
end
|
69
|
+
|
70
|
+
def between?(value)
|
71
|
+
return false if not value.kind_of? Numeric
|
72
|
+
min = @args[0]
|
73
|
+
max = @args[1]
|
74
|
+
return ((value >= min) and (value <= max))
|
75
|
+
end
|
76
|
+
|
77
|
+
def at_least?(value)
|
78
|
+
return false if not value.kind_of? Numeric
|
79
|
+
return value >= @args[0]
|
80
|
+
end
|
81
|
+
|
82
|
+
def at_most?(value)
|
83
|
+
return false if not value.kind_of? Numeric
|
84
|
+
return value <= @args[0]
|
85
|
+
end
|
86
|
+
|
87
|
+
def greater_than?(value)
|
88
|
+
return false if not value.kind_of? Numeric
|
89
|
+
return value > @args[0]
|
90
|
+
end
|
91
|
+
|
92
|
+
def less_than?(value)
|
93
|
+
return false if not value.kind_of? Numeric
|
94
|
+
return value < @args[0]
|
95
|
+
end
|
96
|
+
|
97
|
+
def contains?(value)
|
98
|
+
return false if value.nil?
|
99
|
+
@args.all? do |x|
|
100
|
+
value.member? x
|
101
|
+
end
|
102
|
+
end
|
103
|
+
|
104
|
+
def matches?(value)
|
105
|
+
return Lebowski::Spec::Util.match?(@args[0], value)
|
106
|
+
end
|
107
|
+
|
108
|
+
def equals?(value)
|
109
|
+
return @args[0] == value
|
110
|
+
end
|
111
|
+
|
112
|
+
end
|
113
|
+
|
114
|
+
end
|
115
|
+
end
|
116
|
+
end
|