Doa 0.1.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/.gitignore +5 -0
- data/Doa.gemspec +52 -0
- data/README.rdoc +69 -0
- data/Rakefile +34 -0
- data/VERSION +1 -0
- data/lib/doa/class_methods.rb +78 -0
- data/lib/doa/instance_methods.rb +70 -0
- data/lib/doa.rb +95 -0
- data/spec/application.rb +7 -0
- data/spec/doa_spec.rb +64 -0
- data/spec/spec.opts +4 -0
- data/spec/spec_helper.rb +13 -0
- metadata +68 -0
data/Doa.gemspec
ADDED
@@ -0,0 +1,52 @@
|
|
1
|
+
# Generated by jeweler
|
2
|
+
# DO NOT EDIT THIS FILE
|
3
|
+
# Instead, edit Jeweler::Tasks in Rakefile, and run `rake gemspec`
|
4
|
+
# -*- encoding: utf-8 -*-
|
5
|
+
|
6
|
+
Gem::Specification.new do |s|
|
7
|
+
s.name = %q{Doa}
|
8
|
+
s.version = "0.1.1"
|
9
|
+
|
10
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
|
+
s.authors = ["Nolan Eakins <sneakin@semanticgap.com>"]
|
12
|
+
s.date = %q{2009-10-21}
|
13
|
+
s.description = %q{rSpec controller macros}
|
14
|
+
s.email = %q{suppert@semanticgap.com}
|
15
|
+
s.extra_rdoc_files = [
|
16
|
+
"README.rdoc"
|
17
|
+
]
|
18
|
+
s.files = [
|
19
|
+
".gitignore",
|
20
|
+
"Doa.gemspec",
|
21
|
+
"README.rdoc",
|
22
|
+
"Rakefile",
|
23
|
+
"VERSION",
|
24
|
+
"lib/doa.rb",
|
25
|
+
"lib/doa/class_methods.rb",
|
26
|
+
"lib/doa/instance_methods.rb",
|
27
|
+
"spec/application.rb",
|
28
|
+
"spec/doa_spec.rb",
|
29
|
+
"spec/spec.opts",
|
30
|
+
"spec/spec_helper.rb"
|
31
|
+
]
|
32
|
+
s.homepage = %q{http://github.com/sneakin/Doa}
|
33
|
+
s.rdoc_options = ["--charset=UTF-8"]
|
34
|
+
s.require_paths = ["lib"]
|
35
|
+
s.rubygems_version = %q{1.3.5}
|
36
|
+
s.summary = %q{The Tester}
|
37
|
+
s.test_files = [
|
38
|
+
"spec/application.rb",
|
39
|
+
"spec/doa_spec.rb",
|
40
|
+
"spec/spec_helper.rb"
|
41
|
+
]
|
42
|
+
|
43
|
+
if s.respond_to? :specification_version then
|
44
|
+
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
45
|
+
s.specification_version = 3
|
46
|
+
|
47
|
+
if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
|
48
|
+
else
|
49
|
+
end
|
50
|
+
else
|
51
|
+
end
|
52
|
+
end
|
data/README.rdoc
ADDED
@@ -0,0 +1,69 @@
|
|
1
|
+
= Doa (the tester)
|
2
|
+
|
3
|
+
== Introduction
|
4
|
+
|
5
|
+
Doa provides macros that makes Rails' controller specs more understandable and
|
6
|
+
drier. It provides methods to provide the context for a controller's action,
|
7
|
+
the params to be used in a given context, and the means to easily call the
|
8
|
+
action using those params.
|
9
|
+
|
10
|
+
|
11
|
+
== Usage
|
12
|
+
|
13
|
+
Use `rake rdoc` to generate the RDocs which provides a complete example in the
|
14
|
+
Doa module. You can run the specs, which are by example, with `rake spec`.
|
15
|
+
|
16
|
+
|
17
|
+
== Example
|
18
|
+
|
19
|
+
require 'doa'
|
20
|
+
|
21
|
+
Doa.install!
|
22
|
+
Doa.default_url_params = { :format => 'xml' }
|
23
|
+
|
24
|
+
describe Controller do
|
25
|
+
action :show do
|
26
|
+
params do
|
27
|
+
{ :id => 123 }
|
28
|
+
end
|
29
|
+
|
30
|
+
it "does something" do
|
31
|
+
doa(:page => 1)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
|
37
|
+
== Legal
|
38
|
+
|
39
|
+
=== Copyright
|
40
|
+
|
41
|
+
Copyright (C) 2009 SemanticGap(R)
|
42
|
+
|
43
|
+
Permission is hereby granted, free of charge, to any person
|
44
|
+
obtaining a copy of this software and associated documentation
|
45
|
+
files (the "Software"), to deal in the Software without
|
46
|
+
restriction, including without limitation the rights to use,
|
47
|
+
copy, modify, merge, publish, distribute, sublicense, and/or sell
|
48
|
+
copies of the Software, and to permit persons to whom the
|
49
|
+
Software is furnished to do so, subject to the following
|
50
|
+
conditions:
|
51
|
+
|
52
|
+
The above copyright notice and this permission notice shall be
|
53
|
+
included in all copies or substantial portions of the Software.
|
54
|
+
|
55
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
56
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
|
57
|
+
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
58
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
|
59
|
+
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
60
|
+
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
61
|
+
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
62
|
+
OTHER DEALINGS IN THE SOFTWARE.
|
63
|
+
|
64
|
+
|
65
|
+
=== Trademarks
|
66
|
+
|
67
|
+
SemanticGap is a registered trademark of Nolan Eakins. All
|
68
|
+
rights reserved.
|
69
|
+
|
data/Rakefile
ADDED
@@ -0,0 +1,34 @@
|
|
1
|
+
require 'spec/rake/spectask'
|
2
|
+
|
3
|
+
task :default => [ :spec, :rdoc ]
|
4
|
+
|
5
|
+
desc "Run all specs in the spec directory"
|
6
|
+
Spec::Rake::SpecTask.new(:spec) do |t|
|
7
|
+
t.spec_opts = [ '--options', File.join(File.dirname(__FILE__), "spec", "spec.opts") ]
|
8
|
+
t.spec_files = FileList['spec/**/*_spec.rb']
|
9
|
+
end
|
10
|
+
|
11
|
+
require 'rake/rdoctask'
|
12
|
+
|
13
|
+
Rake::RDocTask.new do |rdoc|
|
14
|
+
rdoc.rdoc_files.add("README.rdoc", "lib/**/*.rb")
|
15
|
+
rdoc.main = 'README.rdoc'
|
16
|
+
rdoc.title = 'Doa'
|
17
|
+
rdoc.rdoc_dir = 'doc/api'
|
18
|
+
rdoc.options << '--line-numbers' << '--inline-source'
|
19
|
+
end
|
20
|
+
|
21
|
+
begin
|
22
|
+
require 'jeweler'
|
23
|
+
Jeweler::Tasks.new do |gemspec|
|
24
|
+
gemspec.name = "Doa"
|
25
|
+
gemspec.summary = "The Tester"
|
26
|
+
gemspec.description = "rSpec controller macros"
|
27
|
+
gemspec.email = "suppert@semanticgap.com"
|
28
|
+
gemspec.homepage = "http://github.com/sneakin/Doa"
|
29
|
+
gemspec.authors = [ "Nolan Eakins <sneakin@semanticgap.com>" ]
|
30
|
+
end
|
31
|
+
Jeweler::GemcutterTasks.new
|
32
|
+
rescue LoadError
|
33
|
+
puts "Jeweler not available. Install it with: sudo gem install technicalpickles-jeweler -s http://gems.github.com"
|
34
|
+
end
|
data/VERSION
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
0.1.1
|
@@ -0,0 +1,78 @@
|
|
1
|
+
# Copyright (C) 2009 SemanticGap(R)
|
2
|
+
#
|
3
|
+
# Permission is hereby granted, free of charge, to any person
|
4
|
+
# obtaining a copy of this software and associated documentation
|
5
|
+
# files (the "Software"), to deal in the Software without
|
6
|
+
# restriction, including without limitation the rights to use,
|
7
|
+
# copy, modify, merge, publish, distribute, sublicense, and/or sell
|
8
|
+
# copies of the Software, and to permit persons to whom the
|
9
|
+
# Software is furnished to do so, subject to the following
|
10
|
+
# conditions:
|
11
|
+
#
|
12
|
+
# The above copyright notice and this permission notice shall be
|
13
|
+
# included in all copies or substantial portions of the Software.
|
14
|
+
#
|
15
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
16
|
+
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
|
17
|
+
# OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
18
|
+
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
|
19
|
+
# HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
20
|
+
# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
21
|
+
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
22
|
+
# OTHER DEALINGS IN THE SOFTWARE.
|
23
|
+
|
24
|
+
module Doa
|
25
|
+
# Methods available at the context level.
|
26
|
+
module ClassMethods
|
27
|
+
# Initialize the parameters to be used within a context inheriting
|
28
|
+
# those of the surrounding contexts. Takes a block which must
|
29
|
+
# return a Hash.
|
30
|
+
#
|
31
|
+
# Usage:
|
32
|
+
# params do
|
33
|
+
# { :id => @user.id }
|
34
|
+
# end
|
35
|
+
def params(&block)
|
36
|
+
self.default_params = block
|
37
|
+
end
|
38
|
+
|
39
|
+
# Setup a context to test a controller's action using #do_action.
|
40
|
+
# It takes the action's name and an optional HTTP method,
|
41
|
+
# evaluating the supplied block in the created context.
|
42
|
+
def action(name, method = nil, &block)
|
43
|
+
d = describe "\##{name}" do
|
44
|
+
do_action name, method
|
45
|
+
end
|
46
|
+
|
47
|
+
d.instance_eval(&block)
|
48
|
+
d
|
49
|
+
end
|
50
|
+
|
51
|
+
# Infrastructure method used by #action to generate the methods
|
52
|
+
# available within a test case.
|
53
|
+
def do_action(action_name, method = nil, params = Hash.new, &block)
|
54
|
+
# Locking in the arguments with closures
|
55
|
+
define_method("action_method") do
|
56
|
+
method || infer_method(action_name)
|
57
|
+
end
|
58
|
+
|
59
|
+
define_method("action_name") do
|
60
|
+
action_name
|
61
|
+
end
|
62
|
+
|
63
|
+
define_method("shared_params") do
|
64
|
+
return instance_eval(&block) if block
|
65
|
+
return Hash.new
|
66
|
+
end
|
67
|
+
|
68
|
+
define_method("action_params") do
|
69
|
+
params
|
70
|
+
end
|
71
|
+
|
72
|
+
# Now the methods we really want to use
|
73
|
+
class_eval do
|
74
|
+
include Doa::InstanceMethods
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
@@ -0,0 +1,70 @@
|
|
1
|
+
# Copyright (C) 2009 SemanticGap(R)
|
2
|
+
#
|
3
|
+
# Permission is hereby granted, free of charge, to any person
|
4
|
+
# obtaining a copy of this software and associated documentation
|
5
|
+
# files (the "Software"), to deal in the Software without
|
6
|
+
# restriction, including without limitation the rights to use,
|
7
|
+
# copy, modify, merge, publish, distribute, sublicense, and/or sell
|
8
|
+
# copies of the Software, and to permit persons to whom the
|
9
|
+
# Software is furnished to do so, subject to the following
|
10
|
+
# conditions:
|
11
|
+
#
|
12
|
+
# The above copyright notice and this permission notice shall be
|
13
|
+
# included in all copies or substantial portions of the Software.
|
14
|
+
#
|
15
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
16
|
+
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
|
17
|
+
# OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
18
|
+
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
|
19
|
+
# HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
20
|
+
# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
21
|
+
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
22
|
+
# OTHER DEALINGS IN THE SOFTWARE.
|
23
|
+
|
24
|
+
module Doa
|
25
|
+
# Methods available inside individual cases.
|
26
|
+
module InstanceMethods
|
27
|
+
# Returns the parameters to be used in a given test case.
|
28
|
+
# The parameters are the result of merging the parameters from
|
29
|
+
# the top most context down to the current one.
|
30
|
+
def params
|
31
|
+
return @_params if @_params
|
32
|
+
|
33
|
+
p = Doa.default_params.try(:clone) ||
|
34
|
+
HashWithIndifferentAccess.new
|
35
|
+
|
36
|
+
p.recursive_merge!(super_params)
|
37
|
+
p.recursive_merge!(action_params)
|
38
|
+
p.recursive_merge!(self.instance_eval(&default_params)) if default_params
|
39
|
+
p.recursive_merge!(shared_params)
|
40
|
+
|
41
|
+
@_params = HashWithIndifferentAccess.new(p)
|
42
|
+
end
|
43
|
+
|
44
|
+
# Perform the action using the parameters that result from
|
45
|
+
# merging the context's parameters with those that were
|
46
|
+
# passed as an argument.
|
47
|
+
def doa(per_call_params = Hash.new)
|
48
|
+
send(action_method, action_name,
|
49
|
+
self.params.recursive_merge(per_call_params))
|
50
|
+
end
|
51
|
+
|
52
|
+
# Alias for #doa
|
53
|
+
def do_action(*args)
|
54
|
+
doa(*args)
|
55
|
+
end
|
56
|
+
|
57
|
+
private
|
58
|
+
|
59
|
+
# Merges in defaults from each parent class
|
60
|
+
def super_params
|
61
|
+
supers.reverse.inject(Hash.new) do |acc, klass|
|
62
|
+
next acc unless klass.respond_to?(:default_params)
|
63
|
+
|
64
|
+
dp = klass.default_params
|
65
|
+
acc.recursive_merge!(self.instance_eval(&dp) || Hash.new) if dp
|
66
|
+
acc
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
data/lib/doa.rb
ADDED
@@ -0,0 +1,95 @@
|
|
1
|
+
# Copyright (C) 2009 SemanticGap(R)
|
2
|
+
#
|
3
|
+
# Permission is hereby granted, free of charge, to any person
|
4
|
+
# obtaining a copy of this software and associated documentation
|
5
|
+
# files (the "Software"), to deal in the Software without
|
6
|
+
# restriction, including without limitation the rights to use,
|
7
|
+
# copy, modify, merge, publish, distribute, sublicense, and/or sell
|
8
|
+
# copies of the Software, and to permit persons to whom the
|
9
|
+
# Software is furnished to do so, subject to the following
|
10
|
+
# conditions:
|
11
|
+
#
|
12
|
+
# The above copyright notice and this permission notice shall be
|
13
|
+
# included in all copies or substantial portions of the Software.
|
14
|
+
#
|
15
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
16
|
+
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
|
17
|
+
# OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
18
|
+
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
|
19
|
+
# HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
20
|
+
# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
21
|
+
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
22
|
+
# OTHER DEALINGS IN THE SOFTWARE.
|
23
|
+
|
24
|
+
require 'facets/hash'
|
25
|
+
require 'doa/class_methods'
|
26
|
+
require 'doa/instance_methods'
|
27
|
+
|
28
|
+
# =Setup
|
29
|
+
#
|
30
|
+
# To use this, you should place the following in your "spec/spec_helper.rb":
|
31
|
+
#
|
32
|
+
# require 'doa'
|
33
|
+
# Doa.install!
|
34
|
+
# Doa.default_params = { :css => 'desktop', :format => 'html' }
|
35
|
+
#
|
36
|
+
# =Usage
|
37
|
+
#
|
38
|
+
# And your specs can then resemble:
|
39
|
+
#
|
40
|
+
# describe SomeController do
|
41
|
+
# action :update do
|
42
|
+
# before(:each) do
|
43
|
+
# @person = people(:bob)
|
44
|
+
# end
|
45
|
+
#
|
46
|
+
# params do
|
47
|
+
# { :id => @person, :name => 'Robert' }
|
48
|
+
# end
|
49
|
+
#
|
50
|
+
# it "updates bob" do
|
51
|
+
# Person.should_receive(:find).with(params[:id]).and_return(@person)
|
52
|
+
# lambda { doa }.should change(@person)
|
53
|
+
# end
|
54
|
+
# end
|
55
|
+
# end
|
56
|
+
#
|
57
|
+
module Doa
|
58
|
+
mattr_accessor :default_params
|
59
|
+
|
60
|
+
def self.included(base)
|
61
|
+
base.class_inheritable_accessor :default_params
|
62
|
+
base.extend(ClassMethods)
|
63
|
+
end
|
64
|
+
|
65
|
+
# Install Doa into RSpec's ControllerExampleGroup.
|
66
|
+
def self.install!
|
67
|
+
Spec::Rails::Example::ControllerExampleGroup.class_eval do
|
68
|
+
include Doa
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
private
|
73
|
+
|
74
|
+
# Given an action name such as :create, it returns the expected
|
75
|
+
# HTTP method.
|
76
|
+
def infer_method(action)
|
77
|
+
case action
|
78
|
+
when 'update' then :put
|
79
|
+
when 'create' then :post
|
80
|
+
else :get
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
# Returns the superclasses of an object
|
85
|
+
def supers
|
86
|
+
klass = self.class
|
87
|
+
supers = Array.new
|
88
|
+
while(klass)
|
89
|
+
supers << klass
|
90
|
+
klass = klass.superclass
|
91
|
+
end
|
92
|
+
|
93
|
+
supers
|
94
|
+
end
|
95
|
+
end
|
data/spec/application.rb
ADDED
data/spec/doa_spec.rb
ADDED
@@ -0,0 +1,64 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), "spec_helper")
|
2
|
+
|
3
|
+
describe Doa, :type => :controller do
|
4
|
+
ActionController::Routing::Routes.draw do |map|
|
5
|
+
map.resources :test, :controller => 'application'
|
6
|
+
end
|
7
|
+
|
8
|
+
controller_name :application
|
9
|
+
|
10
|
+
action :update do
|
11
|
+
before(:each) do
|
12
|
+
@person = 'person'
|
13
|
+
end
|
14
|
+
|
15
|
+
params do
|
16
|
+
{ :id => @person, :name => 'Robert' }
|
17
|
+
end
|
18
|
+
|
19
|
+
context 'no extra params' do
|
20
|
+
it "assigns the params" do
|
21
|
+
doa
|
22
|
+
|
23
|
+
assigns[:params][:id].should == @person
|
24
|
+
assigns[:params][:name].should == 'Robert'
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
context 'per-call params' do
|
29
|
+
before(:each) do
|
30
|
+
doa(:name => 'Bob', :age => 21)
|
31
|
+
@params = assigns[:params]
|
32
|
+
end
|
33
|
+
|
34
|
+
it "includes the parent context's params" do
|
35
|
+
@params[:id].should == @person
|
36
|
+
end
|
37
|
+
|
38
|
+
it "includes the passed params" do
|
39
|
+
@params[:name].should == 'Bob'
|
40
|
+
@params[:age].should == '21'
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
context 'per-context params' do
|
45
|
+
params do
|
46
|
+
{ 'name' => 'Bob', :age => 21 }
|
47
|
+
end
|
48
|
+
|
49
|
+
before(:each) do
|
50
|
+
do_action
|
51
|
+
@params = assigns[:params]
|
52
|
+
end
|
53
|
+
|
54
|
+
it "includes the parent context's params" do
|
55
|
+
@params[:id].should == @person
|
56
|
+
end
|
57
|
+
|
58
|
+
it "merges in the context's params with the parent's" do
|
59
|
+
@params[:name].should == 'Bob'
|
60
|
+
@params[:age].should == '21'
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
data/spec/spec.opts
ADDED
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
$: << File.join(File.dirname(File.dirname(__FILE__)), 'lib')
|
2
|
+
$: << File.dirname(__FILE__)
|
3
|
+
|
4
|
+
require 'active_support'
|
5
|
+
require 'action_controller'
|
6
|
+
require 'action_controller/request'
|
7
|
+
require 'action_controller/rescue'
|
8
|
+
require 'initializer'
|
9
|
+
|
10
|
+
require 'spec/rails'
|
11
|
+
require 'doa'
|
12
|
+
|
13
|
+
Doa.install!
|
metadata
ADDED
@@ -0,0 +1,68 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: Doa
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Nolan Eakins <sneakin@semanticgap.com>
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
|
12
|
+
date: 2009-10-21 00:00:00 -04:00
|
13
|
+
default_executable:
|
14
|
+
dependencies: []
|
15
|
+
|
16
|
+
description: rSpec controller macros
|
17
|
+
email: suppert@semanticgap.com
|
18
|
+
executables: []
|
19
|
+
|
20
|
+
extensions: []
|
21
|
+
|
22
|
+
extra_rdoc_files:
|
23
|
+
- README.rdoc
|
24
|
+
files:
|
25
|
+
- .gitignore
|
26
|
+
- Doa.gemspec
|
27
|
+
- README.rdoc
|
28
|
+
- Rakefile
|
29
|
+
- VERSION
|
30
|
+
- lib/doa.rb
|
31
|
+
- lib/doa/class_methods.rb
|
32
|
+
- lib/doa/instance_methods.rb
|
33
|
+
- spec/application.rb
|
34
|
+
- spec/doa_spec.rb
|
35
|
+
- spec/spec.opts
|
36
|
+
- spec/spec_helper.rb
|
37
|
+
has_rdoc: true
|
38
|
+
homepage: http://github.com/sneakin/Doa
|
39
|
+
licenses: []
|
40
|
+
|
41
|
+
post_install_message:
|
42
|
+
rdoc_options:
|
43
|
+
- --charset=UTF-8
|
44
|
+
require_paths:
|
45
|
+
- lib
|
46
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
47
|
+
requirements:
|
48
|
+
- - ">="
|
49
|
+
- !ruby/object:Gem::Version
|
50
|
+
version: "0"
|
51
|
+
version:
|
52
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
53
|
+
requirements:
|
54
|
+
- - ">="
|
55
|
+
- !ruby/object:Gem::Version
|
56
|
+
version: "0"
|
57
|
+
version:
|
58
|
+
requirements: []
|
59
|
+
|
60
|
+
rubyforge_project:
|
61
|
+
rubygems_version: 1.3.5
|
62
|
+
signing_key:
|
63
|
+
specification_version: 3
|
64
|
+
summary: The Tester
|
65
|
+
test_files:
|
66
|
+
- spec/application.rb
|
67
|
+
- spec/doa_spec.rb
|
68
|
+
- spec/spec_helper.rb
|