somatics3 0.0.10

Sign up to get free protection for your applications and to get access to all the features.
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
data/.document ADDED
@@ -0,0 +1,5 @@
1
+ README.rdoc
2
+ lib/**/*.rb
3
+ bin/*
4
+ features/**/*.feature
5
+ LICENSE
data/LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2009 tkwong
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.rdoc ADDED
@@ -0,0 +1,91 @@
1
+ === Welcome to Somatics3
2
+
3
+ Somatics3 is next generation open source scaffolding template that kick-starts your next Rails project.
4
+ Active development has started in July 2010; new features, enhancements, and updates appear
5
+ on daily basis.
6
+
7
+ Here are the steps to get Somatics up and running on your system.
8
+
9
+ Somatics3 Support Rails 3 Now!
10
+
11
+
12
+ === System Requirements
13
+
14
+ * Ruby v1.8.7 or v1.9.2
15
+ * Ruby on Rails v3.0+
16
+ * MySQL v4.1.1 or later (v5+ is recommended) or SQLite v3.4 or later
17
+
18
+
19
+ == Getting Started
20
+
21
+ 1. Install \Somatics at the command prompt if you haven't yet:
22
+
23
+ gem install somatics3-generators
24
+
25
+ 2. At the command prompt, create a new \Somatics application:
26
+
27
+ somatics new myapp
28
+
29
+ where "myapp" is the application name.
30
+
31
+ 3. Change directory to +myapp+ and start the web server:
32
+
33
+ cd myapp; rails server
34
+
35
+ Run with <tt>--help</tt> for options.
36
+
37
+ 4. Open up http://localhost:3000/admin and login with username ‘admin’ and password ‘somatics’.
38
+
39
+ === Downloads
40
+
41
+ * Git source code repository: git://github.com/inspiresynergy/somatics3-generators.git
42
+ * .zip or .tgz archives: http://github.com/inspiresynergy/somatics3-generators/downloads
43
+
44
+ === Resources
45
+
46
+ * Home page: http://www.somaticsapp.com
47
+ * Project page: http://github.com/inspiresynergy/somatics3-generators/tree/master
48
+ * Features and bugs: http://somatics.lighthouseapp.com
49
+ * Twitter commit updates: http://twitter.com/somaticsapp
50
+ * Discussion group for developers: http://groups.google.com/group/somaticsapp
51
+ * IRC channel: #somaticsapp on irc.freenode.net
52
+
53
+ === Generate the Admin Model
54
+
55
+ You can test drive Somatics by generating models.
56
+
57
+ $ rails generate somatics:scaffold products title:string description:text
58
+
59
+ Among other things the generator creates admin user records and administration panels.
60
+ You can log in the admin panel using the default login and password.(+admin+/+password+)
61
+ The admin site is at http://localhost:3000/admin .
62
+
63
+ === Deploying The App
64
+
65
+ TODO
66
+
67
+ === For Developers
68
+
69
+ TODO
70
+
71
+ === Features
72
+
73
+ Somatic is open source software and relies on your contributions to grow!
74
+
75
+ http://github.com/inspiresynergy/somatics3-generators
76
+
77
+ GitHub always contains the latest BaseApp code. Fork your own development branch here if you wish to contribute code.
78
+
79
+ Pull requests should be send to ‘inspiresynergy’ to include them in the main Somatics code base.
80
+
81
+ http://inspiresynergy.lighthouseapp.com/projects/53315-somatics/overview
82
+
83
+ Bug reports and feature requests should be posted in LightHouse.
84
+
85
+ Bugs always have priority over new features! But, you’re free to help out with whatever you want.
86
+
87
+ === Credits
88
+
89
+ Somatics is developed by Inspire Synergy – Benjamin Wong, Gary Or and a whole bunch of cool contributors.
90
+
91
+ Somatics is released to the public under the MIT license.
data/Rakefile ADDED
@@ -0,0 +1,72 @@
1
+ require 'rubygems'
2
+ require 'rake'
3
+ require 'jeweler'
4
+
5
+ begin
6
+ Jeweler::Tasks.new do |gem|
7
+ gem.name = "somatics3"
8
+ gem.version = File.exist?('VERSION') ? File.read('VERSION') : ""
9
+ gem.summary = %Q{Somatics3 - Admin Panel for Rails 3 Resources}
10
+ gem.description = %Q{Somatics3 is a collection of generators and extensions which reduces the effort of building admin panel for rails 3 resources.}
11
+ gem.email = "inspiresynergy@somaticsapp.com"
12
+ gem.homepage = "http://github.com/inspiresynergy/somatics3"
13
+ gem.authors = ["Benjamin Wong", "Gary Or"]
14
+ gem.rdoc_options += FileList['lib/**/templates/*'].to_a.collect {|f| "--exclude=#{f}" }
15
+ # gem.files = FileList[
16
+ # "README.rdoc"
17
+ # ]
18
+ # raise FileList['lib/**/templates/*'].to_a.collect{|f| "--exclude=#{f}" }.inspect
19
+ # gem.rdoc_options << "--exclude='lib/**/templates/*'"
20
+ # gem.rubyforge_project = 'somatics3'
21
+ # gem.add_development_dependency "thoughtbot-shoulda", ">= 0"
22
+
23
+ gem.add_dependency 'will_paginate', "~> 3.0.pre2"
24
+ gem.add_dependency 'json'
25
+ gem.add_dependency 'meta_search'
26
+ gem.add_dependency 'paper_trail'
27
+ gem.add_dependency 'tiny_mce'
28
+ gem.add_dependency 'devise'
29
+ gem.executables = ['somatics', 'somatify']
30
+ end
31
+ # Jeweler::RubyforgeTasks.new do |rubyforge|
32
+ # rubyforge.doc_task = "rdoc"
33
+ # end
34
+ Jeweler::GemcutterTasks.new
35
+ rescue LoadError
36
+ puts "Jeweler (or a dependency) not available. Install it with: gem install jeweler"
37
+ end
38
+
39
+ require 'rake/testtask'
40
+ Rake::TestTask.new(:test) do |test|
41
+ test.libs << 'lib' << 'test'
42
+ test.pattern = 'test/**/test_*.rb'
43
+ test.verbose = true
44
+ end
45
+
46
+ begin
47
+ require 'rcov/rcovtask'
48
+ Rcov::RcovTask.new do |test|
49
+ test.libs << 'test'
50
+ test.pattern = 'test/**/test_*.rb'
51
+ test.verbose = true
52
+ end
53
+ rescue LoadError
54
+ task :rcov do
55
+ abort "RCov is not available. In order to run rcov, you must: sudo gem install spicycode-rcov"
56
+ end
57
+ end
58
+
59
+ task :test => :check_dependencies
60
+
61
+ task :default => :test
62
+
63
+ require 'rake/rdoctask'
64
+ Rake::RDocTask.new do |rdoc|
65
+ version = File.exist?('VERSION') ? File.read('VERSION') : ""
66
+
67
+ rdoc.rdoc_dir = 'rdoc'
68
+ rdoc.title = "somatics3 #{version}"
69
+ rdoc.rdoc_files.include('README*')
70
+ rdoc.rdoc_files.include('lib/**/*.rb')
71
+ rdoc.rdoc_files.exclude('lib/**/templates/*')
72
+ end
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.0.10
data/bin/somatics ADDED
@@ -0,0 +1,23 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ lib = File.expand_path(File.dirname(__FILE__) + '/../lib')
4
+ $LOAD_PATH.unshift(lib) if File.directory?(lib) && !$LOAD_PATH.include?(lib)
5
+
6
+ template_path = File.expand_path(File.dirname(__FILE__) + '/../templates')
7
+
8
+
9
+ # require 'somatics'
10
+
11
+ args = ARGV.dup
12
+ ARGV.clear
13
+ args.unshift('new') if args[0] != 'new'
14
+ # path = args.shift.strip rescue '.'
15
+
16
+ # a = File.expand_path(path)
17
+ template = File.join(template_path,'somatics.rb')
18
+
19
+ # puts "#{path} #{a} #{args.join(',')} #{template}"
20
+ puts "rails #{args.join(' ')} -m #{template}"
21
+ system "rails #{args.join(' ')} -m #{template}"
22
+
23
+ exit
data/bin/somatify ADDED
@@ -0,0 +1,21 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ lib = File.expand_path(File.dirname(__FILE__) + '/../lib')
4
+ $LOAD_PATH.unshift(lib) if File.directory?(lib) && !$LOAD_PATH.include?(lib)
5
+
6
+ template_path = File.expand_path(File.dirname(__FILE__) + '/../templates')
7
+
8
+
9
+ # require 'somatics'
10
+
11
+ args = ARGV.dup
12
+ ARGV.clear
13
+ path = args.shift.strip rescue '.'
14
+
15
+ # a = File.expand_path(path)
16
+ template = File.join(template_path,'somatics.rb')
17
+
18
+ puts "rake rails:template LOCATION=#{template}"
19
+ system "rake rails:template LOCATION=#{template}"
20
+
21
+ exit
@@ -0,0 +1,37 @@
1
+ require 'rails/generators/named_base'
2
+ require 'rails/generators/migration'
3
+
4
+ module Somatics
5
+ module Generators
6
+ module Helper
7
+ def self.included(base)
8
+ base.send(:extend, ClassMethods)
9
+ base.send(:include, InstanceMethods)
10
+ end
11
+
12
+ module ClassMethods
13
+ private
14
+
15
+ def uses_local_templates
16
+ extend Somatics::Generators::TemplatePath
17
+ end
18
+
19
+ def namespaced
20
+ class_option :namespace, :banner => "NAME", :type => :string, :required => false, :default => "admin", :desc => "namespace for the controller"
21
+ end
22
+ end
23
+
24
+ module InstanceMethods
25
+ private
26
+ end
27
+ end
28
+
29
+ module TemplatePath
30
+ def source_root
31
+ @_somaitcs_source_root ||= File.expand_path(File.join(File.dirname(__FILE__), 'somatics', generator_name, 'templates'))
32
+ end
33
+ end
34
+ end
35
+ end
36
+
37
+ Rails::Generators::NamedBase.send(:include, Somatics::Generators::Helper)
@@ -0,0 +1,184 @@
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 AssociatedGenerator < Rails::Generators::NamedBase
19
+ extend TemplatePath
20
+ include Rails::Generators::Migration
21
+ include Rails::Generators::ResourceHelpers
22
+
23
+ argument :associated_field, :type => :string, :banner => 'associated_field_name'
24
+ argument :attribute, :type => :hash, :default => {"name" => "string"}, :banner => "field:type"
25
+ # argument :attributes, :type => :array, :default => [], :banner => "field:type field:type"
26
+ class_option :namespace, :banner => "NAME", :type => :string, :default => 'admin'
27
+ class_option :skip_migration, :type => :boolean, :desc => "Don't generate a migration file for this model."
28
+ class_option :locales, :type => :array, :banner => "LOCALE LOCALE", :default => %w( en zh-TW ),
29
+ :desc => "Supported Locales"
30
+
31
+
32
+ def dump_generator_attribute_names
33
+ generator_attribute_names = [
34
+ :name,
35
+ :singular_name,
36
+ :human_name,
37
+ :plural_name,
38
+ :table_name,
39
+ :class_name,
40
+ :controller_class_path,
41
+ :controller_file_name,
42
+ :attribute_name,
43
+ :attribute_type,
44
+ :associated_name,
45
+ :associated_singular_name,
46
+ :associated_human_name,
47
+ :associated_plural_name,
48
+ :associated_table_name,
49
+ :associated_class_name,
50
+ ]
51
+
52
+ generator_attribute_names.each do |attr|
53
+ # puts "%-40s %s" % ["#{attr}:", self.send(attr.to_s)] # instance_variable_get("@#{attr.to_s}"
54
+ end
55
+
56
+ end
57
+
58
+ def generate_associated_scaffold
59
+ invoke 'somatics:scaffold', [associated_class_name, "#{attribute_name}:#{attribute_type}"], {:namespace => options[:namespace], :header => false }
60
+ end
61
+
62
+ def update_menu
63
+ # add attributes type to submenu
64
+ # look_for = /<li ><%= link_to 'Product', '\/admin\/products', :class => (match_controller?('products')) \? 'selected' : ''%>.*<ul>/
65
+ look_for = /<%=.*\/#{options.namespace}\/#{plural_name}.*%>[^<]*<ul[^>]*>/
66
+ inject_into_file File.join('app/views/',options.namespace, 'shared/_menu.html.erb'), :after => look_for do
67
+ <<-RUBY
68
+
69
+ <li><%=link_to #{class_name}.human_attribute_name(:#{associated_name}), '/#{options.namespace}/#{associated_plural_name}' %></li>
70
+ RUBY
71
+ end
72
+
73
+ end
74
+
75
+ def update_show_partial
76
+ look_for = "</tbody>\n</table>"
77
+ inject_into_file File.join('app/views/',options.namespace, controller_class_path, controller_file_name, '_show.html.erb'), :before => look_for do
78
+ " <tr>\n <td><b><%= #{class_name}.human_attribute_name(:#{associated_name}) %></b></td>\n <td><%=h #{singular_name}.#{associated_name}_#{attribute_name}%></td>\n </tr>\n"
79
+ end
80
+ end
81
+
82
+ def update_form_partial
83
+ look_for = "</tbody>\n</table>"
84
+ inject_into_file File.join('app/views/',options.namespace, controller_class_path, controller_file_name, '_form.html.erb'), :before => look_for do
85
+ " <tr>\n <td><b><%= #{class_name}.human_attribute_name(:#{associated_name}) %></b></td>\n <td><%= f.collection_select :#{associated_name}_id, #{associated_class_name}.all, :id, :#{attribute_name}, :prompt => true %></td>\n </tr>\n"
86
+ end
87
+ end
88
+
89
+ def update_list_partial
90
+ # look_for = " <!-- More Sort Link Helper -->"
91
+ # inject_into_file File.join('app/views/',options.namespace, controller_class_path, controller_file_name, '_list.html.erb'), :after => look_for do
92
+ # " <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"
93
+ # end
94
+ # look_for = " <!-- More Fields -->"
95
+ # inject_into_file File.join('app/views/',options.namespace, controller_class_path, controller_file_name, '_list.html.erb'), :after => look_for do
96
+ # " <td onclick=\"link_to(<%= \"'\#{admin_#{singular_name}_path(#{singular_name})}'\" %>);\" class=\"#{attribute.name}\"><%=h #{singular_name}.#{attribute.name} %></td>\n"
97
+ # end
98
+ end
99
+
100
+ def add_attribute_to_locales
101
+ options[:locales].each do |locale|
102
+ append_file File.join('config/locales', "#{controller_file_name}_#{locale}.yml") do
103
+ " #{associated_name}: #{GoogleTranslate.t associated_human_name, locale}\n"
104
+ end
105
+ end
106
+ end
107
+
108
+ def add_association_to_model
109
+ inject_into_class "app/models/#{name}.rb", class_name do
110
+ <<-RUBY
111
+ belongs_to :#{associated_name}
112
+ def #{associated_name}_#{attribute_name}
113
+ self.#{associated_name}.#{attribute_name} unless self.#{associated_name}.blank?
114
+ end
115
+
116
+ def #{associated_name}_#{attribute_name}=(#{associated_name}_#{attribute_name})
117
+ self.#{associated_name} = #{associated_class_name}.find_by_#{attribute_name}(#{associated_name}_#{attribute_name}) || #{associated_class_name}.new(:#{attribute_name} => #{associated_name}_#{attribute_name})
118
+ end
119
+ RUBY
120
+ end
121
+
122
+ inject_into_class "app/models/#{associated_name}.rb", associated_class_name do
123
+ <<-RUBY
124
+ has_many :#{class_name}
125
+ RUBY
126
+ end rescue nil
127
+ end
128
+
129
+ def migrate_attributes
130
+ unless options[:skip_migration]
131
+ invoke "migration", [%(add_#{associated_singular_name}_to_#{table_name}), "#{associated_singular_name}_id:integer"]
132
+ end
133
+ end
134
+
135
+ protected
136
+
137
+ #
138
+ # Implement the required interface for Rails::Generators::Migration.
139
+ # taken from http://github.com/rails/rails/blob/master/activerecord/lib/generators/active_record.rb
140
+ #
141
+ def self.next_migration_number(dirname) #:nodoc:
142
+ if ActiveRecord::Base.timestamped_migrations
143
+ Time.now.utc.strftime("%Y%m%d%H%M%S")
144
+ else
145
+ "%.3d" % (current_migration_number(dirname) + 1)
146
+ end
147
+ end
148
+
149
+ private
150
+ def attribute_name
151
+ attribute.keys.first
152
+ end
153
+
154
+ def attribute_type
155
+ attribute.values.first
156
+ end
157
+
158
+ def associated_name
159
+ name + '_' + associated_field
160
+ end
161
+
162
+ def associated_singular_name
163
+ associated_name.singularize
164
+ end
165
+
166
+ def associated_human_name
167
+ associated_name.humanize
168
+ end
169
+
170
+ def associated_plural_name
171
+ associated_name.pluralize
172
+ end
173
+
174
+ def associated_table_name
175
+ associated_name.tableize
176
+ end
177
+
178
+ def associated_class_name
179
+ associated_name.classify
180
+ end
181
+
182
+ end
183
+ end
184
+ end