effective_developer 0.1.1 → 0.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 928a57aff71b27e895d035bdc80c13f5d27f3b27
4
- data.tar.gz: 1bc206677f022f78df6dfd28c8b87210dc8ef232
3
+ metadata.gz: c0bc78241a7312115a37e3ea85a1e91fe356fdc5
4
+ data.tar.gz: e15e7239d99c756268644a9a897388c37319f956
5
5
  SHA512:
6
- metadata.gz: c5a5ddf11e47a7f9ed27287e49c890bd35ad9009d2fdb3043424304f7df8ec631e401df78fc8a3675d8a7e004b2286e703a5d92dc116869519f1f913afc5e8d3
7
- data.tar.gz: 557cf3af3b565c4aa7e87ff9ebf9136e80f6c4b7d806ff9654fd4967b827f17946990566ded2c2c17e24d49b45f4e3b8fb68301f7dddbf8a62235481bf240aab
6
+ metadata.gz: f19e58ab88d396f8a03e6e05fedcf93b994ab1969f3a0cedfc17949edf1ac77fef4af3309d1e78ac1eae7c66ec3817b6847e709c0404744ad3ee7287664ead0e
7
+ data.tar.gz: c546bacc1dd23d075566de969a10246cfddaa0f618b25c8a01ad2b1271035b2053d2344094064010b4fd1badb19448c51534cad970975ec5fb274590549ef1c4
data/README.md CHANGED
@@ -52,6 +52,18 @@ To release a new gem version:
52
52
  > gem_release 1.0.0
53
53
  ```
54
54
 
55
+ ## gitreset
56
+
57
+ Careful, this command will delete all your un committed changes.
58
+
59
+ A command line script to call `git reset --hard` and also delete any newly created files.
60
+
61
+ It truly resets you back to a fresh working copy. Perfect for tweaking scaffold and code generation tools.
62
+
63
+ ```console
64
+ > gitreset
65
+ ```
66
+
55
67
  ## gitsweep
56
68
 
57
69
  A command line script to delete any git branch that has already been merged into master & develop
@@ -208,36 +220,94 @@ end
208
220
 
209
221
  Override `before_import()` or `after_import()` to run code before or after the import.
210
222
 
211
- # Scaffolding
223
+ # Code Generation
224
+
225
+ The goal of the `effective_developer` code generation project is to minimize the amount of hand coding required to build a rails website.
226
+
227
+ Only the rails model file should be written by a human.
212
228
 
213
- Scaffolding is the fastest way to build a rails app. The effective scaffolds try to improve on the rails built in ones.
229
+ All database migrations, controllers, forms and views should be generated.
214
230
 
215
- To generate an entire resource (4 different examples):
231
+ Creating a new working in-place CRUD feature should be a 1-liner.
232
+
233
+ A huge head start to the interesting part of the code.
234
+
235
+ ## effective scaffolds
236
+
237
+ Scaffolding is the fastest way to build a CRUD rails app.
238
+
239
+ The effective scaffolds generally follow the same pattern as the (rails generate)[http://guides.rubyonrails.org/command_line.html#rails-generate] commands.
240
+
241
+ To create an entire CRUD resource from the command line:
216
242
 
217
243
  ```ruby
218
244
  rails generate effective:scaffold thing name:string description:text
219
-
245
+ rails generate effective:scaffold thing name:string description:text --actions index show mark_as_paid
220
246
  rails generate effective:scaffold admin/thing name:string description:text
247
+ rails generate effective:scaffold admin/thing name:string description:text --actions crud-show
221
248
 
222
- rails generate effective:scaffold thing name:string description:text --actions crud archive
223
-
224
- rails generate effective:scaffold admin/thing name:string description:text --actions crud-show unarchive
225
249
  ```
226
250
 
227
- Or, read from the existing model, and just generate the controller, route, ability, menu, datatable, views, form (2 different examples):
251
+ Or to skip the model & migration:
228
252
 
229
253
  ```ruby
230
254
  rails generate effective:scaffold_controller thing
255
+ rails generate effective:scaffold_controller thing index show
256
+ rails generate effective:scaffold_controller admin/thing crud mark_as_paid
257
+ rails generate effective:scaffold_controller admin/thing crud-show
258
+ ```
259
+
260
+ ### model file
231
261
 
232
- rails generate effective:scaffold_controller admin/thing --actions crud-show
262
+ If there is a regular rails model file present, all attributes, belong_tos, scopes and has_many accepts_nested_attributes
263
+ will be considered when generating the scaffold.
264
+
265
+ Make a model file like this (or generate it with `rails generate effective:model post name:string body:text` and tweak from there):
266
+
267
+ ```ruby
268
+ class Post < ApplicationRecord
269
+ belongs_to :user
270
+ belongs_to :category
271
+
272
+ # Attributes
273
+ # name :string
274
+ # body :text
275
+ # published_at :datetime
276
+
277
+ validates :name, presence: true
278
+ validates :description, presence: true
279
+
280
+ has_many :comments
281
+ accepts_nested_attributes_for :comments
282
+
283
+ scope :published, -> { where.not(published_at: nil) }
284
+
285
+ def to_s
286
+ name || 'New Post'
287
+ end
288
+ end
289
+ ```
290
+
291
+ and then run
292
+
293
+ ```console
294
+ rails generate scaffold post
295
+ rails generate scaffold_controller admin/post
233
296
  ```
234
297
 
235
- Or call each scaffold one at a time:
298
+ Tweak from here
299
+
300
+ ### all scaffolds
301
+
302
+ You can call scaffolds one at a time:
236
303
 
237
304
  ```ruby
305
+ # These two accept attributes on the command line. like effective:scaffold
238
306
  rails generate effective:model thing name:string description:text
239
307
  rails generate effective:migration thing name:string description:text
240
- rails generate effective:controller thing # or admin/thing
308
+
309
+ # Thes accept actions on the command line. with --attributes. like effective:scaffold_controller
310
+ rails generate effective:controller thing # /admin/thing
241
311
  rails generate effective:route thing
242
312
  rails generate effective:ability thing # CanCanCan
243
313
  rails generate effective:menu thing # If app/views/*namespaces/_navbar.html.haml is present
@@ -246,8 +316,6 @@ rails generate effective:views thing
246
316
  rails generate effective:form thing
247
317
  ```
248
318
 
249
- These scaffold generators are still an ongoing work in progress. There is a lot more inspect the model and do the right thing type functionality to be implemented "soon".
250
-
251
319
  ## License
252
320
 
253
321
  MIT License. Copyright [Code and Effect Inc.](http://www.codeandeffect.com/)
@@ -1,3 +1,3 @@
1
1
  module EffectiveDeveloper
2
- VERSION = '0.1.1'.freeze
2
+ VERSION = '0.2'.freeze
3
3
  end
@@ -58,8 +58,8 @@ module Effective
58
58
  abilities += (crud_actions & invoked_actions)
59
59
  end
60
60
 
61
- if (invoked_actions - crud_actions).present?
62
- abilities += (invoked_actions - crud_actions)
61
+ if non_crud_actions.present?
62
+ abilities += non_crud_actions
63
63
  end
64
64
 
65
65
  abilities = ['manage'] if abilities.blank? || abilities == (crud_actions - ['show'])
@@ -12,6 +12,10 @@ module Effective
12
12
  %w(index new create show edit update destroy)
13
13
  end
14
14
 
15
+ def non_crud_actions
16
+ invoked_actions - crud_actions
17
+ end
18
+
15
19
  # --actions crud another
16
20
  # --actions crud-show another
17
21
  def invoked_actions
@@ -50,10 +54,10 @@ module Effective
50
54
  klass_attributes = resource.klass_attributes
51
55
 
52
56
  if klass_attributes.blank?
53
- pending = ActiveRecord::Migrator.new(:up, ActiveRecord::Migrator.migrations(ActiveRecord::Migrator.migrations_paths)).pending_migrations.present?
54
-
55
- migrate = ask("Unable to read the attributes of #{resource.klass}. There are pending migrations. Run db:migrate now? [y/n]")
56
- system('bundle exec rake db:migrate') if migrate.to_s.include?('y')
57
+ if ActiveRecord::Migrator.new(:up, ActiveRecord::Migrator.migrations(ActiveRecord::Migrator.migrations_paths)).pending_migrations.present?
58
+ migrate = ask("Unable to read the attributes of #{resource.klass || resource.name}. There are pending migrations. Run db:migrate now? [y/n]")
59
+ system('bundle exec rake db:migrate') if migrate.to_s.include?('y')
60
+ end
57
61
 
58
62
  klass_attributes = resource.klass_attributes
59
63
  end
@@ -70,7 +70,7 @@ module Effective
70
70
  end
71
71
 
72
72
  def effective_menus_content
73
- "item '#{resource.plural_name.titleize}', :#{resource.plural_name}_path"
73
+ "item '#{resource.plural_name.titleize}', :#{resource.index_path}"
74
74
  end
75
75
 
76
76
  end
@@ -64,8 +64,8 @@ module Effective
64
64
  resources << ']'
65
65
  end
66
66
 
67
- if (invoked_actions - crud_actions).present?
68
- [resources + ' do'] + (invoked_actions - crud_actions).map { |action| "get :#{action}, on: :member" } + ['end']
67
+ if non_crud_actions.present?
68
+ [resources + ' do'] + non_crud_actions.map { |action| "get :#{action}, on: :member" } + ['end']
69
69
  else
70
70
  resources
71
71
  end
@@ -18,11 +18,15 @@ module Effective
18
18
  class_option :actions, type: :array, default: ['crud'], desc: 'Included actions', banner: 'index show'
19
19
 
20
20
  def invoke_model
21
- Rails::Generators.invoke('effective:model', [name] + invoked_attributes)
21
+ if File.exists?(resource.model_file)
22
+ say_status(:skipped, :model, :yellow) and return
23
+ end
24
+
25
+ Rails::Generators.invoke('effective:model', [name] + invokable(invoked_attributes))
22
26
  end
23
27
 
24
28
  def invoke_migration
25
- Rails::Generators.invoke('effective:migration', [name] + invoked_attributes)
29
+ Rails::Generators.invoke('effective:migration', [name] + invokable(invoked_attributes))
26
30
  end
27
31
 
28
32
  def invoke_controller
@@ -58,7 +62,7 @@ module Effective
58
62
  say_status(:skipped, :form, :yellow) and return
59
63
  end
60
64
 
61
- Rails::Generators.invoke('effective:form', [name] + invoked_attributes)
65
+ Rails::Generators.invoke('effective:form', [name] + invokable(invoked_attributes))
62
66
  end
63
67
 
64
68
  end
@@ -30,7 +30,9 @@ module Effective
30
30
  template "views/#{action}.html.haml", resource.view_file(action)
31
31
  end
32
32
 
33
- template 'views/_resource.html.haml', resource.view_file(resource.name, partial: true)
33
+ if invoked_actions.include?('show') || non_crud_actions.present?
34
+ template 'views/_resource.html.haml', resource.view_file(resource.name, partial: true)
35
+ end
34
36
  end
35
37
 
36
38
  private
@@ -1,4 +1,4 @@
1
- class <%= resource.namespaced_class_name %>Controller < <%= [resource.namespace.try(:classify).presence, ApplicationController].compact.join('::') %>
1
+ class <%= resource.namespaced_class_name.pluralize %>Controller < <%= [resource.namespace.try(:classify).presence, ApplicationController].compact.join('::') %>
2
2
  before_action :authenticate_user! # Devise enforce user is present
3
3
 
4
4
  <% if defined?(EffectiveResources) -%>
@@ -10,7 +10,7 @@ class <%= resource.namespaced_class_name %>Controller < <%= [resource.namespace.
10
10
  @page_title = '<%= resource.plural_name.titleize %>'
11
11
  authorize! :index, <%= resource.class_name %>
12
12
 
13
- @datatable = <%= resource.namespaced_class_name %>Datatable.new(params[:scopes])
13
+ @datatable = <%= resource.namespaced_class_name.pluralize %>Datatable.new(params[:scopes])
14
14
  end
15
15
 
16
16
  <% end -%>
@@ -127,7 +127,7 @@ class <%= resource.namespaced_class_name %>Controller < <%= [resource.namespace.
127
127
  )
128
128
  end
129
129
 
130
- <% if defined?(EffectiveResources) -%>
130
+ <% if !defined?(EffectiveResources) -%>
131
131
  def redirect_path
132
132
  case params[:commit].to_s
133
133
  when 'Save'
@@ -1,4 +1,4 @@
1
- class <%= resource.namespaced_class_name %>Datatable < Effective::Datatable
1
+ class <%= resource.namespaced_class_name.pluralize %>Datatable < Effective::Datatable
2
2
  <% if resource.scopes.present? -%>
3
3
  scopes do<% ([:all] + resource.scopes).uniq.each_with_index do |scope, index| %>
4
4
  scope :<%= scope -%><%= ', default: true' if index == 0 -%>
@@ -17,9 +17,9 @@ class <%= resource.namespaced_class_name %>Datatable < Effective::Datatable
17
17
  table_column :<%= attribute.name %>
18
18
  <% end -%>
19
19
 
20
- <% if (invoked_actions - crud_actions).present? -%>
20
+ <% if non_crud_actions.present? -%>
21
21
  actions_column do |<%= singular_name %>|
22
- <% (invoked_actions - crud_actions).each_with_index do |action, index| -%>
22
+ <% non_crud_actions.each_with_index do |action, index| -%>
23
23
  glyphicon_to('ok', <%= resource.action_path_helper(action, at: false) %>, title: '<%= action.titleize %>')<%= ' +' if (index+1) < (invoked_actions - crud_actions).length %>
24
24
  <% end -%>
25
25
  end
@@ -1,12 +1,12 @@
1
1
  %h1= @page_title
2
2
 
3
- <% if (invoked_actions - crud_actions).present? -%>
3
+ <% if non_crud_actions.present? -%>
4
4
  %p.text-right
5
- <% (invoked_actions - crud_actions).each do |action| -%>
5
+ <% non_crud_actions.each do |action| -%>
6
6
  - if can?(:<%= action.to_s %>, @<%= resource.name %>)
7
7
  = link_to '<%= action.titleize %>', <%= resource.action_path_helper(action, at: true) %>, class: 'btn btn-primary',
8
8
  data: { confirm: 'Really <%= action.to_s.titleize %>?' }
9
9
 
10
10
  <% end -%>
11
11
  <% end -%>
12
- = render 'form', <%= singular_name %>: @<%= singular_name %>
12
+ = render 'form', <%= resource.name %>: @<%= resource.name %>
@@ -1,8 +1,8 @@
1
1
  %h1= @page_title
2
2
 
3
- <% if (invoked_actions - crud_actions).present? -%>
3
+ <% if non_crud_actions.present? -%>
4
4
  %p.text-right
5
- <% (invoked_actions - crud_actions).each do |action| -%>
5
+ <% non_crud_actions.each do |action| -%>
6
6
  - if can?(:<%= action.to_s %>, @<%= resource.name %>)
7
7
  = link_to '<%= action.titleize %>', <%= resource.action_path_helper(action, at: true) %>, class: 'btn btn-default',
8
8
  data: { confirm: 'Really <%= action.to_s.titleize %>?' }
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: effective_developer
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: '0.2'
5
5
  platform: ruby
6
6
  authors:
7
7
  - Code and Effect
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-01-24 00:00:00.000000000 Z
11
+ date: 2017-01-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails