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,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 7339a2d3e63498c66edf203ea23d3b1a8f782ae8
4
+ data.tar.gz: ad0d3b114dcd60dbd9d1baff787461ac3ebf2459
5
+ SHA512:
6
+ metadata.gz: 376aac902ab5bd5a675a9ca89de086d4c95f33c4f52fb696f8a56759704ba61a8e9ca4a4b11c4c2bea033b89a2958ba193fb6025090d77b9ac9eca2d1cfe194b
7
+ data.tar.gz: 6b1efc9fc2e8557e5aa7457aaa0a50887a6486ebbaaf1a3abe0e3b940feaaafd5c3de4fa0a140ffa6f9b50fd72c8a854c3588b1fe431dc2410bc64706882fb8a
@@ -0,0 +1,17 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in tripper.gemspec
4
+ gemspec
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2013 Rik Vanmechelen
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,29 @@
1
+ # Tripper
2
+
3
+ TODO: Write a gem description
4
+
5
+ ## Installation
6
+
7
+ Add this line to your application's Gemfile:
8
+
9
+ gem 'tripper'
10
+
11
+ And then execute:
12
+
13
+ $ bundle
14
+
15
+ Or install it yourself as:
16
+
17
+ $ gem install tripper
18
+
19
+ ## Usage
20
+
21
+ TODO: Write usage instructions here
22
+
23
+ ## Contributing
24
+
25
+ 1. Fork it
26
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
27
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
28
+ 4. Push to the branch (`git push origin my-new-feature`)
29
+ 5. Create new Pull Request
@@ -0,0 +1 @@
1
+ require "bundler/gem_tasks"
data/TODO ADDED
@@ -0,0 +1,26 @@
1
+ - Ontology change request tracking
2
+ - Create corresponding post in GOSPL
3
+ / Ontology change detection
4
+ - Code generation from ontology change
5
+ - set constraints from ORMML
6
+ - generate from ORMML
7
+
8
+
9
+ - check the uniqueness constraints again! check the psuedocode for the correct answer!
10
+
11
+ ______
12
+ |------------|
13
+ Department ---- | | | ----- Person
14
+ |------------|
15
+ d1 | p1 => ok
16
+ d1 | p2 => ok
17
+ d2 | p3 => ok
18
+ d2 | p1 => NOT ok
19
+ => Person needs a belongs_to dep, and that is ALL, ok trust me i tried it out...
20
+
21
+ Also presence has to be checked again...
22
+
23
+ |------------|
24
+ Customer ---- | | | O---- Transaction
25
+ |------------|
26
+ => put validate_presence_of :customer in transaction
@@ -0,0 +1,8 @@
1
+ Description:
2
+ Explain the generator
3
+
4
+ Example:
5
+ rails generate test Thing
6
+
7
+ This will create:
8
+ what/will/it/create
@@ -0,0 +1,51 @@
1
+ require 'rails/generators/base'
2
+ require 'tripper/GOSPLDB/gospl_db_classes'
3
+ require 'tripper/ORMDB/orm_db_classes'
4
+
5
+ module Tripper
6
+ module Generators
7
+ class Base < Rails::Generators::Base
8
+ #desc "Tripper generators"
9
+
10
+ # Commandline options can be defined here using Thor-like options:
11
+ #class_option :com_name, :type => :string
12
+
13
+ # I can later access that option using:
14
+ # options[:my_opt]
15
+
16
+
17
+ def self.source_root
18
+ @source_root ||= File.expand_path(File.join(File.dirname(__FILE__), 'tripper', 'templates'))
19
+ end
20
+
21
+ def self.banner
22
+ "rails generate tripper:#{generator_name} #{self.arguments.map{ |a| a.usage }.join(' ')} [options]"
23
+ end
24
+
25
+ # Generator Code. Remember this is just suped-up Thor so methods are executed in order
26
+
27
+ private
28
+
29
+ def add_gem(name, options = {})
30
+ gemfile_content = File.read(destination_path("Gemfile"))
31
+ File.open(destination_path("Gemfile"), 'a') { |f| f.write("\n") } unless gemfile_content =~ /\n\Z/
32
+ gem name, options unless gemfile_content.include? name
33
+ end
34
+
35
+ def print_usage
36
+ self.class.help(Thor::Base.shell.new)
37
+ exit
38
+ end
39
+
40
+ def generating?
41
+ :invoke == behavior
42
+ end
43
+
44
+ def destroying?
45
+ :revoke == behavior
46
+ end
47
+
48
+ end
49
+
50
+ end
51
+ end
@@ -0,0 +1,226 @@
1
+ require 'generators/tripper'
2
+ require 'generators/tripper/obj_constraint'
3
+ require 'generators/tripper/predicate'
4
+
5
+ require 'rails/generators'
6
+ require 'rails/generators/migration'
7
+ require 'rails/generators/generated_attribute'
8
+ require 'tripper/GOSPLDB/gospl_db_classes'
9
+ require 'tripper/ORMDB/orm_db_classes'
10
+ require 'tripper/GOSPLDBToORMDB/gospl_db_to_orm_db'
11
+
12
+ module Tripper
13
+ module Generators
14
+ module Commonalities
15
+ @@controller_actions = %w[index show new create edit update destroy]
16
+
17
+ def create_new_ontology_models schema_label
18
+ community = Tripper::ORMDB::OrmSchema.find_by_title schema_label
19
+ if community
20
+ community.no_lots.each do |nolot|
21
+ @nolot = nolot
22
+ @name = nolot.name
23
+ #also check for inheritance of ActiveRecord::Base, because some words are already ruby classes (e.g. Time)
24
+ @class_name = get_class_name @nolot
25
+ @model_attributes = []
26
+ @nolot.identifying_constraint_objects.lots.each do |lot|
27
+ @model_attributes << Rails::Generators::GeneratedAttribute.new(lot_attribute_name(lot), "String")
28
+ end
29
+ create_ontology_model
30
+ end
31
+ puts community.inspect
32
+ end
33
+ end
34
+
35
+ def action?(name)
36
+ @@controller_actions.include? name.to_s
37
+ end
38
+
39
+ def actions?(*names)
40
+ names.all? { |name| action? name }
41
+ end
42
+
43
+ def get_class
44
+ Kernel.const_get(@name)
45
+ end
46
+
47
+ def lot_attribute_name lot
48
+ unless lot.application_name
49
+ lot.application_name = attribute_nameify lot.name
50
+ lot.save
51
+ end
52
+ lot.application_name
53
+ end
54
+
55
+ def get_class_name nolot
56
+ unless nolot.application_name
57
+ nolot.application_name = check_for_class_name nolot.name
58
+ nolot.save
59
+ end
60
+ nolot.application_name
61
+ end
62
+
63
+ def get_ontology_name label
64
+ new_label = label
65
+ while new_label[0,2] == "My"
66
+ new_label = new_label[2..-1]
67
+ end
68
+ new_label
69
+ end
70
+
71
+ def remove_id label
72
+ new_label = label
73
+ while new_label[-3..-1] == "_id"
74
+ new_label = new_label[0..-4]
75
+ end
76
+ new_label
77
+ end
78
+
79
+ def create_class_name
80
+ check_for_class_name @name
81
+ end
82
+
83
+ def check_for_class_name name
84
+ (class_exists?(name) && !(Kernel.const_get(name) < ActiveRecord::Base)) ? ("My"+name).camelize : name.camelize
85
+ end
86
+
87
+ def plural_name
88
+ @class_name.underscore.pluralize
89
+ end
90
+
91
+ def plural_class_name
92
+ plural_name.camelize
93
+ end
94
+
95
+ def model_path
96
+ @class_name.underscore
97
+ end
98
+
99
+ def singular_name
100
+ @class_name.underscore
101
+ end
102
+
103
+ def attribute_nameify name
104
+ name.underscore.tr(" ", "_") #the last one is to remove spaces
105
+ end
106
+
107
+ def attribute_is_foreign_key? label
108
+ label[-3..-1] == "_id"
109
+ end
110
+
111
+ def items_path
112
+ if action? :index
113
+ "#{item_resource.pluralize}_path"
114
+ else
115
+ "root_path"
116
+ end
117
+ end
118
+
119
+ def form_partial?
120
+ actions? :new, :edit
121
+ end
122
+
123
+ def render_form
124
+ if form_partial?
125
+ if options.haml?
126
+ "= render \"form\""
127
+ else
128
+ "<%= render \"form\" %>"
129
+ end
130
+ else
131
+ read_template("views/#{view_language}/_form.html.#{view_language}")
132
+ end
133
+ end
134
+
135
+ def view_language
136
+ options.haml? ? 'haml' : 'erb'
137
+ end
138
+
139
+ def controller_methods(dir_name)
140
+ @@controller_actions.map do |action|
141
+ read_template("#{dir_name}/#{action}.rb")
142
+ end.join("\n").strip
143
+ end
144
+
145
+ def read_template(relative_path)
146
+ ERB.new(File.read(find_in_source_paths(relative_path)), nil, '-').result(binding)
147
+ end
148
+
149
+ def instances_name
150
+ instance_name.pluralize
151
+ end
152
+
153
+ def instance_name
154
+ @class_name.split('/').last.underscore
155
+ end
156
+
157
+ def item_path(options = {})
158
+ name = options[:instance_variable] ? "@#{instance_name}" : instance_name
159
+ suffix = options[:full_url] ? "url" : "path"
160
+ if options[:action].to_s == "new"
161
+ "new_#{item_resource}_#{suffix}"
162
+ elsif options[:action].to_s == "edit"
163
+ "edit_#{item_resource}_#{suffix}(#{name})"
164
+ else
165
+ if @class_name.include?('::') && !@namespace_model
166
+ namespace = singular_name.split('/')[0..-2]
167
+ "[:#{namespace.join(', :')}, #{name}]"
168
+ else
169
+ name
170
+ end
171
+ end
172
+ end
173
+
174
+ def item_resource
175
+ @class_name.underscore.gsub('/','_')
176
+ end
177
+
178
+ def item_url
179
+ if action? :show
180
+ item_path(:full_url => true, :instance_variable => true)
181
+ else
182
+ items_url
183
+ end
184
+ end
185
+
186
+ def items_url
187
+ if action? :index
188
+ item_resource.pluralize + '_url'
189
+ else
190
+ "root_url"
191
+ end
192
+ end
193
+
194
+ def create_model
195
+ template 'model.rb', "app/models/#{model_path}.rb"
196
+ template 'model.rb', "app/tripper/models/#{model_path}.rb"
197
+ end
198
+
199
+ def create_ontology_model
200
+ template 'model.rb', "app/tripper/ontology_models/#{model_path}.rb"
201
+ end
202
+
203
+ def create_migration
204
+ migration_template 'migration.rb', "db/migrate/create_#{model_path.pluralize.gsub('/', '_')}.rb"
205
+ end
206
+
207
+ def create_controller
208
+ template 'controller.rb', "app/controllers/#{plural_name}_controller.rb"
209
+
210
+ template 'helper.rb', "app/helpers/#{plural_name}_helper.rb"
211
+
212
+ %w[index show new edit].each do |action|
213
+ template "views/#{view_language}/#{action}.html.#{view_language}", "app/views/#{plural_name}/#{action}.html.#{view_language}"
214
+ end
215
+
216
+ template "views/#{view_language}/_form.html.#{view_language}", "app/views/#{plural_name}/_form.html.#{view_language}"
217
+
218
+ namespaces = plural_name.split('/')
219
+ resource = namespaces.pop
220
+ route namespaces.reverse.inject("resources :#{resource}") { |acc, namespace|
221
+ "namespace(:#{namespace}){ #{acc} }"
222
+ }
223
+ end
224
+ end
225
+ end
226
+ end
@@ -0,0 +1,173 @@
1
+ require 'generators/tripper'
2
+
3
+ require 'rails/generators'
4
+ require 'rails/generators/migration'
5
+ require 'rails/generators/generated_attribute'
6
+
7
+ require 'tripper/GOSPLDB/gospl_db_classes'
8
+ require 'tripper/ORMDB/orm_db_classes'
9
+ require 'generators/tripper/detect_changes/model'
10
+
11
+ module Tripper
12
+ module Generators
13
+ class DetectChangesGenerator < Base
14
+ include Rails::Generators::Migration
15
+
16
+ attr_accessor :models, :tripper_models
17
+
18
+ desc "Detect changes to the model code"
19
+
20
+ argument :community_name, :type => :string
21
+
22
+ #class varialbe for timestamps
23
+ @@timestamp = Time.now.utc
24
+
25
+ def initialize (*args, &block)
26
+ super
27
+ @models = []
28
+ @models = Dir.glob("app/models/*.rb").inject([]) {|res, path| res << Model.new(path); res}
29
+ @tripper_models = Dir.glob("app/tripper/models/*.rb").inject([]) {|res, path| res << Model.new(path); res}
30
+ # @models.each_index { |i| puts "#{@models[i].class_name}: #{@models[i] == @tripper_models[i]} :#{@tripper_models[i].class_name}"
31
+ # }
32
+ puts "There are no changes" unless find_differences
33
+ end
34
+
35
+ private
36
+
37
+ def find_differences
38
+ pending_changes = false
39
+ detect_lexon_duplicates = Set.new
40
+ @tripper_models.each do |tripper_model|
41
+ app_model = @models.find {|m| m.class_name == tripper_model.class_name}
42
+ unless app_model == tripper_model
43
+ pending_changes = true
44
+ differences = app_model.differences tripper_model
45
+ puts differences.inspect
46
+ model_changes = get_model_changes differences
47
+ ontology_changes = get_ontology_changes differences, detect_lexon_duplicates
48
+ puts model_changes
49
+ write_changes_to_file app_model, model_changes
50
+ get_migration_changes differences
51
+ end
52
+ end
53
+ return pending_changes
54
+ end
55
+
56
+ def get_migration_changes differences
57
+ unless differences.attributes_diff.lacking.empty?
58
+ @migration_action = "add" # remove is the oposite :)
59
+ @migration_name = differences.model1.class_name.pluralize
60
+ @diff_string_list = differences.attributes_diff.lacking.map(&:camelize).join("And")
61
+ @differences = differences
62
+ migration_template 'migration.rb', "db/migrate/#{@migration_action}_#{@diff_string_list.underscore}_to_#{@migration_name.underscore}.rb"
63
+ end
64
+ end
65
+
66
+ def get_model_changes differences
67
+ changes = []
68
+ unless differences.belongs_tos_diff.lacking.empty?
69
+ differences.belongs_tos_diff.lacking.each do |belongs_to_obj|
70
+ changes << create_belongs_to(belongs_to_obj)
71
+ end
72
+ end
73
+ unless differences.has_ones_diff.lacking.empty?
74
+ differences.has_ones_diff.lacking.each do |has_one_obj|
75
+ changes << create_has_one(has_one_obj)
76
+ end
77
+ end
78
+ unless differences.validations_diff.lacking.empty?
79
+ differences.validations_diff.lacking.each do |validation_obj|
80
+ changes << create_validation(validation_obj)
81
+ end
82
+ end
83
+ return changes
84
+ end
85
+
86
+ def general_ontoloty_diference_detection differences, dups, method
87
+ differences.send(method).extra.each do |belongs_to_obj|
88
+ head = differences.model1.class_name.camelize.singularize
89
+ tail = belongs_to_obj.name.camelize.singularize
90
+ role = "has"
91
+ corole = "of"
92
+ unless dups.include? (head+role+corole+tail)
93
+ dups << (head+role+corole+tail)
94
+ dups << (tail+role+corole+head)
95
+ puts "new lexon: head=#{head} role=#{role} corole=#{corole} tail=#{tail}"
96
+ end
97
+ end
98
+ end
99
+
100
+ def get_ontology_changes differences, dups
101
+ changes = []
102
+ unless differences.belongs_tos_diff.extra.empty?
103
+ general_ontoloty_diference_detection differences, dups, :belongs_tos_diff
104
+ end
105
+ unless differences.has_ones_diff.extra.empty?
106
+ general_ontoloty_diference_detection differences, dups, :has_ones_diff
107
+ end
108
+ unless differences.has_manies_diff.extra.empty?
109
+ general_ontoloty_diference_detection differences, dups, :has_manies_diff
110
+ end
111
+ unless differences.has_and_belongs_to_manies_diff.extra.empty?
112
+ general_ontoloty_diference_detection differences, dups, :has_and_belongs_to_manies_diff
113
+ end
114
+ unless differences.validations_diff.extra.empty?
115
+ differences.validations_diff.extra.each do |validation_obj|
116
+ "new validation"
117
+ end
118
+ end
119
+ return changes
120
+ end
121
+
122
+ def write_changes_to_file app_model, changes
123
+ lines = IO.readlines(app_model.path).map do |line|
124
+ if line.include?("class") && line.include?(app_model.class_name)
125
+ line = line + '' + changes.join('')
126
+ end
127
+ line
128
+ end
129
+ File.open(app_model.path, 'w') do |file|
130
+ file.puts lines
131
+ end
132
+ end
133
+
134
+ def create_belongs_to obj
135
+ @belongs_to_obj = obj
136
+ read_template("model/belongs_to.rb")
137
+ end
138
+
139
+ def create_has_one obj
140
+ @has_one_obj = obj
141
+ read_template("model/has_one.rb")
142
+ end
143
+
144
+ def create_validation obj
145
+ @validation = obj
146
+ read_template("model/validates.rb")
147
+ end
148
+
149
+ def create_validation_scope scope
150
+ if scope.empty?
151
+ return "true"
152
+ elsif scope.size == 1
153
+ return "{:scope => :#{scope.first}}"
154
+ else
155
+ return "{:scope => [#{scope.map{|s| ':'+s}.join(", ")}]}"
156
+ end
157
+ end
158
+
159
+ def read_template(relative_path)
160
+ ERB.new(File.read(find_in_source_paths(relative_path)), nil, '-').result(binding)
161
+ end
162
+
163
+ def self.next_migration_number(dirname) #:nodoc:
164
+ if ActiveRecord::Base.timestamped_migrations
165
+ @@timestamp = @@timestamp + 1.seconds
166
+ @@timestamp.strftime("%Y%m%d%H%M%S")
167
+ else
168
+ "%.3d" % (current_migration_number(dirname) + 1)
169
+ end
170
+ end
171
+ end
172
+ end
173
+ end