Skip to content

Commit

Permalink
Create script for mapped tags
Browse files Browse the repository at this point in the history
  • Loading branch information
lpichler committed Oct 4, 2018
1 parent 7467510 commit bb8b99b
Showing 1 changed file with 73 additions and 0 deletions.
73 changes: 73 additions & 0 deletions tools/convert_mapped_tags.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
#!/usr/bin/env ruby
require File.expand_path('../config/environment', __dir__)

require 'trollop'

options = Trollop.options(ARGV) do
banner "USAGE: #{__FILE__} -c|--commit\n" \
"Example (Commit): #{__FILE__} --commit\n" \
"Example (Dry Run): #{__FILE__} \n" \

opt :commit, "Commit to database. The default behavior is to do a dry run", :short => "c"
end

read_only = !options[:commit]

puts
puts

if read_only
puts "READ ONLY MODE"
else
puts "COMMIT MODE"
end

puts

ActiveRecord::Base.transaction do
condition_for_mapped_tags = ContainerLabelTagMapping::TAG_PREFIXES.map { "tags.name LIKE ?" }.join(' OR ')
tag_values = ContainerLabelTagMapping::TAG_PREFIXES.map { |x| "#{x}%:%" }

Classification.where.not(:id => Classification.region_to_range) # only other regions(not current, we expected that current region is global)
.where(:classifications => {:parent_id => 0}) # only categories
.includes(:tag, :children).references(:tag, :children)
.where(condition_for_mapped_tags, *tag_values) # only mapped categories
.find_each do |category|
new_parent_category = Classification.in_my_region.find_by(:description => category.description)

if new_parent_category
print "Using..."
else
new_parent_category = category.dup
new_parent_category.save unless read_only # create in current region (global region is expected), it will create also tag instance
print "Creating..."
end

puts "parent category #{new_parent_category.description} with tag: #{new_parent_category.tag.name} - from region #{category.region_id} to region #{new_parent_category.region_id}"

category.entries.each do |entry|
new_entry = Classification.in_my_region.find_by(:description => entry.description)
if new_entry
print "Using...."
else
new_entry = entry.dup
new_entry.parent_id = new_parent_category.id
new_entry.save unless read_only # it will create also tag instance
print "Creating..."
end
puts "entry category #{new_entry.description} of #{new_parent_category.description} - from region #{category.region_id} to region #{new_entry.region_id}"
end
end
end

puts

if read_only
puts "READ ONLY MODE - no changes have been applied"
else
puts "COMMIT MODE - changes have been applied"
end

puts

Trollop.educate if !options[:help] && !options[:commit] # display help message only in Dry Run

0 comments on commit bb8b99b

Please sign in to comment.