Skip to content

Commit

Permalink
Start of adding rake task for cb exports
Browse files Browse the repository at this point in the history
  • Loading branch information
d-m-u committed Jul 19, 2018
1 parent fb7a26d commit aa2c3fd
Show file tree
Hide file tree
Showing 2 changed files with 64 additions and 0 deletions.
56 changes: 56 additions & 0 deletions lib/task_helpers/exports/custom_buttons.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
module TaskHelpers
class Exports
class CustomButtons
class ExportArInstances
EXCLUDE_ATTRS = %w(id created_on updated_on created_at updated_at dialog_id resource_id).freeze
def self.export_object(obj, hash)
class_name = obj.class.name.underscore

$log.send(:info, "Exporting #{obj.class.name} [#{obj.try('name')}] with ID: #{obj&.id}")
(hash[class_name] ||= []) << item = { 'attributes' => build_attr_list(obj.try(:attributes)) }
create_association_list(obj, item)
descendant_list(obj, item)
end

def self.build_attr_list(attrs)
attrs&.except(*EXCLUDE_ATTRS)
end

def self.create_association_list(obj, item)
associations = obj.class.try(:reflections)
if associations
associations = associations.collect { |model, assoc| { model => assoc.class.to_s.demodulize } }.select { |as| as.values.first != "BelongsToReflection" && as.keys.first != "all_relationships" }
associations.each do |assoc|
assoc.each do |a|
next if obj.try(a.first.to_sym).blank?
export_object(obj.try(a.first.to_sym), (item['associations'] ||= {}))
end
end
end
end

def self.descendant_list(obj, item)
obj.try(:children)&.each { |c| export_object(c, (item['children'] ||= {})) }
end
end

def export(options = {})
parent_id_list = []
objects = CustomButton.where.not(:applies_to_class => %w(ServiceTemplate GenericObject))

export = objects.each_with_object({}) do |obj, export_hash|
if obj.try(:parent).present?
next if parent_id_list.include?(obj.parent.id)
ExportArInstances.export_object(obj.parent, export_hash)
parent_id_list << obj.parent.id
else
ExportArInstances.export_object(obj, export_hash)
end
end

export_dir = options[:directory]
File.write("#{export_dir}/CustomButtons.yaml", YAML.dump(export))
end
end
end
end
8 changes: 8 additions & 0 deletions lib/tasks/evm_export_import.rake
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,14 @@ namespace :evm do

exit # exit so that parameters to the first rake task are not run as rake tasks
end

desc 'Exports all custom buttons to a single YAML file'
task :custom_buttons => :environment do
options = TaskHelpers::Exports.parse_options
TaskHelpers::Exports::CustomButtons.new.export(options)

exit # exit so that parameters to the first rake task are not run as rake tasks
end
end

namespace :import do
Expand Down

0 comments on commit aa2c3fd

Please sign in to comment.