prologue 0.3.11 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- prologue (0.3.11)
4
+ prologue (0.4.0)
5
5
  rails (~> 3.0.0)
6
6
  thor
7
7
 
data/README.md CHANGED
@@ -8,7 +8,7 @@ Generate a Rails 3 app with the application templates Quick Left uses to start t
8
8
  Prologue provides a base Rails 3 application with Devise and Cancan for authentication and authorization. Roles are
9
9
  stored in the database with a HABTM relationship between the role and user models. You also get a basic admin to manage
10
10
  users. Prologue also rolls in all of the things we like to have setup in our apps like...
11
- haml, sass, jquery, cucumber, capybara, mocha, factory_girl, rspec, timecop, autotest, will_paginate, friendly_id, and hoptoad_notifier
11
+ haml, sass, jquery, cucumber, capybara, mocha, factory_girl, rspec, timecop, autotest, evergreen, jasmine, will_paginate, friendly_id, and hoptoad_notifier
12
12
 
13
13
  Everything is configured and ready to rock your next Rails 3 project. We hope it saves you a mess of time!
14
14
 
@@ -33,6 +33,7 @@ Everything is configured and ready to rock your next Rails 3 project. We hope i
33
33
 
34
34
  rake spec
35
35
  rake cucumber
36
+ rake spec:javascripts
36
37
  bundle exec autotest
37
38
 
38
39
 
@@ -1,3 +1,3 @@
1
1
  module Prologue
2
- VERSION = "0.3.11"
2
+ VERSION = "0.4.0"
3
3
  end
data/templates/admin.rb CHANGED
@@ -11,6 +11,12 @@ create_file 'app/controllers/admin/base_controller.rb' do
11
11
  class Admin::BaseController < ApplicationController
12
12
  layout 'admin'
13
13
  before_filter :authenticate_user!
14
+ before_filter :verify_admin
15
+
16
+ private
17
+ def verify_admin
18
+ redirect_to root_url unless current_user.role? :admin
19
+ end
14
20
  end
15
21
  RUBY
16
22
  end
@@ -21,4 +27,4 @@ gsub_file 'app/controllers/admin/dashboard_controller.rb', /ApplicationControlle
21
27
  apply File.expand_path("../admin/users.rb", __FILE__)
22
28
  apply File.expand_path("../admin/dashboard_spec.rb", __FILE__)
23
29
  apply File.expand_path("../admin/users_spec.rb", __FILE__)
24
- apply File.expand_path("../admin/cucumber.rb", __FILE__)
30
+ apply File.expand_path("../admin/cucumber.rb", __FILE__)
@@ -53,7 +53,8 @@ create_file 'app/views/layouts/admin.html.haml' do
53
53
  %title
54
54
  #{app_name.humanize}
55
55
  = yield(:title)
56
- %meta{:name => 'viewport', :content => 'width=device-width; initial-scale=1.0'}
56
+ %meta{:name => 'viewport', :content => 'width=device-width initial-scale=1.0 maximum-scale=1.0'}
57
+ %meta{:name => 'apple-mobile-web-app-capable', :content => 'yes'}
57
58
  = csrf_meta_tag
58
59
  %link{:rel => "shortcut icon", :href => "/images/favicon.ico", :type => "image/x-icon"}
59
60
  /[if lt IE 9]
@@ -73,4 +74,4 @@ create_file 'app/views/layouts/admin.html.haml' do
73
74
  = render :partial => "admin/shared/footer"
74
75
  = render :partial => "admin/shared/end_scripts"
75
76
  FILE
76
- end
77
+ end
@@ -47,7 +47,8 @@ create_file 'app/views/layouts/application.html.haml' do
47
47
  = yield(:title)
48
48
  %meta{:name => 'description', :content => ''}
49
49
  %meta{:name => 'author', :content => ''}
50
- %meta{:name => 'viewport', :content => 'width=device-width; initial-scale=1.0'}
50
+ %meta{:name => 'viewport', :content => 'width=device-width initial-scale=1.0 maximum-scale=1.0'}
51
+ %meta{:name => 'apple-mobile-web-app-capable', :content => 'yes'}
51
52
  = csrf_meta_tag
52
53
  %link{:rel => "shortcut icon", :href => "/images/favicon.ico", :type => "image/x-icon"}
53
54
  %link{:rel => "apple-touch-icon", :href => "/images/ati.png"}
@@ -68,4 +69,4 @@ create_file 'app/views/layouts/application.html.haml' do
68
69
  = render :partial => "shared/footer"
69
70
  = render :partial => "shared/end_scripts"
70
71
  FILE
71
- end
72
+ end
@@ -24,6 +24,8 @@ append_file '.gitignore' do
24
24
  'db/*.sqlite3'
25
25
  'public/system/**/**/**/*'
26
26
  '.idea/*'
27
+ '.sass-cache/**/*'
28
+ '*.swp'
27
29
  end
28
30
 
29
31
  git :init
@@ -43,16 +45,19 @@ apply File.expand_path("../rails_clean.rb", __FILE__)
43
45
  # Apply js
44
46
  apply File.expand_path("../js.rb", __FILE__)
45
47
 
48
+ # Apply evergreen and jasmin
49
+ apply File.expand_path("../evergreen.rb", __FILE__)
50
+
46
51
  # Apply HTML5 Layout
47
52
  apply File.expand_path("../application_layout.rb", __FILE__)
48
53
 
49
- # Apply SASS
54
+ # Apply SASS
50
55
  apply File.expand_path("../sass.rb", __FILE__)
51
56
 
52
- # Apply Test Suite
57
+ # Apply Test Suite
53
58
  apply File.expand_path("../test_suite.rb", __FILE__)
54
59
 
55
- # Apply Friendly Id
60
+ # Apply Friendly Id
56
61
  apply File.expand_path("../friendly_id.rb", __FILE__)
57
62
 
58
63
  # Apply Devise?
@@ -61,10 +66,10 @@ apply File.expand_path("../devise.rb", __FILE__) if ENV['PROLOGUE_AUTH']
61
66
  # Apply admin
62
67
  apply File.expand_path("../admin.rb", __FILE__) if ENV['PROLOGUE_ADMIN']
63
68
 
64
- # Apply cancan
69
+ # Apply cancan
65
70
  apply File.expand_path("../cancan.rb", __FILE__) if ENV['PROLOGUE_ROLES']
66
71
 
67
- # Apply db create and migrations
72
+ # Apply db create and migrations
68
73
  apply File.expand_path("../db.rb", __FILE__)
69
74
 
70
75
  # Apply db seeds
@@ -104,4 +109,4 @@ say <<-D
104
109
  #{login_msg}
105
110
 
106
111
  ########################################################################
107
- D
112
+ D
@@ -0,0 +1,174 @@
1
+ empty_directory "spec/javascripts"
2
+ create_file 'spec/javascripts/spec_helper.js' do
3
+ <<-FILE
4
+ beforeEach(function() {
5
+ this.addMatchers({
6
+ toBeTypeOf: function(expected) {
7
+ if(typeof this.actual == expected)
8
+ return true;
9
+ else return false;
10
+ }
11
+ })
12
+
13
+ if (typeof jQuery != 'undefined') {
14
+ spyOn(jQuery.ajaxSettings, 'xhr').andCallFake(function() {
15
+ var newXhr = new FakeXMLHttpRequest();
16
+ ajaxRequests.push(newXhr);
17
+ return newXhr;
18
+ });
19
+ }
20
+
21
+ if (typeof Prototype != 'undefined') {
22
+ spyOn(Ajax, "getTransport").andCallFake(function() {
23
+ return new FakeXMLHttpRequest();
24
+ });
25
+ }
26
+
27
+ clearAjaxRequests();
28
+
29
+ });
30
+
31
+ /*
32
+ Jasmine-Ajax : a set of helpers for testing AJAX requests under the Jasmine
33
+ BDD framework for JavaScript.
34
+
35
+ Supports both Prototype.js and jQuery.
36
+
37
+ http://github.com/pivotal/jasmine-ajax
38
+
39
+ Jasmine Home page: http://pivotal.github.com/jasmine
40
+
41
+ Copyright (c) 2008-2010 Pivotal Labs
42
+
43
+ Permission is hereby granted, free of charge, to any person obtaining
44
+ a copy of this software and associated documentation files (the
45
+ "Software"), to deal in the Software without restriction, including
46
+ without limitation the rights to use, copy, modify, merge, publish,
47
+ distribute, sublicense, and/or sell copies of the Software, and to
48
+ permit persons to whom the Software is furnished to do so, subject to
49
+ the following conditions:
50
+
51
+ The above copyright notice and this permission notice shall be
52
+ included in all copies or substantial portions of the Software.
53
+
54
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
55
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
56
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
57
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
58
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
59
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
60
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
61
+
62
+ */
63
+
64
+ // Jasmine-Ajax interface
65
+ var ajaxRequests = [];
66
+
67
+ function mostRecentAjaxRequest() {
68
+ if (ajaxRequests.length > 0) {
69
+ return ajaxRequests[ajaxRequests.length - 1];
70
+ } else {
71
+ return null;
72
+ }
73
+ }
74
+
75
+ function clearAjaxRequests() {
76
+ ajaxRequests = [];
77
+ }
78
+
79
+ // Fake XHR for mocking Ajax Requests & Responses
80
+ function FakeXMLHttpRequest() {
81
+ var xhr = {
82
+ requestHeaders: {},
83
+
84
+ open: function() {
85
+ xhr.method = arguments[0];
86
+ xhr.url = arguments[1];
87
+ xhr.readyState = 1;
88
+ },
89
+
90
+ setRequestHeader: function(header, value) {
91
+ xhr.requestHeaders[header] = value;
92
+ },
93
+
94
+ abort: function() {
95
+ xhr.readyState = 0;
96
+ },
97
+
98
+ readyState: 0,
99
+
100
+ onreadystatechange: function() {
101
+ },
102
+
103
+ status: null,
104
+
105
+ send: function(data) {
106
+ xhr.params = data;
107
+ xhr.readyState = 2;
108
+ },
109
+
110
+ getResponseHeader: function(name) {
111
+ return xhr.responseHeaders[name];
112
+ },
113
+
114
+ responseText: null,
115
+
116
+ response: function(response) {
117
+ xhr.status = response.status;
118
+ xhr.responseText = response.responseText || "";
119
+ xhr.readyState = 4;
120
+ xhr.responseHeaders = response.responseHeaders ||
121
+ {"Content-type": response.contentType || "application/json" };
122
+
123
+ // uncomment for jquery 1.3.x support
124
+ // jasmine.Clock.tick(20);
125
+
126
+ xhr.onreadystatechange();
127
+ }
128
+ };
129
+
130
+ return xhr;
131
+ }
132
+
133
+ // Jasmine-Ajax Glue code for Prototype.js
134
+ if (typeof Prototype != 'undefined' && Ajax && Ajax.Request) {
135
+ Ajax.Request.prototype.originalRequest = Ajax.Request.prototype.request;
136
+ Ajax.Request.prototype.request = function(url) {
137
+ this.originalRequest(url);
138
+ ajaxRequests.push(this);
139
+ };
140
+
141
+ Ajax.Request.prototype.response = function(responseOptions) {
142
+ return this.transport.response(responseOptions);
143
+ };
144
+ }
145
+ FILE
146
+ end
147
+
148
+ create_file 'spec/javascripts/core_spec.js' do
149
+ <<-FILE
150
+ require('/javascripts/jquery.js')
151
+ require('/javascripts/core.js')
152
+
153
+ describe('Ql core', function () {
154
+ it("should return a QL object" , function() {
155
+ expect(Ql).toBeTypeOf('object');
156
+ })
157
+
158
+ it("should be a Ql object" , function() {
159
+ expect(Ql).toBe(window.Ql);
160
+ })
161
+
162
+ describe('Ql helpers', function() {
163
+ var testArray = ['a','b','c'],
164
+ resultObject = {a:'',b:'',c:''};
165
+
166
+ it('should find the string in the array', function(){
167
+ expect(Ql.helpers.arraySearch(testArray)).toEqual(resultObject);
168
+ })
169
+
170
+ })
171
+
172
+ })
173
+ FILE
174
+ end
data/templates/gemfile.rb CHANGED
@@ -31,6 +31,7 @@ gem "capybara", "~> 0.4.0", :group => [:cucumber]
31
31
  gem "launchy", :group => [:cucumber]
32
32
  gem "timecop", :group => [:test, :cucumber]
33
33
  gem "pickle", :group => [:test, :cucumber]
34
+ gem "evergreen", :require => "evergreen/rails", :group => [:test, :development]
34
35
 
35
36
  # for windows users
36
37
  if ( (Config::CONFIG['host_os'] =~ /mswin|mingw/) && (Config::CONFIG["ruby_version"] =~ /1.8/) )
@@ -38,4 +39,4 @@ if ( (Config::CONFIG['host_os'] =~ /mswin|mingw/) && (Config::CONFIG["ruby_versi
38
39
  gem "windows-pr", :group => [:test, :cucumber]
39
40
  gem "win32-open3"
40
41
  end
41
- run 'bundle install'
42
+ run 'bundle install'
data/templates/js.rb CHANGED
@@ -7,52 +7,65 @@ run 'rm public/javascripts/application.js'
7
7
  create_file 'public/javascripts/core.js' do
8
8
  <<-FILE
9
9
  (function($){
10
- var QL = QL || {};
10
+ var Ql = Ql || {};
11
11
 
12
- QL = {
13
- init: function QL_init(){
12
+ Ql = {
13
+ init: function Ql_init(){
14
14
  // some code that needs to be executed after doc ready
15
- QL.bindEvents();
15
+ Ql.bindEvents();
16
16
  },
17
- bindEvents: function QL_liveEvents(){
17
+ bindEvents: function Ql_liveEvents(){
18
18
  $('a[rel*=external]').live('click',function(){
19
19
  window.open(this.href);
20
20
  return false;
21
21
  });
22
22
 
23
23
  // more globally bound events
24
- },
25
- helpers: function QL_helpers(){
24
+ },
25
+ submit: function(ajax_url,ajax_data,ajax_type,callback){
26
+ $.ajax({
27
+ type: ajax_type,
28
+ url: ajax_url,
29
+ data: ajax_data,
30
+ success: function(data) {
31
+ if(typeof callback.onSuccess == 'function'){
32
+ callback.onSuccess.call(this, data);
33
+ }
34
+ },
35
+ error: function(data,status){
36
+ if(typeof callback.onError == 'function'){
37
+ if(data.status == '403') {
38
+ return callback.onDenied.call(this, data);
39
+ }
40
+ callback.onError.call(this, data);
41
+ }
42
+ },
43
+ complete: function(data){
44
+ if(typeof callback.onComplete == 'function'){
45
+ callback.onComplete.call(this, data);
46
+ }
47
+ },
48
+ denied: function(data){
49
+ if(typeof callback.onDenied == 'function'){
50
+ callback.onDenied.call(this, data);
51
+ }
52
+ }
53
+ });
54
+ },
55
+ helpers: {
26
56
  // helper for searching through arrays
27
- QL.helpers.arraySearch = function(a){
57
+ arraySearch: function(a){
28
58
  var o = {};
29
59
  for(var i=0;i<a.length;i++){
30
60
  o[a[i]]='';
31
61
  }
32
62
  return o;
33
- };
34
- //j. resigs array remove overload
35
- Array.prototype.remove = function(from, to) {
36
- var rest = this.slice((to || from) + 1 || this.length);
37
- this.length = from < 0 ? this.length + from : from;
38
- return this.push.apply(this, rest);
39
- };
40
- // duck punch Array.indexOf into IE browsers
41
- if(!Array.indexOf){
42
- Array.prototype.indexOf = function(obj){
43
- for(var i=0; i<this.length; i++){
44
- if(this[i]==obj){
45
- return i;
46
- }
47
- }
48
- return -1;
49
63
  }
50
64
  }
51
65
  }
52
- };
53
66
 
54
- window.QL = QL;
55
- $(document).ready(QL.init);
67
+ window.Ql = Ql;
68
+ $(document).ready(Ql.init);
56
69
 
57
70
  })(jQuery);
58
71
  FILE
metadata CHANGED
@@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version
4
4
  prerelease: false
5
5
  segments:
6
6
  - 0
7
- - 3
8
- - 11
9
- version: 0.3.11
7
+ - 4
8
+ - 0
9
+ version: 0.4.0
10
10
  platform: ruby
11
11
  authors:
12
12
  - Quick Left
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2010-12-15 00:00:00 -07:00
17
+ date: 2010-12-17 00:00:00 -07:00
18
18
  default_executable:
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
@@ -140,6 +140,7 @@ files:
140
140
  - templates/devise.rb
141
141
  - templates/devise/cucumber.rb
142
142
  - templates/dynamic_form.rb
143
+ - templates/evergreen.rb
143
144
  - templates/friendly_id.rb
144
145
  - templates/gemfile.rb
145
146
  - templates/haml_generator.rb
@@ -184,6 +185,6 @@ rubyforge_project: prologue
184
185
  rubygems_version: 1.3.7
185
186
  signing_key:
186
187
  specification_version: 3
187
- summary: prologue-0.3.11
188
+ summary: prologue-0.4.0
188
189
  test_files: []
189
190