lib/search_rails.rb in search_rails-1.1.1 vs lib/search_rails.rb in search_rails-1.1.2
- old
+ new
@@ -260,6 +260,273 @@
end
end
+
+
+ class SearchInstallDevise
+
+ def create_files
+ require "colorize"
+ require "fileutils"
+ root = Dir.pwd
+ Dir.chdir(root + '/app')
+ if File.exists?('search')
+ puts 'Already Exists'.bold.green + ' /app/search'.bold
+ else
+ FileUtils::mkdir_p "search"
+ puts "Created ".green.bold + '/app/search'.bold
+ end
+ Dir.chdir(root + '/app/search')
+ if File.exists?('search_module.rb')
+ puts 'Already Exists'.bold.green + ' /app/search/search_module.rb'.bold
+ else
+ File.new "search_module.rb", "w"
+ puts "Created ".green.bold + '/app/search/search_module.rb'.bold
+ end
+ Dir.chdir(root + '/app/controllers')
+ if File.exists?('searches_controller.rb')
+ puts 'Already Exists'.bold.green + ' /app/controllers/searches_controller.rb'.bold
+ else
+ File.new "searches_controller.rb", "w"
+ puts "Created ".green.bold + '/app/controllers/searches_controller.rb'.bold
+ end
+ Dir.chdir(root + '/app/models')
+ if File.exists?('search.rb')
+ puts 'Already Exists'.bold.green + ' /app/models/search.rb'.bold
+ else
+ File.new "search.rb", "w"
+ puts 'Created '.green.bold + '/app/models/search.rb'.bold
+ end
+ Dir.chdir(root + '/db')
+ if File.exists?('migrate')
+ puts 'Already Exists'.bold.green + ' /db/migrate'.bold
+ else
+ FileUtils::mkdir_p "migrate"
+ puts "Created ".green.bold + '/db/migrate'.bold
+ end
+ Dir.chdir(root)
+ end
+
+ def write_search_module(object, attributes)
+ root = Dir.pwd
+ require 'active_support/inflector'
+ Dir.chdir(root + '/app/search')
+ File.open("search_module.rb", "a") do |line|
+ line.puts 'module SearchModule'
+ line.puts ' def search'
+ attri_one = attributes[0]
+ attribute = attri_one.split(':')
+ line.puts " @" + object.downcase.pluralize + " = " + object.capitalize.singularize + ".where('lower(" + attribute[0] + ") LIKE ?', '%' + @search.search.downcase + '%')"
+ attributes = attributes.reject { |attri| attri == attributes[0] }
+ attributes.each do |attri|
+ attribute = attri.split(':')
+ if attribute[1] == 'integer' || attribute[1] == 'decimal'
+ line.puts " " + object.capitalize.singularize + ".where('cast(" + attribute[0] + " AS VARCHAR) LIKE ?', '%' + @search.search + '%').each { |" + attribute[0] + "| @" + object.downcase.pluralize + ".any? { |f| f.id == " + attribute[0] + ".id } ? true : @" + object.downcase.pluralize + " << " + attribute[0] + " }"
+ elsif attribute[1] == 'boolean'
+ line.puts " if @search.search.downcase == 'true' || @search.search.downcase == 'tru' || @search.search.downcase == 'tr' || @search.search.downcase == 't'"
+ line.puts " " + object.capitalize.singularize + ".where(" + attribute[0] + ": true).each { |" + attribute[0] + "| @" + object.downcase.pluralize + ".any? { |f| f.id == " + attribute[0] + ".id } ? true : @" + object.downcase.pluralize + " << " + attribute[0] + " }"
+ line.puts " else @search.search.downcase == 'false' || @search.search.downcase == 'fals' || @search.search.downcase == 'fal' || @search.search.downcase == 'fa' || @search.search.downcase == 'f'"
+ line.puts " " + object.capitalize.singularize + ".where(" + attribute[0] + ": false).each { |" + attribute[0] + "| @" + object.downcase.pluralize + ".any? { |f| f.id == " + attribute[0] + ".id } ? true : @" + object.downcase.pluralize + " << " + attribute[0] + " }"
+ line.puts " end"
+ else
+ line.puts " " + object.capitalize.singularize + ".where('lower(" + attribute[0] + ") LIKE ?', '%' + @search.search + '%').each { |" + attribute[0] + "| @" + object.downcase.pluralize + ".any? { |f| f.id == " + attribute[0] + ".id } ? true : @" + object.downcase.pluralize + " << " + attribute[0] + " }"
+ end
+ end
+ line.puts ' end'
+ line.puts ''
+ line.puts ' def clear'
+ line.puts ' @search = Search.find_by(user_id: current_user.id)'
+ line.puts ' @search.search = nil'
+ line.puts ' @search.save'
+ line.puts ' redirect_to ' + object.pluralize.downcase + '_path'
+ line.puts ' end'
+ line.puts ''
+ line.puts ' def check_for_search'
+ line.puts ' if user_signed_in?'
+ line.puts ' if Search.find_by(user_id: current_user.id) == nil'
+ line.puts ' @search = Search.new'
+ line.puts ' @search.search = nil'
+ line.puts ' @search.user_id = current_user.id'
+ line.puts ' @search.save'
+ line.puts ' end'
+ line.puts ' end'
+ line.puts ' end'
+ line.puts ''
+ line.puts ' def update_search'
+ line.puts ' respond_to do |format|'
+ line.puts ' if @search.update(search_params)'
+ line.puts ' format.html { redirect_to :back }'
+ line.puts ' format.json { render :show, status: :ok, location: @search }'
+ line.puts ' else'
+ line.puts ' format.html { render :edit }'
+ line.puts ' format.json { render json: @search.errors, status: :unprocessable_entity }'
+ line.puts ' end'
+ line.puts ' end'
+ line.puts ' end'
+
+ line.puts 'end'
+ end
+ Dir.chdir(root)
+ end
+
+ def write_search_controller
+ root = Dir.pwd
+ Dir.chdir(root + '/app/controllers')
+ File.open("searches_controller.rb", "a") do |line|
+ line.puts 'class SearchesController < ApplicationController'
+ line.puts ' before_action :set_search, only: [:show, :edit, :update, :destroy]'
+ line.puts ' before_action :include_search_module, only: [ :clear, :edit, :update ]'
+ line.puts ''
+ line.puts ' def clear'
+ line.puts ' clear'
+ line.puts ' end'
+ line.puts ''
+ line.puts ' def update'
+ line.puts ' update_search'
+ line.puts ' end'
+ line.puts ''
+ line.puts ' private'
+ line.puts ''
+ line.puts ' def set_search'
+ line.puts ' @search = Search.find_by(user_id: current_user.id)'
+ line.puts ' end'
+ line.puts ''
+ line.puts ' def include_search_module'
+ line.puts " $LOAD_PATH.unshift(File.dirname('../app/search'))"
+ line.puts ' extend SearchModule'
+ line.puts ' end'
+ line.puts ''
+ line.puts ' def search_params'
+ line.puts ' params.require(:search).permit(:search, :user_id)'
+ line.puts ' end'
+ line.puts ''
+ line.puts 'end'
+ end
+ Dir.chdir(root)
+ end
+
+ def write_migration
+ require "fileutils"
+ require 'colorize'
+ root = Dir.pwd
+ Dir.chdir(root + '/db/migrate')
+ require 'date'
+ @time = DateTime.now.strftime('%Y%m%d%H%M%S')
+ if Dir[root + '/db/migrate/*_create_searches.rb'].count > 0
+ file = Dir[root + '/db/migrate/*_create_searches.rb'].first
+ puts 'Already Exists '.bold.green + file[38..100].bold
+ else
+ File.new @time + '_create_searches.rb', "w"
+ puts "Created ".green.bold + '/db/migrate/'.bold + @time.bold + '_create_searches.rb'.bold
+ File.open(@time + "_create_searches.rb", "a") do |line|
+ line.puts 'class CreateSearches < ActiveRecord::Migration'
+ line.puts ' def change'
+ line.puts ' create_table :searches do |t|'
+ line.puts ' t.string :search'
+ line.puts ' t.integer :user_id'
+ line.puts ' t.timestamps null: false'
+ line.puts ' end'
+ line.puts ' end'
+ line.puts 'end'
+ end
+ end
+ Dir.chdir(root)
+ end
+
+ def write_application_controller
+ require "fileutils"
+ root = Dir.pwd
+ Dir.chdir(root + '/app/controllers')
+ first_line = IO.readlines("application_controller.rb")[0]
+ other_lines = IO.readlines("application_controller.rb")[1..1000000000]
+ second_line = IO.readlines("application_controller.rb")[1]
+
+ if second_line.chomp == ' before_action :check_for_search'
+ puts 'Already Exists'.bold.green + ' /app/controllers/application_controller.rb'.bold
+ else
+ FileUtils::mkdir_p "migrate"
+ puts "Updated ".green.bold + '/app/controllers/application_controller.rb'.bold
+ File.open("application_controller.rb", "w") do |line|
+ line.puts first_line
+ line.puts ' before_action :check_for_search'
+ line.puts ''
+ line.puts ' def check_for_search'
+ line.puts " $LOAD_PATH.unshift(File.dirname('../app/search'))"
+ line.puts ' extend SearchModule'
+ line.puts ' check_for_search'
+ line.puts ' end'
+ line.puts ''
+ line.puts other_lines
+ end
+ end
+ Dir.chdir(root)
+ end
+
+ def write_search_model
+ require "fileutils"
+ root = Dir.pwd
+ Dir.chdir(root + '/app/models')
+ File.open("search.rb", "w") do |line|
+ line.puts 'class Search < ActiveRecord::Base'
+ line.puts 'end'
+ end
+ Dir.chdir(root)
+ end
+
+ def update_routes
+ require "fileutils"
+ root = Dir.pwd
+ Dir.chdir(root + '/config')
+ first_line = IO.readlines("routes.rb")[0]
+ other_lines = IO.readlines("routes.rb")[1..1000000000]
+ second_line = IO.readlines("routes.rb")[1]
+ if second_line.chomp == 'resources :searches do'
+ puts 'Already Exists'.bold.green + ' /config/routes.rb'.bold
+ else
+ File.open('routes.rb', 'w') do |line|
+ line.puts first_line
+ line.puts 'resources :searches do'
+ line.puts ' member do'
+ line.puts " get 'clear'"
+ line.puts ' end'
+ line.puts 'end'
+ line.puts other_lines
+ end
+ puts 'Updated '.bold.green + '/config/routes.rb'.bold
+ end
+ Dir.chdir(root)
+ end
+
+ def run
+ require 'colorize'
+ root = Dir.pwd
+
+ puts "Syntax: 'install OBJECT ATTRIBUTE:TYPE'".bold.on_red
+ command = gets.chomp
+ command = command.split(" ")
+ if command[0] == 'install'
+ puts ''
+ puts 'Creating Files...'.bold
+ object = command[1]
+ attributes = command[2..10000000]
+ end
+
+ SearchInstallDevise.new.create_files
+ SearchInstallDevise.new.write_search_controller
+ SearchInstallDevise.new.write_search_model
+ SearchInstallDevise.new.write_search_module(object, attributes)
+ SearchInstallDevise.new.write_application_controller
+ SearchInstallDevise.new.write_migration
+ SearchInstallDevise.new.update_routes
+
+ puts 'Done'.bold
+ puts ''
+
+
+ end
+
+ end
+
+
end