tripper 0.0.3d

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 (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