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,310 @@
1
+ require 'generators/tripper'
2
+
3
+ require 'rails/generators'
4
+ require 'rails/generators/migration'
5
+ require 'rails/generators/generated_attribute'
6
+ require 'generators/tripper/commonalities/commonalities'
7
+
8
+ require 'tripper/GOSPLDB/gospl_db_classes'
9
+ require 'tripper/ORMDB/orm_db_classes'
10
+ require 'generators/tripper/sync_with_community/model'
11
+
12
+ module Tripper
13
+ module Generators
14
+ class SyncWithCommunityGenerator < Base
15
+ include Rails::Generators::Migration
16
+ include Tripper::Generators::Commonalities
17
+
18
+ attr_accessor :models, :tripper_models, :ontology_models, :files_to_remove, :orm_schema
19
+
20
+ desc "Detect changes to the model code"
21
+
22
+ argument :community_name, :type => :string
23
+
24
+ #class varialbe for timestamps
25
+ @@timestamp = Time.now.utc
26
+
27
+ def initialize (*args, &block)
28
+ super
29
+ @files_to_remove = []
30
+ @orm_schema = Tripper::ORMDB::OrmSchema.find_by_title @community_name
31
+ # create_new_ontology_models @community_name #TODO: uncomment again
32
+ @models = []
33
+ @models = Dir.glob("app/models/*.rb").inject([]) {|res, path| res << Model.new(path); res}
34
+ @tripper_models = Dir.glob("app/tripper/models/*.rb").inject([]) {|res, path| res << Model.new(path); res}
35
+ # @models.each_index { |i| puts "#{@models[i].class_name}: #{@models[i] == @tripper_models[i]} :#{@tripper_models[i].class_name}"
36
+ # }
37
+
38
+ @ontology_models = Dir.glob("app/tripper/ontology_models/*.rb").inject([]) {|res, path| res << Model.new(path); res}
39
+ puts "There are no changes" unless find_differences
40
+ end
41
+
42
+ private
43
+
44
+ def find_differences
45
+ pending_changes = false
46
+ detect_lexon_duplicates = Set.new
47
+ model_names = @models.map(&:class_name).to_set
48
+ tripper_model_names = @tripper_models.map(&:class_name).to_set
49
+ ontology_model_names = @ontology_models.map(&:class_name).to_set
50
+ removed_from_ontology_vs_tripper = tripper_model_names - ontology_model_names #+- done
51
+ added_to_ontology_vs_tripper = ontology_model_names - tripper_model_names
52
+ removed_from_code_vs_tripper = tripper_model_names - model_names
53
+ added_to_code_vs_tripper = model_names - tripper_model_names
54
+
55
+ puts model_names.inspect
56
+ puts tripper_model_names.inspect
57
+ puts ontology_model_names.inspect
58
+ puts removed_from_ontology_vs_tripper.inspect
59
+ puts added_to_ontology_vs_tripper.inspect
60
+ puts removed_from_code_vs_tripper.inspect
61
+ puts added_to_code_vs_tripper.inspect
62
+
63
+ removed_from_ontology_vs_tripper.each do |class_name|
64
+ if model_names.include? class_name
65
+ app_model = @models.find {|m| m.class_name == class_name}
66
+ files_to_remove << app_model.path
67
+ end
68
+ end
69
+ create_new_models_in_tripper added_to_code_vs_tripper, ontology_model_names
70
+
71
+
72
+ # @tripper_models.each do |tripper_model|
73
+ # app_model = @models.find {|m| m.class_name == tripper_model.class_name}
74
+ # if app_model == tripper_model
75
+ # pending_changes = true
76
+ # differences = app_model.differences tripper_model
77
+ # puts differences.inspect
78
+ # model_changes = get_model_changes differences
79
+ # ontology_changes = get_ontology_changes differences, detect_lexon_duplicates
80
+ # puts model_changes
81
+ # write_changes_to_file app_model, model_changes
82
+ # get_migration_changes differences
83
+ # end
84
+ # end
85
+
86
+ #TODO: extra vs tripper, create: model, view, controller and migration
87
+
88
+ return true
89
+ end
90
+
91
+ def get_migration_changes differences
92
+ unless differences.attributes_diff.lacking.empty?
93
+ @migration_action = "add" # remove is the oposite :)
94
+ @migration_name = differences.model1.class_name.pluralize
95
+ @diff_string_list = differences.attributes_diff.lacking.map(&:camelize).join("And")
96
+ @differences = differences
97
+ migration_template 'migration.rb', "db/migrate/#{@migration_action}_#{@diff_string_list.underscore}_to_#{@migration_name.underscore}.rb"
98
+ end
99
+ end
100
+
101
+ def get_model_changes differences
102
+ changes = []
103
+ unless differences.belongs_tos_diff.lacking.empty?
104
+ differences.belongs_tos_diff.lacking.each do |belongs_to_obj|
105
+ changes << create_belongs_to(belongs_to_obj)
106
+ end
107
+ end
108
+ unless differences.has_ones_diff.lacking.empty?
109
+ differences.has_ones_diff.lacking.each do |has_one_obj|
110
+ changes << create_has_one(has_one_obj)
111
+ end
112
+ end
113
+ unless differences.validations_diff.lacking.empty?
114
+ differences.validations_diff.lacking.each do |validation_obj|
115
+ changes << create_validation(validation_obj)
116
+ end
117
+ end
118
+ return changes
119
+ end
120
+
121
+ def general_ontoloty_diference_detection differences, dups, method
122
+ differences.send(method).extra.each do |belongs_to_obj|
123
+ head = differences.model1.class_name.camelize.singularize
124
+ tail = belongs_to_obj.name.camelize.singularize
125
+ role = "has"
126
+ corole = "of"
127
+ unless dups.include? (head+role+corole+tail)
128
+ dups << (head+role+corole+tail)
129
+ dups << (tail+role+corole+head)
130
+ puts "new lexon: head=#{head} role=#{role} corole=#{corole} tail=#{tail}"
131
+ end
132
+ end
133
+ end
134
+
135
+ def get_ontology_changes differences, dups
136
+ changes = []
137
+ unless differences.belongs_tos_diff.extra.empty?
138
+ general_ontoloty_diference_detection differences, dups, :belongs_tos_diff
139
+ end
140
+ unless differences.has_ones_diff.extra.empty?
141
+ general_ontoloty_diference_detection differences, dups, :has_ones_diff
142
+ end
143
+ unless differences.has_manies_diff.extra.empty?
144
+ general_ontoloty_diference_detection differences, dups, :has_manies_diff
145
+ end
146
+ unless differences.has_and_belongs_to_manies_diff.extra.empty?
147
+ general_ontoloty_diference_detection differences, dups, :has_and_belongs_to_manies_diff
148
+ end
149
+ unless differences.validations_diff.extra.empty?
150
+ differences.validations_diff.extra.each do |validation_obj|
151
+ "new validation"
152
+ end
153
+ end
154
+ return changes
155
+ end
156
+
157
+ def create_new_models_in_tripper model_names, ontology_model_names
158
+ model_names.each do |class_name|
159
+ unless ontology_model_names.include? class_name
160
+ app_model = @models.find {|m| m.class_name == class_name}
161
+ nolot_name = get_ontology_name(class_name)
162
+ nolot = @orm_schema.no_lots.where("name = ? OR application_name = ?",nolot_name,class_name).first
163
+ nolot = @orm_schema.no_lots.create!(Hash[:name => nolot_name, :application_name => class_name]) unless nolot
164
+ for attribute in app_model.attributes do
165
+ unless attribute_is_foreign_key? attribute
166
+ lot_name = get_ontology_name(attribute)
167
+ lot = @orm_schema.lots.create!(Hash[:name => nolot_name, :application_name => attribute])
168
+ predicate = @orm_schema.predicates.create! Hash[orm_schema_id: @orm_schema.id ]
169
+ role = predicate.object_roles.create! Hash[orm_object_id: nolot.id, orm_object_type: nolot.class.name,role: "has", orm_schema_id: @orm_schema. id]
170
+ corole = predicate.object_roles.create! Hash[orm_object_id: lot.id, orm_object_type: lot.class.name,role: "of", orm_schema_id: @orm_schema.id]
171
+ #TODO: check the constraints in the app_model, and add to the role and corole
172
+ # unless (bts = app_model.find_uniqueness_constraints_by_name(attribute)). empty?
173
+ # if bts.first.scope.empty?
174
+ # role.uniqueness_constraints.create!()
175
+ # else
176
+
177
+ # end
178
+ # end
179
+ # unless (bts = app_model.find_mandatory_constraints_by_name(attribute)). empty?
180
+ # role.mandatory_constraints.create!()
181
+ # end
182
+ end
183
+ end
184
+ end
185
+ end
186
+ model_names.each do |class_name|
187
+ unless ontology_model_names.include? class_name
188
+ app_model = @models.find {|m| m.class_name == class_name}
189
+ nolot_name = get_ontology_name(class_name)
190
+ nolot = @orm_schema.no_lots.where("name = ? and application_name = ?",nolot_name,class_name).first
191
+ for relation in app_model.belongs_tos do
192
+ nolot2_name = get_ontology_name(relation.name)
193
+ res = create_new_predicate_nolot_nolot nolot, relation, nolot2_name
194
+ if res
195
+ role = res[:role]
196
+ role.uniqueness_constraints.create!
197
+ end
198
+ end
199
+ for relation in app_model.has_ones do
200
+ nolot2_name = get_ontology_name(relation.name)
201
+ create_new_predicate_nolot_nolot nolot, relation, nolot2_name
202
+ if res
203
+ role = res[:role]
204
+ role.uniqueness_constraints.create!
205
+ end
206
+ end
207
+ for relation in app_model.has_manies do
208
+ nolot2_name = get_ontology_name(relation.name.singularize)
209
+ create_new_predicate_nolot_nolot nolot, relation, nolot2_name
210
+ end
211
+ for relation in app_model.has_and_belongs_to_manies do
212
+ nolot2_name = get_ontology_name(relation.name.singularize)
213
+ create_new_predicate_nolot_nolot nolot, relation, nolot2_name
214
+ end
215
+ end
216
+ end
217
+ model_names.each do |class_name|
218
+ unless ontology_model_names.include? class_name
219
+ app_model = @models.find {|m| m.class_name == class_name}
220
+ nolot_name = get_ontology_name(class_name)
221
+ nolot = @orm_schema.no_lots.where("name = ? and application_name = ?",nolot_name,class_name).first
222
+ validations = app_model.validations
223
+ predicates = nolot.predicates
224
+ for val in validations.presence
225
+ attribute = remove_id val.attribute
226
+ if app_model.attributes.include? attribute
227
+ pred = predicates.find {|p| p.lots.map(&:name).include? attribute}
228
+ obj_role = pred.object_roles.where("orm_object_id = ?", nolot.id).first
229
+ obj_role.mandatory_constraints.create!
230
+ else
231
+ pred = predicates.find {|p| p.nolots.map(&:name).include? attribute}
232
+ puts "val attribute: #{attribute}"
233
+ predicates.each {|p| puts p.nolots.map(&:name).inspect}
234
+ obj_role = pred.object_roles.where("orm_object_id = ?", nolot.id).first
235
+ obj_role.mandatory_constraints.create!
236
+ end
237
+ end
238
+ end
239
+ end
240
+ end
241
+
242
+ def create_new_predicate_nolot_nolot nolot, relation, nolot2_name
243
+ nolot2 = @orm_schema.no_lots.where("name = ? or application_name = ?",nolot2_name,relation.name.singularize).first
244
+ all_lexons = Tripper::ORMDB::Predicate.verbalized_lexons
245
+ #unless all_lexons.include?(nolot.name+"has"nolot2.name+"of") || all_lexons.include?(nolot2.name+"has"nolot1.name+"of")
246
+ puts nolot.inspect
247
+ puts nolot2.inspect
248
+ puts nolot2_name
249
+ puts relation.name
250
+ unless all_lexons.include?(nolot.name+nolot2.name) || all_lexons.include?(nolot2.name+nolot.name)
251
+ predicate = @orm_schema.predicates.create! Hash[orm_schema_id: @orm_schema.id]
252
+ role = predicate.object_roles.create! Hash[orm_object_id: nolot.id, orm_object_type: nolot.class.name,role: "has", orm_schema_id: @orm_schema.id]
253
+ corole = predicate.object_roles.create! Hash[orm_object_id: nolot2.id, orm_object_type: nolot2.class.name,role: "of", orm_schema_id: @orm_schema.id]
254
+ puts "role and corole created: #{role.inspect} nad #{corole.inspect}"
255
+ return {predicate: predicate, role: role, corole: corole}
256
+ end
257
+ end
258
+
259
+ def write_changes_to_file app_model, changes
260
+ lines = IO.readlines(app_model.path).map do |line|
261
+ if line.include?("class") && line.include?(app_model.class_name)
262
+ line = line + '' + changes.join('')
263
+ end
264
+ line
265
+ end
266
+ File.open(app_model.path, 'w') do |file|
267
+ file.puts lines
268
+ end
269
+ end
270
+
271
+ def create_belongs_to obj
272
+ @belongs_to_obj = obj
273
+ read_template("model/belongs_to.rb")
274
+ end
275
+
276
+ def create_has_one obj
277
+ @has_one_obj = obj
278
+ read_template("model/has_one.rb")
279
+ end
280
+
281
+ def create_validation obj
282
+ @validation = obj
283
+ read_template("model/validates.rb")
284
+ end
285
+
286
+ def create_validation_scope scope
287
+ if scope.empty?
288
+ return "true"
289
+ elsif scope.size == 1
290
+ return "{:scope => :#{scope.first}}"
291
+ else
292
+ return "{:scope => [#{scope.map{|s| ':'+s}.join(", ")}]}"
293
+ end
294
+ end
295
+
296
+ def read_template(relative_path)
297
+ ERB.new(File.read(find_in_source_paths(relative_path)), nil, '-').result(binding)
298
+ end
299
+
300
+ def self.next_migration_number(dirname) #:nodoc:
301
+ if ActiveRecord::Base.timestamped_migrations
302
+ @@timestamp = @@timestamp + 1.seconds
303
+ @@timestamp.strftime("%Y%m%d%H%M%S")
304
+ else
305
+ "%.3d" % (current_migration_number(dirname) + 1)
306
+ end
307
+ end
308
+ end
309
+ end
310
+ end
@@ -0,0 +1,7 @@
1
+ class <%= @migration_action.camelize %><%= @diff_string_list %>To<%= @migration_name %> < ActiveRecord::Migration
2
+ def change
3
+ <%- @differences.attributes_diff.lacking.each do |att| -%>
4
+ <%= @migration_action.downcase %>_column :<%= @migration_name.underscore %>, :<%= att.underscore %>, :string
5
+ <%- end %>
6
+ end
7
+ end
@@ -0,0 +1 @@
1
+ belongs_to :<%= @belongs_to_obj.name %>
@@ -0,0 +1 @@
1
+ has_one :<%= @has_one_obj.name %>
@@ -0,0 +1,2 @@
1
+
2
+ validates :<%= @validation.attribute %>, :<%= @validation.type %> => <%= create_validation_scope @validation.scope %>
@@ -0,0 +1,8 @@
1
+ def create
2
+ @<%= instance_name %> = <%= class_name %>.new(params[:<%= instance_name %>])
3
+ if @<%= instance_name %>.save
4
+ redirect_to <%= item_url %>, :notice => "Successfully created <%= class_name.underscore.humanize.downcase %>."
5
+ else
6
+ render :new
7
+ end
8
+ end
@@ -0,0 +1,5 @@
1
+ def destroy
2
+ @<%= instance_name %> = <%= class_name %>.find(params[:id])
3
+ @<%= instance_name %>.destroy
4
+ redirect_to <%= items_url %>, :notice => "Successfully destroyed <%= class_name.underscore.humanize.downcase %>."
5
+ end
@@ -0,0 +1,3 @@
1
+ def edit
2
+ @<%= instance_name %> = <%= class_name %>.find(params[:id])
3
+ end
@@ -0,0 +1,3 @@
1
+ def index
2
+ @<%= instances_name %> = <%= class_name %>.all
3
+ end
@@ -0,0 +1,3 @@
1
+ def new
2
+ @<%= instance_name %> = <%= class_name %>.new
3
+ end
@@ -0,0 +1,3 @@
1
+ def show
2
+ @<%= instance_name %> = <%= class_name %>.find(params[:id])
3
+ end
@@ -0,0 +1,8 @@
1
+ def update
2
+ @<%= instance_name %> = <%= class_name %>.find(params[:id])
3
+ if @<%= instance_name %>.update_attributes(params[:<%= instance_name %>])
4
+ redirect_to <%= item_url %>, :notice => "Successfully updated <%= class_name.underscore.humanize.downcase %>."
5
+ else
6
+ render :edit
7
+ end
8
+ end
@@ -0,0 +1,3 @@
1
+ class <%= plural_class_name %>Controller < ApplicationController
2
+ <%= controller_methods :actions %>
3
+ end
@@ -0,0 +1,9 @@
1
+ one:
2
+ <%- for attribute in model_attributes -%>
3
+ <%= attribute.name %>: <%= attribute.default %>
4
+ <%- end -%>
5
+
6
+ two:
7
+ <%- for attribute in model_attributes -%>
8
+ <%= attribute.name %>: <%= attribute.default %>
9
+ <%- end -%>
@@ -0,0 +1,2 @@
1
+ module <%= plural_class_name %>Helper
2
+ end
@@ -0,0 +1,30 @@
1
+ class Create<%= class_name.pluralize.delete('::') %> < ActiveRecord::Migration
2
+ def self.up
3
+ create_table :<%= plural_name.split('/').last %> do |t|
4
+ <%- for attribute in model_attributes -%>
5
+ t.<%= attribute.type.downcase %> :<%= attribute.name %>
6
+ <%- end -%>
7
+ <%- for nolot in @nolot.identifying_constraint_objects.no_lots -%>
8
+ t.references :<%= attribute_nameify get_class_name(nolot) %>
9
+ <%- end -%>
10
+ t.timestamps
11
+ end
12
+ <%- for nolot in @nolot.has_many_many -%>
13
+ <%- if @nolot.name < nolot.name -%>
14
+ create_table :<%= plural_name.split('/').last %>_<%= get_class_name(nolot).underscore.pluralize %> do |t|
15
+ t.belongs_to :<%=attribute_nameify get_class_name(@nolot)%>
16
+ t.belongs_to :<%=attribute_nameify get_class_name(nolot)%>
17
+ end
18
+ <%- end -%>
19
+ <%- end -%>
20
+ end
21
+
22
+ def self.down
23
+ drop_table :<%= plural_name.split('/').last %>
24
+ <%- for nolot in @nolot.has_many_many -%>
25
+ <%- if @nolot.name < nolot.name -%>
26
+ drop_table :<%= plural_name.split('/').last %>_<%= get_class_name(nolot).underscore.pluralize %>
27
+ <%- end -%>
28
+ <%- end -%>
29
+ end
30
+ end
@@ -0,0 +1,54 @@
1
+ class <%= @class_name %> < ActiveRecord::Base
2
+ <%- db_model_attr = @model_attributes.map { |attribute| attribute.name }.join(", ") -%>
3
+ <%- db_foreign_keys = @nolot.identifying_constraint_objects.no_lots.map {|nolot| "#{attribute_nameify get_class_name(nolot)}_id" if @nolot.contains_identifying_constraint?}.join(", ") -%>
4
+ <%- db_attributes = db_model_attr + ((db_model_attr == "" || db_foreign_keys == "") ? db_foreign_keys : (", " + db_foreign_keys)) -%>
5
+ <%- model_attr = @model_attributes.map { |attribute| ":#{attribute.name}" }.join(", ") -%>
6
+ <%- foreign_keys = @nolot.identifying_constraint_objects.no_lots.map {|nolot| ":#{attribute_nameify get_class_name(nolot)}_id" if @nolot.contains_identifying_constraint?}.join(", ") -%>
7
+ <%- attributes = model_attr + ((model_attr == "" || foreign_keys == "") ? foreign_keys : (", " + foreign_keys)) -%>
8
+ # database_fields: <%= db_attributes %>
9
+ attr_accessible <%= attributes %>
10
+
11
+ <%- for nolot in @nolot.identifying_constraint_objects.no_lots -%>
12
+ belongs_to :<%= attribute_nameify get_class_name(nolot) %>
13
+ <%- end -%>
14
+ <%- for nolot in @nolot.object_types_identified_by_me.no_lots -%>
15
+ has_one :<%= attribute_nameify get_class_name(nolot) %>
16
+ <%- end -%>
17
+ <%- for nolot in @nolot.has_many -%>
18
+ has_many :<%= attribute_nameify (get_class_name(nolot).pluralize) %>
19
+ <%- end -%>
20
+ <%- for nolot in @nolot.has_many_many -%>
21
+ has_and_belongs_to_many :<%= attribute_nameify (get_class_name(nolot).pluralize) %>
22
+ <%- end -%>
23
+
24
+ <%- # Set external uniqueness uniqueness constraints -%>
25
+ <%- for orm_array in @nolot.exernal_uniqueness_constraint_object_types -%>
26
+ <%- if orm_array.no_lots.empty? -%>
27
+ <%- head, *tail = orm_array.lots -%>
28
+ validates :<%= lot_attribute_name(head) %>, :uniqueness => {:scope => <%= tail.size == 1 ? ":#{lot_attribute_name(tail.first)}" : "[" + tail.map {|lot| ":#{lot_attribute_name(lot)}"}.join(", ") + "]" %>}
29
+ <%- elsif orm_array.lots.empty? -%>
30
+ <%- head, *tail = orm_array.no_lots -%>
31
+ validates :<%= "#{attribute_nameify get_class_name(head)}_id" %>, :uniqueness => {:scope => <%= tail.size == 1 ? ":#{attribute_nameify get_class_name(tail.first)}_id" : "[" + tail.map {|nolot| ":#{attribute_nameify get_class_name(nolot)}_id"}.join(", ") + "]" %>}
32
+ <%- elsif !orm_array.lots.empty? && !orm_array.no_lots.empty? -%>
33
+ <%- head, *tail = orm_array.no_lots -%>
34
+ <%- lots = orm_array.lots -%>
35
+ validates :<%= "#{attribute_nameify get_class_name(head)}_id" %>, :uniqueness => {:scope => <%= (tail.size + lots.size) == 1 ? ":#{lot_attribute_name(lots.first)}" : "[" + tail.map {|nolot| ":#{attribute_nameify get_class_name(nolot)}_id"}.join(", ") + lots.map {|lot| ":#{lot_attribute_name(lot)}"}.join(", ") + "]" %>}
36
+ <%- end -%>
37
+ <%- end -%>
38
+
39
+ <%- # Set mandatory constraints -%>
40
+ <%- for nolot in @nolot.mandatory_constraint_objects.no_lots -%>
41
+ validates :<%= "#{attribute_nameify get_class_name(nolot)}_id" %>, :presence => true
42
+ <%- end -%>
43
+ <%- for lot in @nolot.mandatory_constraint_objects.lots -%>
44
+ validates :<%= lot_attribute_name(lot) %>, :presence => true
45
+ <%- end -%>
46
+
47
+ def textualize
48
+ text = ""
49
+ attributes.each do |attr_name, attr_val|
50
+ text += "#{attr_name}: #{attr_val}, " unless attr_val=="" || %w[created_at updated_at].include?(attr_name)
51
+ end
52
+ text.chomp(", ")
53
+ end
54
+ end