tripper 0.0.3d

Sign up to get free protection for your applications and to get access to all the features.
Files changed (210) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +17 -0
  3. data/Gemfile +4 -0
  4. data/LICENSE.txt +22 -0
  5. data/README.md +29 -0
  6. data/Rakefile +1 -0
  7. data/TODO +26 -0
  8. data/lib/generators/USAGE +8 -0
  9. data/lib/generators/tripper.rb +51 -0
  10. data/lib/generators/tripper/commonalities/commonalities.rb +226 -0
  11. data/lib/generators/tripper/detect_changes/detect_changes_generator.rb +173 -0
  12. data/lib/generators/tripper/detect_changes/model.rb +226 -0
  13. data/lib/generators/tripper/detect_changes/templates/migration.rb +7 -0
  14. data/lib/generators/tripper/detect_changes/templates/model/belongs_to.rb +1 -0
  15. data/lib/generators/tripper/detect_changes/templates/model/has_one.rb +1 -0
  16. data/lib/generators/tripper/detect_changes/templates/model/validates.rb +2 -0
  17. data/lib/generators/tripper/from_community/from_community_generator.rb +95 -0
  18. data/lib/generators/tripper/from_community/templates/actions/create.rb +8 -0
  19. data/lib/generators/tripper/from_community/templates/actions/destroy.rb +5 -0
  20. data/lib/generators/tripper/from_community/templates/actions/edit.rb +3 -0
  21. data/lib/generators/tripper/from_community/templates/actions/index.rb +3 -0
  22. data/lib/generators/tripper/from_community/templates/actions/new.rb +3 -0
  23. data/lib/generators/tripper/from_community/templates/actions/show.rb +3 -0
  24. data/lib/generators/tripper/from_community/templates/actions/update.rb +8 -0
  25. data/lib/generators/tripper/from_community/templates/controller.rb +3 -0
  26. data/lib/generators/tripper/from_community/templates/fixtures.yml +9 -0
  27. data/lib/generators/tripper/from_community/templates/helper.rb +2 -0
  28. data/lib/generators/tripper/from_community/templates/migration.rb +30 -0
  29. data/lib/generators/tripper/from_community/templates/model.rb +54 -0
  30. data/lib/generators/tripper/from_community/templates/tests/rspec/actions/create.rb +11 -0
  31. data/lib/generators/tripper/from_community/templates/tests/rspec/actions/destroy.rb +6 -0
  32. data/lib/generators/tripper/from_community/templates/tests/rspec/actions/edit.rb +4 -0
  33. data/lib/generators/tripper/from_community/templates/tests/rspec/actions/index.rb +4 -0
  34. data/lib/generators/tripper/from_community/templates/tests/rspec/actions/new.rb +4 -0
  35. data/lib/generators/tripper/from_community/templates/tests/rspec/actions/show.rb +4 -0
  36. data/lib/generators/tripper/from_community/templates/tests/rspec/actions/update.rb +11 -0
  37. data/lib/generators/tripper/from_community/templates/tests/rspec/controller.rb +8 -0
  38. data/lib/generators/tripper/from_community/templates/tests/rspec/model.rb +7 -0
  39. data/lib/generators/tripper/from_community/templates/tests/shoulda/actions/create.rb +13 -0
  40. data/lib/generators/tripper/from_community/templates/tests/shoulda/actions/destroy.rb +8 -0
  41. data/lib/generators/tripper/from_community/templates/tests/shoulda/actions/edit.rb +6 -0
  42. data/lib/generators/tripper/from_community/templates/tests/shoulda/actions/index.rb +6 -0
  43. data/lib/generators/tripper/from_community/templates/tests/shoulda/actions/new.rb +6 -0
  44. data/lib/generators/tripper/from_community/templates/tests/shoulda/actions/show.rb +6 -0
  45. data/lib/generators/tripper/from_community/templates/tests/shoulda/actions/update.rb +13 -0
  46. data/lib/generators/tripper/from_community/templates/tests/shoulda/controller.rb +5 -0
  47. data/lib/generators/tripper/from_community/templates/tests/shoulda/model.rb +7 -0
  48. data/lib/generators/tripper/from_community/templates/tests/testunit/actions/create.rb +11 -0
  49. data/lib/generators/tripper/from_community/templates/tests/testunit/actions/destroy.rb +6 -0
  50. data/lib/generators/tripper/from_community/templates/tests/testunit/actions/edit.rb +4 -0
  51. data/lib/generators/tripper/from_community/templates/tests/testunit/actions/index.rb +4 -0
  52. data/lib/generators/tripper/from_community/templates/tests/testunit/actions/new.rb +4 -0
  53. data/lib/generators/tripper/from_community/templates/tests/testunit/actions/show.rb +4 -0
  54. data/lib/generators/tripper/from_community/templates/tests/testunit/actions/update.rb +11 -0
  55. data/lib/generators/tripper/from_community/templates/tests/testunit/controller.rb +5 -0
  56. data/lib/generators/tripper/from_community/templates/tests/testunit/model.rb +7 -0
  57. data/lib/generators/tripper/from_community/templates/views/erb/_form.html.erb +16 -0
  58. data/lib/generators/tripper/from_community/templates/views/erb/edit.html.erb +14 -0
  59. data/lib/generators/tripper/from_community/templates/views/erb/index.html.erb +29 -0
  60. data/lib/generators/tripper/from_community/templates/views/erb/new.html.erb +7 -0
  61. data/lib/generators/tripper/from_community/templates/views/erb/show.html.erb +25 -0
  62. data/lib/generators/tripper/from_community/templates/views/haml/_form.html.haml +9 -0
  63. data/lib/generators/tripper/from_community/templates/views/haml/edit.html.haml +14 -0
  64. data/lib/generators/tripper/from_community/templates/views/haml/index.html.haml +25 -0
  65. data/lib/generators/tripper/from_community/templates/views/haml/new.html.haml +7 -0
  66. data/lib/generators/tripper/from_community/templates/views/haml/show.html.haml +20 -0
  67. data/lib/generators/tripper/layout/USAGE +18 -0
  68. data/lib/generators/tripper/layout/layout_generator.rb +29 -0
  69. data/lib/generators/tripper/layout/templates/error_messages_helper.rb +23 -0
  70. data/lib/generators/tripper/layout/templates/layout.html.erb +19 -0
  71. data/lib/generators/tripper/layout/templates/layout.html.haml +21 -0
  72. data/lib/generators/tripper/layout/templates/layout_helper.rb +22 -0
  73. data/lib/generators/tripper/layout/templates/stylesheet.css +83 -0
  74. data/lib/generators/tripper/layout/templates/stylesheet.sass +73 -0
  75. data/lib/generators/tripper/obj_constraint.rb +23 -0
  76. data/lib/generators/tripper/predicate.rb +12 -0
  77. data/lib/generators/tripper/sync_with_community/model.rb +260 -0
  78. data/lib/generators/tripper/sync_with_community/sync_with_community_generator.rb +310 -0
  79. data/lib/generators/tripper/sync_with_community/templates/migration.rb +7 -0
  80. data/lib/generators/tripper/sync_with_community/templates/model/belongs_to.rb +1 -0
  81. data/lib/generators/tripper/sync_with_community/templates/model/has_one.rb +1 -0
  82. data/lib/generators/tripper/sync_with_community/templates/model/validates.rb +2 -0
  83. data/lib/generators/tripper/templates/actions/create.rb +8 -0
  84. data/lib/generators/tripper/templates/actions/destroy.rb +5 -0
  85. data/lib/generators/tripper/templates/actions/edit.rb +3 -0
  86. data/lib/generators/tripper/templates/actions/index.rb +3 -0
  87. data/lib/generators/tripper/templates/actions/new.rb +3 -0
  88. data/lib/generators/tripper/templates/actions/show.rb +3 -0
  89. data/lib/generators/tripper/templates/actions/update.rb +8 -0
  90. data/lib/generators/tripper/templates/controller.rb +3 -0
  91. data/lib/generators/tripper/templates/fixtures.yml +9 -0
  92. data/lib/generators/tripper/templates/helper.rb +2 -0
  93. data/lib/generators/tripper/templates/migration.rb +30 -0
  94. data/lib/generators/tripper/templates/model.rb +54 -0
  95. data/lib/generators/tripper/templates/tests/rspec/actions/create.rb +11 -0
  96. data/lib/generators/tripper/templates/tests/rspec/actions/destroy.rb +6 -0
  97. data/lib/generators/tripper/templates/tests/rspec/actions/edit.rb +4 -0
  98. data/lib/generators/tripper/templates/tests/rspec/actions/index.rb +4 -0
  99. data/lib/generators/tripper/templates/tests/rspec/actions/new.rb +4 -0
  100. data/lib/generators/tripper/templates/tests/rspec/actions/show.rb +4 -0
  101. data/lib/generators/tripper/templates/tests/rspec/actions/update.rb +11 -0
  102. data/lib/generators/tripper/templates/tests/rspec/controller.rb +8 -0
  103. data/lib/generators/tripper/templates/tests/rspec/model.rb +7 -0
  104. data/lib/generators/tripper/templates/tests/shoulda/actions/create.rb +13 -0
  105. data/lib/generators/tripper/templates/tests/shoulda/actions/destroy.rb +8 -0
  106. data/lib/generators/tripper/templates/tests/shoulda/actions/edit.rb +6 -0
  107. data/lib/generators/tripper/templates/tests/shoulda/actions/index.rb +6 -0
  108. data/lib/generators/tripper/templates/tests/shoulda/actions/new.rb +6 -0
  109. data/lib/generators/tripper/templates/tests/shoulda/actions/show.rb +6 -0
  110. data/lib/generators/tripper/templates/tests/shoulda/actions/update.rb +13 -0
  111. data/lib/generators/tripper/templates/tests/shoulda/controller.rb +5 -0
  112. data/lib/generators/tripper/templates/tests/shoulda/model.rb +7 -0
  113. data/lib/generators/tripper/templates/tests/testunit/actions/create.rb +11 -0
  114. data/lib/generators/tripper/templates/tests/testunit/actions/destroy.rb +6 -0
  115. data/lib/generators/tripper/templates/tests/testunit/actions/edit.rb +4 -0
  116. data/lib/generators/tripper/templates/tests/testunit/actions/index.rb +4 -0
  117. data/lib/generators/tripper/templates/tests/testunit/actions/new.rb +4 -0
  118. data/lib/generators/tripper/templates/tests/testunit/actions/show.rb +4 -0
  119. data/lib/generators/tripper/templates/tests/testunit/actions/update.rb +11 -0
  120. data/lib/generators/tripper/templates/tests/testunit/controller.rb +5 -0
  121. data/lib/generators/tripper/templates/tests/testunit/model.rb +7 -0
  122. data/lib/generators/tripper/templates/views/erb/_form.html.erb +16 -0
  123. data/lib/generators/tripper/templates/views/erb/edit.html.erb +14 -0
  124. data/lib/generators/tripper/templates/views/erb/index.html.erb +29 -0
  125. data/lib/generators/tripper/templates/views/erb/new.html.erb +7 -0
  126. data/lib/generators/tripper/templates/views/erb/show.html.erb +25 -0
  127. data/lib/generators/tripper/templates/views/haml/_form.html.haml +9 -0
  128. data/lib/generators/tripper/templates/views/haml/edit.html.haml +14 -0
  129. data/lib/generators/tripper/templates/views/haml/index.html.haml +25 -0
  130. data/lib/generators/tripper/templates/views/haml/new.html.haml +7 -0
  131. data/lib/generators/tripper/templates/views/haml/show.html.haml +20 -0
  132. data/lib/tripper.rb +1 -0
  133. data/lib/tripper/GOSPLDB/config/database.yml +6 -0
  134. data/lib/tripper/GOSPLDB/config_db.rb +9 -0
  135. data/lib/tripper/GOSPLDB/console +2 -0
  136. data/lib/tripper/GOSPLDB/gospl_db_classes.rb +343 -0
  137. data/lib/tripper/GOSPLDB/play_around.rb +4 -0
  138. data/lib/tripper/GOSPLDB/rakefile.rb +88 -0
  139. data/lib/tripper/GOSPLDBToORMDB/gospl_db_to_orm_db.rb +88 -0
  140. data/lib/tripper/ORMDB/config/database.yml +6 -0
  141. data/lib/tripper/ORMDB/config_db.rb +9 -0
  142. data/lib/tripper/ORMDB/console +2 -0
  143. data/lib/tripper/ORMDB/db/migrations/0_create_orm_object_table.rb +17 -0
  144. data/lib/tripper/ORMDB/db/migrations/10_create_no_lot_constraint_table.rb +17 -0
  145. data/lib/tripper/ORMDB/db/migrations/11_create_value_constraint_table.rb +14 -0
  146. data/lib/tripper/ORMDB/db/migrations/12_create_value_constraint_value_table.rb +16 -0
  147. data/lib/tripper/ORMDB/db/migrations/13_create_value_range_table.rb +15 -0
  148. data/lib/tripper/ORMDB/db/migrations/14_create_frequency_constraint_table.rb +16 -0
  149. data/lib/tripper/ORMDB/db/migrations/15_create_value_table.rb +15 -0
  150. data/lib/tripper/ORMDB/db/migrations/16_create_ring_constraint_table.rb +14 -0
  151. data/lib/tripper/ORMDB/db/migrations/17_create_orm_schema_table.rb +21 -0
  152. data/lib/tripper/ORMDB/db/migrations/18_create_uniqueness_constraint_table.rb +15 -0
  153. data/lib/tripper/ORMDB/db/migrations/1_create_no_lot_table.rb +18 -0
  154. data/lib/tripper/ORMDB/db/migrations/2_create_lot_table.rb +18 -0
  155. data/lib/tripper/ORMDB/db/migrations/3_create_object_role_table.rb +18 -0
  156. data/lib/tripper/ORMDB/db/migrations/4_create_reference_table.rb +17 -0
  157. data/lib/tripper/ORMDB/db/migrations/5_create_predicate_table.rb +18 -0
  158. data/lib/tripper/ORMDB/db/migrations/6_create_object_role_constraint_table.rb +18 -0
  159. data/lib/tripper/ORMDB/db/migrations/7_create_subtype_table.rb +17 -0
  160. data/lib/tripper/ORMDB/db/migrations/8_create_mandatory_constraint_table.rb +15 -0
  161. data/lib/tripper/ORMDB/db/migrations/9_create_constraint_table.rb +15 -0
  162. data/lib/tripper/ORMDB/db/orm_ml.sqlite3 +0 -0
  163. data/lib/tripper/ORMDB/db/orm_ml.sqlite3.backup +0 -0
  164. data/lib/tripper/ORMDB/db/orm_ml.sqlite3.juli28-2013 +0 -0
  165. data/lib/tripper/ORMDB/db/orm_ml.sqlite3.old +0 -0
  166. data/lib/tripper/ORMDB/db/schema.rb +58 -0
  167. data/lib/tripper/ORMDB/erd.pdf +0 -0
  168. data/lib/tripper/ORMDB/migrate_db.rb +21 -0
  169. data/lib/tripper/ORMDB/orm_db_classes.rb +423 -0
  170. data/lib/tripper/ORMDB/populate.rb +4 -0
  171. data/lib/tripper/ORMDB/rakefile.rb +88 -0
  172. data/lib/tripper/model_parsers/attribute_parser/AttributeParser.g +50 -0
  173. data/lib/tripper/model_parsers/attribute_parser/AttributeParser.tokens +13 -0
  174. data/lib/tripper/model_parsers/attribute_parser/AttributeParserLexer.rb +538 -0
  175. data/lib/tripper/model_parsers/attribute_parser/AttributeParserParser.rb +412 -0
  176. data/lib/tripper/model_parsers/attribute_parser/playing_around.rb +14 -0
  177. data/lib/tripper/model_parsers/belongs_to/BelongsToParser.g +63 -0
  178. data/lib/tripper/model_parsers/belongs_to/BelongsToParser.tokens +21 -0
  179. data/lib/tripper/model_parsers/belongs_to/BelongsToParserLexer.rb +667 -0
  180. data/lib/tripper/model_parsers/belongs_to/BelongsToParserParser.rb +552 -0
  181. data/lib/tripper/model_parsers/belongs_to/playing_around.rb +9 -0
  182. data/lib/tripper/model_parsers/database_fields_parser/DatabaseFieldsParser.g +47 -0
  183. data/lib/tripper/model_parsers/database_fields_parser/DatabaseFieldsParser.tokens +14 -0
  184. data/lib/tripper/model_parsers/database_fields_parser/DatabaseFieldsParserLexer.rb +513 -0
  185. data/lib/tripper/model_parsers/database_fields_parser/DatabaseFieldsParserParser.rb +279 -0
  186. data/lib/tripper/model_parsers/database_fields_parser/playing_around.rb +14 -0
  187. data/lib/tripper/model_parsers/has_and_belongs_to_many/HasAndBelongsToManyParser.g +92 -0
  188. data/lib/tripper/model_parsers/has_and_belongs_to_many/HasAndBelongsToManyParser.tokens +25 -0
  189. data/lib/tripper/model_parsers/has_and_belongs_to_many/HasAndBelongsToManyParserLexer.rb +787 -0
  190. data/lib/tripper/model_parsers/has_and_belongs_to_many/HasAndBelongsToManyParserParser.rb +1024 -0
  191. data/lib/tripper/model_parsers/has_and_belongs_to_many/playing_around.rb +9 -0
  192. data/lib/tripper/model_parsers/has_many/HasManyParser.g +77 -0
  193. data/lib/tripper/model_parsers/has_many/HasManyParser.tokens +23 -0
  194. data/lib/tripper/model_parsers/has_many/HasManyParserLexer.rb +710 -0
  195. data/lib/tripper/model_parsers/has_many/HasManyParserParser.rb +788 -0
  196. data/lib/tripper/model_parsers/has_many/playing_around.rb +9 -0
  197. data/lib/tripper/model_parsers/has_one/HasOneParser.g +63 -0
  198. data/lib/tripper/model_parsers/has_one/HasOneParser.tokens +21 -0
  199. data/lib/tripper/model_parsers/has_one/HasOneParserLexer.rb +664 -0
  200. data/lib/tripper/model_parsers/has_one/HasOneParserParser.rb +552 -0
  201. data/lib/tripper/model_parsers/has_one/playing_around.rb +9 -0
  202. data/lib/tripper/model_parsers/validates/ValidatesParser.g +68 -0
  203. data/lib/tripper/model_parsers/validates/ValidatesParser.tokens +35 -0
  204. data/lib/tripper/model_parsers/validates/ValidatesParserLexer.rb +899 -0
  205. data/lib/tripper/model_parsers/validates/ValidatesParserParser.rb +869 -0
  206. data/lib/tripper/model_parsers/validates/playing_around.rb +9 -0
  207. data/lib/tripper/rails.rb +8 -0
  208. data/lib/tripper/version.rb +3 -0
  209. data/tripper.gemspec +33 -0
  210. metadata +408 -0
@@ -0,0 +1,23 @@
1
+ module ErrorMessagesHelper
2
+ # Render error messages for the given objects. The :message and :header_message options are allowed.
3
+ def error_messages_for(*objects)
4
+ options = objects.extract_options!
5
+ options[:header_message] ||= I18n.t(:"activerecord.errors.header", :default => "Invalid Fields")
6
+ options[:message] ||= I18n.t(:"activerecord.errors.message", :default => "Correct the following errors and try again.")
7
+ messages = objects.compact.map { |o| o.errors.full_messages }.flatten
8
+ unless messages.empty?
9
+ content_tag(:div, :class => "error_messages") do
10
+ list_items = messages.map { |msg| content_tag(:li, msg.html_safe) }
11
+ content_tag(:h2, options[:header_message].html_safe) + content_tag(:p, options[:message].html_safe) + content_tag(:ul, list_items.join.html_safe)
12
+ end
13
+ end
14
+ end
15
+
16
+ module FormBuilderAdditions
17
+ def error_messages(options = {})
18
+ @template.error_messages_for(@object, options)
19
+ end
20
+ end
21
+ end
22
+
23
+ ActionView::Helpers::FormBuilder.send(:include, ErrorMessagesHelper::FormBuilderAdditions)
@@ -0,0 +1,19 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title><%%= content_for?(:title) ? yield(:title) : "Untitled" %></title>
5
+ <%%= stylesheet_link_tag "<%= file_name %>" %>
6
+ <%%= javascript_include_tag :defaults %>
7
+ <%%= csrf_meta_tag %>
8
+ <%%= yield(:head) %>
9
+ </head>
10
+ <body>
11
+ <div id="container">
12
+ <%% flash.each do |name, msg| %>
13
+ <%%= content_tag :div, msg, :id => "flash_#{name}" %>
14
+ <%% end %>
15
+ <%%= content_tag :h1, yield(:title) if show_title? %>
16
+ <%%= yield %>
17
+ </div>
18
+ </body>
19
+ </html>
@@ -0,0 +1,21 @@
1
+ !!!
2
+ %html
3
+
4
+ %head
5
+ %title
6
+ = content_for?(:title) ? yield(:title) : "Untitled"
7
+ %meta{"http-equiv"=>"Content-Type", :content=>"text/html; charset=utf-8"}/
8
+ = stylesheet_link_tag "<%= file_name %>"
9
+ = javascript_include_tag :defaults
10
+ = csrf_meta_tag
11
+ = yield(:head)
12
+
13
+ %body
14
+ #container
15
+ - flash.each do |name, msg|
16
+ = content_tag :div, msg, :id => "flash_#{name}"
17
+
18
+ - if show_title?
19
+ %h1= yield(:title)
20
+
21
+ = yield
@@ -0,0 +1,22 @@
1
+ # These helper methods can be called in your template to set variables to be used in the layout
2
+ # This module should be included in all views globally,
3
+ # to do so you may need to add this line to your ApplicationController
4
+ # helper :layout
5
+ module LayoutHelper
6
+ def title(page_title, show_title = true)
7
+ content_for(:title) { h(page_title.to_s) }
8
+ @show_title = show_title
9
+ end
10
+
11
+ def show_title?
12
+ @show_title
13
+ end
14
+
15
+ def stylesheet(*args)
16
+ content_for(:head) { stylesheet_link_tag(*args) }
17
+ end
18
+
19
+ def javascript(*args)
20
+ content_for(:head) { javascript_include_tag(*args) }
21
+ end
22
+ end
@@ -0,0 +1,83 @@
1
+ html, body {
2
+ background-color: #4B7399;
3
+ font-family: Verdana, Helvetica, Arial;
4
+ font-size: 14px;
5
+ }
6
+
7
+ a img {
8
+ border: none;
9
+ }
10
+
11
+ a {
12
+ color: #0000FF;
13
+ }
14
+
15
+ .clear {
16
+ clear: both;
17
+ height: 0;
18
+ overflow: hidden;
19
+ }
20
+
21
+ #container {
22
+ width: 75%;
23
+ margin: 0 auto;
24
+ background-color: #FFF;
25
+ padding: 20px 40px;
26
+ border: solid 1px black;
27
+ margin-top: 20px;
28
+ }
29
+
30
+ #flash_notice, #flash_error, #flash_alert {
31
+ padding: 5px 8px;
32
+ margin: 10px 0;
33
+ }
34
+
35
+ #flash_notice {
36
+ background-color: #CFC;
37
+ border: solid 1px #6C6;
38
+ }
39
+
40
+ #flash_error, #flash_alert {
41
+ background-color: #FCC;
42
+ border: solid 1px #C66;
43
+ }
44
+
45
+ .error_messages {
46
+ width: 400px;
47
+ border: 2px solid #CF0000;
48
+ padding: 0px;
49
+ padding-bottom: 12px;
50
+ margin-bottom: 20px;
51
+ background-color: #f0f0f0;
52
+ font-size: 12px;
53
+ }
54
+
55
+ .error_messages h2 {
56
+ text-align: left;
57
+ font-weight: bold;
58
+ padding: 5px 10px;
59
+ font-size: 12px;
60
+ margin: 0;
61
+ background-color: #c00;
62
+ color: #fff;
63
+ }
64
+
65
+ .error_messages p {
66
+ margin: 8px 10px;
67
+ }
68
+
69
+ .error_messages ul {
70
+ margin: 0;
71
+ }
72
+
73
+ .field_with_errors {
74
+ display: inline;
75
+ }
76
+
77
+ form .field, form .actions {
78
+ margin: 10px 0;
79
+ }
80
+
81
+ form label {
82
+ display: block;
83
+ }
@@ -0,0 +1,73 @@
1
+ $primary_color: #4b7399
2
+
3
+ body
4
+ background-color: $primary_color
5
+ font:
6
+ family: Verdana, Helvetica, Arial
7
+ size: 14px
8
+
9
+ a
10
+ color: blue
11
+ img
12
+ border: none
13
+
14
+ .clear
15
+ clear: both
16
+ height: 0
17
+ overflow: hidden
18
+
19
+ #container
20
+ width: 75%
21
+ margin: 0 auto
22
+ background: white
23
+ padding: 20px 40px
24
+ border: solid 1px black
25
+ margin-top: 20px
26
+
27
+ #flash_notice,
28
+ #flash_error,
29
+ #flash_alert
30
+ padding: 5px 8px
31
+ margin: 10px 0
32
+
33
+ #flash_notice
34
+ background-color: #ccffcc
35
+ border: solid 1px #66cc66
36
+
37
+ #flash_error,
38
+ #flash_alert
39
+ background-color: #ffcccc
40
+ border: solid 1px #cc6666
41
+
42
+ .error_messages
43
+ width: 400px
44
+ border: 2px solid #cf0000
45
+ padding: 0
46
+ padding-bottom: 12px
47
+ margin-bottom: 20px
48
+ background-color: #f0f0f0
49
+ font:
50
+ size: 12px
51
+ h2
52
+ text-align: left
53
+ padding: 5px 5px 5px 15px
54
+ margin: 0
55
+ font:
56
+ weight: bold
57
+ size: 12px
58
+ background-color: #cc0000
59
+ color: white
60
+ p
61
+ margin: 8px 10px
62
+ ul
63
+ margin: 0
64
+
65
+ .field_with_errors
66
+ display: inline
67
+
68
+ form .field,
69
+ form .actions
70
+ margin: 10px 0
71
+
72
+ form label
73
+ display: block
@@ -0,0 +1,23 @@
1
+ module Tripper
2
+ module Generators
3
+ # This class will contain an object and the constraints, from the point of view of a perticular predicate.
4
+ #
5
+ class ObjConstraint
6
+ attr_accessor :obj, :object_role_constraints
7
+
8
+ def contains_identifying_constraint?
9
+ @object_role_constraints.inject(false) {|res, obj_role_constraint| res || (obj_role_constraint.constraint_type == "Tripper::ORMDB::UniquenessConstraint" && obj_role_constraint.constraint.object_roles.count == 1)}
10
+ end
11
+
12
+ def external_uniqueness_constraint_object_types
13
+ external_uniqueness_constraints.map {|obj_role_constraint| obj_role_constraint.constraint.object_roles.map {|obj_role| obj_role.orm_object}}
14
+ end
15
+
16
+
17
+
18
+ def external_uniqueness_constraints
19
+ @object_role_constraints.select {|obj_role_constraint| obj_role_constraint.constraint_type == "Tripper::ORMDB::UniquenessConstraint" && obj_role_constraint.constraint.object_roles.count != 1}
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,12 @@
1
+ module Tripper
2
+ module Generators
3
+ #This predicate class will be used to represend a predicate from the point of view a particular object type.
4
+ #that perticular object type will always be the head of the Predicate.
5
+ class Predicate
6
+ attr_accessor :head, :tail
7
+ def identified_by_tail?
8
+ tail.contains_identifying_constraint?
9
+ end
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,260 @@
1
+ require 'generators/tripper'
2
+
3
+ require 'tripper/GOSPLDB/gospl_db_classes'
4
+ require 'tripper/ORMDB/orm_db_classes'
5
+ require 'tripper/model_parsers/attribute_parser/AttributeParserParser'
6
+ require 'tripper/model_parsers/belongs_to/BelongsToParserParser'
7
+ require 'tripper/model_parsers/validates/ValidatesParserParser'
8
+ require 'tripper/model_parsers/has_one/HasOneParserParser'
9
+ require 'tripper/model_parsers/database_fields_parser/DatabaseFieldsParserParser'
10
+ require 'tripper/model_parsers/has_and_belongs_to_many/HasAndBelongsToManyParserParser'
11
+ require 'tripper/model_parsers/has_many/HasManyParserParser'
12
+
13
+ require "highline/import"
14
+
15
+ module Tripper
16
+ module Generators
17
+ class Model
18
+ include Comparable
19
+ attr_accessor :path, :class_name, :attributes, :belongs_tos, :has_ones, :has_manies, :has_and_belongs_to_manies, :validations
20
+
21
+ def initialize(path)
22
+ @path = path
23
+ @class_name = File.basename(path, ".rb").camelize
24
+ @attributes = []
25
+ @belongs_tos = []
26
+ @has_ones = []
27
+ @has_manies = []
28
+ @has_and_belongs_to_manies = []
29
+ @validations = Validations.new
30
+ # puts "parsing file"+path
31
+ unless path.include? "app/tripper/models"
32
+ @attributes = Kernel.const_get(@class_name).column_names - ["id", "created_at", "updated_at"]
33
+ end
34
+ File.foreach(path) do |line|
35
+ if line.include?("# database_fields:") && path.include?("app/tripper/models")
36
+ parser = DatabaseFieldsParser::Parser.new(line)
37
+ res = parser.database_fields
38
+ @attributes = res
39
+ elsif line.include? "has_one"
40
+ # puts "parsing has_one"
41
+ parser = HasOneParser::Parser.new(line)
42
+ res = parser.has_one
43
+ @has_ones << HasOne.new(res[:attribute], res[:class_name]) if res
44
+ elsif line.include? "has_many"
45
+ # puts "parsing has_many"
46
+ parser = HasManyParser::Parser.new(line)
47
+ res = parser.has_many
48
+ @has_manies << HasMany.new(res[:attribute], res[:class_name]) if res
49
+ elsif line.include? "has_and_belongs_to_many"
50
+ #puts "parsing has_and_belongs_to_many"
51
+ parser = HasAndBelongsToManyParser::Parser.new(line)
52
+ res = parser.has_and_belongs_to_many
53
+ @has_and_belongs_to_manies << HasAndBelongsToMany.new(res[:attribute], res[:class_name]) if res
54
+ elsif line.include? "belongs_to"
55
+ # puts "parsing belongs_to"
56
+ parser = BelongsToParser::Parser.new(line)
57
+ res = parser.belongs_to
58
+ @belongs_tos << BelongsTo.new(res[:attribute], res[:class_name]) if res
59
+ elsif line.include?("validates") && (line.include?("uniqueness") || line.include?("presence"))
60
+ # puts "parsing validates"
61
+ parser = ValidatesParser::Parser.new(line)
62
+ res = parser.validates
63
+ @validations << Validation.new(res[:type], res[:attribute], res[:on]) if res
64
+ end
65
+ end
66
+ end
67
+
68
+ def find_belong_tos_by_name name
69
+ find_all_by_name :belongs_tos, name
70
+ end
71
+
72
+ def find_has_ones_by_name name
73
+ find_all_by_name :has_ones, name
74
+ end
75
+
76
+ def find_has_manies_by_name name
77
+ find_all_by_name :has_manies, name
78
+ end
79
+
80
+ def find_has_and_belongs_to_manies_by_name name
81
+ find_all_by_name :has_and_belongs_to_manies, name
82
+ end
83
+
84
+ def find_mandatory_constraints_by_name name
85
+ find_all_constraints_by_name :presence, name
86
+ end
87
+
88
+ def find_uniqueness_constraints_by_name name
89
+ find_all_constraints_by_name :uniqueness, name
90
+ end
91
+
92
+ # we need to uniqueify and sort the validations list, to allow symetric constraints
93
+ # e.g validates :my_time_id, :uniqueness => {:scope => :my_date_id}
94
+ # and validates :my_date_id, :uniqueness => {:scope => :my_time_id}
95
+ def <=> other
96
+ [self.class_name, self.attributes.sort, self.belongs_tos.sort, self.has_ones.sort, self.has_manies.sort, self.has_and_belongs_to_manies.sort, self.validations.uniq{|v| v.comparable_object}.sort] <=> [other.class_name, other.attributes.sort, other.belongs_tos.sort, other.has_ones.sort, other.has_manies.sort, other.has_and_belongs_to_manies.sort, other.validations.uniq{|v| v.comparable_object}.sort]
97
+ end
98
+
99
+ def to_s
100
+ self.class_name + " " + self.attributes.to_s + " " + self.belongs_tos.to_s + " " + self.validations.to_s
101
+ end
102
+
103
+ def differences other
104
+ ModelDiff.new(self, other)
105
+ end
106
+
107
+ private
108
+
109
+ def find_all_by_name type, name
110
+ self.send(type).find_all {|v| v.attribute == name || v.class_name == name }
111
+ end
112
+
113
+ def find_all_constraints_by_name type, name
114
+ self.validations.send(type).find_all {|v| (v.attribute == name) || (v.scope.include? (name)) }
115
+ end
116
+
117
+ end
118
+
119
+ # compaires model1 with model2. The result is in the point of view of model1.
120
+ # e.g. if it has: :lacking=>[time], it means that model1 did not have time, while model2 did.
121
+ class ModelDiff
122
+ attr_accessor :model1, :model2, :attributes_diff, :belongs_tos_diff, :has_ones_diff, :has_manies_diff, :has_and_belongs_to_manies_diff, :validations_diff
123
+
124
+ def initialize model1, model2
125
+ @model1 = model1
126
+ @model2 = model2
127
+ @attributes_diff = difference_in_field :attributes
128
+ @belongs_tos_diff = difference_in_field :belongs_tos
129
+ @has_ones_diff = difference_in_field :has_ones
130
+ @has_manies_diff = difference_in_field :has_manies
131
+ @has_and_belongs_to_manies_diff = difference_in_field :has_and_belongs_to_manies
132
+ @validations_diff = difference_in_field :validations
133
+ end
134
+
135
+ def inspect
136
+ res = {model1: @model1.class_name, model2: @model2.class_name}
137
+ res[:attributes_diff] = @attributes_diff unless @attributes_diff.empty?
138
+ res[:belongs_tos_diff] = @belongs_tos_diff unless @belongs_tos_diff.empty?
139
+ res[:has_ones_diff] = @has_ones_diff unless @has_ones_diff.empty?
140
+ res[:has_manies_diff] = @has_manies_diff unless @has_manies_diff.empty?
141
+ res[:has_and_belongs_to_manies_diff] = @has_and_belongs_to_manies_diff unless @has_and_belongs_to_manies_diff.empty?
142
+ res[:validations_diff] = @validations_diff unless @validations_diff.empty?
143
+ res
144
+ end
145
+
146
+ private
147
+
148
+ def difference_in_field field
149
+ extra = @model1.send(field).reject { |att| @model2.send(field).include? att }
150
+ lacking = @model2.send(field).reject { |att| @model1.send(field).include? att }
151
+ FieldDiff.new extra: extra, lacking: lacking
152
+ end
153
+
154
+ class FieldDiff
155
+ attr_accessor :extra, :lacking
156
+ def initialize params={}
157
+ @extra = (params[:extra] ? params[:extra] : [])
158
+ @lacking = (params[:lacking] ? params[:lacking] : [])
159
+ end
160
+
161
+ def inspect
162
+ {extra: @extra, lacking: @lacking}
163
+ end
164
+
165
+ def empty?
166
+ @extra.empty? && @lacking.empty?
167
+ end
168
+ end
169
+ end
170
+
171
+ class Relation
172
+ include Comparable
173
+ attr_accessor :name, :class_name, :type
174
+
175
+ def initialize (type, name, class_name=nil)
176
+ @type = @type
177
+ @name = name
178
+ @class_name = class_name
179
+ end
180
+
181
+ def to_s
182
+ self.name + " " + (self.class_name ? self.class_name : "")
183
+ end
184
+
185
+ def <=> other
186
+ [self.name, self.class_name, self.type] <=> [self.name, other.class_name, self.type]
187
+ end
188
+
189
+ def == other
190
+ self.name == other.name && self.class_name == other.class_name && self.type == other.type
191
+ end
192
+ end
193
+
194
+ class BelongsTo < Relation
195
+ def initialize (name, class_name=nil)
196
+ super("belongs_to", name, class_name)
197
+ end
198
+ end
199
+
200
+ class HasOne < Relation
201
+ def initialize (name, class_name=nil)
202
+ super("has_one", name, class_name)
203
+ end
204
+ end
205
+
206
+ class HasMany < Relation
207
+ def initialize (name, class_name=nil)
208
+ super("has_many", name, class_name)
209
+ end
210
+ end
211
+
212
+ class HasAndBelongsToMany < Relation
213
+ def initialize (name, class_name=nil)
214
+ super("has_and_belongs_to_many", name, class_name)
215
+ end
216
+ end
217
+
218
+ class Validations < Array
219
+ def presence
220
+ self.select do |obj|
221
+ obj.type == "presence"
222
+ end
223
+ end
224
+ def uniqueness
225
+ self.select do |obj|
226
+ obj.type == "uniqueness"
227
+ end
228
+ end
229
+ end
230
+
231
+ class Validation
232
+ include Comparable
233
+ attr_accessor :type, :attribute, :scope
234
+
235
+ def initialize (type, attribute, scope)
236
+ @type = type; @attribute = attribute; @scope = scope
237
+ @combined = [scope, attribute].flatten.uniq.sort
238
+ end
239
+
240
+ def to_s
241
+ self.type + " " + @combined.to_s#.sort.to_s
242
+ end
243
+ def <=> other
244
+ self.comparable_object <=> other.comparable_object
245
+ end
246
+
247
+ def == other
248
+ self.comparable_object == other.comparable_object
249
+ end
250
+
251
+ def comparable_object
252
+ [self.type, @combined]
253
+ end
254
+
255
+ private
256
+
257
+ attr_accessor :combined
258
+ end
259
+ end
260
+ end