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.
- checksums.yaml +7 -0
- data/.gitignore +17 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +22 -0
- data/README.md +29 -0
- data/Rakefile +1 -0
- data/TODO +26 -0
- data/lib/generators/USAGE +8 -0
- data/lib/generators/tripper.rb +51 -0
- data/lib/generators/tripper/commonalities/commonalities.rb +226 -0
- data/lib/generators/tripper/detect_changes/detect_changes_generator.rb +173 -0
- data/lib/generators/tripper/detect_changes/model.rb +226 -0
- data/lib/generators/tripper/detect_changes/templates/migration.rb +7 -0
- data/lib/generators/tripper/detect_changes/templates/model/belongs_to.rb +1 -0
- data/lib/generators/tripper/detect_changes/templates/model/has_one.rb +1 -0
- data/lib/generators/tripper/detect_changes/templates/model/validates.rb +2 -0
- data/lib/generators/tripper/from_community/from_community_generator.rb +95 -0
- data/lib/generators/tripper/from_community/templates/actions/create.rb +8 -0
- data/lib/generators/tripper/from_community/templates/actions/destroy.rb +5 -0
- data/lib/generators/tripper/from_community/templates/actions/edit.rb +3 -0
- data/lib/generators/tripper/from_community/templates/actions/index.rb +3 -0
- data/lib/generators/tripper/from_community/templates/actions/new.rb +3 -0
- data/lib/generators/tripper/from_community/templates/actions/show.rb +3 -0
- data/lib/generators/tripper/from_community/templates/actions/update.rb +8 -0
- data/lib/generators/tripper/from_community/templates/controller.rb +3 -0
- data/lib/generators/tripper/from_community/templates/fixtures.yml +9 -0
- data/lib/generators/tripper/from_community/templates/helper.rb +2 -0
- data/lib/generators/tripper/from_community/templates/migration.rb +30 -0
- data/lib/generators/tripper/from_community/templates/model.rb +54 -0
- data/lib/generators/tripper/from_community/templates/tests/rspec/actions/create.rb +11 -0
- data/lib/generators/tripper/from_community/templates/tests/rspec/actions/destroy.rb +6 -0
- data/lib/generators/tripper/from_community/templates/tests/rspec/actions/edit.rb +4 -0
- data/lib/generators/tripper/from_community/templates/tests/rspec/actions/index.rb +4 -0
- data/lib/generators/tripper/from_community/templates/tests/rspec/actions/new.rb +4 -0
- data/lib/generators/tripper/from_community/templates/tests/rspec/actions/show.rb +4 -0
- data/lib/generators/tripper/from_community/templates/tests/rspec/actions/update.rb +11 -0
- data/lib/generators/tripper/from_community/templates/tests/rspec/controller.rb +8 -0
- data/lib/generators/tripper/from_community/templates/tests/rspec/model.rb +7 -0
- data/lib/generators/tripper/from_community/templates/tests/shoulda/actions/create.rb +13 -0
- data/lib/generators/tripper/from_community/templates/tests/shoulda/actions/destroy.rb +8 -0
- data/lib/generators/tripper/from_community/templates/tests/shoulda/actions/edit.rb +6 -0
- data/lib/generators/tripper/from_community/templates/tests/shoulda/actions/index.rb +6 -0
- data/lib/generators/tripper/from_community/templates/tests/shoulda/actions/new.rb +6 -0
- data/lib/generators/tripper/from_community/templates/tests/shoulda/actions/show.rb +6 -0
- data/lib/generators/tripper/from_community/templates/tests/shoulda/actions/update.rb +13 -0
- data/lib/generators/tripper/from_community/templates/tests/shoulda/controller.rb +5 -0
- data/lib/generators/tripper/from_community/templates/tests/shoulda/model.rb +7 -0
- data/lib/generators/tripper/from_community/templates/tests/testunit/actions/create.rb +11 -0
- data/lib/generators/tripper/from_community/templates/tests/testunit/actions/destroy.rb +6 -0
- data/lib/generators/tripper/from_community/templates/tests/testunit/actions/edit.rb +4 -0
- data/lib/generators/tripper/from_community/templates/tests/testunit/actions/index.rb +4 -0
- data/lib/generators/tripper/from_community/templates/tests/testunit/actions/new.rb +4 -0
- data/lib/generators/tripper/from_community/templates/tests/testunit/actions/show.rb +4 -0
- data/lib/generators/tripper/from_community/templates/tests/testunit/actions/update.rb +11 -0
- data/lib/generators/tripper/from_community/templates/tests/testunit/controller.rb +5 -0
- data/lib/generators/tripper/from_community/templates/tests/testunit/model.rb +7 -0
- data/lib/generators/tripper/from_community/templates/views/erb/_form.html.erb +16 -0
- data/lib/generators/tripper/from_community/templates/views/erb/edit.html.erb +14 -0
- data/lib/generators/tripper/from_community/templates/views/erb/index.html.erb +29 -0
- data/lib/generators/tripper/from_community/templates/views/erb/new.html.erb +7 -0
- data/lib/generators/tripper/from_community/templates/views/erb/show.html.erb +25 -0
- data/lib/generators/tripper/from_community/templates/views/haml/_form.html.haml +9 -0
- data/lib/generators/tripper/from_community/templates/views/haml/edit.html.haml +14 -0
- data/lib/generators/tripper/from_community/templates/views/haml/index.html.haml +25 -0
- data/lib/generators/tripper/from_community/templates/views/haml/new.html.haml +7 -0
- data/lib/generators/tripper/from_community/templates/views/haml/show.html.haml +20 -0
- data/lib/generators/tripper/layout/USAGE +18 -0
- data/lib/generators/tripper/layout/layout_generator.rb +29 -0
- data/lib/generators/tripper/layout/templates/error_messages_helper.rb +23 -0
- data/lib/generators/tripper/layout/templates/layout.html.erb +19 -0
- data/lib/generators/tripper/layout/templates/layout.html.haml +21 -0
- data/lib/generators/tripper/layout/templates/layout_helper.rb +22 -0
- data/lib/generators/tripper/layout/templates/stylesheet.css +83 -0
- data/lib/generators/tripper/layout/templates/stylesheet.sass +73 -0
- data/lib/generators/tripper/obj_constraint.rb +23 -0
- data/lib/generators/tripper/predicate.rb +12 -0
- data/lib/generators/tripper/sync_with_community/model.rb +260 -0
- data/lib/generators/tripper/sync_with_community/sync_with_community_generator.rb +310 -0
- data/lib/generators/tripper/sync_with_community/templates/migration.rb +7 -0
- data/lib/generators/tripper/sync_with_community/templates/model/belongs_to.rb +1 -0
- data/lib/generators/tripper/sync_with_community/templates/model/has_one.rb +1 -0
- data/lib/generators/tripper/sync_with_community/templates/model/validates.rb +2 -0
- data/lib/generators/tripper/templates/actions/create.rb +8 -0
- data/lib/generators/tripper/templates/actions/destroy.rb +5 -0
- data/lib/generators/tripper/templates/actions/edit.rb +3 -0
- data/lib/generators/tripper/templates/actions/index.rb +3 -0
- data/lib/generators/tripper/templates/actions/new.rb +3 -0
- data/lib/generators/tripper/templates/actions/show.rb +3 -0
- data/lib/generators/tripper/templates/actions/update.rb +8 -0
- data/lib/generators/tripper/templates/controller.rb +3 -0
- data/lib/generators/tripper/templates/fixtures.yml +9 -0
- data/lib/generators/tripper/templates/helper.rb +2 -0
- data/lib/generators/tripper/templates/migration.rb +30 -0
- data/lib/generators/tripper/templates/model.rb +54 -0
- data/lib/generators/tripper/templates/tests/rspec/actions/create.rb +11 -0
- data/lib/generators/tripper/templates/tests/rspec/actions/destroy.rb +6 -0
- data/lib/generators/tripper/templates/tests/rspec/actions/edit.rb +4 -0
- data/lib/generators/tripper/templates/tests/rspec/actions/index.rb +4 -0
- data/lib/generators/tripper/templates/tests/rspec/actions/new.rb +4 -0
- data/lib/generators/tripper/templates/tests/rspec/actions/show.rb +4 -0
- data/lib/generators/tripper/templates/tests/rspec/actions/update.rb +11 -0
- data/lib/generators/tripper/templates/tests/rspec/controller.rb +8 -0
- data/lib/generators/tripper/templates/tests/rspec/model.rb +7 -0
- data/lib/generators/tripper/templates/tests/shoulda/actions/create.rb +13 -0
- data/lib/generators/tripper/templates/tests/shoulda/actions/destroy.rb +8 -0
- data/lib/generators/tripper/templates/tests/shoulda/actions/edit.rb +6 -0
- data/lib/generators/tripper/templates/tests/shoulda/actions/index.rb +6 -0
- data/lib/generators/tripper/templates/tests/shoulda/actions/new.rb +6 -0
- data/lib/generators/tripper/templates/tests/shoulda/actions/show.rb +6 -0
- data/lib/generators/tripper/templates/tests/shoulda/actions/update.rb +13 -0
- data/lib/generators/tripper/templates/tests/shoulda/controller.rb +5 -0
- data/lib/generators/tripper/templates/tests/shoulda/model.rb +7 -0
- data/lib/generators/tripper/templates/tests/testunit/actions/create.rb +11 -0
- data/lib/generators/tripper/templates/tests/testunit/actions/destroy.rb +6 -0
- data/lib/generators/tripper/templates/tests/testunit/actions/edit.rb +4 -0
- data/lib/generators/tripper/templates/tests/testunit/actions/index.rb +4 -0
- data/lib/generators/tripper/templates/tests/testunit/actions/new.rb +4 -0
- data/lib/generators/tripper/templates/tests/testunit/actions/show.rb +4 -0
- data/lib/generators/tripper/templates/tests/testunit/actions/update.rb +11 -0
- data/lib/generators/tripper/templates/tests/testunit/controller.rb +5 -0
- data/lib/generators/tripper/templates/tests/testunit/model.rb +7 -0
- data/lib/generators/tripper/templates/views/erb/_form.html.erb +16 -0
- data/lib/generators/tripper/templates/views/erb/edit.html.erb +14 -0
- data/lib/generators/tripper/templates/views/erb/index.html.erb +29 -0
- data/lib/generators/tripper/templates/views/erb/new.html.erb +7 -0
- data/lib/generators/tripper/templates/views/erb/show.html.erb +25 -0
- data/lib/generators/tripper/templates/views/haml/_form.html.haml +9 -0
- data/lib/generators/tripper/templates/views/haml/edit.html.haml +14 -0
- data/lib/generators/tripper/templates/views/haml/index.html.haml +25 -0
- data/lib/generators/tripper/templates/views/haml/new.html.haml +7 -0
- data/lib/generators/tripper/templates/views/haml/show.html.haml +20 -0
- data/lib/tripper.rb +1 -0
- data/lib/tripper/GOSPLDB/config/database.yml +6 -0
- data/lib/tripper/GOSPLDB/config_db.rb +9 -0
- data/lib/tripper/GOSPLDB/console +2 -0
- data/lib/tripper/GOSPLDB/gospl_db_classes.rb +343 -0
- data/lib/tripper/GOSPLDB/play_around.rb +4 -0
- data/lib/tripper/GOSPLDB/rakefile.rb +88 -0
- data/lib/tripper/GOSPLDBToORMDB/gospl_db_to_orm_db.rb +88 -0
- data/lib/tripper/ORMDB/config/database.yml +6 -0
- data/lib/tripper/ORMDB/config_db.rb +9 -0
- data/lib/tripper/ORMDB/console +2 -0
- data/lib/tripper/ORMDB/db/migrations/0_create_orm_object_table.rb +17 -0
- data/lib/tripper/ORMDB/db/migrations/10_create_no_lot_constraint_table.rb +17 -0
- data/lib/tripper/ORMDB/db/migrations/11_create_value_constraint_table.rb +14 -0
- data/lib/tripper/ORMDB/db/migrations/12_create_value_constraint_value_table.rb +16 -0
- data/lib/tripper/ORMDB/db/migrations/13_create_value_range_table.rb +15 -0
- data/lib/tripper/ORMDB/db/migrations/14_create_frequency_constraint_table.rb +16 -0
- data/lib/tripper/ORMDB/db/migrations/15_create_value_table.rb +15 -0
- data/lib/tripper/ORMDB/db/migrations/16_create_ring_constraint_table.rb +14 -0
- data/lib/tripper/ORMDB/db/migrations/17_create_orm_schema_table.rb +21 -0
- data/lib/tripper/ORMDB/db/migrations/18_create_uniqueness_constraint_table.rb +15 -0
- data/lib/tripper/ORMDB/db/migrations/1_create_no_lot_table.rb +18 -0
- data/lib/tripper/ORMDB/db/migrations/2_create_lot_table.rb +18 -0
- data/lib/tripper/ORMDB/db/migrations/3_create_object_role_table.rb +18 -0
- data/lib/tripper/ORMDB/db/migrations/4_create_reference_table.rb +17 -0
- data/lib/tripper/ORMDB/db/migrations/5_create_predicate_table.rb +18 -0
- data/lib/tripper/ORMDB/db/migrations/6_create_object_role_constraint_table.rb +18 -0
- data/lib/tripper/ORMDB/db/migrations/7_create_subtype_table.rb +17 -0
- data/lib/tripper/ORMDB/db/migrations/8_create_mandatory_constraint_table.rb +15 -0
- data/lib/tripper/ORMDB/db/migrations/9_create_constraint_table.rb +15 -0
- data/lib/tripper/ORMDB/db/orm_ml.sqlite3 +0 -0
- data/lib/tripper/ORMDB/db/orm_ml.sqlite3.backup +0 -0
- data/lib/tripper/ORMDB/db/orm_ml.sqlite3.juli28-2013 +0 -0
- data/lib/tripper/ORMDB/db/orm_ml.sqlite3.old +0 -0
- data/lib/tripper/ORMDB/db/schema.rb +58 -0
- data/lib/tripper/ORMDB/erd.pdf +0 -0
- data/lib/tripper/ORMDB/migrate_db.rb +21 -0
- data/lib/tripper/ORMDB/orm_db_classes.rb +423 -0
- data/lib/tripper/ORMDB/populate.rb +4 -0
- data/lib/tripper/ORMDB/rakefile.rb +88 -0
- data/lib/tripper/model_parsers/attribute_parser/AttributeParser.g +50 -0
- data/lib/tripper/model_parsers/attribute_parser/AttributeParser.tokens +13 -0
- data/lib/tripper/model_parsers/attribute_parser/AttributeParserLexer.rb +538 -0
- data/lib/tripper/model_parsers/attribute_parser/AttributeParserParser.rb +412 -0
- data/lib/tripper/model_parsers/attribute_parser/playing_around.rb +14 -0
- data/lib/tripper/model_parsers/belongs_to/BelongsToParser.g +63 -0
- data/lib/tripper/model_parsers/belongs_to/BelongsToParser.tokens +21 -0
- data/lib/tripper/model_parsers/belongs_to/BelongsToParserLexer.rb +667 -0
- data/lib/tripper/model_parsers/belongs_to/BelongsToParserParser.rb +552 -0
- data/lib/tripper/model_parsers/belongs_to/playing_around.rb +9 -0
- data/lib/tripper/model_parsers/database_fields_parser/DatabaseFieldsParser.g +47 -0
- data/lib/tripper/model_parsers/database_fields_parser/DatabaseFieldsParser.tokens +14 -0
- data/lib/tripper/model_parsers/database_fields_parser/DatabaseFieldsParserLexer.rb +513 -0
- data/lib/tripper/model_parsers/database_fields_parser/DatabaseFieldsParserParser.rb +279 -0
- data/lib/tripper/model_parsers/database_fields_parser/playing_around.rb +14 -0
- data/lib/tripper/model_parsers/has_and_belongs_to_many/HasAndBelongsToManyParser.g +92 -0
- data/lib/tripper/model_parsers/has_and_belongs_to_many/HasAndBelongsToManyParser.tokens +25 -0
- data/lib/tripper/model_parsers/has_and_belongs_to_many/HasAndBelongsToManyParserLexer.rb +787 -0
- data/lib/tripper/model_parsers/has_and_belongs_to_many/HasAndBelongsToManyParserParser.rb +1024 -0
- data/lib/tripper/model_parsers/has_and_belongs_to_many/playing_around.rb +9 -0
- data/lib/tripper/model_parsers/has_many/HasManyParser.g +77 -0
- data/lib/tripper/model_parsers/has_many/HasManyParser.tokens +23 -0
- data/lib/tripper/model_parsers/has_many/HasManyParserLexer.rb +710 -0
- data/lib/tripper/model_parsers/has_many/HasManyParserParser.rb +788 -0
- data/lib/tripper/model_parsers/has_many/playing_around.rb +9 -0
- data/lib/tripper/model_parsers/has_one/HasOneParser.g +63 -0
- data/lib/tripper/model_parsers/has_one/HasOneParser.tokens +21 -0
- data/lib/tripper/model_parsers/has_one/HasOneParserLexer.rb +664 -0
- data/lib/tripper/model_parsers/has_one/HasOneParserParser.rb +552 -0
- data/lib/tripper/model_parsers/has_one/playing_around.rb +9 -0
- data/lib/tripper/model_parsers/validates/ValidatesParser.g +68 -0
- data/lib/tripper/model_parsers/validates/ValidatesParser.tokens +35 -0
- data/lib/tripper/model_parsers/validates/ValidatesParserLexer.rb +899 -0
- data/lib/tripper/model_parsers/validates/ValidatesParserParser.rb +869 -0
- data/lib/tripper/model_parsers/validates/playing_around.rb +9 -0
- data/lib/tripper/rails.rb +8 -0
- data/lib/tripper/version.rb +3 -0
- data/tripper.gemspec +33 -0
- 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,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,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,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
|