# File lib/hobo.rb, line 38 def find_by_search(query, search_targets=[]) if search_targets.empty? search_targets = Hobo::Model.all_models.select {|m| m.search_columns.any? } end query_words = ActiveRecord::Base.connection.quote_string(query).split search_targets.build_hash do |search_target| conditions = [] parameters = [] like_operator = ActiveRecord::Base.connection.adapter_name =~ /postg/ ? 'ILIKE' : 'LIKE' query_words.each do |word| column_queries = search_target.search_columns.map { |column| column == "id" ? "CAST(#{column} AS varchar) #{like_operator} ?" : "#{column} #{like_operator} ?" } conditions << "(" + column_queries.join(" or ") + ")" parameters.concat(["%#{word}%"] * column_queries.length) end conditions = conditions.join(" and ") results = search_target.where(conditions, *parameters) [search_target.name, results] unless results.empty? end end
# File lib/hobo.rb, line 34 def raw_js(s) RawJs.new(s) end
# File lib/hobo.rb, line 19 def self.root; @@root; end
# File lib/hobo.rb, line 61 def simple_has_many_association?(array_or_reflection) refl = array_or_reflection.respond_to?(:proxy_association) ? array_or_reflection.proxy_association.reflection : array_or_reflection return false unless refl.is_a?(ActiveRecord::Reflection::AssociationReflection) refl.macro == :has_many and (not refl.through_reflection) and (not refl.options[:conditions]) end
# File lib/hobo.rb, line 69 def subsites # Any directory inside app/controllers defines a subsite app_dirs = ["#{Rails.root}/app"] + Hobo.engines.map { |e| "#{e}/app" } @subsites ||= app_dirs.map do |app| Dir["#{app}/controllers/*"].map do |f| File.basename(f) if File.directory?(f) end.compact end.flatten end