benhutton-remarkable_rails 4.0.0.alpha4
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG +105 -0
- data/LICENSE +20 -0
- data/README +116 -0
- data/benhutton-remarkable_rails.gemspec +73 -0
- data/lib/remarkable_rails.rb +48 -0
- data/lib/remarkable_rails/action_controller.rb +22 -0
- data/lib/remarkable_rails/action_controller/base.rb +31 -0
- data/lib/remarkable_rails/action_controller/macro_stubs.rb +594 -0
- data/lib/remarkable_rails/action_controller/matchers/assign_to_matcher.rb +95 -0
- data/lib/remarkable_rails/action_controller/matchers/filter_params_matcher.rb +41 -0
- data/lib/remarkable_rails/action_controller/matchers/redirect_to_matcher.rb +118 -0
- data/lib/remarkable_rails/action_controller/matchers/render_template_matcher.rb +16 -0
- data/lib/remarkable_rails/action_controller/matchers/respond_with_matcher.rb +136 -0
- data/lib/remarkable_rails/action_controller/matchers/route_matcher.rb +135 -0
- data/lib/remarkable_rails/action_controller/matchers/set_cookies_matcher.rb +85 -0
- data/lib/remarkable_rails/action_controller/matchers/set_session_matcher.rb +108 -0
- data/lib/remarkable_rails/action_controller/matchers/set_the_flash_matcher.rb +56 -0
- data/lib/remarkable_rails/action_view.rb +18 -0
- data/lib/remarkable_rails/action_view/base.rb +7 -0
- data/lib/remarkable_rails/active_orm.rb +19 -0
- data/locale/en.yml +110 -0
- data/remarkable_rails.gemspec +71 -0
- metadata +156 -0
@@ -0,0 +1,85 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), 'set_session_matcher')
|
2
|
+
|
3
|
+
module Remarkable
|
4
|
+
module ActionController
|
5
|
+
module Matchers
|
6
|
+
class SetCookiesMatcher < SetSessionMatcher #:nodoc:
|
7
|
+
|
8
|
+
# For cookies to work properly, we have:
|
9
|
+
#
|
10
|
+
# On Rails 2.1.2 and 2.2.2:
|
11
|
+
#
|
12
|
+
# 1. Wrap :to values in an array;
|
13
|
+
# 2. When :to is false or nil, make it be an empty array;
|
14
|
+
# 3. Convert all keys to string.
|
15
|
+
#
|
16
|
+
# On Rails 2.3.2:
|
17
|
+
#
|
18
|
+
# 1. Return nil if nil, join when array or convert to string;
|
19
|
+
# 2. Convert all keys to string.
|
20
|
+
#
|
21
|
+
before_assert do
|
22
|
+
if @options.key?(:to)
|
23
|
+
if @subject.request.env.key?("rack.input")
|
24
|
+
@options[:to] = case @options[:to]
|
25
|
+
when nil
|
26
|
+
nil
|
27
|
+
when Array
|
28
|
+
@options[:to].join('&')
|
29
|
+
else
|
30
|
+
@options[:to].to_s
|
31
|
+
end
|
32
|
+
else
|
33
|
+
@options[:to] = @options[:to] ? Array(@options[:to]) : []
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
@keys.collect!(&:to_s)
|
38
|
+
end
|
39
|
+
|
40
|
+
protected
|
41
|
+
def session
|
42
|
+
@subject ? (@subject.response.cookies || {}) : {}
|
43
|
+
end
|
44
|
+
|
45
|
+
def interpolation_options
|
46
|
+
{ :cookies_inspect => session.symbolize_keys!.inspect }
|
47
|
+
end
|
48
|
+
|
49
|
+
end
|
50
|
+
|
51
|
+
# Ensures that the given cookie keys were set. If you want to check that
|
52
|
+
# a cookie is not being set, just do:
|
53
|
+
#
|
54
|
+
# should_not_set_cookies :user
|
55
|
+
#
|
56
|
+
# If you want to assure that a cookie is being set to nil, do instead:
|
57
|
+
#
|
58
|
+
# should_set_cookies :user, :to => nil
|
59
|
+
#
|
60
|
+
# Note: this method is also aliased as <tt>set_cookie</tt>.
|
61
|
+
#
|
62
|
+
# == Options
|
63
|
+
#
|
64
|
+
# * <tt>:to</tt> - The value to compare the session key.
|
65
|
+
# It accepts procs and be also given as a block (see examples below).
|
66
|
+
#
|
67
|
+
# == Examples
|
68
|
+
#
|
69
|
+
# should_set_cookies :user_id, :user
|
70
|
+
# should_set_cookies :user_id, :to => 2
|
71
|
+
# should_set_cookies :user, :to => proc{ users(:first) }
|
72
|
+
# should_set_cookies(:user){ users(:first) }
|
73
|
+
#
|
74
|
+
# it { should set_cookies(:user_id, :user) }
|
75
|
+
# it { should set_cookies(:user_id, :to => 2) }
|
76
|
+
# it { should set_cookies(:user, :to => users(:first)) }
|
77
|
+
#
|
78
|
+
def set_cookies(*args, &block)
|
79
|
+
SetCookiesMatcher.new(*args, &block).spec(self)
|
80
|
+
end
|
81
|
+
alias :set_cookie :set_cookies
|
82
|
+
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
@@ -0,0 +1,108 @@
|
|
1
|
+
module Remarkable
|
2
|
+
module ActionController
|
3
|
+
module Matchers
|
4
|
+
class SetSessionMatcher < Remarkable::ActionController::Base #:nodoc:
|
5
|
+
arguments :collection => :keys, :as => :key, :block => true
|
6
|
+
|
7
|
+
optional :to, :block => true
|
8
|
+
|
9
|
+
assertion :is_not_empty?, :contains_value?
|
10
|
+
collection_assertions :assigned_value?, :is_equal_value?
|
11
|
+
|
12
|
+
before_assert :evaluate_expected_value
|
13
|
+
|
14
|
+
private
|
15
|
+
|
16
|
+
# When no keys are given:
|
17
|
+
#
|
18
|
+
# should set_session
|
19
|
+
#
|
20
|
+
# We check if the session is not empty.
|
21
|
+
#
|
22
|
+
def is_not_empty?
|
23
|
+
!(@keys.empty? && session.empty?)
|
24
|
+
end
|
25
|
+
|
26
|
+
# When no keys are given and a comparision value is given:
|
27
|
+
#
|
28
|
+
# should set_session.to(1)
|
29
|
+
#
|
30
|
+
# We check if any of the session data contains the given value.
|
31
|
+
#
|
32
|
+
def contains_value?
|
33
|
+
return true unless @keys.empty? && value_to_compare?
|
34
|
+
assert_contains(session.values, @options[:to])
|
35
|
+
end
|
36
|
+
|
37
|
+
def assigned_value?
|
38
|
+
session.key?(@key)
|
39
|
+
end
|
40
|
+
|
41
|
+
# Returns true if :to is not given and no block is given.
|
42
|
+
# In case :to is a proc or a block is given, we evaluate it in the
|
43
|
+
# @spec scope.
|
44
|
+
#
|
45
|
+
def is_equal_value?
|
46
|
+
return true unless value_to_compare?
|
47
|
+
assert_contains([session[@key]], @options[:to])
|
48
|
+
end
|
49
|
+
|
50
|
+
def session
|
51
|
+
raw_session.with_indifferent_access.except(:flash)
|
52
|
+
end
|
53
|
+
|
54
|
+
def raw_session
|
55
|
+
@subject ? @subject.response.session.data : {}
|
56
|
+
end
|
57
|
+
|
58
|
+
def value_to_compare?
|
59
|
+
@options.key?(:to) || @block
|
60
|
+
end
|
61
|
+
|
62
|
+
def interpolation_options
|
63
|
+
{ :session_inspect => raw_session.except('flash').symbolize_keys!.inspect }
|
64
|
+
end
|
65
|
+
|
66
|
+
# Evaluate procs before assert to avoid them appearing in descriptions.
|
67
|
+
def evaluate_expected_value
|
68
|
+
if value_to_compare?
|
69
|
+
value = @options.key?(:to) ? @options[:to] : @block
|
70
|
+
value = @spec.instance_eval(&value) if value.is_a?(Proc)
|
71
|
+
@options[:to] = value
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
end
|
76
|
+
|
77
|
+
# Ensures that the given session keys were set. If you want to check that
|
78
|
+
# a variable is not being set, just do:
|
79
|
+
#
|
80
|
+
# should_not_set_session :user
|
81
|
+
#
|
82
|
+
# If you want to assure that a variable is being set to nil, do instead:
|
83
|
+
#
|
84
|
+
# should_set_session :user, :to => nil
|
85
|
+
#
|
86
|
+
# == Options
|
87
|
+
#
|
88
|
+
# * <tt>:to</tt> - The value to compare the session key.
|
89
|
+
# It accepts procs and be also given as a block (see examples below).
|
90
|
+
#
|
91
|
+
# == Examples
|
92
|
+
#
|
93
|
+
# should_set_session :user_id, :user
|
94
|
+
# should_set_session :user_id, :to => 2
|
95
|
+
# should_set_session :user, :to => proc{ users(:first) }
|
96
|
+
# should_set_session(:user){ users(:first) }
|
97
|
+
#
|
98
|
+
# it { should set_session(:user_id, :user) }
|
99
|
+
# it { should set_session(:user_id, :to => 2) }
|
100
|
+
# it { should set_session(:user, :to => users(:first)) }
|
101
|
+
#
|
102
|
+
def set_session(*args, &block)
|
103
|
+
SetSessionMatcher.new(*args, &block).spec(self)
|
104
|
+
end
|
105
|
+
|
106
|
+
end
|
107
|
+
end
|
108
|
+
end
|
@@ -0,0 +1,56 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), 'set_session_matcher')
|
2
|
+
|
3
|
+
module Remarkable
|
4
|
+
module ActionController
|
5
|
+
module Matchers
|
6
|
+
class SetTheFlashMatcher < SetSessionMatcher #:nodoc:
|
7
|
+
|
8
|
+
protected
|
9
|
+
def session
|
10
|
+
@subject ? (@subject.request.session['flash'] || {}) : {}
|
11
|
+
end
|
12
|
+
|
13
|
+
def interpolation_options
|
14
|
+
{ :flash_inspect => session.symbolize_keys!.inspect }
|
15
|
+
end
|
16
|
+
|
17
|
+
end
|
18
|
+
|
19
|
+
# Ensures that a flash message is being set. If you want to check that a
|
20
|
+
# flash is not being set, just do:
|
21
|
+
#
|
22
|
+
# should_not_set_the_flash :user
|
23
|
+
#
|
24
|
+
# If you want to assure that a flash is being set to nil, do instead:
|
25
|
+
#
|
26
|
+
# should_set_the_flash :user, :to => nil
|
27
|
+
#
|
28
|
+
# == Options
|
29
|
+
#
|
30
|
+
# * <tt>:to</tt> - The value to compare the flash key.
|
31
|
+
# It accepts procs and can also be given as a block (see examples below)
|
32
|
+
#
|
33
|
+
# == Examples
|
34
|
+
#
|
35
|
+
# should_set_the_flash
|
36
|
+
# should_not_set_the_flash
|
37
|
+
#
|
38
|
+
# should_set_the_flash :to => 'message'
|
39
|
+
# should_set_the_flash :notice, :warn
|
40
|
+
# should_set_the_flash :notice, :to => 'message'
|
41
|
+
# should_set_the_flash :notice, :to => proc{ 'hi ' + users(:first).name }
|
42
|
+
# should_set_the_flash(:notice){ 'hi ' + users(:first).name }
|
43
|
+
#
|
44
|
+
# it { should set_the_flash }
|
45
|
+
# it { should set_the_flash.to('message') }
|
46
|
+
# it { should set_the_flash(:notice, :warn) }
|
47
|
+
# it { should set_the_flash(:notice, :to => 'message') }
|
48
|
+
# it { should set_the_flash(:notice, :to => ('hi ' + users(:first).name)) }
|
49
|
+
#
|
50
|
+
def set_the_flash(*args, &block)
|
51
|
+
SetTheFlashMatcher.new(*args, &block).spec(self)
|
52
|
+
end
|
53
|
+
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module Remarkable
|
2
|
+
module ActionView
|
3
|
+
end
|
4
|
+
end
|
5
|
+
|
6
|
+
dir = File.dirname(__FILE__)
|
7
|
+
require File.join(dir, 'action_view', 'base')
|
8
|
+
|
9
|
+
# Load matchers
|
10
|
+
Dir[File.join(dir, 'action_view', 'matchers', '*.rb')].each do |file|
|
11
|
+
require file
|
12
|
+
end
|
13
|
+
|
14
|
+
# Iinclude matchers in Spec::Rails
|
15
|
+
if defined?(RSpec::Rails)
|
16
|
+
Remarkable.include_matchers!(Remarkable::ActionView, RSpec::Rails::ViewExampleGroup)
|
17
|
+
end
|
18
|
+
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# This will responsable to check which ORM is loaded and include respective
|
2
|
+
# matchers.
|
3
|
+
#
|
4
|
+
if defined?(ActiveRecord::Base)
|
5
|
+
unless Remarkable.const_defined?('ActiveRecord')
|
6
|
+
begin
|
7
|
+
require 'remarkable_activerecord'
|
8
|
+
rescue LoadError
|
9
|
+
require 'rubygems'
|
10
|
+
gem 'remarkable_activerecord'
|
11
|
+
require 'remarkable_activerecord'
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
# Include Remarkable ActiveRecord matcher in appropriate ExampleGroup
|
16
|
+
if defined?(RSpec::Rails)
|
17
|
+
Remarkable.include_matchers!(Remarkable::ActiveRecord, RSpec::Rails::ModelExampleGroup)
|
18
|
+
end
|
19
|
+
end
|
data/locale/en.yml
ADDED
@@ -0,0 +1,110 @@
|
|
1
|
+
en:
|
2
|
+
remarkable:
|
3
|
+
action_controller:
|
4
|
+
responding: "responding to #%{verb} %{action}"
|
5
|
+
mime_type: "with %{format}"
|
6
|
+
|
7
|
+
assign_to:
|
8
|
+
description: "assign %{names}"
|
9
|
+
expectations:
|
10
|
+
assigned_value: "action to assign %{name}, got no assignment"
|
11
|
+
is_kind_of: "assign %{name} to be kind of %{with_kind_of}, got a %{assign_class}"
|
12
|
+
is_equal_value: "assign %{name} to be equal to %{with}, got %{assign_inspect}"
|
13
|
+
optionals:
|
14
|
+
with_kind_of:
|
15
|
+
positive: "with kind of %{value}"
|
16
|
+
|
17
|
+
filter_params:
|
18
|
+
description: "filter %{params} parameters from log"
|
19
|
+
expectations:
|
20
|
+
respond_to_filter_params: "controller to respond to filter_parameters (controller is not filtering any parameter)"
|
21
|
+
is_filtered: "%{param} to be filtered, got no filtering"
|
22
|
+
|
23
|
+
redirect_to:
|
24
|
+
description: "redirect to %{expected}"
|
25
|
+
expectations:
|
26
|
+
redirected: "redirect to %{expected}, got no redirect"
|
27
|
+
status_matches: "redirect to %{expected} with status %{with}, got status %{status}"
|
28
|
+
url_matches: "redirect to %{expected}, got redirect to %{actual}"
|
29
|
+
optionals:
|
30
|
+
with:
|
31
|
+
positive: "with status %{inspect}"
|
32
|
+
|
33
|
+
render_template:
|
34
|
+
description: "render"
|
35
|
+
expectations:
|
36
|
+
rendered: "template %{template} to be rendered, got no render"
|
37
|
+
template_matches: "template %{template} to be rendered, got %{actual_template}"
|
38
|
+
layout_matches: "to render with layout %{layout}, got %{actual_layout}"
|
39
|
+
status_matches: "to render with status %{with}, got %{actual_status}"
|
40
|
+
body_matches: "to render with body %{body}, got %{actual_body}"
|
41
|
+
content_type_matches: "to render with content type %{content_type}, got %{actual_content_type}"
|
42
|
+
optionals:
|
43
|
+
template:
|
44
|
+
positive: "template %{inspect}"
|
45
|
+
layout:
|
46
|
+
positive: "with layout %{inspect}"
|
47
|
+
negative: "with no layout"
|
48
|
+
with:
|
49
|
+
positive: "with %{value}"
|
50
|
+
body:
|
51
|
+
positive: "with body %{inspect}"
|
52
|
+
content_type:
|
53
|
+
positive: "with content type %{inspect}"
|
54
|
+
|
55
|
+
respond_with:
|
56
|
+
description: "respond"
|
57
|
+
expectations:
|
58
|
+
status_matches: "to respond with status %{with}, got %{actual_status}"
|
59
|
+
body_matches: "to respond with body %{body}, got %{actual_body}"
|
60
|
+
content_type_matches: "to respond with content type %{content_type}, got %{actual_content_type}"
|
61
|
+
optionals:
|
62
|
+
with:
|
63
|
+
positive: "with %{value}"
|
64
|
+
body:
|
65
|
+
positive: "with body %{inspect}"
|
66
|
+
content_type:
|
67
|
+
positive: "with content type %{inspect}"
|
68
|
+
|
69
|
+
route:
|
70
|
+
description: "route %{method} %{path} to/from %{options}"
|
71
|
+
expectations:
|
72
|
+
map_to_path: "to map %{options} to %{method} %{path}, got %{actual}"
|
73
|
+
generate_params: "to generate params %{options} from %{method} %{path}, got %{actual}"
|
74
|
+
|
75
|
+
set_cookies:
|
76
|
+
description: "set cookies %{keys}"
|
77
|
+
expectations:
|
78
|
+
is_not_empty: "any cookie to be set, got %{cookies_inspect}"
|
79
|
+
contains_value: "any cookie to be set to %{to}, got %{cookies_inspect}"
|
80
|
+
assigned_value: "cookie %{key} to be set, got %{cookies_inspect}"
|
81
|
+
is_equal_value: "cookie %{key} to be set to %{to}, got %{cookies_inspect}"
|
82
|
+
optionals:
|
83
|
+
to:
|
84
|
+
positive: "to %{inspect}"
|
85
|
+
negative: "to %{inspect}"
|
86
|
+
|
87
|
+
set_session:
|
88
|
+
description: "set session variable %{keys}"
|
89
|
+
expectations:
|
90
|
+
is_not_empty: "any session variable to be set, got %{session_inspect}"
|
91
|
+
contains_value: "any session variable to be set to %{to}, got %{session_inspect}"
|
92
|
+
assigned_value: "session variable %{key} to be set, got %{session_inspect}"
|
93
|
+
is_equal_value: "session variable %{key} to be set to %{to}, got %{session_inspect}"
|
94
|
+
optionals:
|
95
|
+
to:
|
96
|
+
positive: "to %{inspect}"
|
97
|
+
negative: "to %{inspect}"
|
98
|
+
|
99
|
+
set_the_flash:
|
100
|
+
description: "set the flash message %{keys}"
|
101
|
+
expectations:
|
102
|
+
is_not_empty: "any flash message to be set, got %{flash_inspect}"
|
103
|
+
contains_value: "any flash message to be set to %{to}, got %{flash_inspect}"
|
104
|
+
assigned_value: "flash message %{key} to be set, got %{flash_inspect}"
|
105
|
+
is_equal_value: "flash message %{key} to be set to %{to}, got %{flash_inspect}"
|
106
|
+
optionals:
|
107
|
+
to:
|
108
|
+
positive: "to %{inspect}"
|
109
|
+
negative: "to %{inspect}"
|
110
|
+
|
@@ -0,0 +1,71 @@
|
|
1
|
+
# Generated by jeweler
|
2
|
+
# DO NOT EDIT THIS FILE DIRECTLY
|
3
|
+
# Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
|
4
|
+
# -*- encoding: utf-8 -*-
|
5
|
+
|
6
|
+
Gem::Specification.new do |s|
|
7
|
+
s.name = %q{remarkable_rails}
|
8
|
+
s.version = "4.0.0.alpha4"
|
9
|
+
|
10
|
+
s.required_rubygems_version = Gem::Requirement.new("> 1.3.1") if s.respond_to? :required_rubygems_version=
|
11
|
+
s.authors = ["Carlos Brando", "José Valim"]
|
12
|
+
s.date = %q{2010-10-18}
|
13
|
+
s.description = %q{Remarkable Rails: collection of matchers and macros with I18n for Rails}
|
14
|
+
s.email = ["eduardobrando@gmail.com", "jose.valim@gmail.com"]
|
15
|
+
s.extra_rdoc_files = [
|
16
|
+
"CHANGELOG",
|
17
|
+
"LICENSE",
|
18
|
+
"README"
|
19
|
+
]
|
20
|
+
s.files = [
|
21
|
+
"CHANGELOG",
|
22
|
+
"LICENSE",
|
23
|
+
"README",
|
24
|
+
"lib/remarkable_rails.rb",
|
25
|
+
"lib/remarkable_rails/action_controller.rb",
|
26
|
+
"lib/remarkable_rails/action_controller/base.rb",
|
27
|
+
"lib/remarkable_rails/action_controller/macro_stubs.rb",
|
28
|
+
"lib/remarkable_rails/action_controller/matchers/assign_to_matcher.rb",
|
29
|
+
"lib/remarkable_rails/action_controller/matchers/filter_params_matcher.rb",
|
30
|
+
"lib/remarkable_rails/action_controller/matchers/redirect_to_matcher.rb",
|
31
|
+
"lib/remarkable_rails/action_controller/matchers/render_template_matcher.rb",
|
32
|
+
"lib/remarkable_rails/action_controller/matchers/respond_with_matcher.rb",
|
33
|
+
"lib/remarkable_rails/action_controller/matchers/route_matcher.rb",
|
34
|
+
"lib/remarkable_rails/action_controller/matchers/set_cookies_matcher.rb",
|
35
|
+
"lib/remarkable_rails/action_controller/matchers/set_session_matcher.rb",
|
36
|
+
"lib/remarkable_rails/action_controller/matchers/set_the_flash_matcher.rb",
|
37
|
+
"lib/remarkable_rails/action_view.rb",
|
38
|
+
"lib/remarkable_rails/action_view/base.rb",
|
39
|
+
"lib/remarkable_rails/active_orm.rb",
|
40
|
+
"locale/en.yml"
|
41
|
+
]
|
42
|
+
s.homepage = %q{http://github.com/carlosbrando/remarkable}
|
43
|
+
s.rdoc_options = ["--charset=UTF-8"]
|
44
|
+
s.require_paths = ["lib"]
|
45
|
+
s.rubyforge_project = %q{remarkable}
|
46
|
+
s.rubygems_version = %q{1.3.7}
|
47
|
+
s.summary = %q{Remarkable Rails: collection of matchers and macros with I18n for Rails}
|
48
|
+
|
49
|
+
if s.respond_to? :specification_version then
|
50
|
+
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
51
|
+
s.specification_version = 3
|
52
|
+
|
53
|
+
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
54
|
+
s.add_runtime_dependency(%q<rspec>, [">= 2.0.0.alpha11"])
|
55
|
+
s.add_runtime_dependency(%q<rspec-rails>, [">= 2.0.0.alpha11"])
|
56
|
+
s.add_runtime_dependency(%q<remarkable>, ["~> 4.0.0.alpha4"])
|
57
|
+
s.add_runtime_dependency(%q<remarkable_activerecord>, ["~> 4.0.0.alpha4"])
|
58
|
+
else
|
59
|
+
s.add_dependency(%q<rspec>, [">= 2.0.0.alpha11"])
|
60
|
+
s.add_dependency(%q<rspec-rails>, [">= 2.0.0.alpha11"])
|
61
|
+
s.add_dependency(%q<remarkable>, ["~> 4.0.0.alpha4"])
|
62
|
+
s.add_dependency(%q<remarkable_activerecord>, ["~> 4.0.0.alpha4"])
|
63
|
+
end
|
64
|
+
else
|
65
|
+
s.add_dependency(%q<rspec>, [">= 2.0.0.alpha11"])
|
66
|
+
s.add_dependency(%q<rspec-rails>, [">= 2.0.0.alpha11"])
|
67
|
+
s.add_dependency(%q<remarkable>, ["~> 4.0.0.alpha4"])
|
68
|
+
s.add_dependency(%q<remarkable_activerecord>, ["~> 4.0.0.alpha4"])
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|