class Object
Public Instance Methods
create_controller(name, fields, mailer)
click to toggle source
# File lib/create_controller.rb, line 1 def create_controller(name, fields, mailer) fields_params = [] fields_new_params = "{" email_names = [] fields.each do |field| fields_params << "#{field.split(':')[0]}" email_names << "#{field.split(':')[0]}" if field.split(":")[1] == "email_field" fields_new_params << "'#{field.split(':')[0]}' => #{name}_params[:#{field.split(':')[0]}], " end fields_new_params.slice!(-2) fields_new_params << "}" remove_email_flash = [] email_names.each do |e| remove_email_flash << "new_params['#{e}'] = '' if @#{name}.msg.include? '#{e}'" end mailer_line = "" unless mailer == "nil" mailer_line << "#{name.capitalize}sMailer.#{name}_contact(@#{name}).deliver_now" end write_controller = "class #{name.capitalize}sController < ApplicationController def send_#{name} @#{name} = #{name.capitalize}.new(#{name}_params) flash[:notice] = @#{name}.msg if @#{name}.valid #{mailer_line} redirect_to :back else if @#{name}.msg.include? 'Format email-a ne valja!' new_params = #{fields_new_params} #{remove_email_flash.join("\n")} flash[:val] = new_params redirect_to :back else flash[:val] = #{name}_params redirect_to :back end end end private def message_params params.require(:#{name}).permit(:#{fields_params.join(', :')}) end end" File.open("app/controllers/#{name}s_controller.rb", "w+") {|f| f.write(write_controller) } end
create_controller_save(name, fields, mailer)
click to toggle source
# File lib/create_controller_save.rb, line 1 def create_controller_save(name, fields, mailer) fields_params = [] fields_new_params = "{" email_names = [] fields.each do |field| fields_params << "#{field.split(':')[0]}" email_names << "#{field.split(':')[0]}" if field.split(":")[1] == "email_field" fields_new_params << "'#{field.split(':')[0]}' => #{name}_params[:#{field.split(':')[0]}], " end fields_new_params.slice!(-2) fields_new_params << "}" remove_email_flash = [] email_names.each do |e| remove_email_flash << "new_params['#{e}'] = '' if @#{name}.msg.include? '#{e}'" end mailer_line = "" unless mailer == "nil" mailer_line << "#{name.capitalize}sMailer.#{name}_contact(@#{name}).deliver_now" end write_controller = "class #{name.capitalize}sController < ApplicationController def send_#{name} @#{name} = #{name.capitalize}.new(#{name}_params) flash[:notice] = @#{name}.msg if @#{name}.save #{mailer_line} redirect_to :back else if @#{name}.msg.include? 'Format email-a ne valja!' new_params = #{fields_new_params} #{remove_email_flash.join("\n")} flash[:val] = new_params redirect_to :back else flash[:val] = #{name}_params redirect_to :back end end end private def message_params params.require(:#{name}).permit(:#{fields_params.join(', :')}) end end" File.open("app/controllers/#{name}s_controller.rb", "w+") {|f| f.write(write_controller) } end
create_helper(name, fields)
click to toggle source
# File lib/create_helper.rb, line 1 def create_helper(name, fields) fields_new_params = "{" fields.each do |field| fields_new_params << "'#{field.split(':')[0]}' => ''], " end fields_new_params.slice!(-2) fields_new_params << "}" write_helper = "module #{name.capitalize}sHelper def #{name}_prepare_var @#{name} = #{name.capitalize}.new() @placeholder = flash[:val] || {'name' => '', 'email' => '', 'content' => ''} end end" File.open("app/helpers/#{name}s_helper.rb", "w+") {|f| f.write(write_helper) } end
create_mailer(name, fields, mailer)
click to toggle source
“[kvesic.mislav@gmail.com, name]”
# File lib/create_mailer.rb, line 2 def create_mailer(name, fields, mailer) subject = "{@message.#{mailer[1]}}" write_mailer = "class #{name.capitalize}sMailer < ApplicationMailer def #{name}_contact(message) @message = message mail to: '#{mailer[0]}', from: 'no-reply@bamboolab.eu', subject: \"Pitanje od ##{subject}\" end end" File.open("app/mailers/#{name}s_mailer.rb", "w+") {|f| f.write(write_mailer) } message_items = [] fields.each do |item| message_items << "<p><%= @message.#{item.split(':')[0]} %></p>" end write_mailer_view="<p> Poštovani, </p> #{message_items.join("\n")} " dirname = File.dirname("app/views/#{name}s_mailer/#{name}_contact.html.erb") unless File.directory?(dirname) FileUtils.mkdir_p(dirname) end File.open("app/views/#{name}s_mailer/#{name}_contact.html.erb", "w+") {|f| f.write(write_mailer_view) } end
create_model(name, fields)
click to toggle source
# File lib/create_model.rb, line 1 def create_model(name, fields) field_names = [] field_types = [] fields.each do |field| field_names << "#{field.split(":")[0]}" field_types << "#{field.split(":")[1]}" end field_vars = [] field_emails = [] email_names_with_valid = [] success_case = "if" field_names.each_with_index do |n, i| field_vars << " @#{n} = @#{name}[:#{n}]" field_emails << " valid_#{n} = @#{name}[:#{n}] =~ /\\A[\\w+\\-.]+@[a-z\\d\\-]+(\\.[a-z\\d\\-]+)*\\.[a-z]+\\z/i #0 if ok, nil if don't" if field_types[i] == "email_field" email_names_with_valid << "valid_#{n}" if field_types[i] == "email_field" success_case << " @#{name}[:#{n}].present?" success_case << " and" unless i == field_names.length - 1 end emai_format_cases = [] email_names_with_valid.each do |e| success_case << " and #{e}" emai_format_cases << " elsif !@#{name}[:#{e.slice(6..-1)}].blank? and !#{e}" emai_format_cases << " @msg = 'error_#{e.slice(6..-1)}_#{name}'" emai_format_cases << " @valid = false" end write_model = "class #{name.capitalize} include ActiveModel::Model"" attr_accessor :#{field_names.join(", :")}, :valid ,:msg def initialize(#{name}=nil) @#{name} = #{name} if @#{name} #{field_vars.join("\n")} #{field_emails.join("\n")} #{success_case} @msg = 'success_#{name}' @valid = true #{emai_format_cases.join("\n")} else @msg = 'error_field_#{name}' @valid = false end end end end" File.open("app/models/#{name}.rb", "w+") {|f| f.write(write_model) } end
create_model_save(name, fields)
click to toggle source
# File lib/create_model_save.rb, line 1 def create_model_save(name, fields) field_names = [] field_emails = [] field_names_validates = [] field_emails_validates = [] validate_email = [] fields.each do |field| name_f = field.split(":")[0] type_f = field.split(":")[1] field_names << name_f field_emails << name_f if type_f == "email_field" field_names_validates << " validates :#{name_f}, presence: true" field_emails_validates << " validates :#{name_f}, format: { with: /\\A[\\w+\\-.]+@[a-z\\d\\-]+(\\.[a-z\\d\\-]+)*\\.[a-z]+\\z/i } #0 if ok, nil if don't" if type_f == "email_field" validate_email << " valid_#{name_f} = self.#{name_f} =~ /\\A[\\w+\\-.]+@[a-z\\d\\-]+(\\.[a-z\\d\\-]+)*\\.[a-z]+\\z/i #0 if ok, nil if don't" if type_f == "email_field" end success_case = "if" field_names.each_with_index do |name, i| success_case << " self.#{name}.present?" success_case << " and" unless i == field_names.length - 1 end wrong_email = [] field_emails.each do |email| success_case << " and " unless success_case == "if" success_case << " valid_#{email}" wrong_email << " elsif self.#{email}.present? and !valid_#{email}" wrong_email << " return 'error_#{e.slice(6..-1)}_#{name}'" end write_model = "class #{name.capitalize} < ApplicationRecord #{field_names_validates.join("\n")} #{field_emails_validates.join("\n")} validate :msg def msg #{validate_email.join("\n")} #{success_case} return 'success_#{name}' #{wrong_email.join("\n")} else return 'error_field_#{name}' end end end " File.open("app/models/#{name}.rb", "w+") {|f| f.write(write_model) } end
create_notice(name, fields, mailer)
click to toggle source
# File lib/create_notice.rb, line 1 def create_notice(name, fields, mailer) puts "*******************************************************************************************************" puts " ---------------------------" puts " | BAMBOOLAB CONTACT FORM |" puts " ---------------------------" puts "" puts "=> Add helper to controller where you want to use the form:" puts " include #{name.capitalize}sHelper" puts " before_action :#{name}_prepare_var" puts "" puts "=> Add this line to your config/routes file:" puts " post 'send_#{name}', to: '#{name}s#send_#{name}'" puts "" puts "=> Because of the translations add this to your app/controllers/application_controller.rb: " puts " def set_locale" puts " I18n.locale = params[:locale] || I18n.default_locale" puts " end" puts "=> Add this line to your views: " puts " <%= render '#{name}s/form' %>" puts "" unless mailer == "nil" puts "=> Add this code to you config/environments/development.rb and /production.rb with the right host :" puts " config.action_mailer.raise_delivery_errors = false" puts " config.action_mailer.default_url_options = { :host => 'yourhost.dev.bambooapp.eu' }" puts " config.action_mailer.delivery_method = :smtp" puts " config.action_mailer.smtp_settings = {" puts " address: ENV['SMTP_SERVER']," puts " openssl_verify_mode: OpenSSL::SSL::VERIFY_NONE," puts " port: ENV['SMTP_PORT'].to_i," puts " domain: ENV['MAILER_DOMAIN']," puts " authentication: 'plain'," puts " enable_starttls_auto: true," puts " user_name: ENV['SMTP_USER']," puts " password: ENV['SMTP_PWD']" puts " }" puts "" puts "=> And add your personal sendgrid information to config/environment.rb !" end puts "*******************************************************************************************************" end
create_translation(name, fields, translations)
click to toggle source
# File lib/create_translation.rb, line 1 def create_translation(name, fields, translations) template = { "hr" => ["Pošalji poruku", "Pošalji", "Sva polja moraju biti popunjena!", "Format email-a ne valja! Provjerite polje", "Uspješno ste poslali poruku."], "en" => ["Send the message", "Send", "Fields can't be empty!", "Email format is wrong, check the field:", "Message sent successfully"], "de" => ["Senden eine Nachricht", "Senden", "Felder können nicht leer sein!", "Falsches Format, Überprüfen Sie das Feld:", "Nachricht wurde gesendet."] } translations.each do |t| email_fields = [] fields.each do |field| email_fields << " error_#{field.split(':')[0]}_#{name}: \"#{template[t][3]} #{field.split(':')[0]} \"" if field.split(':')[1] == "email_field" end write_translation = "#{t}: title_#{name}: \"#{template[t][0]} \" send_btn_#{name}: \"#{template[t][1]}\" error_field_#{name}: \"#{template[t][2]}\" #{email_fields.join('\n')} success_#{name}: \"#{template[t][4]}\" " File.open("config/locales/#{name}.#{t}.yml", "w+") {|f| f.write( write_translation ) } end end
create_view(name, fields)
click to toggle source
# File lib/create_view.rb, line 1 def create_view(name, fields) field_divs = [] field_js = [] field_js_case = [] fields.each do |field| field_divs << " <div class='form__field'>" field_divs << " <%= f.label :#{field.split(":")[0]}, '#{field.split(":")[0]}', :class => 'label' %>" if field.split(":")[1] == "text_area" field_divs << " <%= f.#{field.split(":")[1]} :#{field.split(":")[0]}, autofocus: true, :class => 'input textarea', value: @placeholder['#{field.split(":")[0]}'] %>" else field_divs << " <%= f.#{field.split(":")[1]} :#{field.split(":")[0]}, autofocus: true, :class => 'input', value: @placeholder['#{field.split(":")[0]}'] %>" end field_divs << " </div>" field_js << " var #{field.split(":")[0]} = '<%= @placeholder[\"#{field.split(":")[0]}\"] %>';" field_js_case << " if (#{field.split(":")[0]}.length == 0) $('##{name}_#{field.split(":")[0]}').parent().addClass( 'form__field--error' );" end write_view = " <%= form_for(@#{name}, :url => send_#{name}_path, html: {class: 'form form--contact'} ) do |f| %> <fieldset class='form__fieldset'> <legend class='legend'><%= t('title_#{name}') %></legend> </fieldset> <fieldset class='form__fieldset'> <% if flash[:notice] %> <p> <%= t(flash[:notice]) %> </p> <% end %> </fieldset> <fieldset class='form__fieldset'> #{field_divs.join("\n")} </fieldset> <fieldset class='form__fieldset'> <%= f.submit t('send_btn_#{name}'), :class => 'btn btn--full right' %> </fieldset> <% end %> <script> $(function() { var val = '<%= flash[:val] %>'; if (val.length>0) { #{field_js.join("\n")} #{field_js_case.join("\n")} } }); </script>" File.open("app/views/#{name}s/_form.html.erb", "w+") {|f| f.write( write_view ) } end