gnugeek-is_msfte_searchable 0.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,3 @@
1
+ = Is Full Text Searchable
2
+
3
+ Rails plugin for full text searching on MS SQL Server 2000 - NOT COMPLETE YET
data/init.rb ADDED
@@ -0,0 +1 @@
1
+ require 'is_msfte_searchable'
@@ -0,0 +1,78 @@
1
+ path = File.expand_path(File.dirname(__FILE__))
2
+ $LOAD_PATH << path unless $LOAD_PATH.include?(path)
3
+
4
+ module IsMsfteSearchable
5
+ module ActiveRecordExtension
6
+ def is_msfte_searchable(options)
7
+ class_inheritable_accessor :fields
8
+ class_inheritable_accessor :key_table
9
+ self.fields = options[:fields].blank? ? [] : options[:fields].map(&:to_s)
10
+ self.key_table = options[:key_table].blank? ? table_name : options[:key_table]
11
+ include IsMsfteSearchable::NamedScopes
12
+ end
13
+ end
14
+
15
+ module NamedScopes
16
+ def self.included(klass)
17
+ klass.class_eval do
18
+
19
+ def self.make_search_string(search_string, boolean="OR")
20
+ search_string.split(/ +/).map {|term| '"' + term + '*"'}.join(" #{boolean} ")
21
+ end
22
+
23
+ named_scope :msfte_with_any, lambda { |search_string|
24
+ if search_string.blank?
25
+ {}
26
+ else
27
+ { :conditions => "#{table_name}.#{primary_key} IN (SELECT [KEY_TBL].[KEY] FROM CONTAINSTABLE(#{self.key_table},*,'#{make_search_string(search_string,'OR')}') AS KEY_TBL)" }
28
+ end
29
+ }
30
+
31
+ named_scope :msfte_with_all, lambda { |search_string|
32
+ if search_string.blank?
33
+ {}
34
+ else
35
+ { :conditions => "#{table_name}.#{primary_key} IN (SELECT [KEY_TBL].[KEY] FROM CONTAINSTABLE(#{self.key_table},*,'#{make_search_string(search_string,'AND')}') AS KEY_TBL)" }
36
+ end
37
+ }
38
+
39
+ named_scope :msfte_with_booleans, lambda { |search_string|
40
+ if search_string.blank?
41
+ {}
42
+ else
43
+ { :conditions => "#{table_name}.#{primary_key} IN (SELECT [KEY_TBL].[KEY] FROM CONTAINSTABLE(#{self.key_table},*,'#{search_string}') AS KEY_TBL)" }
44
+ end
45
+ }
46
+
47
+ self.fields.each do |field|
48
+ named_scope "msfte_#{field}_with_any".to_sym, lambda { |search_string|
49
+ if search_string.blank?
50
+ {}
51
+ else
52
+ { :conditions => "#{table_name}.#{primary_key} IN (SELECT [KEY_TBL].[KEY] FROM CONTAINSTABLE(#{self.key_table},#{field},'#{make_search_string(search_string,'OR')}') AS KEY_TBL)" }
53
+ end
54
+ }
55
+
56
+ named_scope "msfte_#{field}_with_all".to_sym, lambda { |search_string|
57
+ if search_string.blank?
58
+ {}
59
+ else
60
+ { :conditions => "#{table_name}.#{primary_key} IN (SELECT [KEY_TBL].[KEY] FROM CONTAINSTABLE(#{self.key_table},#{field},'#{make_search_string(search_string,'AND')}') AS KEY_TBL)" }
61
+ end
62
+ }
63
+
64
+ named_scope "msfte_#{field}_with_booleans".to_sym, lambda { |search_string|
65
+ if search_string.blank?
66
+ {}
67
+ else
68
+ { :conditions => "#{table_name}.#{primary_key} IN (SELECT [KEY_TBL].[KEY] FROM CONTAINSTABLE(#{self.key_table},*,'#{search_string}') AS KEY_TBL)" }
69
+ end
70
+ }
71
+ end
72
+
73
+ end
74
+ end
75
+ end
76
+ end
77
+
78
+ ActiveRecord::Base.send(:extend, IsMsfteSearchable::ActiveRecordExtension)
@@ -0,0 +1,23 @@
1
+ namespace :msfte do
2
+ task :no_ddl_environment => :environment do
3
+ conn = ActiveRecord::Base.connection
4
+ conn.instance_eval do
5
+ def supports_ddl_transactions? ; false ; end
6
+ end
7
+ end
8
+
9
+ task :enable_fulltext => :no_ddl_environment do
10
+ ActiveRecord::Base.connection.execute("sp_fulltext_database 'enable'")
11
+ end
12
+
13
+ task :add_table => :no_ddl_environment do
14
+ # parameters = table, columns
15
+ table = ENV['table']
16
+ cols = ENV['cols'].split(/, +/)
17
+ ActiveRecord::Base.connection.execute("sp_fulltext_catalog '#{table_msfte}','create'")
18
+ ActiveRecord::Base.connection.execute("sp_fulltext_table '#{table}', 'create', 'dealers_fti', 'dealer_id_idx'")
19
+ cols.each { |col| ActiveRecord::Base.connection.execute("sp_fulltext_column '#{table}', '#{col}', 'add'") }
20
+ ActiveRecord::Base.connection.execute("sp_fulltext_table '#{table}', 'start_change_tracking'")
21
+ ActiveRecord::Base.connection.execute("sp_fulltext_table '#{table}', 'start_background_updateindex'")
22
+ end
23
+ end
metadata ADDED
@@ -0,0 +1,56 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: gnugeek-is_msfte_searchable
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.2
5
+ platform: ruby
6
+ authors:
7
+ - Brian Knox
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2009-04-07 00:00:00 -07:00
13
+ default_executable:
14
+ dependencies: []
15
+
16
+ description: Adds named scopes for full text searching with Microsoft SQL Server 2000
17
+ email: bknox@decisiv.net
18
+ executables: []
19
+
20
+ extensions: []
21
+
22
+ extra_rdoc_files: []
23
+
24
+ files:
25
+ - init.rb
26
+ - README.rdoc
27
+ - lib/is_msfte_searchable.rb
28
+ - tasks/is_msfte_searchable_tasks.rake
29
+ has_rdoc: true
30
+ homepage: http://github.com/gnugeek/is_ms_searchable/
31
+ post_install_message:
32
+ rdoc_options: []
33
+
34
+ require_paths:
35
+ - lib
36
+ required_ruby_version: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: "0"
41
+ version:
42
+ required_rubygems_version: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - ">="
45
+ - !ruby/object:Gem::Version
46
+ version: "0"
47
+ version:
48
+ requirements: []
49
+
50
+ rubyforge_project:
51
+ rubygems_version: 1.2.0
52
+ signing_key:
53
+ specification_version: 2
54
+ summary: Easy full text searching for Microsoft SQL Server 2000
55
+ test_files: []
56
+