#!/usr/bin/env ruby # Search for Mirvac retail centres # # Params: # => name # => category # => loyalty_card # # Examples: # => search.rb?name=whatever&category=Entertainment # => search.rb?name=whatever&category=Entertainment&loyalty_card=sapphire require 'rubygems' require 'cgi' require 'erb' require 'sqlite3' DB_PATH = "/home/blocks/datastores/blocks.mirvacretail.com.au.sqlite" SEARCH_ERB_PATH = "search.erb" # class CentreSearch # attr_accessor :results # # def initialize(search_criteria={}) # @search_criteria = search_criteria # @db = SQLite3::Database.new(DB_PATH) # end # # def query # sql = [] # sql << "SELECT * FROM centres" # # unless @search_criteria.empty? # sql << "WHERE" # conditions = [] # @search_criteria.each do |col, val| # conditions << "( #{col} LIKE '%#{val}%' )" # end # sql << conditions.join(" AND ") # end # # sql = sql.join(" ") # # @results = @db.execute2(sql); @db.close # @results # end # end class StoreSearch attr_accessor :results def initialize(search_criteria={}) @search_criteria = search_criteria @db = SQLite3::Database.new(DB_PATH) end def query(site_id) sql = [] sql << "SELECT stores.* FROM stores INNER JOIN centres ON centres.id = stores.centre_id" sql << "WHERE centres.site_id = #{site_id}" unless @search_criteria.empty? conditions = [] @search_criteria.each do |col, val| conditions << "( stores.#{col} LIKE '#{val}%' )" unless val == '0' or val.empty? end sql << "AND " + conditions.join(" AND ") unless conditions.empty? end sql << "ORDER BY stores.name ASC" sql = sql.join(" ") @results = @db.execute2(sql); @db.close @results end end begin # Desired usage below cgi = CGI.new @search_criteria = {} @search_criteria[:name] = cgi['name'] if cgi['name'] and cgi['name'] != '' @search_criteria[:category] = cgi['category'] if cgi['category'] and cgi['category'] != '' @search_criteria[:loyalty_card] = cgi['loyalty_card'] if cgi['loyalty_card'] and cgi['loyalty_card'] != '' @page.site.id = cgi['site_id'] if cgi['site_id'] and cgi['site_id'] != '' @site_name = cgi['site_name'] if cgi['site_name'] and cgi['site_name'] != '' @stores = StoreSearch.new(@search_criteria).query(@page.site.id) @stores = StoreSearch.new.query(@page.site.id) if @stores.length < 2 @centre_id = @stores[1][3]; # centre_search = CentreSearch.new # @centres = centre_search.query # Render search.html with our object @results search_html = "" File.open(SEARCH_ERB_PATH, 'r') { |f| search_html = f.read } erb = ERB.new(search_html) cgi.out { erb.result } rescue => e cgi.out { "We're sorry, an error occured conducting your search." } end