somatics3 0.0.10

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 (189) hide show
  1. data/.document +5 -0
  2. data/LICENSE +20 -0
  3. data/README.rdoc +91 -0
  4. data/Rakefile +72 -0
  5. data/VERSION +1 -0
  6. data/bin/somatics +23 -0
  7. data/bin/somatify +21 -0
  8. data/lib/generators/somatics.rb +37 -0
  9. data/lib/generators/somatics/associated/associated_generator.rb +184 -0
  10. data/lib/generators/somatics/associated/templates/migration.rb +11 -0
  11. data/lib/generators/somatics/attributes/attributes_generator.rb +115 -0
  12. data/lib/generators/somatics/attributes/templates/migration.rb +11 -0
  13. data/lib/generators/somatics/authenticated/authenticated_generator.rb +65 -0
  14. data/lib/generators/somatics/authenticated/templates/partial_form.html.erb +23 -0
  15. data/lib/generators/somatics/authenticated_controller/authenticated_controller_generator.rb +38 -0
  16. data/lib/generators/somatics/authenticated_controller/templates/locales_en.yml +6 -0
  17. data/lib/generators/somatics/authenticated_controller/templates/locales_zh-TW.yml +6 -0
  18. data/lib/generators/somatics/authenticated_controller/templates/login.html.erb +31 -0
  19. data/lib/generators/somatics/authenticated_controller/templates/sessions_controller.rb +11 -0
  20. data/lib/generators/somatics/helper/helper_generator.rb +16 -0
  21. data/lib/generators/somatics/install/install_generator.rb +101 -0
  22. data/lib/generators/somatics/install/templates/config/locales/devise_zh-TW.yml +39 -0
  23. data/lib/generators/somatics/install/templates/config/locales/somatics_en.yml +35 -0
  24. data/lib/generators/somatics/install/templates/config/locales/somatics_zh-TW.yml +35 -0
  25. data/lib/generators/somatics/install/templates/controller_admin.rb +17 -0
  26. data/lib/generators/somatics/install/templates/controller_home.rb +4 -0
  27. data/lib/generators/somatics/install/templates/helper_admin.rb +99 -0
  28. data/lib/generators/somatics/install/templates/initializer_paper_trail.rb +2 -0
  29. data/lib/generators/somatics/install/templates/layout_admin.html.erb +87 -0
  30. data/lib/generators/somatics/install/templates/lib/active_record/diff.rb +61 -0
  31. data/lib/generators/somatics/install/templates/lib/somatic_link_renderer.rb +24 -0
  32. data/lib/generators/somatics/install/templates/lib/tasks/heroku.rake +30 -0
  33. data/lib/generators/somatics/install/templates/lib/tasks/svn.rake +47 -0
  34. data/lib/generators/somatics/install/templates/partial_menu.html.erb +1 -0
  35. data/lib/generators/somatics/install/templates/partial_versions.html.erb +56 -0
  36. data/lib/generators/somatics/install/templates/public/images/somatics/add.png +0 -0
  37. data/lib/generators/somatics/install/templates/public/images/somatics/arrow_collapsed.png +0 -0
  38. data/lib/generators/somatics/install/templates/public/images/somatics/arrow_expanded.png +0 -0
  39. data/lib/generators/somatics/install/templates/public/images/somatics/attachment.png +0 -0
  40. data/lib/generators/somatics/install/templates/public/images/somatics/bullet_arrow_left.png +0 -0
  41. data/lib/generators/somatics/install/templates/public/images/somatics/bullet_arrow_right.png +0 -0
  42. data/lib/generators/somatics/install/templates/public/images/somatics/bullet_diamond.png +0 -0
  43. data/lib/generators/somatics/install/templates/public/images/somatics/bullet_end.png +0 -0
  44. data/lib/generators/somatics/install/templates/public/images/somatics/bullet_go.png +0 -0
  45. data/lib/generators/somatics/install/templates/public/images/somatics/bullet_toggle_minus.png +0 -0
  46. data/lib/generators/somatics/install/templates/public/images/somatics/bullet_toggle_plus.png +0 -0
  47. data/lib/generators/somatics/install/templates/public/images/somatics/c.png +0 -0
  48. data/lib/generators/somatics/install/templates/public/images/somatics/cancel.png +0 -0
  49. data/lib/generators/somatics/install/templates/public/images/somatics/changeset.png +0 -0
  50. data/lib/generators/somatics/install/templates/public/images/somatics/comment.png +0 -0
  51. data/lib/generators/somatics/install/templates/public/images/somatics/comments.png +0 -0
  52. data/lib/generators/somatics/install/templates/public/images/somatics/content-left.png +0 -0
  53. data/lib/generators/somatics/install/templates/public/images/somatics/content-right.png +0 -0
  54. data/lib/generators/somatics/install/templates/public/images/somatics/copy.png +0 -0
  55. data/lib/generators/somatics/install/templates/public/images/somatics/csharp.png +0 -0
  56. data/lib/generators/somatics/install/templates/public/images/somatics/database_key.png +0 -0
  57. data/lib/generators/somatics/install/templates/public/images/somatics/default.png +0 -0
  58. data/lib/generators/somatics/install/templates/public/images/somatics/delete.png +0 -0
  59. data/lib/generators/somatics/install/templates/public/images/somatics/document.png +0 -0
  60. data/lib/generators/somatics/install/templates/public/images/somatics/draft.png +0 -0
  61. data/lib/generators/somatics/install/templates/public/images/somatics/duplicate.png +0 -0
  62. data/lib/generators/somatics/install/templates/public/images/somatics/edit.png +0 -0
  63. data/lib/generators/somatics/install/templates/public/images/somatics/exclamation.png +0 -0
  64. data/lib/generators/somatics/install/templates/public/images/somatics/external.png +0 -0
  65. data/lib/generators/somatics/install/templates/public/images/somatics/fav.png +0 -0
  66. data/lib/generators/somatics/install/templates/public/images/somatics/fav_off.png +0 -0
  67. data/lib/generators/somatics/install/templates/public/images/somatics/feed.png +0 -0
  68. data/lib/generators/somatics/install/templates/public/images/somatics/folder.png +0 -0
  69. data/lib/generators/somatics/install/templates/public/images/somatics/folder_open.png +0 -0
  70. data/lib/generators/somatics/install/templates/public/images/somatics/footer-bg.png +0 -0
  71. data/lib/generators/somatics/install/templates/public/images/somatics/footer-left.png +0 -0
  72. data/lib/generators/somatics/install/templates/public/images/somatics/footer-right.png +0 -0
  73. data/lib/generators/somatics/install/templates/public/images/somatics/group.png +0 -0
  74. data/lib/generators/somatics/install/templates/public/images/somatics/help.png +0 -0
  75. data/lib/generators/somatics/install/templates/public/images/somatics/history.png +0 -0
  76. data/lib/generators/somatics/install/templates/public/images/somatics/image.png +0 -0
  77. data/lib/generators/somatics/install/templates/public/images/somatics/lightning.png +0 -0
  78. data/lib/generators/somatics/install/templates/public/images/somatics/link.png +0 -0
  79. data/lib/generators/somatics/install/templates/public/images/somatics/loading.gif +0 -0
  80. data/lib/generators/somatics/install/templates/public/images/somatics/locked.png +0 -0
  81. data/lib/generators/somatics/install/templates/public/images/somatics/message.png +0 -0
  82. data/lib/generators/somatics/install/templates/public/images/somatics/milestone.png +0 -0
  83. data/lib/generators/somatics/install/templates/public/images/somatics/move.png +0 -0
  84. data/lib/generators/somatics/install/templates/public/images/somatics/news.png +0 -0
  85. data/lib/generators/somatics/install/templates/public/images/somatics/openid-bg.gif +0 -0
  86. data/lib/generators/somatics/install/templates/public/images/somatics/package.png +0 -0
  87. data/lib/generators/somatics/install/templates/public/images/somatics/pdf.png +0 -0
  88. data/lib/generators/somatics/install/templates/public/images/somatics/php.png +0 -0
  89. data/lib/generators/somatics/install/templates/public/images/somatics/plugin.png +0 -0
  90. data/lib/generators/somatics/install/templates/public/images/somatics/projects.png +0 -0
  91. data/lib/generators/somatics/install/templates/public/images/somatics/rails.png +0 -0
  92. data/lib/generators/somatics/install/templates/public/images/somatics/reload.png +0 -0
  93. data/lib/generators/somatics/install/templates/public/images/somatics/report.png +0 -0
  94. data/lib/generators/somatics/install/templates/public/images/somatics/ruby.png +0 -0
  95. data/lib/generators/somatics/install/templates/public/images/somatics/save.png +0 -0
  96. data/lib/generators/somatics/install/templates/public/images/somatics/sort_asc.png +0 -0
  97. data/lib/generators/somatics/install/templates/public/images/somatics/sort_desc.png +0 -0
  98. data/lib/generators/somatics/install/templates/public/images/somatics/stats.png +0 -0
  99. data/lib/generators/somatics/install/templates/public/images/somatics/table_multiple.png +0 -0
  100. data/lib/generators/somatics/install/templates/public/images/somatics/task_done.png +0 -0
  101. data/lib/generators/somatics/install/templates/public/images/somatics/task_late.png +0 -0
  102. data/lib/generators/somatics/install/templates/public/images/somatics/task_parent_end.png +0 -0
  103. data/lib/generators/somatics/install/templates/public/images/somatics/task_todo.png +0 -0
  104. data/lib/generators/somatics/install/templates/public/images/somatics/text.png +0 -0
  105. data/lib/generators/somatics/install/templates/public/images/somatics/text_list_bullets.png +0 -0
  106. data/lib/generators/somatics/install/templates/public/images/somatics/textfield.png +0 -0
  107. data/lib/generators/somatics/install/templates/public/images/somatics/ticket.png +0 -0
  108. data/lib/generators/somatics/install/templates/public/images/somatics/ticket_checked.png +0 -0
  109. data/lib/generators/somatics/install/templates/public/images/somatics/ticket_edit.png +0 -0
  110. data/lib/generators/somatics/install/templates/public/images/somatics/ticket_go.png +0 -0
  111. data/lib/generators/somatics/install/templates/public/images/somatics/ticket_note.png +0 -0
  112. data/lib/generators/somatics/install/templates/public/images/somatics/time.png +0 -0
  113. data/lib/generators/somatics/install/templates/public/images/somatics/time_add.png +0 -0
  114. data/lib/generators/somatics/install/templates/public/images/somatics/toggle_check.png +0 -0
  115. data/lib/generators/somatics/install/templates/public/images/somatics/true.png +0 -0
  116. data/lib/generators/somatics/install/templates/public/images/somatics/unlock.png +0 -0
  117. data/lib/generators/somatics/install/templates/public/images/somatics/user.png +0 -0
  118. data/lib/generators/somatics/install/templates/public/images/somatics/warning.png +0 -0
  119. data/lib/generators/somatics/install/templates/public/images/somatics/wiki_edit.png +0 -0
  120. data/lib/generators/somatics/install/templates/public/images/somatics/xml.png +0 -0
  121. data/lib/generators/somatics/install/templates/public/images/somatics/zip.png +0 -0
  122. data/lib/generators/somatics/install/templates/public/images/somatics/zoom_in.png +0 -0
  123. data/lib/generators/somatics/install/templates/public/javascripts/somatics/base.js +237 -0
  124. data/lib/generators/somatics/install/templates/public/javascripts/somatics/context_menu.js +237 -0
  125. data/lib/generators/somatics/install/templates/public/javascripts/somatics/controls.js +965 -0
  126. data/lib/generators/somatics/install/templates/public/javascripts/somatics/dragdrop.js +974 -0
  127. data/lib/generators/somatics/install/templates/public/javascripts/somatics/effects.js +1123 -0
  128. data/lib/generators/somatics/install/templates/public/javascripts/somatics/prototype.js +6001 -0
  129. data/lib/generators/somatics/install/templates/public/javascripts/somatics/rails.js +175 -0
  130. data/lib/generators/somatics/install/templates/public/javascripts/somatics/select_list_move.js +82 -0
  131. data/lib/generators/somatics/install/templates/public/stylesheets/application.css +863 -0
  132. data/lib/generators/somatics/install/templates/public/stylesheets/somatics/base.css +951 -0
  133. data/lib/generators/somatics/install/templates/public/stylesheets/somatics/context_menu.css +52 -0
  134. data/lib/generators/somatics/install/templates/public/stylesheets/somatics/csshover.htc +122 -0
  135. data/lib/generators/somatics/install/templates/public/stylesheets/somatics/jstoolbar.css +95 -0
  136. data/lib/generators/somatics/install/templates/public/themes/default/stylesheets/application.css +951 -0
  137. data/lib/generators/somatics/install/templates/view_index.html.erb +46 -0
  138. data/lib/generators/somatics/relationship/relationship_generator.rb +173 -0
  139. data/lib/generators/somatics/relationship/templates/migration.rb +11 -0
  140. data/lib/generators/somatics/scaffold/scaffold_generator.rb +24 -0
  141. data/lib/generators/somatics/scaffold/templates/_form.html.erb +23 -0
  142. data/lib/generators/somatics/scaffold/templates/edit.html.erb +6 -0
  143. data/lib/generators/somatics/scaffold/templates/index.html.erb +27 -0
  144. data/lib/generators/somatics/scaffold/templates/new.html.erb +5 -0
  145. data/lib/generators/somatics/scaffold/templates/show.html.erb +12 -0
  146. data/lib/generators/somatics/scaffold_controller/USAGE +20 -0
  147. data/lib/generators/somatics/scaffold_controller/scaffold_controller_generator.rb +108 -0
  148. data/lib/generators/somatics/scaffold_controller/templates/builder_index.xls.builder +24 -0
  149. data/lib/generators/somatics/scaffold_controller/templates/builder_index.xml.builder +10 -0
  150. data/lib/generators/somatics/scaffold_controller/templates/controller.rb +123 -0
  151. data/lib/generators/somatics/scaffold_controller/templates/locales_en.yml +17 -0
  152. data/lib/generators/somatics/scaffold_controller/templates/locales_zh-TW.yml +20 -0
  153. data/lib/generators/somatics/scaffold_controller/templates/partial_bulk.html.erb +12 -0
  154. data/lib/generators/somatics/scaffold_controller/templates/partial_edit.html.erb +7 -0
  155. data/lib/generators/somatics/scaffold_controller/templates/partial_form.html.erb +13 -0
  156. data/lib/generators/somatics/scaffold_controller/templates/partial_list.html.erb +30 -0
  157. data/lib/generators/somatics/scaffold_controller/templates/partial_menu.html.erb +1 -0
  158. data/lib/generators/somatics/scaffold_controller/templates/partial_show.html.erb +31 -0
  159. data/lib/generators/somatics/scaffold_controller/templates/view_edit.html.erb +24 -0
  160. data/lib/generators/somatics/scaffold_controller/templates/view_index.html.erb +27 -0
  161. data/lib/generators/somatics/scaffold_controller/templates/view_new.html.erb +14 -0
  162. data/lib/generators/somatics/scaffold_controller/templates/view_show.html.erb +26 -0
  163. data/lib/generators/somatics/settings/settings_generator.rb +86 -0
  164. data/lib/generators/somatics/settings_controller/USAGE +20 -0
  165. data/lib/generators/somatics/settings_controller/settings_controller_generator.rb +11 -0
  166. data/lib/generators/somatics/settings_controller/templates/builder_index.xls.builder +24 -0
  167. data/lib/generators/somatics/settings_controller/templates/builder_index.xml.builder +10 -0
  168. data/lib/generators/somatics/settings_controller/templates/controller.rb +64 -0
  169. data/lib/generators/somatics/settings_controller/templates/helper.rb +2 -0
  170. data/lib/generators/somatics/settings_controller/templates/locales_en.yml +9 -0
  171. data/lib/generators/somatics/settings_controller/templates/locales_zh-TW.yml +28 -0
  172. data/lib/generators/somatics/settings_controller/templates/migration.rb +17 -0
  173. data/lib/generators/somatics/settings_controller/templates/partial_bulk.html.erb +12 -0
  174. data/lib/generators/somatics/settings_controller/templates/partial_edit.html.erb +7 -0
  175. data/lib/generators/somatics/settings_controller/templates/partial_form.html.erb +15 -0
  176. data/lib/generators/somatics/settings_controller/templates/partial_list.html.erb +28 -0
  177. data/lib/generators/somatics/settings_controller/templates/partial_menu.html.erb +1 -0
  178. data/lib/generators/somatics/settings_controller/templates/partial_show.html.erb +13 -0
  179. data/lib/generators/somatics/settings_controller/templates/view_edit.html.erb +23 -0
  180. data/lib/generators/somatics/settings_controller/templates/view_index.html.erb +22 -0
  181. data/lib/generators/somatics/settings_controller/templates/view_new.html.erb +14 -0
  182. data/lib/generators/somatics/settings_controller/templates/view_show.html.erb +23 -0
  183. data/lib/somatics.rb +9 -0
  184. data/somatics.gemspec +249 -0
  185. data/somatics3.gemspec +248 -0
  186. data/templates/somatics.rb +106 -0
  187. data/test/helper.rb +10 -0
  188. data/test/test_somatics3-generators.rb +7 -0
  189. metadata +398 -0
@@ -0,0 +1,11 @@
1
+ class <%= "add_#{migration_attribute}_to_#{migration_table_name}".camelize %> < ActiveRecord::Migration
2
+ def self.up
3
+ add_column :<%= migration_table_name %>, :<%= migration_attribute %>, :integer
4
+ add_index :<%= migration_table_name %>, :<%= migration_attribute %>
5
+ end
6
+
7
+ def self.down
8
+ remove_index :<%= migration_table_name %>, :<%= migration_attribute %>
9
+ remove_column :<%= migration_table_name %>, :<%= migration_attribute %>
10
+ end
11
+ end
@@ -0,0 +1,115 @@
1
+ require 'generators/somatics'
2
+ require 'rails/generators/named_base'
3
+ require 'rails/generators/migration'
4
+
5
+ require 'net/http'
6
+ require 'uri'
7
+ require 'json'
8
+ class GoogleTranslate
9
+ def self.t(text,to_lang = 'zh-TW')
10
+ uri = URI.parse('http://ajax.googleapis.com/ajax/services/language/translate')
11
+ JSON.parse(Net::HTTP.post_form(uri, {"q" => text, "langpair" => "en|#{to_lang}", "v" => '1.0'}).body)['responseData']['translatedText'] rescue text.humanize
12
+ end
13
+ end
14
+
15
+
16
+ module Somatics
17
+ module Generators
18
+ class AttributesGenerator < Rails::Generators::NamedBase
19
+ extend TemplatePath
20
+ include Rails::Generators::Migration
21
+ include Rails::Generators::ResourceHelpers
22
+
23
+ argument :attributes, :type => :array, :default => [], :banner => "field:type field:type"
24
+ class_option :namespace, :banner => "NAME", :type => :string, :default => 'admin'
25
+ class_option :skip_migration, :type => :boolean, :desc => "Don't generate a migration file for this model."
26
+ class_option :locales, :type => :array, :banner => "LOCALE LOCALE", :default => %w( en zh-TW ),
27
+ :desc => "Supported Locales"
28
+
29
+
30
+ def dump_generator_attribute_names
31
+ generator_attribute_names = [
32
+ :name,
33
+ :singular_name,
34
+ :human_name,
35
+ :plural_name,
36
+ :table_name,
37
+ :attributes,
38
+ :class_name,
39
+ :controller_class_path,
40
+ :controller_file_name,
41
+ ]
42
+
43
+ generator_attribute_names.each do |attr|
44
+ # puts "%-40s %s" % ["#{attr}:", self.send(attr.to_s)] # instance_variable_get("@#{attr.to_s}"
45
+ end
46
+
47
+ end
48
+ def update_show_partial
49
+ look_for = "</tbody>\n</table>"
50
+ inject_into_file File.join('app/views/',options.namespace, controller_class_path, controller_file_name, '_show.html.erb'), :before => look_for do
51
+ attributes.inject('') do |str, attribute|
52
+ " <tr>\n <td><b><%= #{class_name}.human_attribute_name(:#{attribute.name}) %></b></td>\n <td><%=h #{singular_name}.#{attribute.name} %></td>\n </tr>\n"
53
+ end
54
+ end
55
+ end
56
+
57
+ def update_form_partial
58
+ look_for = "</tbody>\n</table>"
59
+ inject_into_file File.join('app/views/',options.namespace, controller_class_path, controller_file_name, '_form.html.erb'), :before => look_for do
60
+ attributes.inject('') do |str, attribute|
61
+ " <tr>\n <td><b><%= #{class_name}.human_attribute_name(:#{attribute.name}) %></b></td>\n <td><%= f.#{attribute.field_type} :#{attribute.name} %></td>\n </tr>\n"
62
+ end
63
+ end
64
+ end
65
+
66
+ def update_list_partial
67
+ look_for = " <!-- More Sort Link Helper -->"
68
+ inject_into_file File.join('app/views/',options.namespace, controller_class_path, controller_file_name, '_list.html.erb'), :after => look_for do
69
+ attributes.inject('') do |str, attribute|
70
+ str + " <th title=\"Sort by &quot;#{attribute.name.humanize}&quot;\"><%= sort_link_helper #{class_name}.human_attribute_name(:#{attribute.name}), '#{singular_name}', '#{attribute.name}' %></th>\n"
71
+ end
72
+ end
73
+ look_for = " <!-- More Fields -->"
74
+ inject_into_file File.join('app/views/',options.namespace, controller_class_path, controller_file_name, '_list.html.erb'), :after => look_for do
75
+ result = attributes.inject('') do |str, attribute|
76
+ str + " <td onclick=\"link_to(<%= \"'\#{admin_#{singular_name}_path(#{singular_name})}'\" %>);\" class=\"#{attribute.name}\"><%=h #{singular_name}.#{attribute.name} %></td>\n"
77
+ end
78
+ end
79
+ end
80
+
81
+ def update_locales
82
+ options[:locales].each do |locale|
83
+ append_file File.join('config/locales', "#{controller_file_name}_#{locale}.yml") do
84
+ attributes.inject('') do |str, attribute|
85
+ " #{attribute.name}: #{GoogleTranslate.t attribute.name.humanize, locale}\n"
86
+ end
87
+ end
88
+ end
89
+ end
90
+
91
+ def migrate_attributes
92
+ unless options[:skip_migration]
93
+ migration_name = attributes.collect(&:name).join('_and_')
94
+ invoke "migration", [%(add_#{migration_name}_to_#{table_name}), attributes.collect{|a| "#{a.name}:#{a.type}"}]
95
+ end
96
+ end
97
+
98
+
99
+ protected
100
+
101
+ #
102
+ # Implement the required interface for Rails::Generators::Migration.
103
+ # taken from http://github.com/rails/rails/blob/master/activerecord/lib/generators/active_record.rb
104
+ #
105
+ def self.next_migration_number(dirname) #:nodoc:
106
+ if ActiveRecord::Base.timestamped_migrations
107
+ Time.now.utc.strftime("%Y%m%d%H%M%S")
108
+ else
109
+ "%.3d" % (current_migration_number(dirname) + 1)
110
+ end
111
+ end
112
+
113
+ end
114
+ end
115
+ end
@@ -0,0 +1,11 @@
1
+ class <%= "add_#{migration_attribute}_to_#{migration_table_name}".camelize %> < ActiveRecord::Migration
2
+ def self.up
3
+ add_column :<%= migration_table_name %>, :<%= migration_attribute %>, :integer
4
+ add_index :<%= migration_table_name %>, :<%= migration_attribute %>
5
+ end
6
+
7
+ def self.down
8
+ remove_index :<%= migration_table_name %>, :<%= migration_attribute %>
9
+ remove_column :<%= migration_table_name %>, :<%= migration_attribute %>
10
+ end
11
+ end
@@ -0,0 +1,65 @@
1
+ require 'generators/somatics'
2
+ require 'rails/generators/named_base'
3
+
4
+ module Somatics
5
+ module Generators
6
+ class AuthenticatedGenerator < Rails::Generators::NamedBase
7
+ extend TemplatePath
8
+ class_option :namespace, :banner => "NAME", :type => :string, :default => ''
9
+ class_option :locales, :type => :array, :banner => "LOCALE LOCALE", :default => %w( en zh-TW ),
10
+ :desc => "Supported Locales"
11
+
12
+ def create_devise_model
13
+ invoke 'devise'
14
+ end
15
+
16
+ def modify_devise_validation
17
+ if File.exists?("app/models/#{singular_name}.rb")
18
+ inject_into_file "app/models/#{singular_name}.rb", :before => " # Setup accessible" do
19
+ <<-RUBY
20
+ def password_required?
21
+ return false if !new_record? && password.blank? && password_confirmation.blank?
22
+ super
23
+ end
24
+
25
+ RUBY
26
+ end
27
+ end
28
+ end
29
+
30
+ def add_fields_to_devise_model
31
+ invoke "migration", [%(add_name_to_#{table_name}), "name:string"]
32
+ if File.exists?("app/models/#{singular_name}.rb")
33
+ inject_into_file "app/models/#{singular_name}.rb", :after => ":remember_me" do
34
+ ", :name"
35
+ end
36
+ end
37
+ end
38
+
39
+ hook_for :scaffold_controller do |invoked|
40
+ invoke invoked, [name, "email:string", "name:string"], :namespace => 'admin'
41
+ if File.exists?("app/models/#{singular_name}.rb")
42
+ inject_into_file "app/models/#{singular_name}.rb", :after => "has_paper_trail :ignore => [:updated_at" do
43
+ ", :encrypted_password, :password_salt, :reset_password_token, :remember_token, :remember_created_at, :sign_in_count, :current_sign_in_at, :last_sign_in_at, :current_sign_in_ip, :last_sign_in_ip"
44
+ end
45
+ end
46
+ end
47
+
48
+ def modify_devise_model_form
49
+ template "partial_form.html.erb", File.join('app/views', 'admin', class_path, plural_name, "_form.html.erb"), :force => true
50
+ end
51
+
52
+ def create_sessions_controller
53
+ invoke 'somatics:authenticated_controller'
54
+ end
55
+
56
+ def modify_devise_route
57
+ inject_into_file File.join('config/routes.rb'), :after => "devise_for :#{table_name}" do
58
+ session_controller = ((options.namespace.blank? ? [] : [options.namespace]) << "#{name}_sessions").join('/')
59
+ ", :path => '#{options.namespace}', :controllers => {:sessions => '#{session_controller}'}"
60
+ end
61
+ end
62
+
63
+ end
64
+ end
65
+ end
@@ -0,0 +1,23 @@
1
+ <table width="100%">
2
+ <tbody>
3
+ <tr>
4
+ <td colspan="2"><br/><h3><%%= <%= class_name %>.model_name.human %></h3></td>
5
+ </tr>
6
+ <tr>
7
+ <td><b><%%= <%= class_name %>.human_attribute_name(:name) %></b></td>
8
+ <td><%%= f.text_field :name %></td>
9
+ </tr>
10
+ <tr>
11
+ <td><b><%%= <%= class_name %>.human_attribute_name(:email) %></b></td>
12
+ <td><%%= f.text_field :email %></td>
13
+ </tr>
14
+ <tr>
15
+ <td><b><%%= <%= class_name %>.human_attribute_name(:password) %></b></td>
16
+ <td><%%= f.password_field :password %></td>
17
+ </tr>
18
+ <tr>
19
+ <td><b><%%= <%= class_name %>.human_attribute_name(:password_confirmation) %></b></td>
20
+ <td><%%= f.password_field :password_confirmation %></td>
21
+ </tr>
22
+ </tbody>
23
+ </table>
@@ -0,0 +1,38 @@
1
+ require 'generators/somatics'
2
+ require 'rails/generators/named_base'
3
+ require 'rails/generators/resource_helpers'
4
+ # require 'digest/sha1'
5
+ # require 'rails/generators/migration'
6
+
7
+ module Somatics
8
+ module Generators
9
+ class AuthenticatedControllerGenerator < Rails::Generators::NamedBase
10
+ extend TemplatePath
11
+
12
+ class_option :namespace, :banner => "NAME", :type => :string, :default => ''
13
+ class_option :locales, :type => :array, :banner => "LOCALE LOCALE", :default => %w( en zh-TW ),
14
+ :desc => "Supported Locales"
15
+
16
+ def create_sessions_controller
17
+ template 'sessions_controller.rb', File.join('app/controllers', options.namespace, "#{name}_sessions_controller.rb")
18
+ end
19
+
20
+ def create_login_page
21
+ template 'login.html.erb', File.join("app/views", options.namespace, "#{name}_sessions", 'new.html.erb')
22
+ end
23
+
24
+ def create_locales
25
+ options[:locales].each do |locale|
26
+ template "locales_#{locale}.yml", File.join('config/locales', "#{name}_sessions_#{locale}.yml")
27
+ end
28
+ end
29
+
30
+ protected
31
+
32
+ def namespace_class
33
+ options.namespace.camelize
34
+ end
35
+
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,6 @@
1
+ en:
2
+ devise:
3
+ <%= name %>_sessions:
4
+ <%= name %>:
5
+ signed_in: 'Signed in successfully.'
6
+ signed_out: 'Signed out successfully.'
@@ -0,0 +1,6 @@
1
+ zh-TW:
2
+ devise:
3
+ <%= name %>_sessions:
4
+ <%= name %>:
5
+ signed_in: '登入成功。'
6
+ signed_out: '登出成功。'
@@ -0,0 +1,31 @@
1
+ <%%= form_for(resource, :as => resource_name, :url => session_path(resource_name), :html => {:id => 'login-form'}) do |f| %>
2
+ <p><%%= flash[:error] %></p>
3
+ <table>
4
+ <tbody>
5
+ <tr>
6
+ <td align="right"><b><%%= <%= class_name %>.human_attribute_name(:email) %></b></td>
7
+ <td align="left"><%%= f.text_field :email %></td>
8
+ </tr>
9
+ <tr>
10
+ <td align="right"><b><%%= <%= class_name %>.human_attribute_name(:password) %></b></td>
11
+ <td align="left"><%%= f.password_field :password %></td>
12
+ </tr>
13
+ <!-- Uncomment this if you want this functionality
14
+ <%% if devise_mapping.rememberable? -%>
15
+ <tr>
16
+ <td align="right"><%%#= f.label 'remember_me', 'Remember me' %></td>
17
+ <td align="left"><%%#= f.check_box :remember_me %></td>
18
+ </tr>
19
+ <%% end -%>
20
+ -->
21
+ <tr>
22
+ <td align="right"></td>
23
+ <td align="left"></td>
24
+ </tr>
25
+ <tr>
26
+ <td align="left"></td>
27
+ <td align="right"><%%= f.submit t('Log_in') %></td>
28
+ </tr>
29
+ </tbody>
30
+ </table>
31
+ <%% end %>
@@ -0,0 +1,11 @@
1
+ class <%= namespace_class %>::<%= class_name %>SessionsController < Devise::SessionsController
2
+ layout '<%= options.namespace %>'
3
+
4
+ def after_sign_in_path_for(resource)
5
+ <%= options.namespace %>_root_url
6
+ end
7
+
8
+ def after_sign_out_path_for(resource)
9
+ new_<%= name %>_session_url
10
+ end
11
+ end
@@ -0,0 +1,16 @@
1
+ require 'generators/somatics'
2
+ # require 'rails/generators/scaffold_controller_generator'
3
+ require 'rails/generators/rails/helper/helper_generator'
4
+
5
+ module Somatics
6
+ module Generators
7
+ class HelperGenerator < Rails::Generators::HelperGenerator
8
+
9
+ protected
10
+ # def class_path
11
+ # puts options[:namespace]
12
+ # @class_path.unshift(options[:namespace]) if options[:namespace].present?
13
+ # end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,101 @@
1
+ require 'generators/somatics'
2
+ require 'rails/generators/named_base'
3
+
4
+ module Somatics
5
+ module Generators
6
+ class InstallGenerator < Rails::Generators::Base
7
+ extend TemplatePath
8
+ class_option :namespace, :banner => "NAME", :type => :string, :required => false, :default => "admin", :desc => "namespace to generate the controller for"
9
+
10
+ def public_directory
11
+ directory "public", "public", :recursive => false
12
+ end
13
+
14
+ def images
15
+ directory "public/images"
16
+ end
17
+
18
+ def stylesheets
19
+ directory "public/stylesheets"
20
+ end
21
+
22
+ def javascripts
23
+ directory "public/javascripts"
24
+ end
25
+
26
+ def themes
27
+ directory "public/themes"
28
+ end
29
+
30
+ def base
31
+ template 'controller_admin.rb', File.join('app/controllers/admin', 'admin_controller.rb')
32
+ template 'helper_admin.rb', File.join('app/helpers/admin', 'admin_helper.rb')
33
+ end
34
+
35
+ def home
36
+ template 'controller_home.rb', File.join('app/controllers/admin', 'home_controller.rb')
37
+ template 'view_index.html.erb', File.join('app/views/admin', 'home', 'index.html.erb')
38
+ end
39
+
40
+ def layouts
41
+ template 'layout_admin.html.erb', File.join('app/views/layouts', "admin.html.erb")
42
+ template 'partial_menu.html.erb', File.join('app/views/admin/shared', "_menu.html.erb"), :skip => true
43
+ end
44
+
45
+ def mime_type
46
+ gsub_file File.join('config','initializers', 'mime_types.rb'), "Mime::Type.register 'application/vnd.ms-excel', :xls", ""
47
+ append_file File.join('config','initializers', 'mime_types.rb'), "Mime::Type.register 'application/vnd.ms-excel', :xls"
48
+ end
49
+
50
+ def locales
51
+ directory "config/locales"
52
+ end
53
+
54
+ def default_admin
55
+ rakefile "somatics.rake" do
56
+ <<-RUBY
57
+ namespace :somatics do
58
+ desc "Create Default Admin User"
59
+ task :create_user => :environment do
60
+ User.find_or_create_by_name(:name => 'Admin', :password => 'somatics', :password_confirmation => 'somatics', :email => 'admin@somatics.com')
61
+ end
62
+ end
63
+ RUBY
64
+ end
65
+ end
66
+
67
+ def add_settings
68
+ append_file File.join('db','seeds.rb') do
69
+ <<-RUBY
70
+ unless Setting.find_by_name('theme')
71
+ s = Setting.new
72
+ s.name = 'theme'
73
+ s.category = 'General'
74
+ s.value = 'default'
75
+ s.field_type = 'string'
76
+ s.save!
77
+ end
78
+ RUBY
79
+ end
80
+ end
81
+
82
+ def add_route
83
+ route_config = ""
84
+ route_config << " namespace :#{options[:namespace]} do \n" if options[:namespace].present?
85
+ route_config << " root :to => 'home#index'\n"
86
+ route_config << " match 'home' => 'home#index'\n"
87
+ route_config << " end\n" if options[:namespace].present?
88
+ route route_config
89
+ end
90
+
91
+ def libs
92
+ directory "lib"
93
+ end
94
+
95
+ def paper_trail
96
+ template 'partial_versions.html.erb', File.join('app/views/admin/shared', "_versions.html.erb")
97
+ template 'initializer_paper_trail.rb', File.join('config/initializers', "paper_trail.rb")
98
+ end
99
+ end
100
+ end
101
+ end