merb_screw_unit 0.9.8 → 0.9.9

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/Rakefile CHANGED
@@ -18,7 +18,7 @@ GEM_EMAIL = "ykatz@engineyard.com"
18
18
 
19
19
  GEM_NAME = "merb_screw_unit"
20
20
  PKG_BUILD = ENV['PKG_BUILD'] ? '.' + ENV['PKG_BUILD'] : ''
21
- GEM_VERSION = (Merb::MORE_VERSION rescue "0.9.8") + PKG_BUILD
21
+ GEM_VERSION = (Merb::MORE_VERSION rescue "0.9.9") + PKG_BUILD
22
22
 
23
23
  RELEASE_NAME = "REL #{GEM_VERSION}"
24
24
 
@@ -36,10 +36,10 @@ spec = Gem::Specification.new do |s|
36
36
  s.author = GEM_AUTHOR
37
37
  s.email = GEM_EMAIL
38
38
  s.homepage = PROJECT_URL
39
- s.add_dependency('merb-core', '>= 0.9.8')
40
- s.add_dependency('merb-slices', '>= 0.9.8')
39
+ s.add_dependency('merb-core', '>= 0.9.9')
40
+ s.add_dependency('merb-slices', '>= 0.9.9')
41
41
  s.require_path = 'lib'
42
- s.files = %w(LICENSE README Rakefile TODO) + Dir.glob("{lib,spec,app,public,stubs}/**/*")
42
+ s.files = %w(LICENSE README Rakefile TODO) + Dir.glob("{lib,app,public,stubs}/**/*")
43
43
  end
44
44
 
45
45
  Rake::GemPackageTask.new(spec) do |pkg|
File without changes
@@ -17,7 +17,13 @@ var _jQuery = window.jQuery,
17
17
 
18
18
  var jQuery = window.jQuery = window.$ = function( selector, context ) {
19
19
  // The jQuery object is actually just the init constructor 'enhanced'
20
+ <<<<<<< HEAD:merb_screw_unit/public/javascripts/jquery-1.2.3.js
21
+ var jquery = new jQuery.prototype.init( selector, context );
22
+ jquery.selector = selector;
23
+ return jquery;
24
+ =======
20
25
  return new jQuery.fn.init( selector, context );
26
+ >>>>>>> 42c99eacbd1f6489bca5f62103695de90c6a30b0:merb_screw_unit/public/javascripts/jquery-1.2.6.js
21
27
  };
22
28
 
23
29
  // A simple way to check for HTML strings or ID strings
@@ -42,7 +48,12 @@ jQuery.fn = jQuery.prototype = {
42
48
  return this;
43
49
  }
44
50
  // Handle HTML strings
51
+ <<<<<<< HEAD:merb_screw_unit/public/javascripts/jquery-1.2.3.js
52
+ } else if ( typeof selector == "string" ) {
53
+
54
+ =======
45
55
  if ( typeof selector == "string" ) {
56
+ >>>>>>> 42c99eacbd1f6489bca5f62103695de90c6a30b0:merb_screw_unit/public/javascripts/jquery-1.2.6.js
46
57
  // Are we dealing with HTML string or an ID?
47
58
  var match = quickExpr.exec( selector );
48
59
 
@@ -3455,6 +3466,9 @@ jQuery.fn.offset = function() {
3455
3466
  return results;
3456
3467
  };
3457
3468
 
3469
+ <<<<<<< HEAD:merb_screw_unit/public/javascripts/jquery-1.2.3.js
3470
+ })();
3471
+ =======
3458
3472
 
3459
3473
  jQuery.fn.extend({
3460
3474
  position: function() {
@@ -3547,3 +3561,4 @@ jQuery.each([ "Height", "Width" ], function(i, name){
3547
3561
  };
3548
3562
 
3549
3563
  });})();
3564
+ >>>>>>> 42c99eacbd1f6489bca5f62103695de90c6a30b0:merb_screw_unit/public/javascripts/jquery-1.2.6.js
@@ -95,8 +95,11 @@
95
95
  return print_array(obj, opts);
96
96
  else if (obj.nodeType)
97
97
  return print_element(obj);
98
- else if (obj instanceof jQuery)
99
- return "$(" + $.print(obj.get()) + ")";
98
+ else if (obj.jquery)
99
+ if(obj.length)
100
+ return "$(" + $.print(obj.get()) + ")";
101
+ else
102
+ return "$(\"" + obj.selector + "\")";
100
103
  else if (obj instanceof Error)
101
104
  return print_object(obj, $.extend({}, options, { max_string: 200 }));
102
105
  else if (obj instanceof Object)
@@ -0,0 +1,250 @@
1
+ /* Copyright (c) 2007 Brandon Aaron (brandon.aaron@gmail.com || http://brandonaaron.net)
2
+ * Dual licensed under the MIT (http://www.opensource.org/licenses/mit-license.php)
3
+ * and GPL (http://www.opensource.org/licenses/gpl-license.php) licenses.
4
+ *
5
+ * Version: @VERSION
6
+ * Requires jQuery 1.1.3+
7
+ * Docs: http://docs.jquery.com/Plugins/livequery
8
+ */
9
+
10
+ (function($) {
11
+
12
+ $.extend($.fn, {
13
+ livequery: function(type, fn, fn2) {
14
+ var self = this, q;
15
+
16
+ // Handle different call patterns
17
+ if ($.isFunction(type))
18
+ fn2 = fn, fn = type, type = undefined;
19
+
20
+ // See if Live Query already exists
21
+ $.each( $.livequery.queries, function(i, query) {
22
+ if ( self.selector == query.selector && self.context == query.context &&
23
+ type == query.type && (!fn || fn.$lqguid == query.fn.$lqguid) && (!fn2 || fn2.$lqguid == query.fn2.$lqguid) )
24
+ // Found the query, exit the each loop
25
+ return (q = query) && false;
26
+ });
27
+
28
+ // Create new Live Query if it wasn't found
29
+ q = q || new $.livequery(this.selector, this.context, type, fn, fn2);
30
+
31
+ // Make sure it is running
32
+ q.stopped = false;
33
+
34
+ // Run it
35
+ $.livequery.run( q.id );
36
+
37
+ // Contnue the chain
38
+ return this;
39
+ },
40
+
41
+ expire: function(type, fn, fn2) {
42
+ var self = this;
43
+
44
+ // Handle different call patterns
45
+ if ($.isFunction(type))
46
+ fn2 = fn, fn = type, type = undefined;
47
+
48
+ // Find the Live Query based on arguments and stop it
49
+ $.each( $.livequery.queries, function(i, query) {
50
+ if ( self.selector == query.selector && self.context == query.context &&
51
+ (!type || type == query.type) && (!fn || fn.$lqguid == query.fn.$lqguid) && (!fn2 || fn2.$lqguid == query.fn2.$lqguid) && !this.stopped )
52
+ $.livequery.stop(query.id);
53
+ });
54
+
55
+ // Continue the chain
56
+ return this;
57
+ }
58
+ });
59
+
60
+ $.livequery = function(selector, context, type, fn, fn2) {
61
+ this.selector = selector;
62
+ this.context = context || document;
63
+ this.type = type;
64
+ this.fn = fn;
65
+ this.fn2 = fn2;
66
+ this.elements = [];
67
+ this.stopped = false;
68
+
69
+ // The id is the index of the Live Query in $.livequery.queries
70
+ this.id = $.livequery.queries.push(this)-1;
71
+
72
+ // Mark the functions for matching later on
73
+ fn.$lqguid = fn.$lqguid || $.livequery.guid++;
74
+ if (fn2) fn2.$lqguid = fn2.$lqguid || $.livequery.guid++;
75
+
76
+ // Return the Live Query
77
+ return this;
78
+ };
79
+
80
+ $.livequery.prototype = {
81
+ stop: function() {
82
+ var query = this;
83
+
84
+ if ( this.type )
85
+ // Unbind all bound events
86
+ this.elements.unbind(this.type, this.fn);
87
+ else if (this.fn2)
88
+ // Call the second function for all matched elements
89
+ this.elements.each(function(i, el) {
90
+ query.fn2.apply(el);
91
+ });
92
+
93
+ // Clear out matched elements
94
+ this.elements = [];
95
+
96
+ // Stop the Live Query from running until restarted
97
+ this.stopped = true;
98
+ },
99
+
100
+ run: function() {
101
+ // Short-circuit if stopped
102
+ if ( this.stopped ) return;
103
+ var query = this;
104
+
105
+ var oEls = this.elements,
106
+ els = $(this.selector, this.context),
107
+ nEls = els.not(oEls);
108
+
109
+ // Set elements to the latest set of matched elements
110
+ this.elements = els;
111
+
112
+ if (this.type) {
113
+ // Bind events to newly matched elements
114
+ nEls.bind(this.type, this.fn);
115
+
116
+ // Unbind events to elements no longer matched
117
+ if (oEls.length > 0)
118
+ $.each(oEls, function(i, el) {
119
+ if ( $.inArray(el, els) < 0 )
120
+ $.event.remove(el, query.type, query.fn);
121
+ });
122
+ }
123
+ else {
124
+ // Call the first function for newly matched elements
125
+ nEls.each(function() {
126
+ query.fn.apply(this);
127
+ });
128
+
129
+ // Call the second function for elements no longer matched
130
+ if ( this.fn2 && oEls.length > 0 )
131
+ $.each(oEls, function(i, el) {
132
+ if ( $.inArray(el, els) < 0 )
133
+ query.fn2.apply(el);
134
+ });
135
+ }
136
+ }
137
+ };
138
+
139
+ $.extend($.livequery, {
140
+ guid: 0,
141
+ queries: [],
142
+ queue: [],
143
+ running: false,
144
+ timeout: null,
145
+
146
+ checkQueue: function() {
147
+ if ( $.livequery.running && $.livequery.queue.length ) {
148
+ var length = $.livequery.queue.length;
149
+ // Run each Live Query currently in the queue
150
+ while ( length-- )
151
+ $.livequery.queries[ $.livequery.queue.shift() ].run();
152
+ }
153
+ },
154
+
155
+ pause: function() {
156
+ // Don't run anymore Live Queries until restarted
157
+ $.livequery.running = false;
158
+ },
159
+
160
+ play: function() {
161
+ // Restart Live Queries
162
+ $.livequery.running = true;
163
+ // Request a run of the Live Queries
164
+ $.livequery.run();
165
+ },
166
+
167
+ registerPlugin: function() {
168
+ $.each( arguments, function(i,n) {
169
+ // Short-circuit if the method doesn't exist
170
+ if (!$.fn[n]) return;
171
+
172
+ // Save a reference to the original method
173
+ var old = $.fn[n];
174
+
175
+ // Create a new method
176
+ $.fn[n] = function() {
177
+ // Call the original method
178
+ var r = old.apply(this, arguments);
179
+
180
+ // Request a run of the Live Queries
181
+ $.livequery.run();
182
+
183
+ // Return the original methods result
184
+ return r;
185
+ }
186
+ });
187
+ },
188
+
189
+ run: function(id) {
190
+ if (id != undefined) {
191
+ // Put the particular Live Query in the queue if it doesn't already exist
192
+ if ( $.inArray(id, $.livequery.queue) < 0 )
193
+ $.livequery.queue.push( id );
194
+ }
195
+ else
196
+ // Put each Live Query in the queue if it doesn't already exist
197
+ $.each( $.livequery.queries, function(id) {
198
+ if ( $.inArray(id, $.livequery.queue) < 0 )
199
+ $.livequery.queue.push( id );
200
+ });
201
+
202
+ // Clear timeout if it already exists
203
+ if ($.livequery.timeout) clearTimeout($.livequery.timeout);
204
+ // Create a timeout to check the queue and actually run the Live Queries
205
+ $.livequery.timeout = setTimeout($.livequery.checkQueue, 20);
206
+ },
207
+
208
+ stop: function(id) {
209
+ if (id != undefined)
210
+ // Stop are particular Live Query
211
+ $.livequery.queries[ id ].stop();
212
+ else
213
+ // Stop all Live Queries
214
+ $.each( $.livequery.queries, function(id) {
215
+ $.livequery.queries[ id ].stop();
216
+ });
217
+ }
218
+ });
219
+
220
+ // Register core DOM manipulation methods
221
+ $.livequery.registerPlugin('append', 'prepend', 'after', 'before', 'wrap', 'attr', 'removeAttr', 'addClass', 'removeClass', 'toggleClass', 'empty', 'remove');
222
+
223
+ // Run Live Queries when the Document is ready
224
+ $(function() { $.livequery.play(); });
225
+
226
+
227
+ // Save a reference to the original init method
228
+ var init = $.prototype.init;
229
+
230
+ // Create a new init method that exposes two new properties: selector and context
231
+ $.prototype.init = function(a,c) {
232
+ // Call the original init and save the result
233
+ var r = init.apply(this, arguments);
234
+
235
+ // Copy over properties if they exist already
236
+ if (a && a.selector)
237
+ r.context = a.context, r.selector = a.selector;
238
+
239
+ // Set properties
240
+ if ( typeof a == 'string' )
241
+ r.context = c || document, r.selector = a;
242
+
243
+ // Return the result
244
+ return r;
245
+ };
246
+
247
+ // Give the init function the jQuery prototype for later instantiation (needed after Rev 4091)
248
+ $.prototype.init.prototype = $.prototype;
249
+
250
+ })(jQuery);
@@ -0,0 +1,129 @@
1
+ /*
2
+ * Metadata - jQuery plugin for parsing metadata from elements
3
+ *
4
+ * Copyright (c) 2006 John Resig, Yehuda Katz, J�örn Zaefferer, Paul McLanahan
5
+ *
6
+ * Dual licensed under the MIT and GPL licenses:
7
+ * http://www.opensource.org/licenses/mit-license.php
8
+ * http://www.gnu.org/licenses/gpl.html
9
+ *
10
+ * Revision: $Id$
11
+ *
12
+ */
13
+
14
+ /**
15
+ * Sets the type of metadata to use. Metadata is encoded in JSON, and each property
16
+ * in the JSON will become a property of the element itself.
17
+ *
18
+ * There are three supported types of metadata storage:
19
+ *
20
+ * attr: Inside an attribute. The name parameter indicates *which* attribute.
21
+ *
22
+ * class: Inside the class attribute, wrapped in curly braces: { }
23
+ *
24
+ * elem: Inside a child element (e.g. a script tag). The
25
+ * name parameter indicates *which* element.
26
+ *
27
+ * The metadata for an element is loaded the first time the element is accessed via jQuery.
28
+ *
29
+ * As a result, you can define the metadata type, use $(expr) to load the metadata into the elements
30
+ * matched by expr, then redefine the metadata type and run another $(expr) for other elements.
31
+ *
32
+ * @name $.metadata.setType
33
+ *
34
+ * @example <p id="one" class="some_class {item_id: 1, item_label: 'Label'}">This is a p</p>
35
+ * @before $.metadata.setType("class")
36
+ * @after $("#one").metadata().item_id == 1; $("#one").metadata().item_label == "Label"
37
+ * @desc Reads metadata from the class attribute
38
+ *
39
+ * @example <p id="one" class="some_class" data="{item_id: 1, item_label: 'Label'}">This is a p</p>
40
+ * @before $.metadata.setType("attr", "data")
41
+ * @after $("#one").metadata().item_id == 1; $("#one").metadata().item_label == "Label"
42
+ * @desc Reads metadata from a "data" attribute
43
+ *
44
+ * @example <p id="one" class="some_class"><script>{item_id: 1, item_label: 'Label'}</script>This is a p</p>
45
+ * @before $.metadata.setType("elem", "script")
46
+ * @after $("#one").metadata().item_id == 1; $("#one").metadata().item_label == "Label"
47
+ * @desc Reads metadata from a nested script element
48
+ *
49
+ * @param String type The encoding type
50
+ * @param String name The name of the attribute to be used to get metadata (optional)
51
+ * @cat Plugins/Metadata
52
+ * @descr Sets the type of encoding to be used when loading metadata for the first time
53
+ * @type undefined
54
+ * @see metadata()
55
+ */
56
+
57
+ (function($) {
58
+
59
+ $.extend({
60
+ metadata : {
61
+ defaults : {
62
+ type: 'class',
63
+ name: 'metadata',
64
+ cre: /({.*})/,
65
+ single: 'metadata'
66
+ },
67
+ setType: function( type, name ){
68
+ this.defaults.type = type;
69
+ this.defaults.name = name;
70
+ },
71
+ get: function( elem, opts ){
72
+ var settings = $.extend({},this.defaults,opts);
73
+ // check for empty string in single property
74
+ if ( !settings.single.length ) settings.single = 'metadata';
75
+
76
+ var data = $.data(elem, settings.single);
77
+ // returned cached data if it already exists
78
+ if ( data ) return data;
79
+
80
+ data = "{}";
81
+
82
+ if ( settings.type == "class" ) {
83
+ var m = settings.cre.exec( elem.className );
84
+ if ( m )
85
+ data = m[1];
86
+ } else if ( settings.type == "elem" ) {
87
+ if( !elem.getElementsByTagName ) return;
88
+ var e = elem.getElementsByTagName(settings.name);
89
+ if ( e.length )
90
+ data = $.trim(e[0].innerHTML);
91
+ } else if ( elem.getAttribute != undefined ) {
92
+ var attr = elem.getAttribute( settings.name );
93
+ if ( attr )
94
+ data = attr;
95
+ }
96
+
97
+ if ( data.indexOf( '{' ) <0 )
98
+ data = "{" + data + "}";
99
+
100
+ data = eval("(" + data + ")");
101
+
102
+ $.data( elem, settings.single, data );
103
+ return data;
104
+ }
105
+ }
106
+ });
107
+
108
+ /**
109
+ * Returns the metadata object for the first member of the jQuery object.
110
+ *
111
+ * @name metadata
112
+ * @descr Returns element's metadata object
113
+ * @param Object opts An object contianing settings to override the defaults
114
+ * @type jQuery
115
+ * @cat Plugins/Metadata
116
+ */
117
+ $.fn.metadata = function( opts ){
118
+ if(this[0])
119
+ return $.metadata.get( this[0], opts );
120
+ };
121
+
122
+ $.fn.setMetadata = function( val ) {
123
+ return this.each(function() {
124
+ if(!this) return true;
125
+ $.data( this, $.metadata.defaults.single, val );
126
+ });
127
+ }
128
+
129
+ })(jQuery);
@@ -74,10 +74,11 @@ var Screw = (function($) {
74
74
  .appendTo('body');
75
75
 
76
76
  $(screw).dequeue();
77
+
77
78
  $("#dom")[0].onload = function() {
78
79
  setTimeout(function() {
79
80
  $(screw).trigger('loaded');
80
- }, 200);
81
+ }, 100);
81
82
  };
82
83
  });
83
84
  return screw;
@@ -24,9 +24,11 @@
24
24
  $(this).addClass('passed');
25
25
  })
26
26
  .bind('failed', function(e, reason) {
27
+ reasonText = "<p>" + reason.toString() + "</p>";
28
+ if(reason.stack) reasonText += ("<pre>" + reason.stack + "</pre>");
27
29
  $(this)
28
30
  .addClass('failed')
29
- .append($('<p class="error">').text(reason.toString()));
31
+ .append($('<p class="error">').html(reasonText));
30
32
  })
31
33
  })
32
34
  .bind('before', function() {
@@ -37,7 +37,6 @@ Screw.Matchers = (function($) {
37
37
  return 'expected ' + $.print(jquerize(actual)) + (not ? ' to not have ' : ' to have ') + $.print(expected);
38
38
  }
39
39
  },
40
-
41
40
  have: {
42
41
  match: function(expected, actual) {
43
42
  return jquerize(actual).find(expected).length > 0;
@@ -46,7 +45,6 @@ Screw.Matchers = (function($) {
46
45
  return 'expected ' + $.print(jquerize(actual)) + (not ? ' to not have ' : ' to have ') + $.print(expected);
47
46
  }
48
47
  },
49
-
50
48
  be_visible: {
51
49
  match: function(expected, actual) {
52
50
  return jquerize(actual).is(":visible");
@@ -93,7 +91,7 @@ Screw.Matchers = (function($) {
93
91
 
94
92
  be_empty: {
95
93
  match: function(expected, actual) {
96
- if (jquerize(actual).length == undefined)
94
+ if (jquerize(actual).length == undefined)
97
95
  throw($.print(jquerize(actual)) + " does not respond to length");
98
96
 
99
97
  return actual.length == 0;
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: merb_screw_unit
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.8
4
+ version: 0.9.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - Yehuda Katz
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2008-10-07 00:00:00 +03:00
12
+ date: 2008-10-14 00:00:00 +03:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -20,7 +20,7 @@ dependencies:
20
20
  requirements:
21
21
  - - ">="
22
22
  - !ruby/object:Gem::Version
23
- version: 0.9.8
23
+ version: 0.9.9
24
24
  version:
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: merb-slices
@@ -30,7 +30,7 @@ dependencies:
30
30
  requirements:
31
31
  - - ">="
32
32
  - !ruby/object:Gem::Version
33
- version: 0.9.8
33
+ version: 0.9.9
34
34
  version:
35
35
  description: Merb Slice that provides support for Screw.Unit testing
36
36
  email: ykatz@engineyard.com
@@ -50,10 +50,6 @@ files:
50
50
  - lib/merb_screw_unit/merbtasks.rb
51
51
  - lib/merb_screw_unit/slicetasks.rb
52
52
  - lib/merb_screw_unit.rb
53
- - spec/controllers
54
- - spec/controllers/main_spec.rb
55
- - spec/merb_screw_unit_spec.rb
56
- - spec/spec_helper.rb
57
53
  - app/controllers
58
54
  - app/controllers/application.rb
59
55
  - app/controllers/main.rb
@@ -65,10 +61,13 @@ files:
65
61
  - app/views/main
66
62
  - app/views/main/index.html.erb
67
63
  - public/javascripts
64
+ - public/javascripts/application.js
68
65
  - public/javascripts/jquery-1.2.6.js
69
66
  - public/javascripts/jquery.fn.js
70
67
  - public/javascripts/jquery.print.js
68
+ - public/javascripts/livequery.jquery.js
71
69
  - public/javascripts/master.js
70
+ - public/javascripts/metadata.jquery.js
72
71
  - public/javascripts/screw.behaviors.js
73
72
  - public/javascripts/screw.builder.js
74
73
  - public/javascripts/screw.events.js
@@ -1,61 +0,0 @@
1
- require File.dirname(__FILE__) + '/../spec_helper'
2
-
3
- describe "MerbScrewUnit::Main (controller)" do
4
-
5
- # Feel free to remove the specs below
6
-
7
- before :all do
8
- Merb::Router.prepare { |r| r.add_slice(:MerbScrewUnit) } if standalone?
9
- end
10
-
11
- after :all do
12
- Merb::Router.reset! if standalone?
13
- end
14
-
15
- it "should have access to the slice module" do
16
- controller = dispatch_to(MerbScrewUnit::Main, :index)
17
- controller.slice.should == MerbScrewUnit
18
- controller.slice.should == MerbScrewUnit::Main.slice
19
- end
20
-
21
- it "should have an index action" do
22
- controller = dispatch_to(MerbScrewUnit::Main, :index)
23
- controller.status.should == 200
24
- controller.body.should contain('MerbScrewUnit')
25
- end
26
-
27
- it "should work with the default route" do
28
- controller = get("/merb_screw_unit/main/index")
29
- controller.should be_kind_of(MerbScrewUnit::Main)
30
- controller.action_name.should == 'index'
31
- end
32
-
33
- it "should work with the example named route" do
34
- controller = get("/merb_screw_unit/index.html")
35
- controller.should be_kind_of(MerbScrewUnit::Main)
36
- controller.action_name.should == 'index'
37
- end
38
-
39
- it "should have routes in MerbScrewUnit.routes" do
40
- MerbScrewUnit.routes.should_not be_empty
41
- end
42
-
43
- it "should have a slice_url helper method for slice-specific routes" do
44
- controller = dispatch_to(MerbScrewUnit::Main, 'index')
45
- controller.slice_url(:action => 'show', :format => 'html').should == "/merb_screw_unit/main/show.html"
46
- controller.slice_url(:merb_screw_unit_index, :format => 'html').should == "/merb_screw_unit/index.html"
47
- end
48
-
49
- it "should have helper methods for dealing with public paths" do
50
- controller = dispatch_to(MerbScrewUnit::Main, :index)
51
- controller.public_path_for(:image).should == "/slices/merb_screw_unit/images"
52
- controller.public_path_for(:javascript).should == "/slices/merb_screw_unit/javascripts"
53
- controller.public_path_for(:stylesheet).should == "/slices/merb_screw_unit/stylesheets"
54
- end
55
-
56
- it "should have a slice-specific _template_root" do
57
- MerbScrewUnit::Main._template_root.should == MerbScrewUnit.dir_for(:view)
58
- MerbScrewUnit::Main._template_root.should == MerbScrewUnit::Application._template_root
59
- end
60
-
61
- end
@@ -1,130 +0,0 @@
1
- require File.dirname(__FILE__) + '/spec_helper'
2
-
3
- describe "MerbScrewUnit (module)" do
4
-
5
- it "should have proper specs"
6
-
7
- # Feel free to remove the specs below
8
-
9
- before :all do
10
- Merb::Router.prepare { |r| r.add_slice(:MerbScrewUnit) } if standalone?
11
- end
12
-
13
- after :all do
14
- Merb::Router.reset! if standalone?
15
- end
16
-
17
- it "should be registered in Merb::Slices.slices" do
18
- Merb::Slices.slices.should include(MerbScrewUnit)
19
- end
20
-
21
- it "should be registered in Merb::Slices.paths" do
22
- Merb::Slices.paths[MerbScrewUnit.name].should == current_slice_root
23
- end
24
-
25
- it "should have an :identifier property" do
26
- MerbScrewUnit.identifier.should == "merb_screw_unit"
27
- end
28
-
29
- it "should have an :identifier_sym property" do
30
- MerbScrewUnit.identifier_sym.should == :merb_screw_unit
31
- end
32
-
33
- it "should have a :root property" do
34
- MerbScrewUnit.root.should == Merb::Slices.paths[MerbScrewUnit.name]
35
- MerbScrewUnit.root_path('app').should == current_slice_root / 'app'
36
- end
37
-
38
- it "should have a :file property" do
39
- MerbScrewUnit.file.should == current_slice_root / 'lib' / 'merb_screw_unit.rb'
40
- end
41
-
42
- it "should have metadata properties" do
43
- MerbScrewUnit.description.should == "MerbScrewUnit is a chunky Merb slice!"
44
- MerbScrewUnit.version.should == "0.0.1"
45
- MerbScrewUnit.author.should == "YOUR NAME"
46
- end
47
-
48
- it "should have :routes and :named_routes properties" do
49
- MerbScrewUnit.routes.should_not be_empty
50
- MerbScrewUnit.named_routes[:merb_screw_unit_index].should be_kind_of(Merb::Router::Route)
51
- end
52
-
53
- it "should have an url helper method for slice-specific routes" do
54
- MerbScrewUnit.url(:controller => 'main', :action => 'show', :format => 'html').should == "/merb_screw_unit/main/show.html"
55
- MerbScrewUnit.url(:merb_screw_unit_index, :format => 'html').should == "/merb_screw_unit/index.html"
56
- end
57
-
58
- it "should have a config property (Hash)" do
59
- MerbScrewUnit.config.should be_kind_of(Hash)
60
- end
61
-
62
- it "should have bracket accessors as shortcuts to the config" do
63
- MerbScrewUnit[:foo] = 'bar'
64
- MerbScrewUnit[:foo].should == 'bar'
65
- MerbScrewUnit[:foo].should == MerbScrewUnit.config[:foo]
66
- end
67
-
68
- it "should have a :layout config option set" do
69
- MerbScrewUnit.config[:layout].should == :merb_screw_unit
70
- end
71
-
72
- it "should have a dir_for method" do
73
- app_path = MerbScrewUnit.dir_for(:application)
74
- app_path.should == current_slice_root / 'app'
75
- [:view, :model, :controller, :helper, :mailer, :part].each do |type|
76
- MerbScrewUnit.dir_for(type).should == app_path / "#{type}s"
77
- end
78
- public_path = MerbScrewUnit.dir_for(:public)
79
- public_path.should == current_slice_root / 'public'
80
- [:stylesheet, :javascript, :image].each do |type|
81
- MerbScrewUnit.dir_for(type).should == public_path / "#{type}s"
82
- end
83
- end
84
-
85
- it "should have a app_dir_for method" do
86
- root_path = MerbScrewUnit.app_dir_for(:root)
87
- root_path.should == Merb.root / 'slices' / 'merb_screw_unit'
88
- app_path = MerbScrewUnit.app_dir_for(:application)
89
- app_path.should == root_path / 'app'
90
- [:view, :model, :controller, :helper, :mailer, :part].each do |type|
91
- MerbScrewUnit.app_dir_for(type).should == app_path / "#{type}s"
92
- end
93
- public_path = MerbScrewUnit.app_dir_for(:public)
94
- public_path.should == Merb.dir_for(:public) / 'slices' / 'merb_screw_unit'
95
- [:stylesheet, :javascript, :image].each do |type|
96
- MerbScrewUnit.app_dir_for(type).should == public_path / "#{type}s"
97
- end
98
- end
99
-
100
- it "should have a public_dir_for method" do
101
- public_path = MerbScrewUnit.public_dir_for(:public)
102
- public_path.should == '/slices' / 'merb_screw_unit'
103
- [:stylesheet, :javascript, :image].each do |type|
104
- MerbScrewUnit.public_dir_for(type).should == public_path / "#{type}s"
105
- end
106
- end
107
-
108
- it "should have a public_path_for method" do
109
- public_path = MerbScrewUnit.public_dir_for(:public)
110
- MerbScrewUnit.public_path_for("path", "to", "file").should == public_path / "path" / "to" / "file"
111
- [:stylesheet, :javascript, :image].each do |type|
112
- MerbScrewUnit.public_path_for(type, "path", "to", "file").should == public_path / "#{type}s" / "path" / "to" / "file"
113
- end
114
- end
115
-
116
- it "should have a app_path_for method" do
117
- MerbScrewUnit.app_path_for("path", "to", "file").should == MerbScrewUnit.app_dir_for(:root) / "path" / "to" / "file"
118
- MerbScrewUnit.app_path_for(:controller, "path", "to", "file").should == MerbScrewUnit.app_dir_for(:controller) / "path" / "to" / "file"
119
- end
120
-
121
- it "should have a slice_path_for method" do
122
- MerbScrewUnit.slice_path_for("path", "to", "file").should == MerbScrewUnit.dir_for(:root) / "path" / "to" / "file"
123
- MerbScrewUnit.slice_path_for(:controller, "path", "to", "file").should == MerbScrewUnit.dir_for(:controller) / "path" / "to" / "file"
124
- end
125
-
126
- it "should keep a list of path component types to use when copying files" do
127
- (MerbScrewUnit.mirrored_components & MerbScrewUnit.slice_paths.keys).length.should == MerbScrewUnit.mirrored_components.length
128
- end
129
-
130
- end
@@ -1,44 +0,0 @@
1
- require 'rubygems'
2
- require 'merb-core'
3
- require 'merb-slices'
4
- require 'spec'
5
-
6
- # Add merb_screw_unit.rb to the search path
7
- Merb::Plugins.config[:merb_slices][:auto_register] = true
8
- Merb::Plugins.config[:merb_slices][:search_path] = File.join(File.dirname(__FILE__), '..', 'lib', 'merb_screw_unit.rb')
9
-
10
- # Using Merb.root below makes sure that the correct root is set for
11
- # - testing standalone, without being installed as a gem and no host application
12
- # - testing from within the host application; its root will be used
13
- Merb.start_environment(
14
- :testing => true,
15
- :adapter => 'runner',
16
- :environment => ENV['MERB_ENV'] || 'test',
17
- :merb_root => Merb.root,
18
- :session_store => 'memory'
19
- )
20
-
21
- module Merb
22
- module Test
23
- module SliceHelper
24
-
25
- # The absolute path to the current slice
26
- def current_slice_root
27
- @current_slice_root ||= File.expand_path(File.join(File.dirname(__FILE__), '..'))
28
- end
29
-
30
- # Whether the specs are being run from a host application or standalone
31
- def standalone?
32
- Merb.root == ::MerbScrewUnit.root
33
- end
34
-
35
- end
36
- end
37
- end
38
-
39
- Spec::Runner.configure do |config|
40
- config.include(Merb::Test::ViewHelper)
41
- config.include(Merb::Test::RouteHelper)
42
- config.include(Merb::Test::ControllerHelper)
43
- config.include(Merb::Test::SliceHelper)
44
- end