effective_developer 0.0.9 → 0.0.10

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: 4dba9b31a7c6e5352ab958ac3a0f1927e5531013
4
- data.tar.gz: 4f0127dc920f97aaef72cdad34b09aadac2356fc
3
+ metadata.gz: 5c9d245ef9985403865d0ff86827272eddb8451a
4
+ data.tar.gz: 3da5a891679cd2c3abbc30a4feb9a9a3e68f080d
5
5
  SHA512:
6
- metadata.gz: 447cd0b8ed58bb3bdc2557454795d663ec5a491ee76e7bf967f1aaa7dd37e503ff4603be3217332a0bdf44c5bf018dc9e1e31cd52c94c3df2262b1845f73255c
7
- data.tar.gz: 3d7dd836c6fe704dc80082cb4479e56443f77417f17603443a2caec606e5ad20f02c7e9bf5449846f46e53bdfa86401566612bbb54328c51636e05b0ee128840
6
+ metadata.gz: 960474bc91e9b1ffcfed1daae6db4a2ff64fb54ded9e35574155e9c3e92ab22df7b6e6a8469d622410f71f9a385c102cbfa68d565f1531c57cd536d27df406c9
7
+ data.tar.gz: cd513a9ee141d261824b2cd536c230cc795f3286d4b1348484c3ed076acb130dd5f05e2bcaed3f9f9ddbd8f3341e57c24c922eb4338a93575c20442bc78661b5
@@ -149,7 +149,7 @@ module Effective
149
149
  retval
150
150
  end
151
151
 
152
- # Returns an array of indexes for each line where the passed block returnst rue
152
+ # Returns an array of indexes for each line where the passed block returns true
153
153
  def all(from: @from.last, to: @to.last, &block)
154
154
  retval = []
155
155
 
@@ -163,6 +163,21 @@ module Effective
163
163
  end
164
164
  alias_method :select, :all
165
165
 
166
+ # Yields each line to a block and returns an array of the results
167
+ def map(from: @from.last, to: @to.last, indexes: [], &block)
168
+ retval = []
169
+
170
+ each_with_depth do |line, depth, index|
171
+ next if index < (from || 0)
172
+ next unless indexes.blank? || indexes.include?(index)
173
+
174
+ retval << block.call(line, depth, index)
175
+ break if to == index
176
+ end
177
+
178
+ retval
179
+ end
180
+
166
181
  def depth_at(line_index)
167
182
  if filename.end_with?('.haml')
168
183
  return (lines[line_index].length - lines[line_index].lstrip.length) / indent.length
@@ -1,3 +1,3 @@
1
1
  module EffectiveDeveloper
2
- VERSION = '0.0.9'.freeze
2
+ VERSION = '0.0.10'.freeze
3
3
  end
@@ -13,7 +13,7 @@ module Effective
13
13
 
14
14
  source_root File.expand_path(('../' * 4) + 'lib/scaffolds', __FILE__)
15
15
 
16
- desc 'Creates an Effective::Datatable in your app/effective/datatables folder.'
16
+ desc 'Creates an Effective::Datatable in your app/datatables folder.'
17
17
 
18
18
  argument :attributes, type: :array, default: [], banner: 'field[:type] field[:type]'
19
19
 
@@ -30,7 +30,7 @@ module Effective
30
30
  end
31
31
 
32
32
  def create_datatable
33
- template 'datatables/datatable.rb', File.join('app/models/effective/datatables', namespace_path, "#{plural_name}.rb")
33
+ template 'datatables/datatable.rb', File.join('app/datatables', namespace_path, "#{plural_name}_datatable.rb")
34
34
  end
35
35
 
36
36
  end
@@ -36,7 +36,7 @@ module Effective
36
36
  invoked_attributes.present? ? (['--attributes'] + invoked_attributes) : []
37
37
  end
38
38
 
39
- def klass_attributes
39
+ def klass_attributes(verbose: true)
40
40
  klass = class_name.safe_constantize
41
41
  return [] unless klass
42
42
 
@@ -54,12 +54,19 @@ module Effective
54
54
  begin
55
55
  attributes = klass.new().attributes
56
56
  rescue => e
57
- puts "Unable to call #{class_name}.new().attributes. Continuing with empty attributes."
57
+ puts "Unable to call #{class_name}.new().attributes. Continuing with empty attributes." if verbose
58
58
  return []
59
59
  end
60
60
 
61
- (attributes.keys - [klass.primary_key, 'created_at', 'updated_at']).map do |attr|
62
- "#{attr}:#{klass.column_for_attribute(attr).type || 'string'}"
61
+ attribute_names = attributes.keys - [klass.primary_key, 'created_at', 'updated_at']
62
+ attribute_names -= ['site_id'] if klass.respond_to?(:is_site_specific)
63
+
64
+ attribute_names.map do |attr|
65
+ if klass.respond_to?(:column_for_attribute) # Rails 4+
66
+ "#{attr}:#{klass.column_for_attribute(attr).try(:type) || 'string'}"
67
+ else
68
+ "#{attr}:#{klass.columns_hash[attr].try(:type) || 'string'}"
69
+ end
63
70
  end
64
71
  end
65
72
 
@@ -94,11 +101,11 @@ module Effective
94
101
  end
95
102
 
96
103
  def index_path
97
- [namespace_path.underscore.presence, plural_name].compact.join('_') + '_path'
104
+ [namespace_path.underscore.presence, plural_name, 'path'].compact.join('_')
98
105
  end
99
106
 
100
107
  def new_path
101
- ['new', namespace_path.underscore.presence, singular_name].compact.join('_') + '_path'
108
+ ['new', namespace_path.underscore.presence, singular_name, 'path'].compact.join('_')
102
109
  end
103
110
 
104
111
  def edit_path
@@ -106,7 +113,7 @@ module Effective
106
113
  end
107
114
 
108
115
  def show_path
109
- [namespace_path.underscore.presence, singular_name].compact.join('_') + "_path(@#{singular_name})"
116
+ [namespace_path.underscore.presence, singular_name, 'path', "(@#{singular_name})"].compact.join('_')
110
117
  end
111
118
 
112
119
  end
@@ -12,7 +12,7 @@ module Effective
12
12
 
13
13
  desc 'Adds a menu link to an existing _navbar.html.haml'
14
14
 
15
- def invoke_ability
15
+ def invoke_menu
16
16
  say_status :invoke, :menu, :white
17
17
  end
18
18
 
@@ -1,6 +1,6 @@
1
1
  # rails generate effective:migration NAME [field[:type] field[:type]] [options]
2
2
 
3
- # TODO - read from model dsl
3
+ # TODO - add default options
4
4
 
5
5
  # Generates a create_* migration
6
6
  # rails generate effective:migration Thing
@@ -22,11 +22,56 @@ module Effective
22
22
  end
23
23
 
24
24
  def create_migration
25
- Rails::Generators.invoke('migration', ["create_#{plural_name}"] + invoked_attributes)
25
+ if invoked_attributes.present?
26
+ Rails::Generators.invoke('migration', ["create_#{plural_name}"] + (invoked_attributes | timestamps))
27
+ elsif klass_attributes(verbose: false).present?
28
+ raise 'klass_attributes already exist. We cant migrate (yet). Exiting.'
29
+ elsif written_attributes.present?
30
+ Rails::Generators.invoke('migration', ["create_#{plural_name}"] + (written_attributes | timestamps))
31
+ else
32
+ raise 'You need to specify some attributes or have a model file present'
33
+ end
26
34
  end
27
35
 
28
- def invoked_attributes
29
- super | ['created_at:datetime', 'updated_at:datetime']
36
+ protected
37
+
38
+ # Written attributes include all belong_tos, as well as
39
+ # any Attributes comments as per our custom 'Attributes' comment block contained in the model file
40
+
41
+ # Attributes
42
+ # name :string
43
+ # description :text
44
+ #
45
+ # another :string
46
+
47
+ def written_attributes
48
+ @written_attributes ||= (
49
+ attributes = []
50
+
51
+ Effective::CodeWriter.new(File.join('app/models', class_path, "#{file_name}.rb")) do |w|
52
+ # belong_tos
53
+ references = w.select { |line| line.start_with?('belongs_to '.freeze) }
54
+
55
+ if references.present?
56
+ attributes += w.map(indexes: references) { |line| [[line.scan(/belongs_to\s+:(\w+)/).flatten.first, 'references']] }
57
+ end
58
+
59
+ # Attributes
60
+ first = w.find { |line| line == '# Attributes' }
61
+ break unless first
62
+
63
+ last = w.find(from: first) { |line| line.start_with?('#') == false && line.length > 0 }
64
+ break unless last
65
+
66
+ attributes += w.map(from: first+1, to: last-1) { |line| line.scan(/^\W+(\w+)\W+:(\w+)/).presence }
67
+ end
68
+
69
+ attributes.flatten(1).compact.map { |attribute| attribute.join(':') }
70
+ )
71
+ end
72
+
73
+ def timestamps
74
+ ['created_at:datetime', 'updated_at:datetime']
30
75
  end
31
76
 
32
77
  end
@@ -13,10 +13,10 @@ module Effective
13
13
 
14
14
  source_root File.expand_path(('../' * 4) + 'lib/scaffolds', __FILE__)
15
15
 
16
- desc 'Creates an Effective Scaffold'
16
+ desc 'Creates an Effective Scaffold based on an existing model'
17
17
 
18
- argument :attributes, type: :array, default: [], banner: 'field[:type] field[:type]'
19
- class_option :actions, type: :array, default: ['crud'], desc: 'Included actions', banner: 'index show'
18
+ argument :actions, type: :array, default: ['crud'], banner: 'action action'
19
+ class_option :attributes, type: :array, default: [], desc: 'Included permitted params, otherwise read from model'
20
20
 
21
21
  def invoke_controller
22
22
  Rails::Generators.invoke('effective:controller', [name] + invoked_actions + invoked_attributes_args)
@@ -35,6 +35,10 @@ module Effective
35
35
  end
36
36
 
37
37
  def invoke_datatable
38
+ unless invoked_actions.include?('index')
39
+ say_status(:skipped, :datatable, :yellow) and return
40
+ end
41
+
38
42
  Rails::Generators.invoke('effective:datatable', [name] + invoked_attributes)
39
43
  end
40
44
 
@@ -43,6 +47,10 @@ module Effective
43
47
  end
44
48
 
45
49
  def invoke_form
50
+ unless invoked_actions.include?('new') || invoked_actions.include?('edit')
51
+ say_status(:skipped, :form, :yellow) and return
52
+ end
53
+
46
54
  Rails::Generators.invoke('effective:form', [name] + invoked_attributes)
47
55
  end
48
56
 
@@ -42,6 +42,10 @@ module Effective
42
42
  end
43
43
 
44
44
  def invoke_datatable
45
+ unless invoked_actions.include?('index')
46
+ say_status(:skipped, :datatable, :yellow) and return
47
+ end
48
+
45
49
  Rails::Generators.invoke('effective:datatable', [name] + invoked_attributes)
46
50
  end
47
51
 
@@ -50,6 +54,10 @@ module Effective
50
54
  end
51
55
 
52
56
  def invoke_form
57
+ unless invoked_actions.include?('new') || invoked_actions.include?('edit')
58
+ say_status(:skipped, :form, :yellow) and return
59
+ end
60
+
53
61
  Rails::Generators.invoke('effective:form', [name] + invoked_attributes)
54
62
  end
55
63
 
@@ -6,16 +6,20 @@ require_dependency '<%= namespaced_path %>/application_controller'
6
6
  class <%= namespaced_class_name %>Controller < <%= [namespace_path.classify.presence, ApplicationController].compact.join('::') %>
7
7
  before_action :authenticate_user! # Devise enforce user is present
8
8
 
9
- <% if actions.delete('index') -%>
9
+ <% if defined?(EffectiveResources) -%>
10
+ include Effective::CrudController
11
+
12
+ <% end -%>
13
+ <% if actions.delete('index') && !defined?(EffectiveResources) -%>
10
14
  def index
11
15
  @page_title = '<%= plural_name.titleize %>'
12
16
  authorize! :index, <%= class_name %>
13
17
 
14
- @datatable = Effective::Datatables::<%= namespaced_class_name %>.new(params[:scopes])
18
+ @datatable = <%= namespaced_class_name %>Datatable.new(params[:scopes])
15
19
  end
16
20
 
17
21
  <% end -%>
18
- <% if actions.delete('new') -%>
22
+ <% if actions.delete('new') && !defined?(EffectiveResources) -%>
19
23
  def new
20
24
  @<%= singular_name %> = <%= class_name %>.new
21
25
 
@@ -24,9 +28,9 @@ class <%= namespaced_class_name %>Controller < <%= [namespace_path.classify.pres
24
28
  end
25
29
 
26
30
  <% end -%>
27
- <% if actions.delete('create') -%>
31
+ <% if actions.delete('create') && !defined?(EffectiveResources) -%>
28
32
  def create
29
- @<%= singular_name %> = <%= class_name %>.new(permitted_params)
33
+ @<%= singular_name %> = <%= class_name %>.new(<%= singular_name %>_params)
30
34
 
31
35
  @page_title = 'New <%= human_name %>'
32
36
  authorize! :create, @<%= singular_name %>
@@ -41,7 +45,7 @@ class <%= namespaced_class_name %>Controller < <%= [namespace_path.classify.pres
41
45
  end
42
46
 
43
47
  <% end -%>
44
- <% if actions.delete('show') -%>
48
+ <% if actions.delete('show') && !defined?(EffectiveResources) -%>
45
49
  def show
46
50
  @<%= singular_name %> = <%= class_name %>.find(params[:id])
47
51
 
@@ -50,7 +54,7 @@ class <%= namespaced_class_name %>Controller < <%= [namespace_path.classify.pres
50
54
  end
51
55
 
52
56
  <% end -%>
53
- <% if actions.delete('edit') -%>
57
+ <% if actions.delete('edit') && !defined?(EffectiveResources) -%>
54
58
  def edit
55
59
  @<%= singular_name %> = <%= class_name %>.find(params[:id])
56
60
 
@@ -59,14 +63,14 @@ class <%= namespaced_class_name %>Controller < <%= [namespace_path.classify.pres
59
63
  end
60
64
 
61
65
  <% end -%>
62
- <% if actions.delete('update') -%>
66
+ <% if actions.delete('update') && !defined?(EffectiveResources) -%>
63
67
  def update
64
68
  @<%= singular_name %> = <%= class_name %>.find(params[:id])
65
69
 
66
70
  @page_title = "Edit #{@<%= singular_name %>}"
67
71
  authorize! :update, @<%= singular_name %>
68
72
 
69
- if @<%= singular_name %>.update_attributes(permitted_params)
73
+ if @<%= singular_name %>.update_attributes(<%= singular_name %>_params)
70
74
  flash[:success] = 'Successfully updated <%= singular_name %>'
71
75
  redirect_to(redirect_path)
72
76
  else
@@ -76,7 +80,7 @@ class <%= namespaced_class_name %>Controller < <%= [namespace_path.classify.pres
76
80
  end
77
81
 
78
82
  <% end -%>
79
- <% if actions.delete('destroy') -%>
83
+ <% if actions.delete('destroy') && !defined?(EffectiveResources) -%>
80
84
  def destroy
81
85
  @<%= singular_name %> = <%= class_name %>.find(params[:id])
82
86
  authorize! :destroy, @<%= singular_name %>
@@ -84,7 +88,7 @@ class <%= namespaced_class_name %>Controller < <%= [namespace_path.classify.pres
84
88
  if @<%= singular_name %>.destroy
85
89
  flash[:success] = 'Successfully deleted <%= singular_name %>'
86
90
  else
87
- flash.now[:danger] = "Unable to delete <%= singular_name %>: #{@<%= singular_name %>.errors.full_messages.to_sentence}"
91
+ flash[:danger] = "Unable to delete <%= singular_name %>: #{@<%= singular_name %>.errors.full_messages.to_sentence}"
88
92
  end
89
93
 
90
94
  redirect_to <%= index_path %>
@@ -115,9 +119,9 @@ class <%= namespaced_class_name %>Controller < <%= [namespace_path.classify.pres
115
119
  end
116
120
 
117
121
  <% end -%>
118
- private
122
+ protected
119
123
 
120
- def permitted_params
124
+ def <%= singular_name %>_params
121
125
  params.require(:<%= singular_name %>).permit(:id,
122
126
  <% attributes_names.each_slice(8).with_index do |slice, index| -%>
123
127
  <%= slice.map { |name| permitted_param_for(name) }.join(', ') %><%= ',' if ((index+1) * 8) < attributes.length %>
@@ -125,6 +129,7 @@ class <%= namespaced_class_name %>Controller < <%= [namespace_path.classify.pres
125
129
  )
126
130
  end
127
131
 
132
+ <% if !defined?(EffectiveResources) -%>
128
133
  def redirect_path
129
134
  case params[:commit].to_s
130
135
  when 'Save'
@@ -138,5 +143,6 @@ class <%= namespaced_class_name %>Controller < <%= [namespace_path.classify.pres
138
143
  end
139
144
  end
140
145
 
146
+ <% end -%>
141
147
  end
142
148
  <% end -%>
@@ -1,18 +1,14 @@
1
- module Effective
2
- module Datatables
3
- class <%= namespaced_class_name %> < Effective::Datatable
1
+ class <%= namespaced_class_name %>Datatable < Effective::Datatable
4
2
 
5
- datatable do<% attributes.each do |attribute| %>
6
- table_column :<%= attribute.name -%>
3
+ datatable do<% attributes.each do |attribute| %>
4
+ table_column :<%= attribute.name -%>
7
5
  <% end %>
8
6
 
9
- actions_column
10
- end
11
-
12
- def collection
13
- <%= class_name %>.all
14
- end
7
+ actions_column
8
+ end
15
9
 
16
- end
10
+ def collection
11
+ <%= class_name %>.all
17
12
  end
13
+
18
14
  end
@@ -3,7 +3,11 @@
3
3
  = f.input :<%= attribute.name %>
4
4
  <% end -%>
5
5
 
6
+ <% if defined?(EffectiveResources) -%>
7
+ = simple_form_submit(f)
8
+ <% else -%>
6
9
  %p.text-right
7
10
  = f.button :submit, 'Save', data: { disable_with: 'Saving...' }
8
11
  = f.button :submit, 'Save and Continue', data: { disable_with: 'Saving...' }
9
12
  = f.button :submit, 'Save and Add New', data: { disable_with: 'Saving...' }
13
+ <% end -%>
@@ -3,9 +3,11 @@ class <%= class_name %> < <%= parent_class_name.classify %>
3
3
  <% attributes.select(&:reference?).each do |attribute| -%>
4
4
  belongs_to :<%= attribute.name %><%= ', polymorphic: true' if attribute.polymorphic? %><%= ', required: true' if attribute.required? %>
5
5
  <% end -%>
6
+ <% if attributes.all? { |attribute| attribute.respond_to?(:token?) } -%>
6
7
  <% attributes.select(&:token?).each do |attribute| -%>
7
8
  has_secure_token<% if attribute.name != "token" %> :<%= attribute.name %><% end %>
8
9
  <% end -%>
10
+ <% end -%>
9
11
  <% if attributes.any?(&:password_digest?) -%>
10
12
  has_secure_password
11
13
  <% end -%>
@@ -1,3 +1,3 @@
1
1
  %h1= @page_title
2
2
 
3
- = render partial: 'form', locals: { <%= singular_name %>: @<%= singular_name %> }
3
+ = render 'form', <%= singular_name %>: @<%= singular_name %>
@@ -1,3 +1,3 @@
1
1
  %h1= @page_title
2
2
 
3
- = render partial: 'form', locals: { <%= singular_name %>: @<%= singular_name %> }
3
+ = render 'form', <%= singular_name %>: @<%= singular_name %>
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.0.9
4
+ version: 0.0.10
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: 2016-12-23 00:00:00.000000000 Z
11
+ date: 2017-01-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails