redcar 0.9.1 → 0.9.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (63) hide show
  1. data/CHANGES +6 -0
  2. data/Rakefile +1 -1
  3. data/lib/redcar.rb +2 -2
  4. data/lib/redcar/installer.rb +3 -2
  5. metadata +4 -62
  6. data/plugins/project_search/vendor/lucene/CHANGELOG +0 -147
  7. data/plugins/project_search/vendor/lucene/CONTRIBUTORS +0 -17
  8. data/plugins/project_search/vendor/lucene/Gemfile +0 -9
  9. data/plugins/project_search/vendor/lucene/Gemfile.lock +0 -33
  10. data/plugins/project_search/vendor/lucene/LICENSE +0 -19
  11. data/plugins/project_search/vendor/lucene/README.rdoc +0 -283
  12. data/plugins/project_search/vendor/lucene/Rakefile +0 -35
  13. data/plugins/project_search/vendor/lucene/examples/active_model/serializers.rb +0 -25
  14. data/plugins/project_search/vendor/lucene/examples/active_model/validation.rb +0 -26
  15. data/plugins/project_search/vendor/lucene/examples/admin/Rakefile +0 -4
  16. data/plugins/project_search/vendor/lucene/examples/admin/admin.rb +0 -29
  17. data/plugins/project_search/vendor/lucene/examples/admin/public/jquery.js +0 -4376
  18. data/plugins/project_search/vendor/lucene/examples/admin/public/neo4j.css +0 -153
  19. data/plugins/project_search/vendor/lucene/examples/admin/public/neo_admin.js +0 -18
  20. data/plugins/project_search/vendor/lucene/examples/admin/spec/admin_spec.rb +0 -26
  21. data/plugins/project_search/vendor/lucene/examples/admin/views/index.erb +0 -21
  22. data/plugins/project_search/vendor/lucene/examples/filetree/README.rdoc +0 -9
  23. data/plugins/project_search/vendor/lucene/examples/filetree/app.rb +0 -7
  24. data/plugins/project_search/vendor/lucene/examples/filetree/batch.props +0 -5
  25. data/plugins/project_search/vendor/lucene/examples/filetree/features/step_definitions/add_steps.rb +0 -121
  26. data/plugins/project_search/vendor/lucene/examples/filetree/features/support/env.rb +0 -30
  27. data/plugins/project_search/vendor/lucene/examples/filetree/features/support/rspec_helper.rb +0 -50
  28. data/plugins/project_search/vendor/lucene/examples/filetree/features/treesizes.feature +0 -19
  29. data/plugins/project_search/vendor/lucene/examples/imdb/1_create_neo_db.rb +0 -66
  30. data/plugins/project_search/vendor/lucene/examples/imdb/2_index_db.rb +0 -23
  31. data/plugins/project_search/vendor/lucene/examples/imdb/README +0 -12
  32. data/plugins/project_search/vendor/lucene/examples/imdb/find_actors.rb +0 -56
  33. data/plugins/project_search/vendor/lucene/examples/imdb/install.sh +0 -12
  34. data/plugins/project_search/vendor/lucene/examples/imdb/model.rb +0 -37
  35. data/plugins/project_search/vendor/lucene/examples/railway/README +0 -111
  36. data/plugins/project_search/vendor/lucene/examples/railway/railnet-app.rb +0 -31
  37. data/plugins/project_search/vendor/lucene/examples/railway/railnet-data.rb +0 -42
  38. data/plugins/project_search/vendor/lucene/examples/rest/example.rb +0 -41
  39. data/plugins/project_search/vendor/lucene/examples/you_might_know/YouMightKnow.java +0 -60
  40. data/plugins/project_search/vendor/lucene/examples/you_might_know/all_simple_paths.rb +0 -34
  41. data/plugins/project_search/vendor/lucene/examples/you_might_know/nodes.rb +0 -34
  42. data/plugins/project_search/vendor/lucene/examples/you_might_know/you_might_know.rb +0 -50
  43. data/plugins/project_search/vendor/lucene/lib/lucene.rb +0 -15
  44. data/plugins/project_search/vendor/lucene/lib/lucene/config.rb +0 -145
  45. data/plugins/project_search/vendor/lucene/lib/lucene/document.rb +0 -96
  46. data/plugins/project_search/vendor/lucene/lib/lucene/field_info.rb +0 -144
  47. data/plugins/project_search/vendor/lucene/lib/lucene/hits.rb +0 -54
  48. data/plugins/project_search/vendor/lucene/lib/lucene/index.rb +0 -267
  49. data/plugins/project_search/vendor/lucene/lib/lucene/index_info.rb +0 -146
  50. data/plugins/project_search/vendor/lucene/lib/lucene/index_searcher.rb +0 -157
  51. data/plugins/project_search/vendor/lucene/lib/lucene/jars.rb +0 -5
  52. data/plugins/project_search/vendor/lucene/lib/lucene/query_dsl.rb +0 -135
  53. data/plugins/project_search/vendor/lucene/lib/lucene/transaction.rb +0 -117
  54. data/plugins/project_search/vendor/lucene/lib/lucene/version.rb +0 -3
  55. data/plugins/project_search/vendor/lucene/lucene.gemspec +0 -23
  56. data/plugins/project_search/vendor/lucene/spec/lucene/document_spec.rb +0 -32
  57. data/plugins/project_search/vendor/lucene/spec/lucene/field_info_spec.rb +0 -70
  58. data/plugins/project_search/vendor/lucene/spec/lucene/index_info_spec.rb +0 -76
  59. data/plugins/project_search/vendor/lucene/spec/lucene/index_spec.rb +0 -643
  60. data/plugins/project_search/vendor/lucene/spec/lucene/query_dsl_spec.rb +0 -142
  61. data/plugins/project_search/vendor/lucene/spec/lucene/sort_spec.rb +0 -101
  62. data/plugins/project_search/vendor/lucene/spec/lucene/spec_helper.rb +0 -10
  63. data/plugins/project_search/vendor/lucene/spec/lucene/transaction_spec.rb +0 -118
@@ -1,54 +0,0 @@
1
- module Lucene
2
-
3
-
4
- #
5
- # Contains the result as a collection of Documents from a lucene query.
6
- # Is a wrapper for the Java org.apache.lucene.search.Hits class
7
- #
8
- class Hits
9
- include Enumerable
10
-
11
- def initialize(field_infos, hits)
12
- @hits = hits
13
- @field_infos = field_infos
14
- end
15
-
16
-
17
- #
18
- # Returns the n:th hit document.
19
- #
20
- def [](n)
21
- doc = @hits.doc(n)
22
- Document.convert(@field_infos, doc)
23
- end
24
-
25
-
26
- #
27
- # Returns true if there are no hits
28
- #
29
- def empty?
30
- @hits.length == 0
31
- end
32
-
33
- def each
34
- iter = @hits.iterator
35
-
36
- while (iter.hasNext && hit = iter.next)
37
- yield Document.convert(@field_infos, hit.getDocument)
38
- end
39
- end
40
-
41
-
42
- #
43
- # The number of documents the query gave.
44
- #
45
- def size
46
- @hits.length
47
- end
48
-
49
- def to_s
50
- "Hits [size=#{size}]"
51
- end
52
-
53
- end
54
- end
@@ -1,267 +0,0 @@
1
- require 'monitor'
2
- require 'lucene/jars'
3
- require 'lucene/transaction'
4
- require 'lucene/index_searcher'
5
- require 'lucene/document'
6
- require 'lucene/field_info'
7
- require 'lucene/index_info'
8
-
9
- #
10
- # A wrapper for the Java lucene search library.
11
- #
12
- module Lucene
13
-
14
- class DocumentDeletedException < StandardError;
15
- end
16
- class IdFieldMissingException < StandardError;
17
- end
18
-
19
- #
20
- # Represents a Lucene Index.
21
- # The index is written/updated only when the commit method is called.
22
- # This is done since writing to the index file should be done as a batch operation.
23
- # (Performance will be bad otherwise).
24
- #
25
- # For each Thread there is zero or one Index instance. There are at most one Index instance per thread
26
- # so there is no need for this class to use synchronization for Thread safety.
27
- #
28
- class Index
29
- attr_reader :path, :uncommited
30
-
31
-
32
- # locks per index path, must not write to the same index from 2 threads
33
- @@locks = {}
34
- @@locks.extend MonitorMixin
35
-
36
- def initialize(path, index_info)
37
- @path = path # a key (i.e. filepath) where the index is stored on disk/or RAM
38
- @index_info = index_info # the actual storage of the index
39
- @uncommited = {} # documents to be commited, a hash of Document
40
- @deleted_ids = [] # documents to be deleted
41
- end
42
-
43
- def field_infos
44
- IndexInfo.instance(@path)
45
- end
46
-
47
-
48
- # Returns an Index instance for the current running transaction.
49
- #
50
- # Tries to reuse an Index instance for the current running transaction.
51
- # If a Lucene::Transaction is running it will register this index in that transaction if
52
- # this has not already been done.
53
- # When it has been registered in the transaction the transaction will commit the index
54
- # when the transaction is finished.
55
- # The configuration (kept in the #field_infos) for this index will be the same for all indexes with the same path/key.
56
- #
57
- # ==== Parameters
58
- # path<String>:: The key or location where the index should be stored (relative Lucene::Config[:storage_path]
59
- #
60
- # ==== Examples
61
- # Index.new 'foo/lucene-db'
62
- #
63
- # ==== Returns
64
- # Returns a new or an already existing Index
65
- #
66
- def self.new(path)
67
- # make sure no one modifies the index specified at given path
68
- lock(path).synchronize do
69
- # create a new transaction if needed
70
- Transaction.new unless Transaction.running?
71
-
72
- # create a new instance only if it does not already exist in the current transaction
73
- unless Transaction.current.index?(path)
74
- info = IndexInfo.instance(path)
75
- index = super(path, info)
76
- Transaction.current.register_index(path, index)
77
- end
78
- end
79
- # return the index for the current transaction
80
- Transaction.current.index(path)
81
- end
82
-
83
-
84
- #
85
- # Delete all uncommited documents. Also deregister this index
86
- # from the current transaction (if there is one transaction)
87
- #
88
- def clear
89
- @uncommited.clear
90
- Transaction.current.deregister_index self if Transaction.running?
91
- end
92
-
93
- #
94
- # See instance method Index.clear
95
- #
96
- def self.clear(path)
97
- return unless Transaction.running?
98
- return unless Transaction.current.index?(path)
99
- Transaction.current.index(path).clear
100
- end
101
-
102
- # Creates a new document from the given hash of values.
103
- # This document will be stored in this instance till it is commited.
104
- #
105
- # ==== Parameters
106
- # path<String>:: The key or location where the index should be stored (relative Lucene::Config[:storage_path]
107
- #
108
- # ==== Examples
109
- # index = Index.new('name_or_path_to_index')
110
- # index << {:id=>'1', :name=>'foo'}
111
- #
112
- # ==== Returns
113
- # Returns the index instance so that this method can be chained
114
- #
115
- def <<(key_values)
116
- doc = Document.new(field_infos, key_values)
117
- @uncommited[doc.id] = doc
118
- self
119
- end
120
-
121
- def id_field
122
- @index_info.id_field
123
- end
124
-
125
- #
126
- # Updates the specified document.
127
- # The index file will not be updated until the transaction commits.
128
- # The doc is stored in memory till the transaction commits.
129
- #
130
- def update(doc)
131
- @uncommited[doc.id] = doc
132
- end
133
-
134
- #
135
- # Delete the specified document.
136
- # The index file not be updated until the transaction commits.
137
- # The id of the deleted document is stored in memory till the transaction commits.
138
- #
139
- def delete(id)
140
- @deleted_ids << id.to_s
141
- end
142
-
143
-
144
- def deleted?(id)
145
- @deleted_ids.include?(id.to_s)
146
- end
147
-
148
- def updated?(id)
149
- @uncommited[id.to_s]
150
- end
151
-
152
- # Writes to the index files.
153
- # Open and closes an lucene IndexWriter
154
- # Close the IndexSearcher so that it will read the updated index next time.
155
- # This method will automatically be called from a Lucene::Transaction if it was running when the index was created.
156
- #
157
- # This method is synchronized since it is not allowed to update a lucene index from several threads at the same time.
158
- #
159
- def commit
160
- lock.synchronize do
161
- delete_documents # deletes all documents given @deleted_ids
162
-
163
- # are any updated document deleted ?
164
- deleted_ids = @uncommited.keys & @deleted_ids
165
- # make sure we don't index deleted document
166
- deleted_ids.each {|id| @uncommited.delete(id)}
167
-
168
- # update the remaining documents that has not been deleted
169
-
170
- begin
171
- index_writer = org.apache.lucene.index.IndexWriter.new(@index_info.storage, @index_info.analyzer, ! exist?)
172
- # removes the document and adds it again
173
- @uncommited.each_value { |doc| doc.update(index_writer) }
174
- ensure
175
- # TODO exception handling, what if ...
176
- index_writer.close
177
-
178
- @uncommited.clear
179
- @deleted_ids.clear
180
-
181
- # if we are running in a transaction remove this so it will not be committed twice
182
- Transaction.current.deregister_index(self) if Transaction.running?
183
- end
184
- end
185
- end
186
-
187
-
188
- #
189
- # Delegates to the IndexSearcher.find method
190
- #
191
- def find(*query, &block)
192
- # new method is a factory method, does not create if it already exists
193
- searcher = IndexSearcher.new(@index_info.storage)
194
-
195
- if block.nil?
196
- case query.first
197
- when String
198
- return searcher.find(@index_info, query)
199
- when Hash, Array
200
- return searcher.find(@index_info, query.first)
201
- end
202
- else
203
- return searcher.find_dsl(@index_info, &block)
204
- end
205
- end
206
-
207
-
208
- def to_s
209
- "Index [path: '#@path', #{@uncommited.size} documents]"
210
- end
211
-
212
- #
213
- # -------------------------------------------------------------------------
214
- # Private methods
215
- #
216
-
217
- private
218
-
219
- #
220
- # There is one lock per index path.
221
- #
222
- def lock
223
- @@locks.synchronize do
224
- @@locks[@path] ||= Monitor.new
225
- @@locks[@path]
226
- end
227
- end
228
-
229
- def self.lock(path)
230
- @@locks.synchronize do
231
- @@locks[path] ||= Monitor.new
232
- @@locks[path]
233
- end
234
- end
235
-
236
- #
237
- # Returns true if the index already exists.
238
- #
239
- def exist?
240
- @index_info.index_exists?
241
- end
242
-
243
- #
244
- # --------------------------------------------------------------------------
245
- #
246
- private
247
-
248
- def delete_documents # :nodoc:
249
- return unless exist? # if no index exists then there is nothing to do
250
-
251
- writer = org.apache.lucene.index.IndexWriter.new(@index_info.storage, @index_info.analyzer, false)
252
- id_field = @index_info.infos[@index_info.id_field]
253
-
254
- @deleted_ids.each do |id|
255
- converted_value = id_field.convert_to_lucene(id)
256
- writer.deleteDocuments(org.apache.lucene.index.Term.new(@index_info.id_field.to_s, converted_value))
257
- end
258
- ensure
259
- # TODO exception handling, what if ...
260
- writer.close unless writer.nil?
261
- end
262
-
263
-
264
- end
265
- end
266
-
267
-
@@ -1,146 +0,0 @@
1
- module Lucene
2
-
3
- #
4
- # Contains info for a specific Index identified by a path
5
- # Contains a
6
- # * collection of FieldInfo objects.
7
- # * the name of the id field.
8
- # * the index storage, either file based or RAM based.
9
- #
10
- # Fields has default value IndexInfo::DEFAULTS.
11
- #
12
- class IndexInfo #:nodoc:
13
- DEFAULTS = FieldInfo.new({}).freeze
14
-
15
- attr_reader :infos, :path
16
- attr_accessor :id_field
17
- attr_writer :store_on_file
18
-
19
- # Initializes this object by setting values to default values specified in the Lucene::Config.
20
- # The path/id to the index is specified by the the path parameter.
21
- # If the index is Lucene::Config[:storage_path]
22
- # ==== Block parameters
23
- # path<String>:: The id or the (incomplete) path on the filesystem of the index
24
- #
25
- # :api: private
26
- def initialize(path)
27
- $LUCENE_LOGGER.debug{"IndexInfo#initialize(#{path})"}
28
- @id_field = Lucene::Config[:id_field].to_sym
29
- @path = path
30
- @store_on_file = Lucene::Config[:store_on_file]
31
- @infos = {}
32
- # always store the id field
33
- @infos[@id_field] = FieldInfo.new(:store => true)
34
- end
35
-
36
- def to_s
37
- "IndexInfo [#{@id_field}, #{@infos.inspect}]"
38
- end
39
-
40
- def store_on_file?
41
- @store_on_file
42
- end
43
-
44
- def storage
45
- @storage ||= create_storage
46
- end
47
-
48
- def create_storage
49
- if store_on_file?
50
- raise StandardError.new("Lucene::Config[:storage_path] is nil but index configured to be stored on filesystem") if Lucene::Config[:storage_path].nil?
51
- Lucene::Config[:storage_path] + @path
52
- else
53
- org.apache.lucene.store.RAMDirectory.new
54
- end
55
- end
56
-
57
-
58
- def self.instance?(path)
59
- return false if @instances.nil?
60
- ! @instances[path].nil?
61
- end
62
-
63
- # Creates and initializes an IndexInfo object by setting values to default
64
- # values specified in the Lucene::Config. Does not create new object if it has
65
- # already been created before with the given path.
66
- #
67
- # If the index is stored on the filesystem the complete path will be
68
- # Lucene::Config[:storage_path] + /path
69
- #
70
- # ==== Block parameters
71
- # path<String>:: The id or the (incomplete) path on the filesystem of the index
72
- #
73
- # :api: public
74
- def self.instance(path)
75
- @instances ||= {}
76
- $LUCENE_LOGGER.debug{"IndexInfos#instance(#{path}) : @instances[path]: #{@instances[path]}"}
77
- @instances[path] ||= IndexInfo.new(path)
78
- end
79
-
80
- def self.delete_all
81
- $LUCENE_LOGGER.debug{"IndexInfos#delete_all"}
82
- @instances = nil
83
- end
84
-
85
- def self.index_exists(path)
86
- return false if @instances[path].nil?
87
- instance(path).index_exists?
88
- end
89
-
90
- def index_exists?
91
- org.apache.lucene.index.IndexReader.index_exists(storage)
92
- end
93
-
94
- def each_pair
95
- @infos.each_pair{|key,value| yield key,value}
96
- end
97
-
98
- def analyzer
99
- # do all fields have the default value :standard analyzer ?
100
- if @infos.values.find {|info| info[:analyzer] != :standard}
101
- # no, one or more has set
102
- wrapper = org.apache.lucene.analysis.PerFieldAnalyzerWrapper.new(org.apache.lucene.analysis.standard.StandardAnalyzer.new)
103
- @infos.each_pair do |key,value|
104
- case value[:analyzer]
105
- when :keyword
106
- wrapper.addAnalyzer(key.to_s, org.apache.lucene.analysis.KeywordAnalyzer.new)
107
- when :standard
108
- # default
109
- when :simple
110
- wrapper.addAnalyzer(key.to_s, org.apache.lucene.analysis.SimpleAnalyzer.new)
111
- when :whitespace
112
- wrapper.addAnalyzer(key.to_s, org.apache.lucene.analysis.WhitespaceAnalyzer.new)
113
- when :stop
114
- wrapper.addAnalyzer(key.to_s, org.apache.lucene.analysis.StopAnalyzer.new)
115
- else
116
- raise "Unknown analyzer, supports :keyword, :standard, :simple, :stop, :whitspace, got '#{value}' for field '#{key}'"
117
- end
118
- end
119
- wrapper
120
- else
121
- # yes, all fields has standard analyzer
122
- org.apache.lucene.analysis.standard.StandardAnalyzer.new
123
- end
124
- end
125
-
126
- # Returns true if it has one or more tokenized fields
127
- def tokenized?
128
- @infos.values.find{|field_info| field_info.tokenized?}
129
- end
130
-
131
- def [](key)
132
- k = key.to_sym
133
- $LUCENE_LOGGER.debug{"FieldInfos create new FieldInfo key '#{k}'"} if @infos[k].nil?
134
- @infos[k] ||= DEFAULTS.dup
135
- @infos[k]
136
- end
137
-
138
- def []=(key,value)
139
- case value
140
- when Hash then @infos[key] = FieldInfo.new(value)
141
- when FieldInfo then @infos[key] = value
142
- else raise ArgumentError.new("only accept Hash and FieldInfo, got #{value.class.to_s}")
143
- end
144
- end
145
- end
146
- end