app_drone 0.8.6 → 0.9.1
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/.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]
|