remarkable_rails 3.1.6 → 3.1.7
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/CHANGELOG +4 -0
- data/README +22 -1
- data/lib/remarkable_rails.rb +34 -0
- data/lib/remarkable_rails/action_controller/matchers/route_matcher.rb +32 -17
- data/spec/action_controller/route_matcher_spec.rb +11 -0
- data/spec/application/vendor/gems/my_plugin/remarkable/my_plugin_locale.yml +2 -0
- data/spec/application/vendor/gems/my_plugin/remarkable/my_plugin_matchers.rb +4 -0
- data/spec/remarkable_rails_spec.rb +11 -0
- data/spec/spec_helper.rb +1 -1
- metadata +7 -4
data/CHANGELOG
CHANGED
@@ -1,3 +1,7 @@
|
|
1
|
+
* Plugin files are automatically loaded [#86]
|
2
|
+
|
3
|
+
* Allow should_route to use environment configuration [#88] (thanks to Lawrence Pit)
|
4
|
+
|
1
5
|
* Allow mock model class to be set using :as option.
|
2
6
|
|
3
7
|
* [DEPRECATION] By default all matchers perform expectations, use with_stubs => true
|
data/README
CHANGED
@@ -92,4 +92,25 @@ There are also params and mime methods:
|
|
92
92
|
end
|
93
93
|
end
|
94
94
|
|
95
|
-
And much more. Be sure to check macro stubs documentation.
|
95
|
+
And much more. Be sure to check macro stubs documentation.
|
96
|
+
|
97
|
+
== Rails plugin developers
|
98
|
+
|
99
|
+
Remarkable automatically loads files at the remarkable directory on your plugins
|
100
|
+
and frozen gems if RAILS_ROOT is defined. The lookup happens like this:
|
101
|
+
|
102
|
+
RAILS_ROOT/spec/remarkable
|
103
|
+
RAILS_ROOT/vendor/gems/*/remarkable
|
104
|
+
RAILS_ROOT/vendor/plugins/*/remarkable
|
105
|
+
|
106
|
+
Remarkable will load both ruby files (.rb) and Remarkable locale files (.yml).
|
107
|
+
|
108
|
+
The only step remaining is to include the matchers, which Remarkable will not
|
109
|
+
do automatically if the user is not using a Remarkable namespace. For example,
|
110
|
+
if the developer includes his matchers to Remarkable::ActiveRecord::Matchers,
|
111
|
+
the matchers will be automatically available in users spec. But if he creates
|
112
|
+
a new namespace, like MyPlugin::Matchers, he has to tell Remarkable to include
|
113
|
+
them in the proper example group:
|
114
|
+
|
115
|
+
Remarkable.include_matchers!(MyPlugin::Matchers, Spec::Rails::Example::ModelExampleGroup)
|
116
|
+
|
data/lib/remarkable_rails.rb
CHANGED
@@ -28,3 +28,37 @@ require File.join(dir, 'remarkable_rails', 'action_view')
|
|
28
28
|
|
29
29
|
# Load locale file
|
30
30
|
Remarkable.add_locale File.join(dir, '..', 'locale', 'en.yml')
|
31
|
+
# Load plugin files if RAILS_ROOT is defined. It loads files at:
|
32
|
+
#
|
33
|
+
# RAILS_ROOT/spec/remarkable
|
34
|
+
# RAILS_ROOT/vendor/gems/*/remarkable
|
35
|
+
# RAILS_ROOT/vendor/plugins/*/remarkable
|
36
|
+
#
|
37
|
+
# Remarkable will load both ruby files (.rb) and Remarkable locale files (.yml).
|
38
|
+
#
|
39
|
+
# The only step remaining is to include the matchers, which Remarkable will not
|
40
|
+
# do automatically if the user is not using a Remarkable namespace. For example,
|
41
|
+
# if the developer includes his matchers to Remarkable::ActiveRecord::Matchers,
|
42
|
+
# the matchers will be automatically available in users spec. But if he creates
|
43
|
+
# a new namespace, like MyPlugin::Matchers, he has to tell Remarkable to include
|
44
|
+
# them in the proper example group:
|
45
|
+
#
|
46
|
+
# Remarkable.include_matchers!(MyPlugin::Matchers, Spec::Rails::Example::ModelExampleGroup)
|
47
|
+
#
|
48
|
+
if defined?(RAILS_ROOT)
|
49
|
+
files = []
|
50
|
+
files += Dir.glob(File.join(RAILS_ROOT, "spec", "remarkable", "*"))
|
51
|
+
files += Dir.glob(File.join(RAILS_ROOT, "vendor", "{plugins,gems}", "*", "remarkable", "*"))
|
52
|
+
files.each do |file|
|
53
|
+
begin
|
54
|
+
case File.extname(file)
|
55
|
+
when ".rb"
|
56
|
+
require file
|
57
|
+
when ".yml"
|
58
|
+
Remarkable.add_locale file
|
59
|
+
end
|
60
|
+
rescue Exception => e
|
61
|
+
warn "[WARNING] Remarkable could not load file #{file.inspect}. Error: #{e.message}"
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
@@ -6,10 +6,9 @@ module Remarkable
|
|
6
6
|
arguments :method, :path
|
7
7
|
|
8
8
|
assertions :map_to_path?, :generate_params?
|
9
|
-
|
9
|
+
|
10
10
|
before_assert do
|
11
11
|
@options[:controller] ||= controller_name
|
12
|
-
|
13
12
|
@populated_path = @path.dup
|
14
13
|
|
15
14
|
@options.each do |key, value|
|
@@ -18,7 +17,15 @@ module Remarkable
|
|
18
17
|
end
|
19
18
|
|
20
19
|
::ActionController::Routing::Routes.reload if ::ActionController::Routing::Routes.empty?
|
21
|
-
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def controller
|
23
|
+
@controller ||= @spec.controller if @spec.respond_to?(:controller)
|
24
|
+
end
|
25
|
+
|
26
|
+
def request
|
27
|
+
controller.request if controller
|
28
|
+
end
|
22
29
|
|
23
30
|
private
|
24
31
|
|
@@ -28,7 +35,11 @@ module Remarkable
|
|
28
35
|
end
|
29
36
|
|
30
37
|
def generate_params?
|
31
|
-
|
38
|
+
env = ::ActionController::Routing::Routes.extract_request_environment(controller.request) if controller
|
39
|
+
|
40
|
+
env ||= {}
|
41
|
+
env[:method] = @method.to_sym
|
42
|
+
params_from = ::ActionController::Routing::Routes.recognize_path(@populated_path, env) rescue nil
|
32
43
|
return params_from == @options, :actual => params_from.inspect
|
33
44
|
end
|
34
45
|
|
@@ -40,23 +51,27 @@ module Remarkable
|
|
40
51
|
# subject or the controller class in the RoutingExampleGroup.
|
41
52
|
#
|
42
53
|
def controller_name
|
43
|
-
|
44
|
-
|
45
|
-
controller = if @subject && @subject.class.ancestors.include?(::ActionController::Base)
|
46
|
-
@subject.class
|
47
|
-
elsif spec_class.respond_to?(:controller_class)
|
48
|
-
spec_class.controller_class
|
49
|
-
elsif spec_class.respond_to?(:described_class)
|
50
|
-
spec_class.described_class
|
51
|
-
end
|
52
|
-
|
53
|
-
if controller && controller.ancestors.include?(::ActionController::Base)
|
54
|
-
controller.name.gsub(/Controller$/, '').tableize
|
54
|
+
if controller_class
|
55
|
+
controller_class.name.gsub(/Controller$/, '').tableize
|
55
56
|
else
|
56
57
|
raise ArgumentError, "I cannot guess the controller name in route. Please supply :controller as option"
|
57
58
|
end
|
58
59
|
end
|
59
|
-
|
60
|
+
|
61
|
+
def controller_class
|
62
|
+
@controller_class ||= begin
|
63
|
+
spec_class = @spec.class unless @spec.class == Class
|
64
|
+
|
65
|
+
attempts = []
|
66
|
+
attempts << controller.class if controller
|
67
|
+
attempts << @subject.class if @subject
|
68
|
+
attempts << spec_class.controller_class if spec_class.respond_to?(:controller_class)
|
69
|
+
attempts << spec_class.described_class if spec_class.respond_to?(:described_class)
|
70
|
+
|
71
|
+
attempts.find{ |controller| ::ActionController::Base >= controller }
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
60
75
|
def interpolation_options
|
61
76
|
{ :options => @options.inspect, :method => @method.to_s.upcase, :path => @path.inspect }
|
62
77
|
end
|
@@ -40,6 +40,7 @@ describe 'route_matcher' do
|
|
40
40
|
|
41
41
|
# failing case
|
42
42
|
it { should_not route(:get, '/projects', :controller => :projects, :action => :show) }
|
43
|
+
it { should_not route(:xyz, '/projects', :controller => :projects, :action => :index) }
|
43
44
|
end
|
44
45
|
|
45
46
|
describe 'macros' do
|
@@ -58,6 +59,7 @@ describe 'route_matcher' do
|
|
58
59
|
|
59
60
|
# failing case
|
60
61
|
should_not_route :get, '/projects', :controller => :projects, :action => :show
|
62
|
+
should_not_route :xyz, '/projects', :controller => :projects, :action => :index
|
61
63
|
end
|
62
64
|
|
63
65
|
describe TasksController, :type => :routing do
|
@@ -72,4 +74,13 @@ describe 'route_matcher' do
|
|
72
74
|
should_route :put, '/projects/5/tasks/1', :action => :update, :id => 1, :project_id => 5
|
73
75
|
end
|
74
76
|
|
77
|
+
describe 'using controller.request' do
|
78
|
+
it "should extract environment from controller request" do
|
79
|
+
@matcher = route(:get, '/projects', :controller => 'projects', :action => 'index')
|
80
|
+
::ActionController::Routing::Routes.should_receive(:extract_request_environment).with(controller.request).and_return({:subdomain => "foo"})
|
81
|
+
::ActionController::Routing::Routes.should_receive(:recognize_path).with("/projects", {:subdomain => "foo", :method => :get})
|
82
|
+
@matcher.matches?(@controller)
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
75
86
|
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
|
2
|
+
|
3
|
+
describe 'loader' do
|
4
|
+
it "should load files in the plugin folder" do
|
5
|
+
defined?(MyPlugin::Matchers).should == "constant"
|
6
|
+
end
|
7
|
+
|
8
|
+
it "should load files in the plugin folder" do
|
9
|
+
I18n.t("my_plugin_locale").should == "My plugin locale"
|
10
|
+
end
|
11
|
+
end
|
data/spec/spec_helper.rb
CHANGED
@@ -2,7 +2,7 @@ require 'rubygems'
|
|
2
2
|
|
3
3
|
RAILS_ENV = 'test'
|
4
4
|
RAILS_VERSION = ENV['RAILS_VERSION'] || '2.3.2'
|
5
|
-
RSPEC_VERSION = ENV['RSPEC_VERSION'] || Spec::VERSION::STRING
|
5
|
+
RSPEC_VERSION = ENV['RSPEC_VERSION'] || Spec::VERSION::STRING
|
6
6
|
|
7
7
|
# Load Rails
|
8
8
|
gem 'activesupport', RAILS_VERSION
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: remarkable_rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.1.
|
4
|
+
version: 3.1.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Carlos Brando
|
@@ -10,7 +10,7 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date: 2009-
|
13
|
+
date: 2009-07-05 00:00:00 +02:00
|
14
14
|
default_executable:
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
@@ -41,7 +41,7 @@ dependencies:
|
|
41
41
|
requirements:
|
42
42
|
- - ">="
|
43
43
|
- !ruby/object:Gem::Version
|
44
|
-
version: 3.1.
|
44
|
+
version: 3.1.7
|
45
45
|
version:
|
46
46
|
- !ruby/object:Gem::Dependency
|
47
47
|
name: remarkable_activerecord
|
@@ -51,7 +51,7 @@ dependencies:
|
|
51
51
|
requirements:
|
52
52
|
- - ">="
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: 3.1.
|
54
|
+
version: 3.1.7
|
55
55
|
version:
|
56
56
|
description: "Remarkable Rails: collection of matchers and macros with I18n for Rails"
|
57
57
|
email:
|
@@ -121,6 +121,8 @@ test_files:
|
|
121
121
|
- spec/application/examples/example.html.erb
|
122
122
|
- spec/application/application.rb
|
123
123
|
- spec/application/projects/new.html.erb
|
124
|
+
- spec/application/vendor/gems/my_plugin/remarkable/my_plugin_locale.yml
|
125
|
+
- spec/application/vendor/gems/my_plugin/remarkable/my_plugin_matchers.rb
|
124
126
|
- spec/application/layouts/examples.html.erb
|
125
127
|
- spec/application/tasks_controller.rb
|
126
128
|
- spec/action_controller/macro_stubs_spec.rb
|
@@ -137,3 +139,4 @@ test_files:
|
|
137
139
|
- spec/spec_helper.rb
|
138
140
|
- spec/functional_builder.rb
|
139
141
|
- spec/spec.opts
|
142
|
+
- spec/remarkable_rails_spec.rb
|