xapian_db 0.5.4 → 0.5.5

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG.md CHANGED
@@ -1,3 +1,15 @@
1
+ ##0.5.5 (February 25th, 2011)
2
+
3
+ Fixes:
4
+
5
+ - ":memory:" as a configuration option for a database works again (was broken in 0.5.4)
6
+ - forcing utf-8 encoding on a spelling suggestion returned by the xapian query parser
7
+
8
+ Features:
9
+
10
+ - configure only those environments in xapian_db.yml where you want to override the defaults
11
+ - XapianDb.rebuild_xapian_index rebuilds the index for all blueprints
12
+
1
13
  ##0.5.4 (February 22th, 2011)
2
14
 
3
15
  Fixes:
data/README.rdoc CHANGED
@@ -32,8 +32,8 @@ I tried hard but I couldn't find such a thing so I decided to write it, based on
32
32
 
33
33
  == Requirements
34
34
 
35
- * ruby 1.9.2 or better
36
- * rails 3.0 or better (if you want to use it with rails)
35
+ * ruby 1.9.2 or newer
36
+ * rails 3.0 or newer (if you want to use it with rails)
37
37
 
38
38
  == Getting started
39
39
 
@@ -69,6 +69,8 @@ You can override these defaults by placing a config file named 'xapian_db.yml' i
69
69
  database: db/xapian_db/production
70
70
  <<: *defaults
71
71
 
72
+ If you do not configure settings for an environment in this file, xapian_db applies the defaults.
73
+
72
74
  === Configure an index blueprint
73
75
 
74
76
  In order to get your models indexed, you must configure a document blueprint for each class you want to index:
@@ -131,6 +133,10 @@ To get info about the reindex process, use the verbose option:
131
133
 
132
134
  In verbose mode, XapianDb will use the progressbar gem if available.
133
135
 
136
+ To rebuild the index for all blueprints, use
137
+
138
+ XapianDb.rebuild_xapian_index
139
+
134
140
  === Query the index
135
141
 
136
142
  A simple query looks like this:
@@ -45,6 +45,12 @@ module XapianDb
45
45
  @searchable_prefixes = nil # force rebuild of the searchable prefixes
46
46
  end
47
47
 
48
+ # Get all configured classes
49
+ # @return [Array<Class>]
50
+ def configured_classes
51
+ @blueprints ? @blueprints.keys : []
52
+ end
53
+
48
54
  # Get the blueprint for a class
49
55
  # @return [DocumentBlueprint]
50
56
  def blueprint_for(klass)
@@ -47,7 +47,7 @@ module XapianDb
47
47
  if defined?(ProgressBar)
48
48
  show_progressbar = true
49
49
  end
50
- puts "Reindexing #{obj_count} objects..."
50
+ puts "reindexing #{obj_count} objects of #{klass}..."
51
51
  pbar = ProgressBar.new("Status", obj_count) if show_progressbar
52
52
  end
53
53
 
@@ -65,6 +65,7 @@ module XapianDb
65
65
  end
66
66
  end
67
67
  XapianDb.database.commit
68
+ true
68
69
  end
69
70
 
70
71
  end
@@ -40,7 +40,7 @@ module XapianDb
40
40
  # (like "name:Kogler")
41
41
  XapianDb::DocumentBlueprint.searchable_prefixes.each{|prefix| parser.add_prefix(prefix.to_s.downcase, "X#{prefix.to_s.upcase}") }
42
42
  query = parser.parse_query(expression, @query_flags)
43
- @spelling_suggestion = parser.get_corrected_query_string
43
+ @spelling_suggestion = parser.get_corrected_query_string.force_encoding("UTF-8")
44
44
  @spelling_suggestion = nil if @spelling_suggestion.empty?
45
45
  query
46
46
  end
@@ -21,29 +21,23 @@ module XapianDb
21
21
  if File.exist?(config_file_path)
22
22
  db_config = YAML::load_file config_file_path
23
23
  env_config = db_config[Rails.env]
24
- database_path = File.expand_path(env_config["database"]) || ":memory:"
25
- adapter = env_config["adapter"] || :active_record
26
- writer = env_config["writer"] || :direct
27
- beanstalk_daemon = env_config["beanstalk_daemon"]
24
+ env_config ? configure_from(env_config) : configure_defaults
28
25
  else
29
26
  # No config file, set the defaults
30
- Rails.env == "test" ? database_path = ":memory:" : database_path = File.expand_path("db/xapian_db/#{Rails.env}")
31
- adapter = :active_record
32
- writer = :direct
33
- beanstalk_daemon = nil
27
+ configure_defaults
34
28
  end
35
29
 
36
30
  # Do the configuration
37
31
  XapianDb::Config.setup do |config|
38
- if database_path == ":memory:"
32
+ if @database_path == ":memory:"
39
33
  config.database :memory
40
34
  else
41
- config.database database_path
35
+ config.database File.expand_path @database_path
42
36
  end
43
- config.adapter adapter.to_sym
44
- config.writer writer.to_sym
45
- config.beanstalk_daemon_url beanstalk_daemon
46
- config.language(env_config["language"]) if env_config && env_config["language"]
37
+ config.adapter @adapter.to_sym
38
+ config.writer @writer.to_sym
39
+ config.beanstalk_daemon_url @beanstalk_daemon
40
+ config.language @language
47
41
  end
48
42
 
49
43
  end
@@ -55,5 +49,25 @@ module XapianDb
55
49
  load blueprints_file_path if File.exist?(blueprints_file_path)
56
50
  end
57
51
 
52
+ private
53
+
54
+ # use the config options from the config file
55
+ def self.configure_from(env_config)
56
+ @database_path = env_config["database"] || ":memory:"
57
+ @adapter = env_config["adapter"] || :active_record
58
+ @writer = env_config["writer"] || :direct
59
+ @beanstalk_daemon = env_config["beanstalk_daemon"]
60
+ @language = env_config["language"]
61
+ end
62
+
63
+ # set default config options
64
+ def self.configure_defaults
65
+ Rails.env == "test" ? @database_path = ":memory:" : @database_path = "db/xapian_db/#{Rails.env}"
66
+ @adapter = :active_record
67
+ @writer = :direct
68
+ @beanstalk_daemon = nil
69
+ @language = :en
70
+ end
71
+
58
72
  end
59
73
  end
data/lib/xapian_db.rb CHANGED
@@ -84,6 +84,19 @@ module XapianDb
84
84
  XapianDb::Config.database.facets(expression)
85
85
  end
86
86
 
87
+ # Rebuild the xapian index for all configured blueprints
88
+ # @param [Hash] options Options for reindexing
89
+ # @option options [Boolean] :verbose (false) Should the reindexing give status informations?
90
+ # @return [Boolean] Did we reindex anything?
91
+ def self.rebuild_xapian_index(options={})
92
+ configured_classes = XapianDb::DocumentBlueprint.configured_classes
93
+ return false unless configured_classes.size > 0
94
+ configured_classes.each do |klass|
95
+ XapianDb::Config.writer.reindex_class(klass, options)
96
+ end
97
+ true
98
+ end
99
+
87
100
  end
88
101
 
89
102
  do_not_require = %w(update_stopwords.rb railtie.rb base_adapter.rb beanstalk_writer.rb)
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: xapian_db
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.5.4
5
+ version: 0.5.5
6
6
  platform: ruby
7
7
  authors:
8
8
  - Gernot Kogler
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2011-02-22 00:00:00 +01:00
13
+ date: 2011-02-25 00:00:00 +01:00
14
14
  default_executable:
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
@@ -123,7 +123,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
123
123
  requirements: []
124
124
 
125
125
  rubyforge_project:
126
- rubygems_version: 1.5.2
126
+ rubygems_version: 1.5.0
127
127
  signing_key:
128
128
  specification_version: 3
129
129
  summary: Ruby library to use a Xapian db as a key/value store with high performance fulltext search