effective_developer 0.1.1 → 0.2

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.
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