xapian_db 0.5.4 → 0.5.5

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.
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