quickie_motion 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +27 -0
- data/CHANGELOG +2 -0
- data/Gemfile +2 -0
- data/LICENSE +22 -0
- data/README.md +85 -0
- data/Rakefile +7 -0
- data/lib/quickie_motion.rb +19 -0
- data/lib/quickie_motion/core_ext/kernel.rb +20 -0
- data/lib/quickie_motion/core_ext/object.rb +28 -0
- data/lib/quickie_motion/matcher.rb +82 -0
- data/lib/quickie_motion/mock.rb +62 -0
- data/lib/quickie_motion/runner.rb +30 -0
- data/lib/quickie_motion/stub.rb +109 -0
- data/lib/quickie_motion/version.rb +10 -0
- data/test/Rakefile +8 -0
- metadata +83 -0
data/.gitignore
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
# Mac OS
|
2
|
+
.DS_Store
|
3
|
+
|
4
|
+
# TextMate
|
5
|
+
*.tmproj
|
6
|
+
tmtags
|
7
|
+
|
8
|
+
# Emacs
|
9
|
+
*~
|
10
|
+
\#*
|
11
|
+
.\#*
|
12
|
+
|
13
|
+
# Vim
|
14
|
+
*.swp
|
15
|
+
|
16
|
+
# Gem
|
17
|
+
coverage
|
18
|
+
rdoc
|
19
|
+
pkg
|
20
|
+
.rvmrc
|
21
|
+
|
22
|
+
# Test
|
23
|
+
test/.repl_history
|
24
|
+
test/build
|
25
|
+
test/resources/*.nib
|
26
|
+
test/resources/*.momd
|
27
|
+
test/resources/*.storyboardc
|
data/CHANGELOG
ADDED
data/Gemfile
ADDED
data/LICENSE
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
Copyright (c) 2011-2012 Michael Dvorkin
|
2
|
+
twitter.com/mid
|
3
|
+
%w(mike dvorkin.net) * "@" || %w(mike fatfreecrm.com) * "@"
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
6
|
+
a copy of this software and associated documentation files (the
|
7
|
+
"Software"), to deal in the Software without restriction, including
|
8
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
9
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
10
|
+
permit persons to whom the Software is furnished to do so, subject to
|
11
|
+
the following conditions:
|
12
|
+
|
13
|
+
The above copyright notice and this permission notice shall be
|
14
|
+
included in all copies or substantial portions of the Software.
|
15
|
+
|
16
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
17
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
18
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
19
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
20
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
21
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
22
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,85 @@
|
|
1
|
+
## Quickie for RubyMotion ##
|
2
|
+
Quickie for RubyMotion is a gem for quick in-place testing of your RubyMotion code. It provides
|
3
|
+
four useful methods:
|
4
|
+
|
5
|
+
* <code>Object#should</code> and <code>Object#should\_not</code> for positive and negative assertions.
|
6
|
+
* <code>Object#stub</code> for method stubbing.
|
7
|
+
* <code>Kernel#mock</code> for creating object mocks.
|
8
|
+
|
9
|
+
### Installation ###
|
10
|
+
# Installing as Ruby gem
|
11
|
+
$ gem install quickie_motion
|
12
|
+
|
13
|
+
# Cloning the repository
|
14
|
+
$ git clone git://github.com/michaeldv/quickie_motion.git
|
15
|
+
|
16
|
+
### Usage ###
|
17
|
+
Generate RubyMotion project, then require "quickie_motion" in projects's Rakefile:
|
18
|
+
|
19
|
+
# -*- coding: utf-8 -*-
|
20
|
+
$:.unshift("/Library/RubyMotion/lib")
|
21
|
+
require "motion/project"
|
22
|
+
require "quickie_motion"
|
23
|
+
|
24
|
+
Motion::Project::App.setup do |app|
|
25
|
+
app.name = "your_app_name"
|
26
|
+
end
|
27
|
+
|
28
|
+
Add your Quickie tests to the AppDelegate as follows:
|
29
|
+
|
30
|
+
class AppDelegate
|
31
|
+
def application(application, didFinishLaunchingWithOptions:launchOptions)
|
32
|
+
#
|
33
|
+
# Your application code.
|
34
|
+
#
|
35
|
+
return true if RUBYMOTION_ENV == "release"
|
36
|
+
#
|
37
|
+
# Your tests.
|
38
|
+
#
|
39
|
+
quickie do
|
40
|
+
run_tests
|
41
|
+
run_more_tests
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
private
|
46
|
+
|
47
|
+
def run_tests
|
48
|
+
1.should == 1
|
49
|
+
end
|
50
|
+
|
51
|
+
def run_more_tests
|
52
|
+
true.should_not == false
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
For more information about the usage of assertions and stubs please check http://github.com/michaeldv/quickie.
|
57
|
+
|
58
|
+
### Testing Quickie for RubyMotion ###
|
59
|
+
Quickie code is tested by the Quickie itself.
|
60
|
+
|
61
|
+
$ rake quickie
|
62
|
+
Build ./build/iPhoneSimulator-6.0-Development
|
63
|
+
Simulate ./build/iPhoneSimulator-6.0-Development/quickie_motion_test.app
|
64
|
+
.....................................
|
65
|
+
|
66
|
+
Passed: 37, not quite: 0, total tests: 37.
|
67
|
+
(main)>
|
68
|
+
|
69
|
+
For more details please check <code>quickie_motion_test</code> application in the <code>test</code> directory.
|
70
|
+
|
71
|
+
### Note on Patches/Pull Requests ###
|
72
|
+
* Fork the project on Github.
|
73
|
+
* Make your feature addition or bug fix.
|
74
|
+
* Add tests for it making sure $ rake quickie passes 100%.
|
75
|
+
* Commit, do not mess with Rakefile, version, or history.
|
76
|
+
* Send me commit URL (*do not* send pull requests).
|
77
|
+
|
78
|
+
### License ###
|
79
|
+
Copyright (c) 2010-2012 Michael Dvorkin
|
80
|
+
|
81
|
+
http://www.dvorkin.net
|
82
|
+
|
83
|
+
%w(mike dvorkin.net) * "@" || %w(mike fatfreecrm.com) * "@"
|
84
|
+
|
85
|
+
Released under the MIT license. See LICENSE file for details.
|
data/Rakefile
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
# Copyright (c) 2011-12 Michael Dvorkin
|
2
|
+
#
|
3
|
+
# Quickie is freely distributable under the terms of MIT license.
|
4
|
+
# See LICENSE file or http://www.opensource.org/licenses/mit-license.php
|
5
|
+
#------------------------------------------------------------------------------
|
6
|
+
unless defined?(Motion::Project::Config)
|
7
|
+
raise "This file must be required within a RubyMotion project Rakefile."
|
8
|
+
end
|
9
|
+
|
10
|
+
Motion::Project::App.setup do |app|
|
11
|
+
dir = File.dirname(__FILE__)
|
12
|
+
app.files.unshift("#{dir}/quickie_motion/core_ext/kernel.rb")
|
13
|
+
app.files.unshift("#{dir}/quickie_motion/core_ext/object.rb")
|
14
|
+
app.files.unshift("#{dir}/quickie_motion/runner.rb")
|
15
|
+
app.files.unshift("#{dir}/quickie_motion/matcher.rb")
|
16
|
+
app.files.unshift("#{dir}/quickie_motion/stub.rb")
|
17
|
+
app.files.unshift("#{dir}/quickie_motion/mock.rb")
|
18
|
+
app.files.unshift("#{dir}/quickie_motion/version.rb")
|
19
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
# Copyright (c) 2011-2012 Michael Dvorkin
|
2
|
+
#
|
3
|
+
# Awesome Print is freely distributable under the terms of MIT license.
|
4
|
+
# See LICENSE file or http://www.opensource.org/licenses/mit-license.php
|
5
|
+
#------------------------------------------------------------------------------
|
6
|
+
module Kernel
|
7
|
+
def quckie
|
8
|
+
current, Exception.log_exceptions = Exception.log_exceptions, false
|
9
|
+
yield
|
10
|
+
Quickie::Runner.summary
|
11
|
+
ensure
|
12
|
+
Exception.log_exceptions = current
|
13
|
+
end
|
14
|
+
|
15
|
+
def mock
|
16
|
+
Quickie::Mock.new
|
17
|
+
end
|
18
|
+
|
19
|
+
module_function :quckie, :mock
|
20
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
# Copyright (c) 2011-12 Michael Dvorkin
|
2
|
+
#
|
3
|
+
# Quickie is freely distributable under the terms of MIT license.
|
4
|
+
# See LICENSE file or http://www.opensource.org/licenses/mit-license.php
|
5
|
+
#------------------------------------------------------------------------------
|
6
|
+
class Object
|
7
|
+
[ :should, :should_not ].each do |verb|
|
8
|
+
define_method verb do
|
9
|
+
Quickie::Matcher.new(self, verb)
|
10
|
+
end
|
11
|
+
alias_method :"#{verb}_be", verb
|
12
|
+
end
|
13
|
+
|
14
|
+
define_method :stub do |method, options = {}|
|
15
|
+
Quickie::Stub.new(self, method, options)
|
16
|
+
end
|
17
|
+
alias_method :stub!, :stub
|
18
|
+
#
|
19
|
+
# Define Object#singleton_class since it's not there (as of RubyMotion 1.26).
|
20
|
+
#
|
21
|
+
unless self.method_defined?(:singleton_class)
|
22
|
+
def singleton_class
|
23
|
+
class << self
|
24
|
+
self
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,82 @@
|
|
1
|
+
# Copyright (c) 2011-12 Michael Dvorkin
|
2
|
+
#
|
3
|
+
# Quickie is freely distributable under the terms of MIT license.
|
4
|
+
# See LICENSE file or http://www.opensource.org/licenses/mit-license.php
|
5
|
+
#------------------------------------------------------------------------------
|
6
|
+
module Quickie
|
7
|
+
class Hell < RuntimeError
|
8
|
+
def oops
|
9
|
+
"#{message.chomp} in #{backtrace[2].sub(':', ', line ').sub(':', ' ')}"
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
class Matcher
|
14
|
+
def initialize(object, verb)
|
15
|
+
@object = object
|
16
|
+
@should = (verb == :should)
|
17
|
+
end
|
18
|
+
|
19
|
+
private
|
20
|
+
|
21
|
+
# Override an operator to be able to tell whether it succeeded or not.
|
22
|
+
#--------------------------------------------------------------------------
|
23
|
+
def self.override(operator)
|
24
|
+
define_method(operator) do |expected|
|
25
|
+
evaluate(operator, nil, expected)
|
26
|
+
end
|
27
|
+
|
28
|
+
negative_operator = case operator[0]
|
29
|
+
when '<' then operator.sub('<', '>')
|
30
|
+
when '>' then operator.sub('>', '<')
|
31
|
+
else operator.sub(/^=/, '!')
|
32
|
+
end
|
33
|
+
|
34
|
+
return unless @object.respond_to?(negative_operator)
|
35
|
+
|
36
|
+
define_method(negative_operator) do |expected|
|
37
|
+
evaluate(operator, negative_operator, expected)
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
# Note that we always evaluate positive operators, and then flip the actual
|
42
|
+
# result based on should/should_not request.
|
43
|
+
#--------------------------------------------------------------------------
|
44
|
+
def evaluate(operator, negative_operator, expected)
|
45
|
+
actual = !!@object.__send__(operator, expected)
|
46
|
+
actual ^= 1 if (!@should && !negative_operator) || (@should && negative_operator)
|
47
|
+
|
48
|
+
if actual
|
49
|
+
report :success
|
50
|
+
else
|
51
|
+
raise Hell, lyrics(negative_operator || operator, expected)
|
52
|
+
end
|
53
|
+
|
54
|
+
rescue Hell => e
|
55
|
+
report :failure, e.oops
|
56
|
+
end
|
57
|
+
|
58
|
+
# Format actual vs. expected message.
|
59
|
+
#--------------------------------------------------------------------------
|
60
|
+
def lyrics(operator, expected)
|
61
|
+
format = "expected: %s %s\n actual: %s %s"
|
62
|
+
format.sub!(":", " not:").sub!("\n", "\n ") unless @should
|
63
|
+
format % [ operator, expected.inspect, ' ' * operator.size, @object.inspect ]
|
64
|
+
end
|
65
|
+
|
66
|
+
# Report test success and/or failure. When running within IRB or Pry the
|
67
|
+
# message gets displayed immediately, otherwise all the messages are shown
|
68
|
+
# by the Runner in at_exit block.
|
69
|
+
#--------------------------------------------------------------------------
|
70
|
+
def report(status, message = nil)
|
71
|
+
print(status == :success ? '.' : 'F') unless ENV["quickie_motion_test"]
|
72
|
+
Runner.update(status, message)
|
73
|
+
status == :success
|
74
|
+
end
|
75
|
+
|
76
|
+
# The matcher magic starts here ;-)
|
77
|
+
#--------------------------------------------------------------------------
|
78
|
+
%w[ == === =~ > >= < <= => ].each do |operator|
|
79
|
+
override operator
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
@@ -0,0 +1,62 @@
|
|
1
|
+
# Copyright (c) 2011-12 Michael Dvorkin
|
2
|
+
#
|
3
|
+
# Quickie is freely distributable under the terms of MIT license.
|
4
|
+
# See LICENSE file or http://www.opensource.org/licenses/mit-license.php
|
5
|
+
#------------------------------------------------------------------------------
|
6
|
+
module Quickie
|
7
|
+
class Mock
|
8
|
+
alias :__methods :methods
|
9
|
+
alias :__respond_to? :respond_to?
|
10
|
+
|
11
|
+
begin
|
12
|
+
current, Exception.log_exceptions = Exception.log_exceptions, false
|
13
|
+
instance_methods.each do |method|
|
14
|
+
unless method =~ /(?:__|:)/ || [ :==, :===, :!=, :ai, :class, :object_id, :respond_to_missing?, :to_s ].include?(method)
|
15
|
+
undef_method method rescue nil # Suppress cannot undefine method `???' because it is a native method (RuntimeError)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
ensure
|
19
|
+
Exception.log_exceptions = current
|
20
|
+
end
|
21
|
+
|
22
|
+
def initialize
|
23
|
+
@stash = {}
|
24
|
+
end
|
25
|
+
|
26
|
+
def stub(method, options = {})
|
27
|
+
unless __methods.include?(method)
|
28
|
+
options[:return] ||= nil
|
29
|
+
@stash[method] = options
|
30
|
+
else
|
31
|
+
super(method, options)
|
32
|
+
end
|
33
|
+
self
|
34
|
+
end
|
35
|
+
alias :stub! :stub
|
36
|
+
|
37
|
+
def inspect
|
38
|
+
self.to_s
|
39
|
+
end
|
40
|
+
|
41
|
+
def instance_variables
|
42
|
+
[]
|
43
|
+
end
|
44
|
+
|
45
|
+
def methods
|
46
|
+
(__methods - [ :__methods, :__respond_to?, :instance_variables, :respond_to_missing? ] + @stash.keys).sort
|
47
|
+
end
|
48
|
+
|
49
|
+
def method_missing(method, *args)
|
50
|
+
if @stash.key?(method) then
|
51
|
+
@stash[method][:return]
|
52
|
+
else
|
53
|
+
raise NoMethodError, "undefined method `%s', expected one of %p" % [ method, methods ]
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
def respond_to?(method)
|
58
|
+
return true if @stash.key?(method.to_sym)
|
59
|
+
__respond_to?(method)
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
# Copyright (c) 2011-12 Michael Dvorkin
|
2
|
+
#
|
3
|
+
# Quickie is freely distributable under the terms of MIT license.
|
4
|
+
# See LICENSE file or http://www.opensource.org/licenses/mit-license.php
|
5
|
+
#------------------------------------------------------------------------------
|
6
|
+
module Quickie
|
7
|
+
class Runner
|
8
|
+
|
9
|
+
class << self
|
10
|
+
def reset
|
11
|
+
@trace = []
|
12
|
+
@stats = Hash.new(0)
|
13
|
+
end
|
14
|
+
|
15
|
+
def update(status, message = nil)
|
16
|
+
@stats[status] += 1
|
17
|
+
@trace << message if message
|
18
|
+
end
|
19
|
+
|
20
|
+
def summary
|
21
|
+
puts
|
22
|
+
puts "\n" << @trace.join("\n\n") unless @trace.empty?
|
23
|
+
puts "\nPassed: #{@stats[:success]}, not quite: #{@stats[:failure]}, total tests: #{@stats.values.inject(:+)}."
|
24
|
+
reset
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
reset
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,109 @@
|
|
1
|
+
# Copyright (c) 2011-12 Michael Dvorkin
|
2
|
+
#
|
3
|
+
# Quickie is freely distributable under the terms of MIT license.
|
4
|
+
# See LICENSE file or http://www.opensource.org/licenses/mit-license.php
|
5
|
+
#------------------------------------------------------------------------------
|
6
|
+
module Quickie
|
7
|
+
class Stub
|
8
|
+
#
|
9
|
+
# To set up a stub with optional return value:
|
10
|
+
# obj.stub(:method, :return => something)
|
11
|
+
#
|
12
|
+
# To remove existing stub and restore original method:
|
13
|
+
# obj.stub(:method, :remove)
|
14
|
+
#
|
15
|
+
#--------------------------------------------------------------------------
|
16
|
+
def initialize(object, method, options = {})
|
17
|
+
options = { options => true } if options.is_a?(Symbol)
|
18
|
+
@object, @options = object, options
|
19
|
+
@@stash ||= []
|
20
|
+
#
|
21
|
+
# Create a new stub by intercepting the method or remove existing stub
|
22
|
+
# by restoring the original method.
|
23
|
+
#
|
24
|
+
unless @options[:remove]
|
25
|
+
intercept(method)
|
26
|
+
else
|
27
|
+
restore(method)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
private
|
32
|
+
|
33
|
+
# Same as class << @object; self; end -- comes with Ruby 1.9.
|
34
|
+
#--------------------------------------------------------------------------
|
35
|
+
def metaclass
|
36
|
+
@object.singleton_class
|
37
|
+
end
|
38
|
+
|
39
|
+
# Unique name the original method gets stashed under when creating a stub.
|
40
|
+
#--------------------------------------------------------------------------
|
41
|
+
def moniker(method)
|
42
|
+
:"__#{method}__#{@object.__id__}"
|
43
|
+
end
|
44
|
+
|
45
|
+
# Return method's visibility, nil if public.
|
46
|
+
#--------------------------------------------------------------------------
|
47
|
+
def visibility(method)
|
48
|
+
if metaclass.private_method_defined?(method)
|
49
|
+
:private
|
50
|
+
elsif metaclass.protected_method_defined?(method)
|
51
|
+
:protected
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
# Set up a stub by stashing the original method under different name and
|
56
|
+
# then rediefining the method to return the requested value.
|
57
|
+
#--------------------------------------------------------------------------
|
58
|
+
def intercept(method)
|
59
|
+
new_name = moniker(method)
|
60
|
+
unless @object.respond_to? new_name
|
61
|
+
stash(method, new_name)
|
62
|
+
redefine(method)
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
# Preserve original method by creating its alias with the unique name.
|
67
|
+
#--------------------------------------------------------------------------
|
68
|
+
def stash(method, new_name)
|
69
|
+
metaclass.class_eval do
|
70
|
+
if method_defined?(method) || private_method_defined?(method)
|
71
|
+
alias_method new_name, method
|
72
|
+
end
|
73
|
+
end
|
74
|
+
@@stash << new_name
|
75
|
+
end
|
76
|
+
|
77
|
+
# Create a stub that returns requested value.
|
78
|
+
#--------------------------------------------------------------------------
|
79
|
+
def redefine(method)
|
80
|
+
return_value = @options[:return]
|
81
|
+
metaclass.class_eval do
|
82
|
+
define_method method do |*args, &block|
|
83
|
+
return_value
|
84
|
+
end
|
85
|
+
end
|
86
|
+
#
|
87
|
+
# Set visibility attribute if the origial method is not public.
|
88
|
+
#
|
89
|
+
private_or_protected = visibility(method)
|
90
|
+
metaclass.class_eval("#{private_or_protected} :#{method}") if private_or_protected
|
91
|
+
end
|
92
|
+
|
93
|
+
# Remove the stub and restore the original method.
|
94
|
+
#--------------------------------------------------------------------------
|
95
|
+
def restore(method)
|
96
|
+
stashed_name = moniker(method)
|
97
|
+
if @@stash.include? stashed_name # Was it ever stubbed?
|
98
|
+
metaclass.instance_eval do
|
99
|
+
if method_defined?(stashed_name) || private_method_defined?(stashed_name)
|
100
|
+
remove_method method # Remove the stub.
|
101
|
+
alias_method method, stashed_name # Restore the original method from stash.
|
102
|
+
remove_method stashed_name # Remove stashed copy.
|
103
|
+
end
|
104
|
+
end
|
105
|
+
@@stash.delete stashed_name
|
106
|
+
end
|
107
|
+
end
|
108
|
+
end
|
109
|
+
end
|
@@ -0,0 +1,10 @@
|
|
1
|
+
# Copyright (c) 2011-12 Michael Dvorkin
|
2
|
+
#
|
3
|
+
# Quickie is freely distributable under the terms of MIT license.
|
4
|
+
# See LICENSE file or http://www.opensource.org/licenses/mit-license.php
|
5
|
+
#------------------------------------------------------------------------------
|
6
|
+
module Quickie
|
7
|
+
def self.version
|
8
|
+
"0.1.0"
|
9
|
+
end
|
10
|
+
end
|
data/test/Rakefile
ADDED
metadata
ADDED
@@ -0,0 +1,83 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: quickie_motion
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Michael Dvorkin
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2012-10-23 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: rake
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
22
|
+
type: :development
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ! '>='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '0'
|
30
|
+
description: Quickie adds Object#should, Object#should_not, and Object#stub methods
|
31
|
+
for quick and easy testing of your RubyMotion code
|
32
|
+
email: mike@dvorkin.net
|
33
|
+
executables: []
|
34
|
+
extensions: []
|
35
|
+
extra_rdoc_files: []
|
36
|
+
files:
|
37
|
+
- CHANGELOG
|
38
|
+
- Gemfile
|
39
|
+
- LICENSE
|
40
|
+
- Rakefile
|
41
|
+
- README.md
|
42
|
+
- lib/quickie_motion/core_ext/kernel.rb
|
43
|
+
- lib/quickie_motion/core_ext/object.rb
|
44
|
+
- lib/quickie_motion/matcher.rb
|
45
|
+
- lib/quickie_motion/mock.rb
|
46
|
+
- lib/quickie_motion/runner.rb
|
47
|
+
- lib/quickie_motion/stub.rb
|
48
|
+
- lib/quickie_motion/version.rb
|
49
|
+
- lib/quickie_motion.rb
|
50
|
+
- .gitignore
|
51
|
+
- test/Rakefile
|
52
|
+
homepage: http://github.com/michaeldv/quickie_motion
|
53
|
+
licenses: []
|
54
|
+
post_install_message:
|
55
|
+
rdoc_options: []
|
56
|
+
require_paths:
|
57
|
+
- lib
|
58
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
59
|
+
none: false
|
60
|
+
requirements:
|
61
|
+
- - ! '>='
|
62
|
+
- !ruby/object:Gem::Version
|
63
|
+
version: '0'
|
64
|
+
segments:
|
65
|
+
- 0
|
66
|
+
hash: -1131033836946887671
|
67
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
68
|
+
none: false
|
69
|
+
requirements:
|
70
|
+
- - ! '>='
|
71
|
+
- !ruby/object:Gem::Version
|
72
|
+
version: '0'
|
73
|
+
segments:
|
74
|
+
- 0
|
75
|
+
hash: -1131033836946887671
|
76
|
+
requirements: []
|
77
|
+
rubyforge_project:
|
78
|
+
rubygems_version: 1.8.24
|
79
|
+
signing_key:
|
80
|
+
specification_version: 3
|
81
|
+
summary: Micro framework for in-place testing of RubyMotion code
|
82
|
+
test_files:
|
83
|
+
- test/Rakefile
|