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