diff --git a/app/models/transformation_mapping.rb b/app/models/transformation_mapping.rb new file mode 100644 index 00000000000..396aab5a584 --- /dev/null +++ b/app/models/transformation_mapping.rb @@ -0,0 +1,9 @@ +class TransformationMapping < ApplicationRecord + has_many :transformation_mapping_items, :dependent => :destroy + + validates :name, :presence => true, :uniqueness => true + + def destination(source) + transformation_mapping_items.find_by(:source => source).try(:destination) + end +end diff --git a/app/models/transformation_mapping_item.rb b/app/models/transformation_mapping_item.rb new file mode 100644 index 00000000000..1fb195d3af0 --- /dev/null +++ b/app/models/transformation_mapping_item.rb @@ -0,0 +1,7 @@ +class TransformationMappingItem < ApplicationRecord + belongs_to :transformation_mapping + belongs_to :source, :polymorphic => true + belongs_to :destination, :polymorphic => true + + validates :source_id, :uniqueness => {:scope => [:transformation_mapping_id, :source_type]} +end diff --git a/spec/factories/transformation_mapping.rb b/spec/factories/transformation_mapping.rb new file mode 100644 index 00000000000..1605c01a9d4 --- /dev/null +++ b/spec/factories/transformation_mapping.rb @@ -0,0 +1,5 @@ +FactoryGirl.define do + factory :transformation_mapping do + sequence(:name) { |n| "Transformation Mapping #{seq_padded_for_sorting(n)}" } + end +end diff --git a/spec/factories/transformation_mapping_item.rb b/spec/factories/transformation_mapping_item.rb new file mode 100644 index 00000000000..75098ae6034 --- /dev/null +++ b/spec/factories/transformation_mapping_item.rb @@ -0,0 +1,3 @@ +FactoryGirl.define do + factory :transformation_mapping_item +end diff --git a/spec/models/transformation_mapping_spec.rb b/spec/models/transformation_mapping_spec.rb new file mode 100644 index 00000000000..8fac97962c8 --- /dev/null +++ b/spec/models/transformation_mapping_spec.rb @@ -0,0 +1,21 @@ +describe TransformationMapping do + describe '#destination' do + let(:src) { FactoryGirl.create(:ems_cluster) } + let(:dst) { FactoryGirl.create(:ems_cluster) } + + let(:mapping) do + FactoryGirl.create( + :transformation_mapping, + :transformation_mapping_items => [TransformationMappingItem.new(:source => src, :destination => dst)] + ) + end + + it "finds the destination" do + expect(mapping.destination(src)).to eq(dst) + end + + it "returns nil for unmapped source" do + expect(mapping.destination(FactoryGirl.create(:ems_cluster))).to be_nil + end + end +end