Class: Ticket::Replicator::RowTransformer
- Inherits:
-
Object
- Object
- Ticket::Replicator::RowTransformer
- Defined in:
- lib/ticket/replicator/row_transformer.rb
Instance Attribute Summary collapse
-
#extracted_row ⇒ Object
readonly
Returns the value of attribute extracted_row.
-
#mappings ⇒ Object
readonly
Returns the value of attribute mappings.
Class Method Summary collapse
Instance Method Summary collapse
- #extracted_field_mapping ⇒ Object
- #extracted_field_mapping_for(field) ⇒ Object
- #fields_to_remap ⇒ Object
- #fields_to_transform ⇒ Object
-
#initialize(extracted_row, mappings) ⇒ RowTransformer
constructor
A new instance of RowTransformer.
- #mapped_value_for(field, extracted_value = remapped_field_extracted_value_for(field)) ⇒ Object
- #remapped_field_extracted_row ⇒ Object
- #remapped_field_extracted_value_for(field) ⇒ Object
- #remapped_field_key(field) ⇒ Object
- #run ⇒ Object
- #source_ticket_url_builder(source_ticket_id) ⇒ Object
- #ticket_replicator_source_ticket_url ⇒ Object
- #transformed_id ⇒ Object
- #transformed_priority ⇒ Object
- #transformed_resolution ⇒ Object
- #transformed_source_ticket_url ⇒ Object
- #transformed_status ⇒ Object
- #transformed_summary ⇒ Object
- #transformed_team ⇒ Object
Constructor Details
#initialize(extracted_row, mappings) ⇒ RowTransformer
19 20 21 22 |
# File 'lib/ticket/replicator/row_transformer.rb', line 19 def initialize(extracted_row, mappings) @extracted_row = extracted_row @mappings = mappings.to_h end |
Instance Attribute Details
#extracted_row ⇒ Object (readonly)
Returns the value of attribute extracted_row.
17 18 19 |
# File 'lib/ticket/replicator/row_transformer.rb', line 17 def extracted_row @extracted_row end |
#mappings ⇒ Object (readonly)
Returns the value of attribute mappings.
17 18 19 |
# File 'lib/ticket/replicator/row_transformer.rb', line 17 def mappings @mappings end |
Class Method Details
.fields_to_remap ⇒ Object
98 99 100 |
# File 'lib/ticket/replicator/row_transformer.rb', line 98 def self.fields_to_remap i[ID Status Resolution Priority Summary] end |
.fields_to_transform ⇒ Object
94 95 96 |
# File 'lib/ticket/replicator/row_transformer.rb', line 94 def self.fields_to_transform fields_to_remap + ["Source Ticket URL"] end |
.run_on(extracted_row, mappings) ⇒ Object
11 12 13 |
# File 'lib/ticket/replicator/row_transformer.rb', line 11 def self.run_on(extracted_row, mappings) new(extracted_row, mappings).run end |
Instance Method Details
#extracted_field_mapping ⇒ Object
139 140 141 |
# File 'lib/ticket/replicator/row_transformer.rb', line 139 def extracted_field_mapping @extracted_field_mapping ||= mapping_for :field end |
#extracted_field_mapping_for(field) ⇒ Object
127 128 129 130 131 132 133 |
# File 'lib/ticket/replicator/row_transformer.rb', line 127 def extracted_field_mapping_for(field) original_field = extracted_field_mapping.fetch(remapped_field_key(field)) do |key| raise "No mapping found for #{key.inspect} in #{extracted_field_mapping.inspect}" end remapped_field_key(original_field) end |
#fields_to_remap ⇒ Object
90 91 92 |
# File 'lib/ticket/replicator/row_transformer.rb', line 90 def fields_to_remap self.class.fields_to_remap end |
#fields_to_transform ⇒ Object
86 87 88 |
# File 'lib/ticket/replicator/row_transformer.rb', line 86 def fields_to_transform self.class.fields_to_transform end |
#mapped_value_for(field, extracted_value = remapped_field_extracted_value_for(field)) ⇒ Object
102 103 104 105 106 107 108 109 110 111 112 |
# File 'lib/ticket/replicator/row_transformer.rb', line 102 def mapped_value_for(field, extracted_value = remapped_field_extracted_value_for(field)) mapping_for(field).fetch(extracted_value) do |key| case mapping_for(field)["defaults_to"] when "keep_original_value" then extracted_value when "unset_value" then nil when "blank_value" then "" else raise "No mapping found for #{field.inspect} = #{key.inspect} in #{mapping_for(field).inspect}" end end end |
#remapped_field_extracted_row ⇒ Object
120 121 122 123 124 125 |
# File 'lib/ticket/replicator/row_transformer.rb', line 120 def remapped_field_extracted_row @remapped_field_extracted_row ||= fields_to_remap.to_h do |field| mapped_field_key = remapped_field_key(field) [mapped_field_key, extracted_row_value_for(mapped_field_key)] end end |
#remapped_field_extracted_value_for(field) ⇒ Object
114 115 116 117 118 |
# File 'lib/ticket/replicator/row_transformer.rb', line 114 def remapped_field_extracted_value_for(field) remapped_field_extracted_row.fetch(remapped_field_key(field)) do |key| raise "No value found for #{key.inspect} in #{remapped_field_extracted_row.inspect}" end end |
#remapped_field_key(field) ⇒ Object
135 136 137 |
# File 'lib/ticket/replicator/row_transformer.rb', line 135 def remapped_field_key(field) field.to_s.downcase end |
#run ⇒ Object
24 25 26 |
# File 'lib/ticket/replicator/row_transformer.rb', line 24 def run fields_to_transform.collect { |field| send("transformed_#{field.to_s.parameterize.underscore}") } end |
#source_ticket_url_builder(source_ticket_id) ⇒ Object
57 58 59 |
# File 'lib/ticket/replicator/row_transformer.rb', line 57 def source_ticket_url_builder(source_ticket_id) ERB.new(ticket_replicator_source_ticket_url).result(binding) end |
#ticket_replicator_source_ticket_url ⇒ Object
61 62 63 |
# File 'lib/ticket/replicator/row_transformer.rb', line 61 def ticket_replicator_source_ticket_url ENV.fetch("TICKET_REPLICATOR_SOURCE_TICKET_URL") { |name| raise "#{name}: not set in environment!" } end |
#transformed_id ⇒ Object
28 29 30 31 32 33 34 35 36 37 38 39 |
# File 'lib/ticket/replicator/row_transformer.rb', line 28 def transformed_id remapped_id = remapped_field_extracted_value_for :id return remapped_id unless id_extraction_regex match_data = id_extraction_regex.match(remapped_id) return match_data[:id] if match_data raise FileTransformer::TransformError, "No match found for :id in #{remapped_id.inspect} using #{id_extraction_regex.inspect}" end |
#transformed_priority ⇒ Object
73 74 75 |
# File 'lib/ticket/replicator/row_transformer.rb', line 73 def transformed_priority mapped_value_for :priority end |
#transformed_resolution ⇒ Object
69 70 71 |
# File 'lib/ticket/replicator/row_transformer.rb', line 69 def transformed_resolution mapped_value_for :resolution, remapped_field_extracted_value_for(:status) end |
#transformed_source_ticket_url ⇒ Object
53 54 55 |
# File 'lib/ticket/replicator/row_transformer.rb', line 53 def transformed_source_ticket_url source_ticket_url_builder(transformed_id) end |
#transformed_status ⇒ Object
65 66 67 |
# File 'lib/ticket/replicator/row_transformer.rb', line 65 def transformed_status mapped_value_for :status end |
#transformed_summary ⇒ Object
81 82 83 84 |
# File 'lib/ticket/replicator/row_transformer.rb', line 81 def transformed_summary ReplicatedSummary.build(transformed_id, remapped_field_extracted_value_for(:summary)).to_s end |
#transformed_team ⇒ Object
77 78 79 |
# File 'lib/ticket/replicator/row_transformer.rb', line 77 def transformed_team mapped_value_for :team end |