pms 0.0.5 → 0.0.6
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/ChangeLog +11 -0
- data/README +6 -6
- data/Rakefile +8 -8
- data/lib/pms.rb +4 -4
- data/lib/pms/ext.rb +2 -2
- data/lib/pms/index.rb +27 -11
- data/lib/pms/proxy.rb +11 -2
- data/lib/pms/version.rb +1 -1
- data/spec/pms/ext_spec.rb +4 -4
- data/spec/pms/index_spec.rb +9 -1
- data/spec/pms_spec.rb +19 -0
- metadata +73 -58
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: e737f3b6406adce6fe95366111056f19aa66a0a8
|
4
|
+
data.tar.gz: 08778e9a99a3c8097ae295f5d3602e8d45d34ad3
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 5a35f3969576b684d09317f79a8bd11fc14b9ab7a1347fa0935ff81a3c0ee5564a1de7af8b6d5f3133a47ce63790a666d3a50c4cd78b49c4d2277c6d6a6b08d7
|
7
|
+
data.tar.gz: 9509b550351d1606f039a14a531dfe1b72b19d1e610140ad52ad796f12948020527591e07a70f613a21b8bfe4864b4c87fe22b75aded7aa0ccdcdcc3bcc4faa0
|
data/ChangeLog
CHANGED
data/README
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
== VERSION
|
4
4
|
|
5
|
-
This documentation refers to pms version 0.0.
|
5
|
+
This documentation refers to pms version 0.0.6
|
6
6
|
|
7
7
|
|
8
8
|
== DESCRIPTION
|
@@ -45,19 +45,19 @@ You can find more examples in the <tt>spec/</tt> directory.
|
|
45
45
|
== LINKS
|
46
46
|
|
47
47
|
<b></b>
|
48
|
-
Documentation::
|
49
|
-
Source code::
|
50
|
-
|
48
|
+
Documentation:: http://blackwinter.github.com/pms
|
49
|
+
Source code:: http://github.com/blackwinter/pms
|
50
|
+
RubyGem:: http://rubygems.org/gems/pms
|
51
51
|
|
52
52
|
|
53
53
|
== AUTHORS
|
54
54
|
|
55
|
-
* Jens Wille <mailto:jens.wille@
|
55
|
+
* Jens Wille <mailto:jens.wille@gmail.com>
|
56
56
|
|
57
57
|
|
58
58
|
== LICENSE AND COPYRIGHT
|
59
59
|
|
60
|
-
Copyright (C) 2008-
|
60
|
+
Copyright (C) 2008-2013 Jens Wille
|
61
61
|
|
62
62
|
pms is free software: you can redistribute it and/or modify it under the
|
63
63
|
terms of the GNU Affero General Public License as published by the Free
|
data/Rakefile
CHANGED
@@ -4,15 +4,15 @@ begin
|
|
4
4
|
require 'hen'
|
5
5
|
|
6
6
|
Hen.lay! {{
|
7
|
-
:rubyforge => {
|
8
|
-
:project => %q{pms}
|
9
|
-
},
|
10
|
-
|
11
7
|
:gem => {
|
12
|
-
:
|
13
|
-
:
|
14
|
-
:
|
15
|
-
:
|
8
|
+
:name => %q{pms},
|
9
|
+
:version => PMS::VERSION,
|
10
|
+
:summary => %q{Poor Man's Search},
|
11
|
+
:author => %q{Jens Wille},
|
12
|
+
:email => %q{jens.wille@gmail.com},
|
13
|
+
:license => %q{AGPL-3.0},
|
14
|
+
:homepage => :blackwinter,
|
15
|
+
:dependencies => %w[unicode] << ['ruby-nuggets', '>= 0.9.4']
|
16
16
|
}
|
17
17
|
}}
|
18
18
|
rescue LoadError => err
|
data/lib/pms.rb
CHANGED
@@ -3,10 +3,10 @@
|
|
3
3
|
# #
|
4
4
|
# pms - Poor Man's Search. #
|
5
5
|
# #
|
6
|
-
# Copyright (C) 2008-
|
6
|
+
# Copyright (C) 2008-2013 Jens Wille #
|
7
7
|
# #
|
8
8
|
# Authors: #
|
9
|
-
# Jens Wille <jens.wille@
|
9
|
+
# Jens Wille <jens.wille@gmail.com> #
|
10
10
|
# #
|
11
11
|
# pms is free software; you can redistribute it and/or modify it under the #
|
12
12
|
# terms of the GNU Affero General Public License as published by the Free #
|
@@ -32,9 +32,9 @@ class PMS
|
|
32
32
|
|
33
33
|
attr_reader :input, :index
|
34
34
|
|
35
|
-
def initialize(input)
|
35
|
+
def initialize(input, options = {})
|
36
36
|
@input = input
|
37
|
-
@index = Index.new(input)
|
37
|
+
@index = Index.new(input, options)
|
38
38
|
end
|
39
39
|
|
40
40
|
def search(token = nil, &block)
|
data/lib/pms/ext.rb
CHANGED
@@ -3,10 +3,10 @@
|
|
3
3
|
# #
|
4
4
|
# A component of pms, Poor Man's Search. #
|
5
5
|
# #
|
6
|
-
# Copyright (C) 2008-
|
6
|
+
# Copyright (C) 2008-2013 Jens Wille #
|
7
7
|
# #
|
8
8
|
# Authors: #
|
9
|
-
# Jens Wille <jens.wille@
|
9
|
+
# Jens Wille <jens.wille@gmail.com> #
|
10
10
|
# #
|
11
11
|
# pms is free software; you can redistribute it and/or modify it under the #
|
12
12
|
# terms of the GNU Affero General Public License as published by the Free #
|
data/lib/pms/index.rb
CHANGED
@@ -3,10 +3,10 @@
|
|
3
3
|
# #
|
4
4
|
# A component of pms, Poor Man's Search. #
|
5
5
|
# #
|
6
|
-
# Copyright (C) 2008-
|
6
|
+
# Copyright (C) 2008-2013 Jens Wille #
|
7
7
|
# #
|
8
8
|
# Authors: #
|
9
|
-
# Jens Wille <jens.wille@
|
9
|
+
# Jens Wille <jens.wille@gmail.com> #
|
10
10
|
# #
|
11
11
|
# pms is free software; you can redistribute it and/or modify it under the #
|
12
12
|
# terms of the GNU Affero General Public License as published by the Free #
|
@@ -24,19 +24,23 @@
|
|
24
24
|
###############################################################################
|
25
25
|
#++
|
26
26
|
|
27
|
+
require 'unicode'
|
28
|
+
|
27
29
|
class PMS
|
28
30
|
|
29
31
|
class Index
|
30
32
|
|
31
33
|
TOKEN_RE = %r{\w+}
|
32
34
|
|
35
|
+
DEFAULT_LSI = 0.05
|
36
|
+
|
33
37
|
attr_reader :input, :index, :entries
|
34
38
|
|
35
|
-
def initialize(input)
|
36
|
-
|
39
|
+
def initialize(input, options = {})
|
40
|
+
@input = input.respond_to?(:each) ? input : input.is_a?(String) ?
|
41
|
+
input.each_line : raise(ArgumentError, 'input must implement #each')
|
37
42
|
|
38
|
-
|
39
|
-
build_index
|
43
|
+
build_index(options)
|
40
44
|
end
|
41
45
|
|
42
46
|
def doc_nums_with_positions(token)
|
@@ -53,7 +57,7 @@ class PMS
|
|
53
57
|
res
|
54
58
|
else
|
55
59
|
raise TypeError, "expected String or Regexp, got #{token.class}"
|
56
|
-
end
|
60
|
+
end.each { |_, positions| positions.compact! }
|
57
61
|
end
|
58
62
|
|
59
63
|
alias_method :results_with_positions, :doc_nums_with_positions
|
@@ -64,7 +68,7 @@ class PMS
|
|
64
68
|
|
65
69
|
alias_method :results, :doc_nums
|
66
70
|
|
67
|
-
def documents(doc_nums = default =
|
71
|
+
def documents(doc_nums = default = true)
|
68
72
|
@documents ||= get_documents
|
69
73
|
default ? @documents : @documents.values_at(*doc_nums)
|
70
74
|
end
|
@@ -79,7 +83,14 @@ class PMS
|
|
79
83
|
|
80
84
|
private
|
81
85
|
|
82
|
-
def build_index
|
86
|
+
def build_index(options)
|
87
|
+
if lsi = options[:lsi]
|
88
|
+
require 'nuggets/lsi'
|
89
|
+
|
90
|
+
lsi = DEFAULT_LSI if lsi == true
|
91
|
+
map = Hash.new { |h, k| h[k] = [] }
|
92
|
+
end
|
93
|
+
|
83
94
|
@documents, @entries, doc_num = nil, [], -1
|
84
95
|
index = Hash.new { |h, k| h[k] = Hash.new { |i, j| i[j] = [] } }
|
85
96
|
|
@@ -88,10 +99,15 @@ class PMS
|
|
88
99
|
pos = -1
|
89
100
|
|
90
101
|
doc.scan(TOKEN_RE) { |token|
|
91
|
-
index[mangle_token(token)][doc_num] << pos += 1
|
102
|
+
index[term = mangle_token(token)][doc_num] << pos += 1
|
103
|
+
map[doc_num] << term if map
|
92
104
|
}
|
93
105
|
}
|
94
106
|
|
107
|
+
Nuggets::LSI.each_norm(map, :min => lsi, :new => true) { |d, k, _|
|
108
|
+
index[mangle_token(k)][d.key] << nil
|
109
|
+
} if lsi
|
110
|
+
|
95
111
|
@index = index
|
96
112
|
end
|
97
113
|
|
@@ -104,7 +120,7 @@ class PMS
|
|
104
120
|
end
|
105
121
|
|
106
122
|
def mangle_token(token)
|
107
|
-
|
123
|
+
Unicode.downcase(token)
|
108
124
|
end
|
109
125
|
|
110
126
|
end
|
data/lib/pms/proxy.rb
CHANGED
@@ -3,10 +3,10 @@
|
|
3
3
|
# #
|
4
4
|
# A component of pms, Poor Man's Search. #
|
5
5
|
# #
|
6
|
-
# Copyright (C) 2008-
|
6
|
+
# Copyright (C) 2008-2013 Jens Wille #
|
7
7
|
# #
|
8
8
|
# Authors: #
|
9
|
-
# Jens Wille <jens.wille@
|
9
|
+
# Jens Wille <jens.wille@gmail.com> #
|
10
10
|
# #
|
11
11
|
# pms is free software; you can redistribute it and/or modify it under the #
|
12
12
|
# terms of the GNU Affero General Public License as published by the Free #
|
@@ -131,6 +131,15 @@ class PMS
|
|
131
131
|
alias_method :adj, :adjacent
|
132
132
|
alias_method :^, :adjacent
|
133
133
|
|
134
|
+
private
|
135
|
+
|
136
|
+
def clone_with_results(results)
|
137
|
+
clone = super
|
138
|
+
clone.instance_variable_set(:@results_with_positions,
|
139
|
+
@results_with_positions.dup.delete_if { |k, _| !results.include?(k) })
|
140
|
+
clone
|
141
|
+
end
|
142
|
+
|
134
143
|
end
|
135
144
|
|
136
145
|
end
|
data/lib/pms/version.rb
CHANGED
data/spec/pms/ext_spec.rb
CHANGED
@@ -44,7 +44,7 @@ shared_examples_for 'most Searchables' do
|
|
44
44
|
|
45
45
|
end
|
46
46
|
|
47
|
-
describe String, '
|
47
|
+
describe String, 'when extended by pms' do
|
48
48
|
|
49
49
|
before :each do
|
50
50
|
@searchable = File.read(FOX)
|
@@ -55,7 +55,7 @@ describe String, ' when extended by pms' do
|
|
55
55
|
|
56
56
|
end
|
57
57
|
|
58
|
-
describe IO, '
|
58
|
+
describe IO, 'when extended by pms' do
|
59
59
|
|
60
60
|
before :each do
|
61
61
|
@searchable = File.open(FOX)
|
@@ -66,7 +66,7 @@ describe IO, ' when extended by pms' do
|
|
66
66
|
|
67
67
|
end
|
68
68
|
|
69
|
-
describe Array, '
|
69
|
+
describe Array, 'when extended by pms' do
|
70
70
|
|
71
71
|
before :each do
|
72
72
|
@searchable = File.readlines(FOX)
|
@@ -77,7 +77,7 @@ describe Array, ' when extended by pms' do
|
|
77
77
|
|
78
78
|
end
|
79
79
|
|
80
|
-
describe File, '
|
80
|
+
describe File, 'when extended by pms' do
|
81
81
|
|
82
82
|
before :each do
|
83
83
|
@searchable = File
|
data/spec/pms/index_spec.rb
CHANGED
@@ -16,7 +16,7 @@ describe PMS::Index do
|
|
16
16
|
|
17
17
|
end
|
18
18
|
|
19
|
-
describe PMS::Index, '
|
19
|
+
describe PMS::Index, 'with exhaustable input' do
|
20
20
|
|
21
21
|
before :each do
|
22
22
|
# already seeks to EOF in #build_index
|
@@ -28,3 +28,11 @@ describe PMS::Index, ' with exhaustable input' do
|
|
28
28
|
end
|
29
29
|
|
30
30
|
end
|
31
|
+
|
32
|
+
describe PMS::Index, 'with invalid input' do
|
33
|
+
|
34
|
+
it 'should raise an error' do
|
35
|
+
lambda { PMS::Index.new(123) }.should raise_error(ArgumentError)
|
36
|
+
end
|
37
|
+
|
38
|
+
end
|
data/spec/pms_spec.rb
CHANGED
@@ -107,3 +107,22 @@ describe PMS do
|
|
107
107
|
end
|
108
108
|
|
109
109
|
end
|
110
|
+
|
111
|
+
describe PMS, 'with LSI' do
|
112
|
+
|
113
|
+
before :each do
|
114
|
+
@pms1 = PMS.new(File.read(FOX))
|
115
|
+
@pms2 = PMS.new(File.read(FOX), :lsi => true)
|
116
|
+
end
|
117
|
+
|
118
|
+
it 'should find more ducks' do
|
119
|
+
@pms1.search('ducks').results.should == [1]
|
120
|
+
@pms2.search('ducks').results.should == [1, 4, 5]
|
121
|
+
end
|
122
|
+
|
123
|
+
it 'should not report positions for LSI terms' do
|
124
|
+
@pms1.search('ducks').results_with_positions.values.flatten.should == [12]
|
125
|
+
@pms2.search('ducks').results_with_positions.values.flatten.should == [12]
|
126
|
+
end
|
127
|
+
|
128
|
+
end
|
metadata
CHANGED
@@ -1,89 +1,104 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: pms
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
5
|
-
prerelease:
|
6
|
-
segments:
|
7
|
-
- 0
|
8
|
-
- 0
|
9
|
-
- 5
|
10
|
-
version: 0.0.5
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.6
|
11
5
|
platform: ruby
|
12
|
-
authors:
|
6
|
+
authors:
|
13
7
|
- Jens Wille
|
14
8
|
autorequire:
|
15
9
|
bindir: bin
|
16
10
|
cert_chain: []
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
11
|
+
date: 2013-12-19 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: unicode
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: ruby-nuggets
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 0.9.4
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 0.9.4
|
21
41
|
description: Poor Man's Search
|
22
|
-
email: jens.wille@
|
42
|
+
email: jens.wille@gmail.com
|
23
43
|
executables: []
|
24
|
-
|
25
44
|
extensions: []
|
26
|
-
|
27
|
-
extra_rdoc_files:
|
45
|
+
extra_rdoc_files:
|
28
46
|
- README
|
29
47
|
- COPYING
|
30
48
|
- ChangeLog
|
31
|
-
files:
|
49
|
+
files:
|
32
50
|
- lib/pms.rb
|
51
|
+
- lib/pms/ext.rb
|
33
52
|
- lib/pms/index.rb
|
34
53
|
- lib/pms/proxy.rb
|
35
|
-
- lib/pms/ext.rb
|
36
54
|
- lib/pms/version.rb
|
37
|
-
-
|
55
|
+
- COPYING
|
38
56
|
- ChangeLog
|
57
|
+
- README
|
39
58
|
- Rakefile
|
40
|
-
-
|
41
|
-
- spec/pms/index_spec.rb
|
59
|
+
- spec/fox.txt
|
42
60
|
- spec/pms/ext_spec.rb
|
61
|
+
- spec/pms/index_spec.rb
|
43
62
|
- spec/pms/proxy_spec.rb
|
63
|
+
- spec/pms_spec.rb
|
44
64
|
- spec/spec.opts
|
45
|
-
- spec/fox.txt
|
46
65
|
- spec/spec_helper.rb
|
47
|
-
|
48
|
-
|
49
|
-
|
66
|
+
homepage: http://github.com/blackwinter/pms
|
67
|
+
licenses:
|
68
|
+
- AGPL-3.0
|
69
|
+
metadata: {}
|
70
|
+
post_install_message: |2+
|
50
71
|
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
72
|
+
pms-0.0.6 [2013-12-19]:
|
73
|
+
|
74
|
+
* Added LSI support.
|
75
|
+
* Housekeeping and fixes.
|
76
|
+
|
77
|
+
rdoc_options:
|
78
|
+
- "--title"
|
79
|
+
- pms Application documentation (v0.0.6)
|
80
|
+
- "--charset"
|
57
81
|
- UTF-8
|
58
|
-
- --
|
59
|
-
- --
|
60
|
-
-
|
61
|
-
|
82
|
+
- "--line-numbers"
|
83
|
+
- "--all"
|
84
|
+
- "--main"
|
85
|
+
- README
|
86
|
+
require_paths:
|
62
87
|
- lib
|
63
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
64
|
-
|
65
|
-
requirements:
|
88
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
89
|
+
requirements:
|
66
90
|
- - ">="
|
67
|
-
- !ruby/object:Gem::Version
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
version: "0"
|
72
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
73
|
-
none: false
|
74
|
-
requirements:
|
91
|
+
- !ruby/object:Gem::Version
|
92
|
+
version: '0'
|
93
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
94
|
+
requirements:
|
75
95
|
- - ">="
|
76
|
-
- !ruby/object:Gem::Version
|
77
|
-
|
78
|
-
segments:
|
79
|
-
- 0
|
80
|
-
version: "0"
|
96
|
+
- !ruby/object:Gem::Version
|
97
|
+
version: '0'
|
81
98
|
requirements: []
|
82
|
-
|
83
|
-
|
84
|
-
rubygems_version: 1.7.2
|
99
|
+
rubyforge_project:
|
100
|
+
rubygems_version: 2.1.11
|
85
101
|
signing_key:
|
86
|
-
specification_version:
|
102
|
+
specification_version: 4
|
87
103
|
summary: Poor Man's Search
|
88
104
|
test_files: []
|
89
|
-
|