lib/generators/vue/vue_generator.rb in vueonrails-0.1.0 vs lib/generators/vue/vue_generator.rb in vueonrails-0.2.0

- old
+ new

@@ -1,60 +1,118 @@ require 'ostruct' class VueGenerator < Rails::Generators::NamedBase - source_root File.expand_path('../../generator_templates', __FILE__) - - argument :name, type: :string, default: "" - PACKS_PATH = "app/javascript/packs" PARTS_PATH = "app/javascript/parts" TESTS_PATH = "app/javascript/tests" + + source_root File.expand_path('../../generator_templates', __FILE__) + + argument :name, type: :string, default: nil OPTIONS = { test: {type: :boolean, default: false}, vuex: {type: :boolean, default: false}, form: {type: :boolean, default: false}, - tab: {type: :boolean, default: false}, + tab: {type: :boolean, default: false}, list: {type: :boolean, default: false}, table: {type: :boolean, default: false}, modal: {type: :boolean, default: false}, click: {type: :boolean, default: false}, }.freeze - + + class_option :child, type: :string, default: nil + class_option :parent, type: :string, default: nil class_option :seperate, type: :boolean, default: false class_option :turbolinks, type: :boolean, default: false OPTIONS.each do |each_option, value| class_option each_option, type: :boolean, default: false end def vue return if name.empty? - - if options[:seperate] - if options[:turbolinks] - add_to_component("turbolinks-seperate", name) - else - add_to_component("seperate", name) - end + + if options[:child] + adding_nested_component(:child, name, nil, options[:child]) + elsif options[:parent] + adding_nested_component(:parent, name, options[:parent], nil) else - if options[:turbolinks] - add_to_component("turbolinks-single", name) + if options[:seperate] + if options[:turbolinks] + add_to_component("turbolinks-seperate", name) + else + add_to_component("seperate", name) + end else - add_to_component("single", name) + if options[:turbolinks] + add_to_component("turbolinks-single", name) + else + add_to_component("single", name) + end end end OPTIONS.each do |each_option, value| - options[each_option] ? add_to_component(each_option, name) : nil + if each_option == :form + options[:form] ? add_form_to_component(ARGV, each_option, name) : nil + else + options[each_option] ? add_to_component(each_option, name) : nil + end end end private + + def filter_for_form_attributes(argv) + return argv.select{ |item| item.include? ":" } + end + + def process_args(attribute) + return if (attribute == "") || (attribute.include? ":") + attr = attribute.split(':').first + case attribute + when :integer then 'number-field' + when :float, :decimal then 'text-field' + when :time then 'time-select' + when :datetime, :timestamp then 'datetime-select' + when :date then 'date-select' + when :text then 'text-area' + when :boolean then 'check-box' + else + 'text-field' + end + end + + def process_name(attribute) + return if (attribute == "") || (attribute.include? ":") + return attribute.split(':')[1] + end + + def adding_nested_component(example, name, parent, child) + namespace = OpenStruct.new(TESTS_PATH: TESTS_PATH, PARTS_PATH: PARTS_PATH, PACKS_PATH: PACKS_PATH, name: name, child: child, parent: parent) + template = File.read(File.expand_path("../options/#{example}.rb", __dir__)) + erbtemplate = ERB.new(template).result(namespace.instance_eval { binding }) + eval erbtemplate + end + def add_to_component(example, name) - puts "add to component #{name} running #{example}" namespace = OpenStruct.new(TESTS_PATH: TESTS_PATH, PARTS_PATH: PARTS_PATH, PACKS_PATH: PACKS_PATH, name: name) template = File.read(File.expand_path("../options/#{example}.rb", __dir__)) erbtemplate = ERB.new(template).result(namespace.instance_eval { binding }) eval erbtemplate end + + # To handle field_type https://github.com/rails/rails/blob/b1f140ef2e5af605ea12d8ee1c932eaf728a398d/railties/lib/rails/generators/generated_attribute.rb + def add_form_to_component argv, example, name + something = filter_for_form_attributes(argv) + namespace = OpenStruct.new(TESTS_PATH: TESTS_PATH, + PARTS_PATH: PARTS_PATH, + PACKS_PATH: PACKS_PATH, + name: name, + something: something ) + template = File.read(File.expand_path("../options/form.rb", __dir__)) + erbtemplate = ERB.new(template).result(namespace.instance_eval { binding }) + eval erbtemplate + end end +