ixtlan-generators 0.1.1 → 0.1.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.
Files changed (41) hide show
  1. data/README.md +64 -0
  2. data/features/generators.feature +6 -0
  3. data/features/step_definitions/simple_steps.rb +1 -0
  4. data/lib/generators/ixtlan/base.rb~ +44 -0
  5. data/lib/generators/ixtlan/base_configuration.rb~ +40 -0
  6. data/lib/generators/ixtlan/configuration_base.rb~ +44 -0
  7. data/lib/generators/ixtlan/configuration_model/configuration_generator.rb~ +40 -0
  8. data/lib/generators/ixtlan/configuration_model/configuration_model_generator.rb~ +10 -0
  9. data/lib/generators/ixtlan/configuration_model/setup_controller.rb~ +5 -0
  10. data/lib/generators/ixtlan/configuration_model/setup_generator.rb~ +15 -0
  11. data/lib/generators/ixtlan/configuration_scaffold/configuration_generator.rb~ +40 -0
  12. data/lib/generators/ixtlan/configuration_scaffold/configuration_model_generator.rb~ +40 -0
  13. data/lib/generators/ixtlan/configuration_scaffold/configuration_scaffold_generator.rb~ +13 -0
  14. data/lib/generators/ixtlan/configuration_scaffold/setup_controller.rb~ +5 -0
  15. data/lib/generators/ixtlan/configuration_scaffold/setup_generator.rb~ +15 -0
  16. data/lib/generators/ixtlan/setup/setup_controller.rb~ +5 -0
  17. data/lib/generators/ixtlan/setup/setup_generator.rb~ +25 -0
  18. data/lib/generators/ixtlan/setup/templates/error.html.erb~ +1 -0
  19. data/lib/generators/ixtlan/setup/templates/error_with_session.html.erb~ +1 -0
  20. data/lib/generators/ixtlan/setup/templates/initializer.rb~ +54 -0
  21. data/lib/generators/model/model_generator.rb~ +12 -0
  22. data/lib/generators/rails/active_record/active_record_generator.rb +42 -34
  23. data/lib/generators/rails/active_record/active_record_generator.rb~ +43 -0
  24. data/lib/generators/rails/active_record/active_record_generatorr.rb~ +51 -0
  25. data/lib/generators/rails/active_record/model/model.rb +32 -1
  26. data/lib/generators/rails/active_record/model/model.rb~ +16 -0
  27. data/lib/generators/rails/erb/erb_generator.rb~ +32 -0
  28. data/lib/generators/rails/erb/scaffold/_form.html.erb~ +25 -0
  29. data/lib/generators/rails/erb/scaffold/index.html.erb~ +47 -0
  30. data/lib/generators/rails/erb_generator.rb~ +32 -0
  31. data/lib/generators/rails/scaffold_controller/scaffold_controller/controller.rb +47 -35
  32. data/lib/generators/rails/scaffold_controller/scaffold_controller/controller.rb~ +148 -0
  33. data/lib/generators/rails/scaffold_controller/scaffold_controller/singleton_controller.rb +43 -7
  34. data/lib/generators/rails/scaffold_controller/scaffold_controller/singleton_controller.rb~ +60 -0
  35. data/lib/generators/scaffold/scaffold_generator.rb~ +31 -0
  36. data/lib/generators/scaffold_controller/scaffold_controller_generator.rb +3 -0
  37. data/lib/generators/scaffold_controller/scaffold_controller_generator.rb-~ +48 -0
  38. data/lib/generators/scaffold_controller/scaffold_controller_generator.rb~ +46 -0
  39. data/lib/ixtlan/railtie.rb~ +81 -0
  40. data/lib/ixtlan-generators.rb~ +3 -0
  41. metadata +43 -10
@@ -0,0 +1,51 @@
1
+ p defined?(ActiveRecord)
2
+ p !defined?(Rake)
3
+ if defined?(ActiveRecord) && !defined?(Rake) && false
4
+ require 'rails/generators/active_record/model/model_generator'
5
+
6
+ module ActiveRecord
7
+ module Generators
8
+ class ModelGenerator < Base
9
+ include ::Ixtlan::Generators::Singleton
10
+
11
+ argument :attributes, :type => :array, :default => [], :banner => "field:type field:type"
12
+
13
+ check_class_collision
14
+
15
+ class_option :migration, :type => :boolean
16
+ class_option :timestamps, :type => :boolean
17
+ class_option :parent, :type => :string, :desc => "The parent class for the generated model"
18
+
19
+ def create_migration_file
20
+ return unless options[:migration] && options[:parent].nil?
21
+ migration_template "migration.rb", "db/migrate/create_#{table_name}.rb"
22
+ end
23
+
24
+ def create_model_file
25
+ template 'model.rb', File.join('app/models', class_path, "#{file_name}.rb")
26
+ end
27
+
28
+ def create_module_file
29
+ return if class_path.empty?
30
+ template 'module.rb', File.join('app/models', "#{class_path.join('/')}.rb") if behavior == :invoke
31
+ end
32
+
33
+ hook_for :test_framework
34
+
35
+ protected
36
+
37
+ def parent_class_name
38
+ options[:parent] || "ActiveRecord::Base"
39
+ end
40
+
41
+ end
42
+ end
43
+ end
44
+
45
+ else
46
+ module Ixtlan
47
+ module Dummy
48
+ end
49
+ end
50
+ puts "asd"
51
+ end
@@ -6,11 +6,42 @@ class <%= class_name %> < <%= parent_class_name.classify %>
6
6
  <%= attribute.type %> :<%= attribute.name %>
7
7
  <% end -%>
8
8
  <% if options[:modified_by] -%>
9
- belongs_to :modified_by, :class_name => "<%= options[:user_model] %>"
9
+ belongs_to :modified_by, :class_name => "User"
10
+ validates :modified_by_id, :presence => true
10
11
  <% end -%>
11
12
  <% if options[:singleton] -%>
12
13
  def self.instance
13
14
  self.first || self.new
14
15
  end
15
16
  <% end -%>
17
+ <% unless options[:singleton] -%>
18
+
19
+ def self.options
20
+ {
21
+ <% except = []
22
+ except = [:created_at, :updated_at] if options[:timestamps]
23
+ except << :modified_by_id if options[:modified_by] -%>
24
+ :except => <%= except.inspect %>
25
+ }
26
+ end
27
+ <% end -%>
28
+
29
+ def self.single_options
30
+ {
31
+ <% if options[:modified_by] -%>
32
+ :except => [:modified_by_id],
33
+ <% end -%>
34
+ <% if options[:modified_by] || attributes.select {|attr| attr.reference? }.size > 0 -%>
35
+ :include => {
36
+ <% if options[:modified_by] -%>
37
+ :modified_by => {
38
+ :only => [:id, :login, :name]
39
+ }<% end -%><% attributes.select {|attr| attr.reference? }.each do |attribute| -%>,
40
+ :<%= attribute.name %> => {
41
+ :except => [:created_at, :updated_at, :modified_by_id]
42
+ }<% end %>
43
+ }
44
+ <% end -%>
45
+ }
46
+ end
16
47
  end
@@ -0,0 +1,16 @@
1
+ class <%= class_name %> < <%= parent_class_name.classify %>
2
+ <% attributes.select {|attr| attr.reference? }.each do |attribute| -%>
3
+ belongs_to :<%= attribute.name %>
4
+ <% end -%>
5
+ <% attributes.select {|attr| [:has_one, :has_many].include?(attr.type) }.each do |attribute| -%>
6
+ <%= attribute.type %> :<%= attribute.name %>
7
+ <% end -%>
8
+ <% if options[:modified_by] -%>
9
+ belongs_to :modified_by, :class_name => "<%= options[:user_model] %>"
10
+ <% end -%>
11
+ <% if options[:singleton] -%>
12
+ def self.instance
13
+ self.first || self.new
14
+ end
15
+ <% end -%>
16
+ end
@@ -0,0 +1,32 @@
1
+ require 'rails/generators/erb'
2
+ require 'rails/generators/resource_helpers'
3
+
4
+ module Erb
5
+ module Generators
6
+ class ErbGenerator < Base
7
+ include Rails::Generators::ResourceHelpers
8
+
9
+ class_option :optimistic, :type => :boolean, :default => false
10
+ class_option :timestamps, :type => :boolean, :default => true
11
+
12
+ argument :attributes, :type => :array, :default => [], :banner => "field:type field:type"
13
+
14
+ def create_root_folder
15
+ empty_directory File.join("app/views", controller_file_path)
16
+ end
17
+
18
+ def copy_view_files
19
+ available_views.each do |view|
20
+ filename = filename_with_extensions(view)
21
+ template filename, File.join("app/views", controller_file_path, filename)
22
+ end
23
+ end
24
+
25
+ protected
26
+
27
+ def available_views
28
+ %w(index edit show new _form)
29
+ end
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,25 @@
1
+ <%%= form_for(@<%= singular_table_name %><% if options[:singleton] -%>
2
+ , :url => <%= singular_table_name %>_path, :html => { :method => :put, :class => "edit_<%= singular_table_name %>", :id => "edit_<%= singular_table_name %>"}<% end -%>
3
+ ) do |f| %>
4
+ <%% if @<%= singular_table_name %>.errors.any? %>
5
+ <div id="error_explanation">
6
+ <h2><%%= pluralize(@<%= singular_table_name %>.errors.count, "error") %> prohibited this <%= singular_table_name %> from being saved:</h2>
7
+
8
+ <ul>
9
+ <%% @<%= singular_table_name %>.errors.full_messages.each do |msg| %>
10
+ <li><%%= msg %></li>
11
+ <%% end %>
12
+ </ul>
13
+ </div>
14
+ <%% end %>
15
+
16
+ <% for attribute in attributes -%>
17
+ <div class="field"><!-- begin - <%= attribute.name %> -->
18
+ <%%= f.label :<%= attribute.name %> %><br />
19
+ <%%= f.<%= attribute.field_type %> :<%= attribute.name %> %>
20
+ </div><!-- end - <%= attribute.name %> -->
21
+ <% end -%>
22
+ <div class="actions">
23
+ <%%= f.submit %>
24
+ </div>
25
+ <%% end %>
@@ -0,0 +1,47 @@
1
+ <h1>Listing <%= plural_table_name %></h1>
2
+
3
+ <table>
4
+ <tr>
5
+ <% for attribute in attributes -%>
6
+ <th><%= attribute.human_name %></th>
7
+ <% end -%>
8
+ <th></th>
9
+ <th></th>
10
+ <th></th>
11
+ </tr>
12
+
13
+ <%% @<%= plural_table_name %>.each do |<%= singular_table_name %>| %>
14
+ <tr>
15
+ <% for attribute in attributes -%>
16
+ <td><%%= <%= singular_table_name %>.<%= attribute.name %> %></td>
17
+ <% end -%>
18
+ <% if defined? ::Ixtlan::Guard -%>
19
+ <%% if allowed?(:<%= table_name %>, :show) %>
20
+ <% end -%>
21
+ <td><%%= link_to 'Show', <%= singular_table_name %> %></td>
22
+ <% if defined? ::Ixtlan::Guard -%>
23
+ <%% end %>
24
+ <%% if allowed?(:<%= table_name %>, :update) %>
25
+ <% end -%>
26
+ <td><%%= link_to 'Edit', edit_<%= singular_table_name %>_path(<%= singular_table_name %>) %></td>
27
+ <% if defined? ::Ixtlan::Guard -%>
28
+ <%% end %>
29
+ <%% if allowed?(:<%= table_name %>, :destroy) %>
30
+ <% end -%>
31
+ <td><%%= link_to 'Destroy', <%= singular_table_name %>, :confirm => 'Are you sure?', :method => :delete %></td>
32
+ <% if defined? ::Ixtlan::Guard -%>
33
+ <%% end %>
34
+ <% end -%>
35
+ </tr>
36
+ <%% end %>
37
+ </table>
38
+
39
+ <br />
40
+
41
+ <% if defined? ::Ixtlan::Guard -%>
42
+ <%% if allowed?(:<%= table_name %>, :create) %>
43
+ <% end -%>
44
+ <%%= link_to 'New <%= human_name %>', new_<%= singular_table_name %>_path %>
45
+ <% if defined? ::Ixtlan::Guard -%>
46
+ <%% end %>
47
+ <% end -%>
@@ -0,0 +1,32 @@
1
+ require 'rails/generators/erb'
2
+ require 'rails/generators/resource_helpers'
3
+
4
+ module Erb
5
+ module Generators
6
+ class ScaffoldGenerator < Base
7
+ include Rails::Generators::ResourceHelpers
8
+
9
+ class_option :optimistic, :type => :boolean, :default => false
10
+ class_option :timestamps, :type => :boolean, :default => true
11
+
12
+ argument :attributes, :type => :array, :default => [], :banner => "field:type field:type"
13
+
14
+ def create_root_folder
15
+ empty_directory File.join("app/views", controller_file_path)
16
+ end
17
+
18
+ def copy_view_files
19
+ available_views.each do |view|
20
+ filename = filename_with_extensions(view)
21
+ template filename, File.join("app/views", controller_file_path, filename)
22
+ end
23
+ end
24
+
25
+ protected
26
+
27
+ def available_views
28
+ %w(index edit show new _form)
29
+ end
30
+ end
31
+ end
32
+ end
@@ -1,4 +1,35 @@
1
1
  class <%= controller_class_name %>Controller < ApplicationController
2
+
3
+ before_filter :cleanup_params
4
+
5
+ private
6
+
7
+ def cleanup_params
8
+ # compensate the shortcoming of the incoming json/xml
9
+ model = params[:<%= singular_table_name %>] || []
10
+ model.delete :id
11
+ <% if options[:timestamps] -%>
12
+ model.delete :created_at
13
+ <% if options[:optimistic] -%>params[:updated_at] = <% end -%>model.delete :updated_at
14
+ <% if options[:optimistic] -%>
15
+ end
16
+
17
+ def stale?
18
+ if @<%= singular_table_name %>.nil?
19
+ @<%= singular_table_name %> = <%= orm_class.find(class_name, "params[:id]") %>
20
+ respond_to do |format|
21
+ format.html { render :action => "edit" }
22
+ format.xml { render :xml => nil, :status => :conflict }
23
+ format.json { render :json => nil, :status => :conflict }
24
+ end
25
+ true
26
+ end
27
+ <% end -%>
28
+ <% end -%>
29
+ end
30
+
31
+ public
32
+
2
33
  # GET <%= route_url %>
3
34
  # GET <%= route_url %>.xml
4
35
  # GET <%= route_url %>.json
@@ -7,8 +38,8 @@ class <%= controller_class_name %>Controller < ApplicationController
7
38
 
8
39
  respond_to do |format|
9
40
  format.html # index.html.erb
10
- format.xml { render :xml => @<%= plural_table_name %> }
11
- format.json { render :json => @<%= plural_table_name %> }
41
+ format.xml { render :xml => @<%= plural_table_name %>.to_xml(<%= class_name %>.options) }
42
+ format.json { render :json => @<%= plural_table_name %>.to_json(<%= class_name %>.options) }
12
43
  end
13
44
  end
14
45
 
@@ -20,8 +51,8 @@ class <%= controller_class_name %>Controller < ApplicationController
20
51
 
21
52
  respond_to do |format|
22
53
  format.html # show.html.erb
23
- format.xml { render :xml => @<%= singular_table_name %> }
24
- format.json { render :json => @<%= singular_table_name %> }
54
+ format.xml { render :xml => @<%= singular_table_name %>.to_xml(<%= class_name %>.single_options) }
55
+ format.json { render :json => @<%= singular_table_name %>.to_json(<%= class_name %>.single_options) }
25
56
  end
26
57
  end
27
58
 
@@ -41,14 +72,14 @@ class <%= controller_class_name %>Controller < ApplicationController
41
72
  def create
42
73
  @<%= singular_table_name %> = <%= orm_class.build(class_name, "params[:#{singular_table_name}]") %>
43
74
  <% if options[:modified_by] -%>
44
- @<%= singular_table_name %>.current_user = current_user
75
+ @<%= singular_table_name %>.modified_by = current_user
45
76
  <% end -%>
46
77
 
47
78
  respond_to do |format|
48
79
  if @<%= orm_instance.save %>
49
80
  format.html { redirect_to(@<%= singular_table_name %>, :notice => '<%= human_name %> was successfully created.') }
50
- format.xml { render :xml => @<%= singular_table_name %>, :status => :created, :location => @<%= singular_table_name %> }
51
- format.json { render :json => @<%= singular_table_name %>, :status => :created, :location => @<%= singular_table_name %> }
81
+ format.xml { render :xml => @<%= singular_table_name %>.to_xml(<%= class_name %>.single_options), :status => :created, :location => @<%= singular_table_name %> }
82
+ format.json { render :json => @<%= singular_table_name %>.to_json(<%= class_name %>.single_options), :status => :created, :location => @<%= singular_table_name %> }
52
83
  else
53
84
  format.html { render :action => "new" }
54
85
  format.xml { render :xml => @<%= orm_instance.errors %>, :status => :unprocessable_entity }
@@ -62,31 +93,23 @@ class <%= controller_class_name %>Controller < ApplicationController
62
93
  # PUT <%= route_url %>/1.json
63
94
  def update
64
95
  <% if options[:optimistic] && options[:timestamps] -%>
65
- @<%= singular_table_name %> = <%= orm_class.find(class_name, "(params[:#{singular_table_name}]||[]).delete(:updated_at), params[:id]").sub(/\.(get|find)/, '.optimistic_\1') %>
96
+ @<%= singular_table_name %> = <%= orm_class.find(class_name, "params[:updated_at], params[:id]").sub(/\.(get|find)/, '.optimistic_\1') %>
66
97
 
67
- if @<%= singular_table_name %>.nil?
68
- @<%= singular_table_name %> = <%= orm_class.find(class_name, "params[:id]") %>
69
- respond_to do |format|
70
- format.html { render :action => "edit" }
71
- format.xml { render :xml => nil, :status => :conflict }
72
- format.json { render :json => nil, :status => :conflict }
73
- end
74
- return
75
- end
98
+ return if stale?
76
99
  <% else -%>
77
100
  @<%= singular_table_name %> = <%= orm_class.find(class_name, "params[:id]") %>
78
- (params[:<%= singular_table_name %>]||[]).delete(:updated_at)
79
101
  <% end -%>
80
- (params[:<%= singular_table_name %>]||[]).delete(:id)
81
102
  <% if options[:modified_by] -%>
82
- @<%= singular_table_name %>.current_user = current_user
103
+
104
+ params[:<%= singular_table_name %>] ||= {}
105
+ params[:<%= singular_table_name %>][:modified_by] = current_user
83
106
  <% end -%>
84
107
 
85
108
  respond_to do |format|
86
109
  if @<%= orm_instance.update_attributes("params[:#{singular_table_name}]") %>
87
110
  format.html { redirect_to(@<%= singular_table_name %>, :notice => '<%= human_name %> was successfully updated.') }
88
- format.xml { render :xml => @<%= singular_table_name %> }
89
- format.json { render :json => @<%= singular_table_name %> }
111
+ format.xml { render :xml => @<%= singular_table_name %>.to_xml(<%= class_name %>.single_options) }
112
+ format.json { render :json => @<%= singular_table_name %>.to_json(<%= class_name %>.single_options) }
90
113
  else
91
114
  format.html { render :action => "edit" }
92
115
  format.xml { render :xml => @<%= orm_instance.errors %>, :status => :unprocessable_entity }
@@ -100,23 +123,12 @@ class <%= controller_class_name %>Controller < ApplicationController
100
123
  # DELETE <%= route_url %>/1.json
101
124
  def destroy
102
125
  <% if options[:optimistic] && options[:timestamps] -%>
103
- @<%= singular_table_name %> = <%= orm_class.find(class_name, "(params[:#{singular_table_name}]||[]).delete(:updated_at), params[:id]").sub(/\.(get|find)/, '.optimistic_\1') %>
126
+ @<%= singular_table_name %> = <%= orm_class.find(class_name, "params[:updated_at], params[:id]").sub(/\.(get|find)/, '.optimistic_\1') %>
104
127
 
105
- if @<%= singular_table_name %>.nil?
106
- @<%= singular_table_name %> = <%= orm_class.find(class_name, "params[:id]") %>
107
- respond_to do |format|
108
- format.html { render :action => "edit" }
109
- format.xml { render :xml => nil, :status => :conflict }
110
- format.json { render :json => nil, :status => :conflict }
111
- end
112
- return
113
- end
128
+ return if stale?
114
129
  <% else -%>
115
130
  @<%= singular_table_name %> = <%= orm_class.find(class_name, "params[:id]") %>
116
131
  <% end -%>
117
- <% if options[:modified_by] -%>
118
- @<%= singular_table_name %>.current_user = current_user
119
- <% end -%>
120
132
 
121
133
  @<%= orm_instance.destroy %>
122
134
 
@@ -0,0 +1,148 @@
1
+ <% field_names = attributes.select {|a| a.type == :belongs_to }.collect{ |a| a.name } -%>
2
+ <% fields = ":" + field_names.join(", :") -%>
3
+ class <%= controller_class_name %>Controller < ApplicationController
4
+
5
+ before_filter :cleanup_params
6
+
7
+ private
8
+
9
+ def cleanup_params
10
+ # compensate the shortcoming of the incoming json/xml
11
+ model = params[:<%= singular_table_name %>] || []
12
+ model.delete :id
13
+ <% if options[:timestamps] -%>
14
+ model.delete :created_at
15
+ <% unless options[:optmistic] -%>
16
+ model.delete :updated_at
17
+ <% end -%>
18
+ <% end -%>
19
+ end
20
+
21
+ public
22
+
23
+ # GET <%= route_url %>
24
+ # GET <%= route_url %>.xml
25
+ # GET <%= route_url %>.json
26
+ def index
27
+ @<%= plural_table_name %> = <%= orm_class.all(class_name) %>
28
+
29
+ respond_to do |format|
30
+ format.html # index.html.erb
31
+ format.xml { render :xml => @<%= plural_table_name %> }
32
+ format.json { render :json => @<%= plural_table_name %> }
33
+ end
34
+ end
35
+
36
+ # GET <%= route_url %>/1
37
+ # GET <%= route_url %>/1.xml
38
+ # GET <%= route_url %>/1.json
39
+ def show
40
+ @<%= singular_table_name %> = <%= orm_class.find(class_name, "params[:id]") %>
41
+
42
+ respond_to do |format|
43
+ format.html # show.html.erb
44
+ format.xml { render :xml => @<%= singular_table_name %> }
45
+ format.json { render :json => @<%= singular_table_name %><% if fields -%>.to_json(:methods => [<%= fields %>])<% end -%> }
46
+ end
47
+ end
48
+
49
+ # GET <%= route_url %>/new
50
+ def new
51
+ @<%= singular_table_name %> = <%= orm_class.build(class_name) %>
52
+ end
53
+
54
+ # GET <%= route_url %>/1/edit
55
+ def edit
56
+ @<%= singular_table_name %> = <%= orm_class.find(class_name, "params[:id]") %>
57
+ end
58
+
59
+ # POST <%= route_url %>
60
+ # POST <%= route_url %>.xml
61
+ # POST <%= route_url %>.json
62
+ def create
63
+ @<%= singular_table_name %> = <%= orm_class.build(class_name, "params[:#{singular_table_name}]") %>
64
+ <% if options[:modified_by] -%>
65
+ @<%= singular_table_name %>.current_user = current_user
66
+ <% end -%>
67
+
68
+ respond_to do |format|
69
+ if @<%= orm_instance.save %>
70
+ format.html { redirect_to(@<%= singular_table_name %>, :notice => '<%= human_name %> was successfully created.') }
71
+ format.xml { render :xml => @<%= singular_table_name %>, :status => :created, :location => @<%= singular_table_name %> }
72
+ format.json { render :json => @<%= singular_table_name %><% if fields -%>.to_json(:methods => [<%= fields %>])<% end -%>, :status => :created, :location => @<%= singular_table_name %> }
73
+ else
74
+ format.html { render :action => "new" }
75
+ format.xml { render :xml => @<%= orm_instance.errors %>, :status => :unprocessable_entity }
76
+ format.json { render :json => @<%= orm_instance.errors %>, :status => :unprocessable_entity }
77
+ end
78
+ end
79
+ end
80
+
81
+ # PUT <%= route_url %>/1
82
+ # PUT <%= route_url %>/1.xml
83
+ # PUT <%= route_url %>/1.json
84
+ def update
85
+ <% if options[:optimistic] && options[:timestamps] -%>
86
+ @<%= singular_table_name %> = <%= orm_class.find(class_name, "(params[:#{singular_table_name}]||[]).delete(:updated_at), params[:id]").sub(/\.(get|find)/, '.optimistic_\1') %>
87
+
88
+ if @<%= singular_table_name %>.nil?
89
+ @<%= singular_table_name %> = <%= orm_class.find(class_name, "params[:id]") %>
90
+ respond_to do |format|
91
+ format.html { render :action => "edit" }
92
+ format.xml { render :xml => nil, :status => :conflict }
93
+ format.json { render :json => nil, :status => :conflict }
94
+ end
95
+ return
96
+ end
97
+ <% else -%>
98
+ @<%= singular_table_name %> = <%= orm_class.find(class_name, "params[:id]") %>
99
+ <% end -%>
100
+ <% if options[:modified_by] -%>
101
+ @<%= singular_table_name %>.current_user = current_user
102
+ <% end -%>
103
+
104
+ respond_to do |format|
105
+ if @<%= orm_instance.update_attributes("params[:#{singular_table_name}]") %>
106
+ format.html { redirect_to(@<%= singular_table_name %>, :notice => '<%= human_name %> was successfully updated.') }
107
+ format.xml { render :xml => @<%= singular_table_name %> }
108
+ format.json { render :json => @<%= singular_table_name %><% if fields -%>.to_json(:methods => [<%= fields %>])<% end -%> }
109
+ else
110
+ format.html { render :action => "edit" }
111
+ format.xml { render :xml => @<%= orm_instance.errors %>, :status => :unprocessable_entity }
112
+ format.json { render :json => @<%= orm_instance.errors %>, :status => :unprocessable_entity }
113
+ end
114
+ end
115
+ end
116
+
117
+ # DELETE <%= route_url %>/1
118
+ # DELETE <%= route_url %>/1.xml
119
+ # DELETE <%= route_url %>/1.json
120
+ def destroy
121
+ <% if options[:optimistic] && options[:timestamps] -%>
122
+ @<%= singular_table_name %> = <%= orm_class.find(class_name, "(params[:#{singular_table_name}]||[]).delete(:updated_at), params[:id]").sub(/\.(get|find)/, '.optimistic_\1') %>
123
+
124
+ if @<%= singular_table_name %>.nil?
125
+ @<%= singular_table_name %> = <%= orm_class.find(class_name, "params[:id]") %>
126
+ respond_to do |format|
127
+ format.html { render :action => "edit" }
128
+ format.xml { render :xml => nil, :status => :conflict }
129
+ format.json { render :json => nil, :status => :conflict }
130
+ end
131
+ return
132
+ end
133
+ <% else -%>
134
+ @<%= singular_table_name %> = <%= orm_class.find(class_name, "params[:id]") %>
135
+ <% end -%>
136
+ <% if options[:modified_by] -%>
137
+ @<%= singular_table_name %>.current_user = current_user
138
+ <% end -%>
139
+
140
+ @<%= orm_instance.destroy %>
141
+
142
+ respond_to do |format|
143
+ format.html { redirect_to(<%= index_helper %>_url) }
144
+ format.xml { head :ok }
145
+ format.json { head :ok }
146
+ end
147
+ end
148
+ end
@@ -1,5 +1,34 @@
1
1
  class <%= controller_class_name %>Controller < ApplicationController
2
2
 
3
+ before_filter :cleanup_params
4
+
5
+ private
6
+
7
+ def cleanup_params
8
+ # compensate the shortcoming of the incoming json/xml
9
+ model = params[:<%= singular_table_name %>] || []
10
+ <% if options[:timestamps] -%>
11
+ model.delete :created_at
12
+ <% if options[:optimistic] -%>params[:updated_at] = <% end -%>model.delete :updated_at
13
+ <% if options[:optimistic] -%>
14
+ end
15
+
16
+ def stale?
17
+ if @<%= singular_table_name %>.nil?
18
+ @<%= singular_table_name %> = <%= orm_class.find(class_name, "params[:id]") %>
19
+ respond_to do |format|
20
+ format.html { render :action => "edit" }
21
+ format.xml { render :xml => nil, :status => :conflict }
22
+ format.json { render :json => nil, :status => :conflict }
23
+ end
24
+ true
25
+ end
26
+ <% end -%>
27
+ <% end -%>
28
+ end
29
+
30
+ public
31
+
3
32
  # GET <%= route_url %>
4
33
  # GET <%= route_url %>.xml
5
34
  # GET <%= route_url %>.json
@@ -8,8 +37,8 @@ class <%= controller_class_name %>Controller < ApplicationController
8
37
 
9
38
  respond_to do |format|
10
39
  format.html # show.html.erb
11
- format.xml { render :xml => @<%= singular_table_name %> }
12
- format.json { render :json => @<%= singular_table_name %> }
40
+ format.xml { render :xml => @<%= singular_table_name %>.to_xml(<%= class_name %>.single_options) }
41
+ format.json { render :json => @<%= singular_table_name %>.to_json(<%= class_name %>.single_options) }
13
42
  end
14
43
  end
15
44
 
@@ -22,17 +51,24 @@ class <%= controller_class_name %>Controller < ApplicationController
22
51
  # PUT <%= route_url %>.xml
23
52
  # PUT <%= route_url %>.json
24
53
  def update
54
+ <% if options[:optimistic] && options[:timestamps] -%>
55
+ @<%= singular_table_name %> = <%= orm_class.find(class_name, "params[:updated_at], #{class_name}.instance.id").sub(/\.(get|find)/, '.optimistic_\1') %>
56
+
57
+ return if stale?
58
+ <% else -%>
25
59
  @<%= singular_table_name %> = <%= class_name %>.instance
26
- <% orm_class.find(class_name)
27
- if options[:modified_by] -%>
28
- @<%= singular_table_name %>.current_user = current_user
60
+ <% end -%>
61
+ <% if options[:modified_by] -%>
62
+
63
+ params[:<%= singular_table_name %>] ||= {}
64
+ params[:<%= singular_table_name %>][:modified_by] = current_user
29
65
  <% end -%>
30
66
 
31
67
  respond_to do |format|
32
68
  if @<%= orm_instance.update_attributes("params[:#{singular_table_name}]") %>
33
69
  format.html { redirect_to(<%= singular_table_name %>_path, :notice => '<%= human_name %> was successfully updated.') }
34
- format.xml { render :xml => @<%= singular_table_name %> }
35
- format.json { render :json => @<%= singular_table_name %> }
70
+ format.xml { render :xml => @<%= singular_table_name %>.to_xml(<%= class_name %>.single_options) }
71
+ format.json { render :json => @<%= singular_table_name %>.to_json(<%= class_name %>.single_options) }
36
72
  else
37
73
  format.html { render :action => "edit" }
38
74
  format.xml { render :xml => @<%= orm_instance.errors %>, :status => :unprocessable_entity }
@@ -0,0 +1,60 @@
1
+ class <%= controller_class_name %>Controller < ApplicationController
2
+
3
+ before_filter :cleanup_params
4
+
5
+ private
6
+
7
+ def cleanup_params
8
+ # compensate the shortcoming of the incoming json/xml
9
+ model = params[:<%= singular_table_name %>] || []
10
+ <% if options[:timestamps] -%>
11
+ model.delete :created_at
12
+ <% unless options[:optmistic] -%>
13
+ model.delete :updated_at
14
+ <% end -%>
15
+ <% end -%>
16
+ end
17
+
18
+ public
19
+
20
+ # GET <%= route_url %>
21
+ # GET <%= route_url %>.xml
22
+ # GET <%= route_url %>.json
23
+ def show
24
+ @<%= singular_table_name %> = <%= class_name %>.instance
25
+
26
+ respond_to do |format|
27
+ format.html # show.html.erb
28
+ format.xml { render :xml => @<%= singular_table_name %> }
29
+ format.json { render :json => @<%= singular_table_name %> }
30
+ end
31
+ end
32
+
33
+ # GET <%= route_url %>/edit
34
+ def edit
35
+ @<%= singular_table_name %> = <%= class_name %>.instance
36
+ end
37
+
38
+ # PUT <%= route_url %>
39
+ # PUT <%= route_url %>.xml
40
+ # PUT <%= route_url %>.json
41
+ def update
42
+ @<%= singular_table_name %> = <%= class_name %>.instance
43
+ <% orm_class.find(class_name)
44
+ if options[:modified_by] -%>
45
+ @<%= singular_table_name %>.current_user = current_user
46
+ <% end -%>
47
+
48
+ respond_to do |format|
49
+ if @<%= orm_instance.update_attributes("params[:#{singular_table_name}]") %>
50
+ format.html { redirect_to(<%= singular_table_name %>_path, :notice => '<%= human_name %> was successfully updated.') }
51
+ format.xml { render :xml => @<%= singular_table_name %> }
52
+ format.json { render :json => @<%= singular_table_name %> }
53
+ else
54
+ format.html { render :action => "edit" }
55
+ format.xml { render :xml => @<%= orm_instance.errors %>, :status => :unprocessable_entity }
56
+ format.json { render :json => @<%= orm_instance.errors %>, :status => :unprocessable_entity }
57
+ end
58
+ end
59
+ end
60
+ end