app_drone 0.4.0 → 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -192,6 +192,12 @@ For convenience, `method_missing` is used to allow you to use the underscore'd n
192
192
  **Take a look at existing drones for more info!**
193
193
 
194
194
 
195
+ ### Drone naming caveat
196
+
197
+ Because `ActiveSupport::Inflector` is used, be careful when naming drones with apparent plurals - `AppDrone::EmberJs` would be incorrectly symbolized to `ember_j`.
198
+
199
+
200
+
195
201
  ### An important reminder
196
202
 
197
203
  AppDrone is not for everyone. It's highly opinionated about how a Rails app should be laid out, but is the fruit of tons of research into best practices and maintainability. AppDrone leans especially heavily on Sass, Compass, Coffeescript and Slim. Buyer beware.
@@ -207,6 +213,7 @@ AppDrone is not for everyone. It's highly opinionated about how a Rails app shou
207
213
  - Javascript (Coffescript & jQuery)
208
214
  - SlimView
209
215
  - HighVoltage
216
+ - Ember (the Ember.js library)
210
217
  - Chosen, by harvestHQ
211
218
  - Bootstrap, by Twitter
212
219
  - SimpleForm (with optional Country Select and automatic Twitter Bootstrap integration)
@@ -224,10 +231,13 @@ AppDrone is not for everyone. It's highly opinionated about how a Rails app shou
224
231
 
225
232
  ### Future drones (TODO - I'll get there some day!)
226
233
 
234
+ - Database (currenly rake db:migrate in template will break non-sqlite dbs)
227
235
  - Stylesheet utils
228
236
  - SlimViews: Add browser-specific classes to <html> via useragent + helpers..
229
237
  - UserAgent blocking script
230
238
  - Responders
239
+ - EasyRoles
240
+ - Migrant
231
241
  - HasScope
232
242
  - Pagination
233
243
  - jQuery shims
@@ -240,7 +250,6 @@ AppDrone is not for everyone. It's highly opinionated about how a Rails app shou
240
250
  - NewRelic
241
251
  - EngineYard for deployment
242
252
  - Backbone integration + Skim
243
- - Ember.js integration
244
253
  - Pivotal tracker
245
254
 
246
255
 
data/README.md~ CHANGED
@@ -192,6 +192,12 @@ For convenience, `method_missing` is used to allow you to use the underscore'd n
192
192
  **Take a look at existing drones for more info!**
193
193
 
194
194
 
195
+ ### Drone naming caveat
196
+
197
+ Because `ActiveSupport::Inflector` is used, be careful when naming drones with apparent plurals - `AppDrone::EmberJs` would be incorrectly symbolized to `ember_j`.
198
+
199
+
200
+
195
201
  ### An important reminder
196
202
 
197
203
  AppDrone is not for everyone. It's highly opinionated about how a Rails app should be laid out, but is the fruit of tons of research into best practices and maintainability. AppDrone leans especially heavily on Sass, Compass, Coffeescript and Slim. Buyer beware.
@@ -207,6 +213,7 @@ AppDrone is not for everyone. It's highly opinionated about how a Rails app shou
207
213
  - Javascript (Coffescript & jQuery)
208
214
  - SlimView
209
215
  - HighVoltage
216
+ - Ember (the Ember.js library)
210
217
  - Chosen, by harvestHQ
211
218
  - Bootstrap, by Twitter
212
219
  - SimpleForm (with optional Country Select and automatic Twitter Bootstrap integration)
@@ -228,6 +235,8 @@ AppDrone is not for everyone. It's highly opinionated about how a Rails app shou
228
235
  - SlimViews: Add browser-specific classes to <html> via useragent + helpers..
229
236
  - UserAgent blocking script
230
237
  - Responders
238
+ - EasyRoles
239
+ - Migrant
231
240
  - HasScope
232
241
  - Pagination
233
242
  - jQuery shims
@@ -240,7 +249,6 @@ AppDrone is not for everyone. It's highly opinionated about how a Rails app shou
240
249
  - NewRelic
241
250
  - EngineYard for deployment
242
251
  - Backbone integration + Skim
243
- - Ember.js integration
244
252
  - Pivotal tracker
245
253
 
246
254
 
data/TODO CHANGED
@@ -1,4 +1,4 @@
1
1
  ** templates must be added and run in the order that satisfies dependency order best. (also consider pairings if possible)
2
2
  i.e. a drone can only run after it's dependants have had their turn (unless they mutually depend)
3
3
 
4
- ** param 'default' values... (when accessing param, if nil, return default (unless default is nil too))
4
+ ** rename pairs/pairs_with to connections/connects_with
data/TODO~ CHANGED
@@ -1,5 +1,6 @@
1
- ** templates must be added and run in the order that satisfies dependency order best.
2
- **
1
+ ** templates must be added and run in the order that satisfies dependency order best. (also consider pairings if possible)
3
2
  i.e. a drone can only run after it's dependants have had their turn (unless they mutually depend)
4
3
 
5
4
  ** param 'default' values... (when accessing param, if nil, return default (unless default is nil too))
5
+
6
+ ** rename pairs/pairs_with to connections/connects_with
@@ -9,12 +9,14 @@ class Drone
9
9
  # New
10
10
  def initialize(template,*params)
11
11
  @template = template
12
- @params = params.first # weird.. no idea why
12
+ @params = (params.first || {}).merge({options: {}})
13
13
  setup
14
14
  end
15
15
 
16
16
  def param(sym)
17
- (@params || {})[sym]
17
+ param_value = @params[sym]
18
+ default_value = self.class.param_named(sym).options[:default]
19
+ return param_value || default_value
18
20
  end
19
21
 
20
22
  # DSL
@@ -66,9 +68,8 @@ class Drone
66
68
  def param(name, type, *options)
67
69
  (@params ||= []) << Param.new(name, type, options.first)
68
70
  end
69
- def params
70
- (@params || [])
71
- end
71
+ def params; @params || [] end
72
+ def param_named(n); params.find { |p| p.name == n } end
72
73
 
73
74
  def desc(d=nil)
74
75
  return @description if d.nil?
@@ -9,12 +9,14 @@ class Drone
9
9
  # New
10
10
  def initialize(template,*params)
11
11
  @template = template
12
- @params = params.first # weird.. no idea why
12
+ @params = (params.first || {}).merge({options: {}})
13
13
  setup
14
14
  end
15
15
 
16
16
  def param(sym)
17
- (@params || {})[sym]
17
+ param_value = @params[sym]
18
+ default_value = self.class.param_named(sym).options[:default]
19
+ return param_value || default_value
18
20
  end
19
21
 
20
22
  # DSL
@@ -66,9 +68,8 @@ class Drone
66
68
  def param(name, type, *options)
67
69
  (@params ||= []) << Param.new(name, type, options.first)
68
70
  end
69
- def params
70
- (@params || [])
71
- end
71
+ def params; @params || [] end
72
+ def param_named(n); params.find { |p| p.name == n } end
72
73
 
73
74
  def desc(d=nil)
74
75
  return @description if d.nil?
@@ -6,7 +6,7 @@ class Bootstrap < Drone
6
6
 
7
7
  param :vendor, :boolean, info: 'place a local copy of the files into the repo for customization'
8
8
  param :responsive, :boolean, info: 'include responsive grid'
9
- param :font_awesome, :boolean, info: 'use font-awesome for icons'
9
+ param :font_awesome, :boolean, info: 'use font-awesome for icons', default: true
10
10
 
11
11
  # TODO js import options
12
12
 
@@ -2,10 +2,11 @@
2
2
  module AppDrone
3
3
  class Bootstrap < Drone
4
4
  desc "Installs Twitter Bootstrap stylesheets and javascripts"
5
+ category :ui
5
6
 
6
7
  param :vendor, :boolean, info: 'place a local copy of the files into the repo for customization'
7
8
  param :responsive, :boolean, info: 'include responsive grid'
8
- param :font_awesome, :boolean, info: 'use font-awesome for icons'
9
+ param :font_awesome, :boolean, info: 'use font-awesome for icons', default: true
9
10
 
10
11
  # TODO js import options
11
12
 
@@ -0,0 +1,21 @@
1
+ module AppDrone
2
+ class Ember < Drone
3
+ desc 'Installs ember.js for Rails'
4
+ depends_on :bundle, :javascript
5
+
6
+ param :app_skeleton, :boolean, info: 'build an Ember app skeleton'
7
+
8
+ def align
9
+ bundle.add 'ember-rails'
10
+ javascript.pipeline 'ember'
11
+ if param(:app_skeleton)
12
+ javascript.pipeline 'ember/#{app_name}.js'
13
+ end
14
+ end
15
+
16
+ def execute
17
+ do! :install
18
+ end
19
+
20
+ end
21
+ end
@@ -0,0 +1,21 @@
1
+ module AppDrone
2
+ class Ember < Drone
3
+ desc 'Installs ember.js for Rails'
4
+ depends_on :bundle, :javascript
5
+
6
+ param :app_skeleton, :boolean, info: 'build an Ember app skeleton'
7
+
8
+ def align
9
+ bundle.add 'ember-rails'
10
+ javascript.pipeline 'ember'
11
+ if param(:app_skeleton)
12
+ javascript.pipeline 'ember/#{app_name}.js'
13
+ end
14
+ end
15
+
16
+ def execute
17
+ do! :install
18
+ end
19
+
20
+ end
21
+ end
@@ -0,0 +1,21 @@
1
+ module AppDrone
2
+ class EmberJs < Drone
3
+ desc 'Installs ember.js for Rails'
4
+ depends_on :bundle, :javascript
5
+
6
+ param :app_skeleton, :boolean, info: 'build an Ember app skeleton'
7
+
8
+ def align
9
+ bundle.add 'ember-rails'
10
+ javascript.pipeline 'ember'
11
+ if param(:app_skeleton)
12
+ javascript.pipeline 'ember/\#{app_name}.js'
13
+ end
14
+ end
15
+
16
+ def execute
17
+ do! :install
18
+ end
19
+
20
+ end
21
+ end
@@ -0,0 +1,3 @@
1
+ <% if param(:app_skeleton) %>
2
+ generate "ember:bootstrap"
3
+ <% end %>
@@ -0,0 +1,3 @@
1
+ <% if param(:app_skeleton) %>
2
+ generate "ember:bootstrap"
3
+ <% end %>
@@ -3,8 +3,11 @@ js_asset_path = File.join %w(app assets javascripts application.js)
3
3
  @coffee_asset_path = File.join %w(app assets javascripts application.js.coffee)
4
4
  @generator.create_file @coffee_asset_path, <<-COFFEE
5
5
  <% pipeline_requires.each { |r| %>//= require <%= r %>
6
- <% } %>//= require_tree .
6
+ <% } %>
7
+ COFFEE
7
8
 
9
+ @coffee_init_path = File.join %w(app assets javascripts init.js.coffee)
10
+ @generator.create_file @coffee_init_path, <<-COFFEE
8
11
  $(document).ready ->
9
12
  <% on_readies.each { |r| %><%= r %>
10
13
  <% } %>
@@ -3,10 +3,13 @@ js_asset_path = File.join %w(app assets javascripts application.js)
3
3
  @coffee_asset_path = File.join %w(app assets javascripts application.js.coffee)
4
4
  @generator.create_file @coffee_asset_path, <<-COFFEE
5
5
  <% pipeline_requires.each { |r| %>//= require <%= r %>
6
- <% } %>//= require_tree .
6
+ <% } %>
7
+ COFFEE
7
8
 
9
+ @coffee_init_path = File.join %w(app assets javascripts init.js.coffee)
10
+ @generator.create_file @coffee_init_path, <<-COFFEE
8
11
  $(document).ready ->
9
- <% onreadies.each { |r| %><%= r %>
12
+ <% on_readies.each { |r| %><%= r %>
10
13
  <% } %>
11
14
 
12
15
  COFFEE
@@ -10,6 +10,7 @@ class Javascript < Drone
10
10
 
11
11
  self.pipeline 'jquery'
12
12
  self.pipeline 'jquery_ujs'
13
+ self.pipeline 'init'
13
14
  end
14
15
 
15
16
  def pipeline(r); self.pipeline_requires << r end
@@ -1,6 +1,7 @@
1
1
  module AppDrone
2
2
  class Javascript < Drone
3
3
  desc "Generates application.js.coffee with manifest options and jQuery load hooks"
4
+ category :base
4
5
  attr_accessor :pipeline_requires, :on_readies
5
6
 
6
7
  def setup
@@ -9,6 +10,7 @@ class Javascript < Drone
9
10
 
10
11
  self.pipeline 'jquery'
11
12
  self.pipeline 'jquery_ujs'
13
+ self.pipeline 'init'
12
14
  end
13
15
 
14
16
  def pipeline(r); self.pipeline_requires << r end
@@ -7,7 +7,7 @@ class SimpleForm < Drone
7
7
  depends_on :bundle
8
8
  pairs_with :bootstrap
9
9
 
10
- param :add_country_select, :boolean, info: 'Add country_select for listing countries'
10
+ param :add_country_select, :boolean, info: 'Add country_select for listing countries', default: true
11
11
 
12
12
  def align
13
13
  bundle.add 'simple_form'
@@ -7,7 +7,8 @@ class SimpleForm < Drone
7
7
  depends_on :bundle
8
8
  pairs_with :bootstrap
9
9
 
10
- param :add_country_select, :boolean, info: 'Add country_select for listing countries'
10
+ param :add_country_select, :boolean, info: 'Add country_select for listing countries', default: true
11
+
11
12
 
12
13
  def align
13
14
  bundle.add 'simple_form'
@@ -1,3 +1,3 @@
1
1
  module AppDrone
2
- VERSION = "0.4.0"
2
+ VERSION = "0.5.0"
3
3
  end
@@ -1,3 +1,3 @@
1
1
  module AppDrone
2
- VERSION = "0.3.4"
2
+ VERSION = "0.4.2"
3
3
  end
data/out.rb CHANGED
@@ -28,8 +28,10 @@ class AppBuilder < Rails::AppBuilder
28
28
  @generator.gem 'slim-rails'
29
29
  @generator.gem 'high_voltage'
30
30
  @generator.gem 'simple_form'
31
+ @generator.gem 'country_select'
31
32
  @generator.gem 'compass_twitter_bootstrap', :git=>"git://github.com/vwall/compass-twitter-bootstrap.git", :group=>:assets
32
33
  @generator.gem 'chosen-rails'
34
+ @generator.gem 'ember-rails'
33
35
 
34
36
  run_bundle
35
37
  @generator.options = @generator.options.dup
@@ -49,9 +51,15 @@ js_asset_path = File.join %w(app assets javascripts application.js)
49
51
  @generator.create_file @coffee_asset_path, <<-COFFEE
50
52
  //= require jquery
51
53
  //= require jquery_ujs
54
+ //= require init
52
55
  //= require chosen-jquery
53
- //= require_tree .
56
+ //= require ember
57
+ //= require ember/#{app_name}.js
54
58
 
59
+ COFFEE
60
+
61
+ @coffee_init_path = File.join %w(app assets javascripts init.js.coffee)
62
+ @generator.create_file @coffee_init_path, <<-COFFEE
55
63
  $(document).ready ->
56
64
  $('.chzn-select').chosen();
57
65
 
@@ -125,17 +133,24 @@ select.chzn-select
125
133
 
126
134
  FLAIR
127
135
 
136
+ # ---
137
+ # AppDrone::Cleanup
138
+ # ---
139
+ @generator.remove_file File.join %w(public index.html)
140
+ @generator.remove_file File.join %w(app assets images rails.png)
141
+ @generator.remove_file File.join %w(README.rdoc)
142
+
128
143
  # ---
129
144
  # AppDrone::SimpleForm
130
145
  # ---
131
146
  generate "simple_form:install --bootstrap"
132
147
 
133
148
  # ---
134
- # AppDrone::Cleanup
149
+ # AppDrone::Ember
135
150
  # ---
136
- @generator.remove_file File.join %w(public index.html)
137
- @generator.remove_file File.join %w(app assets images rails.png)
138
- @generator.remove_file File.join %w(README.rdoc)
151
+
152
+ generate "ember:bootstrap"
153
+
139
154
 
140
155
  rake 'db:migrate'
141
156
  say "She's all yours, sparky!\n\n", :green
data/out.rb~ CHANGED
@@ -28,8 +28,10 @@ class AppBuilder < Rails::AppBuilder
28
28
  @generator.gem 'slim-rails'
29
29
  @generator.gem 'high_voltage'
30
30
  @generator.gem 'simple_form'
31
+ @generator.gem 'country_select'
31
32
  @generator.gem 'compass_twitter_bootstrap', :git=>"git://github.com/vwall/compass-twitter-bootstrap.git", :group=>:assets
32
33
  @generator.gem 'chosen-rails'
34
+ @generator.gem 'ember-rails'
33
35
 
34
36
  run_bundle
35
37
  @generator.options = @generator.options.dup
@@ -49,9 +51,15 @@ js_asset_path = File.join %w(app assets javascripts application.js)
49
51
  @generator.create_file @coffee_asset_path, <<-COFFEE
50
52
  //= require jquery
51
53
  //= require jquery_ujs
54
+ //= require init
52
55
  //= require chosen-jquery
53
- //= require_tree .
56
+ //= require ember
57
+ //= require ember/#{app_name}.js
54
58
 
59
+ COFFEE
60
+
61
+ @coffee_init_path = File.join %w(app assets javascripts init.js.coffee)
62
+ @generator.create_file @coffee_init_path, <<-COFFEE
55
63
  $(document).ready ->
56
64
  $('.chzn-select').chosen();
57
65
 
@@ -71,7 +79,6 @@ COFFEE
71
79
 
72
80
  @import 'compass'
73
81
  @import 'compass_twitter_bootstrap_awesome'
74
- @import 'compass_twitter_bootstrap_responsive'
75
82
 
76
83
  SASS
77
84
 
@@ -125,17 +132,24 @@ select.chzn-select
125
132
 
126
133
  FLAIR
127
134
 
135
+ # ---
136
+ # AppDrone::Cleanup
137
+ # ---
138
+ @generator.remove_file File.join %w(public index.html)
139
+ @generator.remove_file File.join %w(app assets images rails.png)
140
+ @generator.remove_file File.join %w(README.rdoc)
141
+
128
142
  # ---
129
143
  # AppDrone::SimpleForm
130
144
  # ---
131
145
  generate "simple_form:install --bootstrap"
132
146
 
133
147
  # ---
134
- # AppDrone::Cleanup
148
+ # AppDrone::Ember
135
149
  # ---
136
- @generator.remove_file File.join %w(public index.html)
137
- @generator.remove_file File.join %w(app assets images rails.png)
138
- @generator.remove_file File.join %w(README.rdoc)
150
+
151
+ generate "ember:bootstrap"
152
+
139
153
 
140
154
  rake 'db:migrate'
141
155
  say "She's all yours, sparky!\n\n", :green
@@ -17,16 +17,13 @@ class AppDroneTest < Test::Unit::TestCase
17
17
 
18
18
  def test_basic_behavior
19
19
  template = Template.new
20
- template.add :bundle
21
- template.add :javascript
22
- template.add :stylesheet
23
- template.add :slim_view
24
- template.add :high_voltage
25
- template.add :flair
20
+ add_defaults_to_template(template)
21
+
26
22
  template.add :simple_form
27
- template.add :bootstrap, font_awesome: true, responsive: true
23
+ template.add :bootstrap, responsive: true
28
24
  template.add :chosen
29
- template.add :cleanup
25
+ template.add :ember, app_skeleton: true
26
+
30
27
  template.render_to_file
31
28
  end
32
29
 
@@ -40,6 +37,12 @@ class AppDroneTest < Test::Unit::TestCase
40
37
  assert_equal drone_symbol.to_app_drone_class, AppDrone::Bundle
41
38
  end
42
39
 
40
+ private
41
+ def add_defaults_to_template(template)
42
+ defaults = [:bundle, :javascript, :stylesheet, :slim_view, :high_voltage, :flair, :cleanup]
43
+ defaults.each { |drone| template.add(drone) }
44
+ end
45
+
43
46
  end
44
47
 
45
48
  end
@@ -17,17 +17,14 @@ class AppDroneTest < Test::Unit::TestCase
17
17
 
18
18
  def test_basic_behavior
19
19
  template = Template.new
20
- template.add :bundle
21
- template.add :javascript
22
- template.add :stylesheet
23
- template.add :slim_view
24
- template.add :high_voltage
25
- template.add :flair
20
+ add_defaults_to_template(template)
21
+
26
22
  template.add :simple_form
27
- template.add :bootstrap, font_awesome: true, responsive: true
23
+ template.add :bootstrap, responsive: true
28
24
  template.add :chosen
29
- template.add :cleanup
30
- #template.render_to_file
25
+ template.add :ember, app_skeleton: true
26
+
27
+ template.render_to_file
31
28
  end
32
29
 
33
30
  def test_drone_class_to_symbol
@@ -40,6 +37,12 @@ class AppDroneTest < Test::Unit::TestCase
40
37
  assert_equal drone_symbol.to_app_drone_class, AppDrone::Bundle
41
38
  end
42
39
 
40
+ private
41
+ def add_defaults_to_template(template)
42
+ defaults = [:bundle, :javascript, :stylesheet, :slim_view, :high_voltage, :flair, :cleanup]
43
+ defaults.each { |drone| template.add(drone) }
44
+ end
45
+
43
46
  end
44
47
 
45
48
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: app_drone
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 0.5.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-04-21 00:00:00.000000000 Z
12
+ date: 2012-04-22 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activesupport
16
- requirement: &17516880 !ruby/object:Gem::Requirement
16
+ requirement: &8328640 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,7 +21,7 @@ dependencies:
21
21
  version: 3.2.0
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *17516880
24
+ version_requirements: *8328640
25
25
  description: Give your Rails apps a kickstart
26
26
  email:
27
27
  - whoisdanieldavey@gmail.com
@@ -62,6 +62,11 @@ files:
62
62
  - lib/app_drone/drones/cleanup/cleanup.erb
63
63
  - lib/app_drone/drones/cleanup/cleanup.rb
64
64
  - lib/app_drone/drones/cleanup/cleanup.rb~
65
+ - lib/app_drone/drones/ember/ember.rb
66
+ - lib/app_drone/drones/ember/ember.rb~
67
+ - lib/app_drone/drones/ember/ember_js.rb~
68
+ - lib/app_drone/drones/ember/install.erb
69
+ - lib/app_drone/drones/ember/install.erb~
65
70
  - lib/app_drone/drones/flair/flair.rb
66
71
  - lib/app_drone/drones/flair/flair.rb~
67
72
  - lib/app_drone/drones/flair/flair_page.erb