app_drone 0.8.6 → 0.9.1
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +1 -0
- data/README.md +54 -39
- data/lib/app_drone/dependency_chain.rb +8 -1
- data/lib/app_drone/drone.rb +9 -0
- data/lib/app_drone/drones/carrierwave/carrierwave.rb +20 -0
- data/lib/app_drone/drones/chronic/chronic.rb +13 -0
- data/lib/app_drone/drones/{easy_roles_45/easy_roles_45.rb~ → easy_rolez/easy_rolez.rb} +1 -1
- data/lib/app_drone/drones/factory_girl/factory_girl.rb +13 -0
- data/lib/app_drone/drones/has_scope/has_scope.rb +13 -0
- data/lib/app_drone/drones/nested_form/nested_form.rb +14 -0
- data/lib/app_drone/drones/new_relic/new_relic.rb +13 -0
- data/lib/app_drone/drones/nifty_generatorz/nifty_config.erb +1 -0
- data/lib/app_drone/drones/nifty_generatorz/nifty_generatorz.rb +19 -0
- data/lib/app_drone/drones/remotipart/remotipart.rb +14 -0
- data/lib/app_drone/drones/responderz/install.erb +1 -0
- data/lib/app_drone/drones/responderz/responderz.rb +17 -0
- data/lib/app_drone/drones/rspec/install.erb +1 -0
- data/lib/app_drone/drones/rspec/rspec.rb +17 -0
- data/lib/app_drone/drones/simple_cov/install.erb +5 -0
- data/lib/app_drone/drones/simple_cov/rspec_integration.erb +1 -0
- data/lib/app_drone/drones/simple_cov/simple_cov.rb +20 -0
- data/lib/app_drone/drones/timecop/timecop.rb +13 -0
- data/lib/app_drone/drones/will_paginate/will_paginate.rb +15 -0
- data/lib/app_drone/template.erb +14 -0
- data/lib/app_drone/template.rb +13 -4
- data/lib/app_drone/version.rb +1 -1
- data/out.rb +28 -3
- data/scraps/App admin +7 -0
- data/scraps/TODO +32 -0
- data/scraps/blank drone +15 -0
- data/test/test_app_drone.rb +8 -1
- metadata +26 -79
- data/Gemfile~ +0 -4
- data/README.md~ +0 -342
- data/Rakefile~ +0 -11
- data/TODO~ +0 -1
- data/app_drone.gemspec~ +0 -20
- data/lib/app_drone/dependency.rb~ +0 -5
- data/lib/app_drone/dependency_chain.rb~ +0 -55
- data/lib/app_drone/drone.rb~ +0 -121
- data/lib/app_drone/drones/bootstrap/bootstrap.rb~ +0 -46
- data/lib/app_drone/drones/bootstrap/flair.html.slim.erb~ +0 -7
- data/lib/app_drone/drones/bundle/bundle.rb~ +0 -22
- data/lib/app_drone/drones/bundle/gem.rb~ +0 -23
- data/lib/app_drone/drones/bundle/gem_entries.erb~ +0 -6
- data/lib/app_drone/drones/bundle/gems.rb~ +0 -23
- data/lib/app_drone/drones/cancan/ability.erb~ +0 -1
- data/lib/app_drone/drones/cancan/cancan.rb~ +0 -19
- data/lib/app_drone/drones/chosen/chosen.rb~ +0 -16
- data/lib/app_drone/drones/chosen/showcase.html.slim~ +0 -0
- data/lib/app_drone/drones/cleanup/cleanup.rb~ +0 -9
- data/lib/app_drone/drones/easy_roles_45/easy_roles.rb~ +0 -13
- data/lib/app_drone/drones/easy_roles_45/easy_roles_45.rb +0 -13
- data/lib/app_drone/drones/easy_roles_45/easy_rolez.rb~ +0 -13
- data/lib/app_drone/drones/ember/ember.rb~ +0 -21
- data/lib/app_drone/drones/ember/ember_js.rb~ +0 -21
- data/lib/app_drone/drones/ember/install.erb~ +0 -3
- data/lib/app_drone/drones/flair/flair.rb~ +0 -39
- data/lib/app_drone/drones/flair/flair_page.erb~ +0 -8
- data/lib/app_drone/drones/flair/showcase.rb~ +0 -27
- data/lib/app_drone/drones/flair/showcase_page.erb~ +0 -11
- data/lib/app_drone/drones/gritter/flair.html.slim.erb~ +0 -8
- data/lib/app_drone/drones/gritter/gritter.rb~ +0 -21
- data/lib/app_drone/drones/gritter/install.erb~ +0 -1
- data/lib/app_drone/drones/high_voltage/create_pages_directory.erb~ +0 -1
- data/lib/app_drone/drones/high_voltage/high_voltage.rb~ +0 -15
- data/lib/app_drone/drones/javascript/application_coffee.erb~ +0 -15
- data/lib/app_drone/drones/javascript/javascript.rb~ +0 -26
- data/lib/app_drone/drones/javascript/javascripts.rb~ +0 -23
- data/lib/app_drone/drones/letter_opener/development_delivery_method.erb~ +0 -1
- data/lib/app_drone/drones/letter_opener/development_delivery_method.rb~ +0 -1
- data/lib/app_drone/drones/letter_opener/letter_opener.rb~ +0 -17
- data/lib/app_drone/drones/migrant/migrant.rb~ +0 -13
- data/lib/app_drone/drones/ranked_model/ranked_model.rb~ +0 -13
- data/lib/app_drone/drones/simple_form/install.erb~ +0 -1
- data/lib/app_drone/drones/simple_form/simple_form.rb~ +0 -21
- data/lib/app_drone/drones/slim_view/application_slim.erb~ +0 -15
- data/lib/app_drone/drones/slim_view/slim_view.rb~ +0 -16
- data/lib/app_drone/drones/slim_view/slim_views.rb~ +0 -14
- data/lib/app_drone/drones/sorcery/configure.erb~ +0 -1
- data/lib/app_drone/drones/sorcery/sorcery.rb~ +0 -18
- data/lib/app_drone/drones/squeel/initializer.erb~ +0 -1
- data/lib/app_drone/drones/squeel/squeel.rb~ +0 -19
- data/lib/app_drone/drones/stylesheet/application_sass.erb~ +0 -11
- data/lib/app_drone/drones/stylesheet/stylesheet.rb~ +0 -26
- data/lib/app_drone/drones/stylesheet/stylesheets.rb~ +0 -30
- data/lib/app_drone/drones/underscore/flair.html.slim.erb~ +0 -25
- data/lib/app_drone/drones/underscore/underscore.rb~ +0 -18
- data/lib/app_drone/drones/zzz/factory_girl/factory_girl.rb +0 -13
- data/lib/app_drone/drones/zzz/factory_girl/factory_girl.rb~ +0 -13
- data/lib/app_drone/drones/zzz/git/git.rb~ +0 -8
- data/lib/app_drone/drones/zzz/guard/guard.rb~ +0 -15
- data/lib/app_drone/drones/zzz/ranked_model/ranked_model.rb +0 -9
- data/lib/app_drone/drones/zzz/ranked_model/ranked_model.rb~ +0 -9
- data/lib/app_drone/drones/zzz/rspec/rspec.rb~ +0 -13
- data/lib/app_drone/integration.rb~ +0 -48
- data/lib/app_drone/object_extensions.rb~ +0 -17
- data/lib/app_drone/template.erb~ +0 -33
- data/lib/app_drone/template.rb~ +0 -54
- data/lib/app_drone/version.rb~ +0 -3
- data/lib/app_drone.rb~ +0 -16
- data/out.rb~ +0 -161
- data/test/app_drone_test.rb~ +0 -19
- data/test/test_app_drone.rb~ +0 -74
data/.gitignore
CHANGED
data/README.md
CHANGED
@@ -65,6 +65,24 @@ Dependencies are automatically checked, and a template will not render unless th
|
|
65
65
|
|
66
66
|
*Note that most drones depend on `Bundle`, `Stylesheet` and `Javascript`.*
|
67
67
|
|
68
|
+
To make sure a drone's directives are run after another drone's, use `run_after :drone, :another_drone`. Unlike `depends_on`, no dependency checking is done on template render, so you reference paired drones that may or may not exist in the final template. An example:
|
69
|
+
|
70
|
+
class AppDrone::SimpleCov
|
71
|
+
depends_on :bundle
|
72
|
+
pairs_with :rspec
|
73
|
+
run_after :rspec
|
74
|
+
|
75
|
+
def align
|
76
|
+
bundle.add 'simplecov'
|
77
|
+
end
|
78
|
+
|
79
|
+
def execute
|
80
|
+
do! :install
|
81
|
+
do! :rspec_integration if pair?(:rspec)
|
82
|
+
# we can be certain that rspec's generated files exist to modify
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
68
86
|
|
69
87
|
### Active drones
|
70
88
|
|
@@ -244,66 +262,64 @@ AppDrone is not for everyone. It's highly opinionated about how a Rails app shou
|
|
244
262
|
|
245
263
|
### Active drones (put 'em to work!)
|
246
264
|
|
247
|
-
- [base] Bundle
|
248
|
-
- [base] Stylesheet (Sass & Compass)
|
249
|
-
- [base] Javascript (Coffescript & jQuery)
|
250
|
-
- [base] SlimView
|
251
|
-
- [base] Cleanup
|
252
|
-
- [
|
253
|
-
- [
|
254
|
-
- [views] SimpleForm
|
255
|
-
- [
|
256
|
-
- [auth]
|
257
|
-
- [auth]
|
258
|
-
- [
|
259
|
-
- [model]
|
260
|
-
- [model]
|
261
|
-
- [
|
262
|
-
- [ui]
|
263
|
-
- [ui]
|
264
|
-
- [ui]
|
265
|
-
- [
|
266
|
-
- [
|
267
|
-
|
265
|
+
- [base] **Bundle** for managing gems
|
266
|
+
- [base] **Stylesheet** (Sass & Compass)
|
267
|
+
- [base] **Javascript** (Coffescript & jQuery)
|
268
|
+
- [base] **SlimView** (Slim, laid out right)
|
269
|
+
- [base] **Cleanup**
|
270
|
+
- [base] **HighVoltage** by ThoughtBot
|
271
|
+
- [base] **Flair** - drones use this to demonstrate their working functionality
|
272
|
+
- [views] **SimpleForm** with optional Country Select and automatic Twitter Bootstrap integration
|
273
|
+
- [views] **NestedForm** for managing multiple models in a single form
|
274
|
+
- [auth] **Sorcery** for no-frills user authentication
|
275
|
+
- [auth] **CanCan** for role-based authorization
|
276
|
+
- [auth] **EasyRoles**,to add roles to your User models
|
277
|
+
- [model] **Migrant** for easier schema management
|
278
|
+
- [model] **Squeel** improving on ActiveRelation
|
279
|
+
- [model] **RankedModel** for sorting and ranking objects
|
280
|
+
- [ui] **Chosen select** by harvestHQ
|
281
|
+
- [ui] **Bootstrap** by Twitter
|
282
|
+
- [ui] **Gritter** for jQuery growl-like notifications
|
283
|
+
- [ui] **Underscore.js** utility belt
|
284
|
+
- [ux] **Ember** (the Ember.js library)
|
285
|
+
- [requests] **Responders** from Plataformatec
|
286
|
+
- [requests] **HasScope** for mapping filters to controller actions
|
287
|
+
- [requests] **WillPaginate** with automatic Bootstrap integration
|
288
|
+
- [dev] **LetterOpener** to preview email in the browser instead of sending it\
|
289
|
+
- [misc] **Chronic** for natural language date parsing
|
290
|
+
- [misc] **Timecop** - time travelling for Ruby
|
291
|
+
- [misc] **NiftyGenerators**, a collection of useful Rails generator scripts
|
292
|
+
- [production] **NewRelic** app performance monitoring
|
293
|
+
- [uploads] **Carrierwave** file uploading plus optional Fog cloud storage
|
294
|
+
- [uploads] **Remotipart**, for AJAX file uploads with jQuery
|
295
|
+
- [test] **RSpec** for BDD
|
296
|
+
- [test] **Factory Girl** test fixtures
|
297
|
+
- [test] **SimpleCov** code coverage for Ruby 1.9, with automatic RSpec integration
|
268
298
|
|
269
299
|
### Frozen drones (currently in development)
|
270
300
|
|
271
|
-
- [base] Database (
|
272
|
-
- [auth] CanCan
|
273
|
-
- [auth] Sorcery
|
301
|
+
- [base] Database (currently rake db:migrate in template will break non-sqlite dbs)
|
274
302
|
- [auth] Devise
|
275
|
-
- [auth] EasyRoles
|
276
|
-
- [test] RSpec
|
277
|
-
- [test] FactoryGirl
|
278
303
|
- [test] DatabaseCleaner
|
279
304
|
- [test] TimeCop
|
280
305
|
- [test] Capybara
|
281
306
|
- [test] Shoulda
|
282
|
-
- [test?] Chronic
|
283
|
-
- [dev] Migrant (+ Pickle support?)
|
284
307
|
- [dev] Guard
|
285
308
|
- [source-control] Git
|
286
|
-
- [model] RankedModel
|
287
|
-
- [model] Squeel
|
288
|
-
- [requests] Responders
|
289
309
|
- [requests] InheritedResources (deprecated)
|
290
310
|
- [requests] UserAgent blocking script
|
291
|
-
- [dev] Letter opener
|
292
|
-
- [ui] Underscore Rails
|
293
311
|
- [mailing] SendGrid
|
294
312
|
|
295
313
|
### Future drones (TODO - I'll get there some day!)
|
296
314
|
|
297
315
|
- [ui] Stylesheet utils
|
316
|
+
- [ui] Calendrical for jQuery
|
298
317
|
- [ui] SlimViews: Add browser-specific classes to <html> via useragent + helpers..
|
299
318
|
- [ui] Bootstrap: vendor files rather than gem require (is this necessary? seems all variables can be customized in an external sheet as long as it's required before compass_twitter_bootstrap)
|
300
319
|
- [ui] jQuery shims
|
301
320
|
- [ui] jQuery UI (vendor + theme etc.)
|
302
321
|
- [ui] pie.htc for IE
|
303
322
|
- [ui] HTML5 shim for IE
|
304
|
-
- [uploads] CarrierWave (and optional cloud resizing thingy)
|
305
|
-
- [uploads] Fog
|
306
|
-
- [uploads] Remotipart
|
307
323
|
- [uploads?] RMagick / minimagick
|
308
324
|
- [requests] HasScope
|
309
325
|
- [requests] will-paginate (+bootstrap-will-paginate)
|
@@ -311,7 +327,6 @@ AppDrone is not for everyone. It's highly opinionated about how a Rails app shou
|
|
311
327
|
- [dev] Pivotal tracker
|
312
328
|
- [dev] RailsErd
|
313
329
|
- [production] Airbrake + API Key
|
314
|
-
- [production] NewRelic
|
315
330
|
- [production] EngineYard for deployment
|
316
331
|
- [ux] Backbone integration + Skim
|
317
332
|
- [views] Nested Form
|
@@ -323,8 +338,8 @@ AppDrone is not for everyone. It's highly opinionated about how a Rails app shou
|
|
323
338
|
- [?] Nokogiri
|
324
339
|
- [?] Mechanize
|
325
340
|
- [?] Money
|
326
|
-
- [misc] NiftyGenerators
|
327
341
|
- [ui] jQuery.transit
|
342
|
+
- [ui] jQuery joyride
|
328
343
|
- [ui] Ember Touch (gesture support for Ember: pinch, pan etc.)
|
329
344
|
|
330
345
|
|
@@ -42,7 +42,14 @@ class DependencyChain
|
|
42
42
|
|
43
43
|
private
|
44
44
|
def dependency_indices(drones,drone)
|
45
|
-
|
45
|
+
dependencies = drone.dependencies
|
46
|
+
|
47
|
+
precursors = drone.precursors
|
48
|
+
active_precursors = drones & precursors
|
49
|
+
|
50
|
+
preceding_drones = (dependencies + active_precursors).uniq
|
51
|
+
|
52
|
+
preceding_drones.map { |d| drones.index(d) }
|
46
53
|
end
|
47
54
|
|
48
55
|
def last_dependency_index(drones,drone)
|
data/lib/app_drone/drone.rb
CHANGED
@@ -37,6 +37,10 @@ class Drone
|
|
37
37
|
return @template.hook?(drone_klass)
|
38
38
|
end
|
39
39
|
|
40
|
+
def notify!(notice)
|
41
|
+
@template.notify! notice, self
|
42
|
+
end
|
43
|
+
|
40
44
|
# Expected implementations
|
41
45
|
def align; end
|
42
46
|
def execute; end
|
@@ -95,6 +99,11 @@ class Drone
|
|
95
99
|
(@pairs || []).map(&:to_app_drone_class)
|
96
100
|
end
|
97
101
|
|
102
|
+
def run_after(*klass_symbols); @precursors = klass_symbols end
|
103
|
+
def precursors
|
104
|
+
(@precursors || []).map(&:to_app_drone_class)
|
105
|
+
end
|
106
|
+
|
98
107
|
def owns_generator_method(m); @generator_method = m end
|
99
108
|
def generator_method; @generator_method end
|
100
109
|
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module AppDrone
|
2
|
+
class Carrierwave < Drone
|
3
|
+
desc "Classy file uploads"
|
4
|
+
category :uploads
|
5
|
+
|
6
|
+
depends_on :bundle
|
7
|
+
|
8
|
+
param :fog, :boolean, info: 'Install Fog for cloud storage'
|
9
|
+
|
10
|
+
def align
|
11
|
+
bundle.add 'carrierwave'
|
12
|
+
bundle.add 'fog' if param(:fog)
|
13
|
+
end
|
14
|
+
|
15
|
+
def execute
|
16
|
+
notify! 'Create "config/initializers/fog.rb" and load your Fog credentials into Carrierwave!' if param(:fog)
|
17
|
+
end
|
18
|
+
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
module AppDrone
|
2
|
+
class NestedForm < Drone
|
3
|
+
desc "Conveniently manage multiple models in a single form"
|
4
|
+
category :views
|
5
|
+
|
6
|
+
depends_on :bundle
|
7
|
+
|
8
|
+
def align
|
9
|
+
bundle.add 'nested_form'
|
10
|
+
javascript.pipeline 'jquery_nested_form'
|
11
|
+
end
|
12
|
+
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
generate 'nifty:config'
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module AppDrone
|
2
|
+
class NiftyGeneratorz < Drone
|
3
|
+
desc "A collection of useful Rails generator scripts"
|
4
|
+
category :misc
|
5
|
+
|
6
|
+
depends_on :bundle
|
7
|
+
|
8
|
+
param :nifty_config, :boolean, info: 'generate a config YAML file and loader'
|
9
|
+
|
10
|
+
def align
|
11
|
+
bundle.add 'nifty-generators', group: :development
|
12
|
+
end
|
13
|
+
|
14
|
+
def execute
|
15
|
+
do! :nifty_config if param(:nifty_config)
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
module AppDrone
|
2
|
+
class Remotipart < Drone
|
3
|
+
desc "AJAX file uploads with jQuery"
|
4
|
+
category :uploads
|
5
|
+
|
6
|
+
depends_on :bundle, :stylesheet, :javascript
|
7
|
+
|
8
|
+
def align
|
9
|
+
bundle.add 'remotipart'
|
10
|
+
javascript.pipeline 'jquery.remotipart'
|
11
|
+
end
|
12
|
+
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
generate 'responders:install'
|
@@ -0,0 +1 @@
|
|
1
|
+
generate "rspec:install"
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module AppDrone
|
2
|
+
class Rspec < Drone
|
3
|
+
desc "Behaviour Driven Development"
|
4
|
+
category :test
|
5
|
+
|
6
|
+
depends_on :bundle
|
7
|
+
|
8
|
+
def align
|
9
|
+
bundle.add 'rspec-rails', group: %w(development test)
|
10
|
+
end
|
11
|
+
|
12
|
+
def execute
|
13
|
+
do! :install
|
14
|
+
end
|
15
|
+
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
@generator.prepend_file 'spec/spec_helper.rb', "require 'simplecov'\n"
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module AppDrone
|
2
|
+
class SimpleCov < Drone
|
3
|
+
desc "Code coverage for Ruby 1.9, with RSpec integration"
|
4
|
+
category :test
|
5
|
+
|
6
|
+
depends_on :bundle
|
7
|
+
pairs_with :rspec
|
8
|
+
run_after :rspec
|
9
|
+
|
10
|
+
def align
|
11
|
+
bundle.add 'simplecov', require: false, group: :test
|
12
|
+
end
|
13
|
+
|
14
|
+
def execute
|
15
|
+
do! :install
|
16
|
+
do! :rspec_integration if pair?(:rspec)
|
17
|
+
end
|
18
|
+
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
module AppDrone
|
2
|
+
class WillPaginate < Drone
|
3
|
+
desc "Simple pagination library, with automatic Bootstrap integration"
|
4
|
+
category :requests
|
5
|
+
|
6
|
+
depends_on :bundle
|
7
|
+
pairs_with :bootstrap
|
8
|
+
|
9
|
+
def align
|
10
|
+
bundle.add 'will_paginate'
|
11
|
+
bundle.add 'bootstrap-will_paginate' if pair?(:bootstrap)
|
12
|
+
end
|
13
|
+
|
14
|
+
end
|
15
|
+
end
|
data/lib/app_drone/template.erb
CHANGED
@@ -25,9 +25,23 @@ class AppBuilder < Rails::AppBuilder
|
|
25
25
|
<% end %>
|
26
26
|
|
27
27
|
def leftovers
|
28
|
+
|
28
29
|
<%= leftover_directives.join("\n") %>
|
30
|
+
|
31
|
+
# This should be removed when the database drone is installed
|
32
|
+
rake 'db:create'
|
29
33
|
rake 'db:migrate'
|
34
|
+
|
35
|
+
|
36
|
+
# Drone Notices
|
37
|
+
<% drone_notices.each do |drone, notices| %>
|
38
|
+
<% notices.each do |notice| %>
|
39
|
+
say "[<%= drone.human_name %>] <%= notice %>", :red
|
40
|
+
<% end %>
|
41
|
+
<% end %>
|
42
|
+
|
30
43
|
say "She's all yours, sparky!\n\n", :green
|
44
|
+
|
31
45
|
end
|
32
46
|
|
33
47
|
end
|
data/lib/app_drone/template.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
module AppDrone
|
2
2
|
class Template
|
3
|
-
def initialize; @drones = {}; @directives = {} end
|
3
|
+
def initialize; @drones = {}; @directives = {}; @drone_notices = {} end
|
4
4
|
|
5
5
|
def add(ref,*params)
|
6
6
|
klass = ref.is_a?(Class)? ref : ('AppDrone::' + ref.to_s.classify).constantize
|
@@ -9,6 +9,7 @@ class Template
|
|
9
9
|
|
10
10
|
def drone_objects; @drones.values end
|
11
11
|
def drone_classes; @drones.keys end
|
12
|
+
def drone_notices; @drone_notices end
|
12
13
|
def hook?(klass); !@drones[klass].nil? end
|
13
14
|
def hook(klass)
|
14
15
|
raise "No such drone: #{klass}" unless i_klass = @drones[klass]
|
@@ -18,16 +19,24 @@ class Template
|
|
18
19
|
def leftover_directives; @directives[:leftovers] || [] end
|
19
20
|
def overridden_generator_methods; @directives.keys - [:leftovers] end
|
20
21
|
|
21
|
-
def do!(d,drone)
|
22
|
+
def do!(d,drone)
|
22
23
|
generator_method = drone.class.generator_method || :leftovers
|
23
24
|
(@directives[generator_method] ||= []) << d
|
24
25
|
end
|
26
|
+
|
27
|
+
def notify!(notice,drone)
|
28
|
+
(@drone_notices[drone.class] ||= []) << notice.gsub("'","\\'").gsub('"','\\"') # escape quotes
|
29
|
+
end
|
25
30
|
|
26
31
|
def render!
|
27
32
|
return if @rendered
|
28
33
|
DependencyChain.check_dependencies!(drone_classes)
|
29
|
-
|
30
|
-
|
34
|
+
|
35
|
+
ordered_chain = AppDrone::DependencyChain.sort(drone_classes)
|
36
|
+
|
37
|
+
ordered_chain.each { |klass| hook(klass).align }
|
38
|
+
ordered_chain.each { |klass| hook(klass).execute }
|
39
|
+
|
31
40
|
@rendered = true
|
32
41
|
end
|
33
42
|
|
data/lib/app_drone/version.rb
CHANGED
data/out.rb
CHANGED
@@ -27,7 +27,8 @@ class AppBuilder < Rails::AppBuilder
|
|
27
27
|
@generator.gem 'compass-rails'
|
28
28
|
@generator.gem 'slim-rails'
|
29
29
|
@generator.gem 'high_voltage'
|
30
|
-
@generator.gem '
|
30
|
+
@generator.gem 'rspec-rails', :group=>["development", "test"]
|
31
|
+
@generator.gem 'simplecov', :require=>false, :group=>:test
|
31
32
|
|
32
33
|
run_bundle
|
33
34
|
@generator.options = @generator.options.dup
|
@@ -38,6 +39,7 @@ run_bundle
|
|
38
39
|
|
39
40
|
|
40
41
|
def leftovers
|
42
|
+
|
41
43
|
# ---
|
42
44
|
# AppDrone::Javascript
|
43
45
|
# ---
|
@@ -113,12 +115,35 @@ FLAIR
|
|
113
115
|
@generator.remove_file File.join %w(README.rdoc)
|
114
116
|
|
115
117
|
# ---
|
116
|
-
# AppDrone::
|
118
|
+
# AppDrone::Rspec
|
117
119
|
# ---
|
118
|
-
|
120
|
+
generate "rspec:install"
|
119
121
|
|
122
|
+
# ---
|
123
|
+
# AppDrone::SimpleCov
|
124
|
+
# ---
|
125
|
+
@generator.create_file '.simplecov', <<-SIMPLECOV
|
126
|
+
SimpleCov.start 'rails' do
|
127
|
+
# any custom configs like groups and filters can be here at a central place
|
128
|
+
end
|
129
|
+
SIMPLECOV
|
130
|
+
|
131
|
+
# ---
|
132
|
+
# AppDrone::SimpleCov
|
133
|
+
# ---
|
134
|
+
@generator.prepend_file 'spec/spec_helper.rb', "require 'simplecov'\n"
|
135
|
+
|
136
|
+
|
137
|
+
# This should be removed when the database drone is installed
|
138
|
+
rake 'db:create'
|
120
139
|
rake 'db:migrate'
|
140
|
+
|
141
|
+
|
142
|
+
# Drone Notices
|
143
|
+
|
144
|
+
|
121
145
|
say "She's all yours, sparky!\n\n", :green
|
146
|
+
|
122
147
|
end
|
123
148
|
|
124
149
|
end
|
data/scraps/App admin
ADDED
data/scraps/TODO
ADDED
@@ -0,0 +1,32 @@
|
|
1
|
+
** When finished: if Flair, say: 'Boot your app and visit /pages/flair to see a functionality demo'
|
2
|
+
** When finished: general stats/instructions?
|
3
|
+
** Will-paginate bootstrap flair?
|
4
|
+
|
5
|
+
- [uploads] Cloudinary
|
6
|
+
- [misc] Spork
|
7
|
+
- [test] DatabaseCleaner
|
8
|
+
- [test] Capybara
|
9
|
+
- [test] Shoulda
|
10
|
+
|
11
|
+
- [ui] jQuery UI (vendor + theme etc.)
|
12
|
+
- [ui_shim] HTML5 placeholder shim - https://github.com/parndt/jquery-html5-placeholder-shim
|
13
|
+
- [ui_shim] HTML5 shim/shiv for IE -- http://ejohn.org/blog/html5-shiv/ http://code.google.com/p/html5shiv/ (or use modernizr?)
|
14
|
+
- [ui_shim] pie.htc for IE
|
15
|
+
- [ui_shim] jQuery shims
|
16
|
+
|
17
|
+
- [mailing] SendGrid https://github.com/stephenb/sendgrid
|
18
|
+
- [mailing] Postmark https://github.com/wildbit/postmark-rails
|
19
|
+
|
20
|
+
- [?] DelayedJob
|
21
|
+
- [search] Sphinx
|
22
|
+
- put has_scope in [search]?
|
23
|
+
|
24
|
+
LATER:
|
25
|
+
- [?] Resque
|
26
|
+
- [?] Redis
|
27
|
+
- [dev] rails-best-practices (and the other output gem for debugging)
|
28
|
+
- [dev] RailsErd
|
29
|
+
- [production] Airbrake + API Key
|
30
|
+
- [?] Launchy
|
31
|
+
- [base] Database: rake [db:create, db:migrate] at very end of generator, options? postgres etc. (will need a dropdown option in the app for this)
|
32
|
+
- [auth] Devise
|
data/scraps/blank drone
ADDED
data/test/test_app_drone.rb
CHANGED
@@ -24,7 +24,8 @@ class AppDroneTest < Test::Unit::TestCase
|
|
24
24
|
template = Template.new
|
25
25
|
add_defaults_to_template(template)
|
26
26
|
|
27
|
-
template.add :
|
27
|
+
template.add :simple_cov
|
28
|
+
template.add :rspec
|
28
29
|
|
29
30
|
template.render_to_file
|
30
31
|
end
|
@@ -64,6 +65,12 @@ class AppDroneTest < Test::Unit::TestCase
|
|
64
65
|
assert_equal DependencyChain.sort(chain), sorted_chain
|
65
66
|
end
|
66
67
|
|
68
|
+
def test_dependency_chain_run_after
|
69
|
+
chain = [AppDrone::SimpleCov, AppDrone::Rspec, AppDrone::Bundle]
|
70
|
+
sorted_chain = [AppDrone::Bundle, AppDrone::Rspec, AppDrone::SimpleCov]
|
71
|
+
assert_equal DependencyChain.sort(chain), sorted_chain
|
72
|
+
end
|
73
|
+
|
67
74
|
private
|
68
75
|
def add_defaults_to_template(template)
|
69
76
|
defaults = [:bundle, :javascript, :stylesheet, :slim_view, :high_voltage, :flair, :cleanup]
|