pms 0.0.6 → 0.0.7

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: e737f3b6406adce6fe95366111056f19aa66a0a8
4
- data.tar.gz: 08778e9a99a3c8097ae295f5d3602e8d45d34ad3
3
+ metadata.gz: 82f2df289b312da9511a90eac32ce0d4c0ab580f
4
+ data.tar.gz: 35aa658fa71100f68a9e857925bbbcc35804df10
5
5
  SHA512:
6
- metadata.gz: 5a35f3969576b684d09317f79a8bd11fc14b9ab7a1347fa0935ff81a3c0ee5564a1de7af8b6d5f3133a47ce63790a666d3a50c4cd78b49c4d2277c6d6a6b08d7
7
- data.tar.gz: 9509b550351d1606f039a14a531dfe1b72b19d1e610140ad52ad796f12948020527591e07a70f613a21b8bfe4864b4c87fe22b75aded7aa0ccdcdcc3bcc4faa0
6
+ metadata.gz: e70a4beff1cc219ab22a7637b6dc14d9d3024bf7d4099fe96a36598170a8b48403c1d87efd97be25fb0d5e021a6ba5adc04cf1a56e27147ccc9ea0cb37b51132
7
+ data.tar.gz: b2fd4b90e1085da74da8fa61860350589d36fdad117cf78f546bdb57100f568b8139aa31b64e7144311de476ed5535f5af2e92a0257ebd96f208482b1588ee36
data/ChangeLog CHANGED
@@ -2,6 +2,11 @@
2
2
 
3
3
  = Revision history for pms
4
4
 
5
+ == 0.0.7 [2014-12-19]
6
+
7
+ * Requires at least Ruby 2.0.
8
+ * Slightly refactored.
9
+
5
10
  == 0.0.6 [2013-12-19]
6
11
 
7
12
  * Added LSI support.
data/README CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  == VERSION
4
4
 
5
- This documentation refers to pms version 0.0.6
5
+ This documentation refers to pms version 0.0.7
6
6
 
7
7
 
8
8
  == DESCRIPTION
@@ -44,10 +44,10 @@ You can find more examples in the <tt>spec/</tt> directory.
44
44
 
45
45
  == LINKS
46
46
 
47
- <b></b>
48
- Documentation:: http://blackwinter.github.com/pms
49
- Source code:: http://github.com/blackwinter/pms
50
- RubyGem:: http://rubygems.org/gems/pms
47
+ Documentation:: https://blackwinter.github.com/pms
48
+ Source code:: https://github.com/blackwinter/pms
49
+ RubyGem:: https://rubygems.org/gems/pms
50
+ Travis CI:: https://travis-ci.org/blackwinter/pms
51
51
 
52
52
 
53
53
  == AUTHORS
@@ -57,7 +57,7 @@ RubyGem:: http://rubygems.org/gems/pms
57
57
 
58
58
  == LICENSE AND COPYRIGHT
59
59
 
60
- Copyright (C) 2008-2013 Jens Wille
60
+ Copyright (C) 2008-2014 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,18 @@ begin
4
4
  require 'hen'
5
5
 
6
6
  Hen.lay! {{
7
- :gem => {
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']
7
+ gem: {
8
+ name: %q{pms},
9
+ version: PMS::VERSION,
10
+ summary: %q{Poor Man's Search},
11
+ description: %q{A simple searching facility for (nearly) arbitrary input.},
12
+ author: %q{Jens Wille},
13
+ email: %q{jens.wille@gmail.com},
14
+ license: %q{AGPL-3.0},
15
+ homepage: :blackwinter,
16
+ dependencies: { lsi4r: ['~> 0.0', '>= 0.0.2'], unicode: '~> 0.4' },
17
+
18
+ required_ruby_version: '>= 2.0'
16
19
  }
17
20
  }}
18
21
  rescue LoadError => err
@@ -0,0 +1,42 @@
1
+ #--
2
+ ###############################################################################
3
+ # #
4
+ # A component of pms, Poor Man's Search. #
5
+ # #
6
+ # Copyright (C) 2008-2014 Jens Wille #
7
+ # #
8
+ # Authors: #
9
+ # Jens Wille <jens.wille@gmail.com> #
10
+ # #
11
+ # pms is free software; you can redistribute it and/or modify it under the #
12
+ # terms of the GNU General Public License as published by the Free Software #
13
+ # Foundation; either version 3 of the License, or (at your option) any later #
14
+ # version. #
15
+ # #
16
+ # pms is distributed in the hope that it will be useful, but WITHOUT ANY #
17
+ # WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS #
18
+ # FOR A PARTICULAR PURPOSE. See the GNU General Public License for more #
19
+ # details. #
20
+ # #
21
+ # You should have received a copy of the GNU General Public License along #
22
+ # with pms. If not, see <http://www.gnu.org/licenses/>. #
23
+ # #
24
+ ###############################################################################
25
+ #++
26
+
27
+ require 'nuggets/i18n'
28
+ require 'pms'
29
+
30
+ class PMS
31
+
32
+ module I18n
33
+
34
+ def mangle_token(token)
35
+ super.tap(&:replace_diacritics!)
36
+ end
37
+
38
+ end
39
+
40
+ Index.prepend(I18n)
41
+
42
+ end
@@ -3,7 +3,7 @@
3
3
  # #
4
4
  # A component of pms, Poor Man's Search. #
5
5
  # #
6
- # Copyright (C) 2008-2013 Jens Wille #
6
+ # Copyright (C) 2008-2014 Jens Wille #
7
7
  # #
8
8
  # Authors: #
9
9
  # Jens Wille <jens.wille@gmail.com> #
@@ -48,16 +48,12 @@ class PMS
48
48
  when String
49
49
  index[mangle_token(token)]
50
50
  when Regexp
51
- res = {}
52
-
53
- index.each { |key, value|
54
- res.update(value) { |_, old, new| old | new } if key =~ token
51
+ index.each_with_object({}) { |(key, value), hash|
52
+ hash.update(value) { |_, old, new| old | new } if key =~ token
55
53
  }
56
-
57
- res
58
54
  else
59
- raise TypeError, "expected String or Regexp, got #{token.class}"
60
- end.each { |_, positions| positions.compact! }
55
+ raise TypeError, "String or Regexp expected, got #{token.class}"
56
+ end.each_value(&:compact!)
61
57
  end
62
58
 
63
59
  alias_method :results_with_positions, :doc_nums_with_positions
@@ -85,7 +81,7 @@ class PMS
85
81
 
86
82
  def build_index(options)
87
83
  if lsi = options[:lsi]
88
- require 'nuggets/lsi'
84
+ require 'lsi4r'
89
85
 
90
86
  lsi = DEFAULT_LSI if lsi == true
91
87
  map = Hash.new { |h, k| h[k] = [] }
@@ -98,13 +94,13 @@ class PMS
98
94
  @entries << doc_num += 1
99
95
  pos = -1
100
96
 
101
- doc.scan(TOKEN_RE) { |token|
97
+ each_token(doc) { |token|
102
98
  index[term = mangle_token(token)][doc_num] << pos += 1
103
99
  map[doc_num] << term if map
104
100
  }
105
101
  }
106
102
 
107
- Nuggets::LSI.each_norm(map, :min => lsi, :new => true) { |d, k, _|
103
+ Lsi4R.each_norm(map, min: lsi, new: true) { |d, k, _|
108
104
  index[mangle_token(k)][d.key] << nil
109
105
  } if lsi
110
106
 
@@ -119,6 +115,10 @@ class PMS
119
115
  docs
120
116
  end
121
117
 
118
+ def each_token(doc, &block)
119
+ doc.scan(TOKEN_RE, &block)
120
+ end
121
+
122
122
  def mangle_token(token)
123
123
  Unicode.downcase(token)
124
124
  end
@@ -3,7 +3,7 @@
3
3
  # #
4
4
  # A component of pms, Poor Man's Search. #
5
5
  # #
6
- # Copyright (C) 2008-2013 Jens Wille #
6
+ # Copyright (C) 2008-2014 Jens Wille #
7
7
  # #
8
8
  # Authors: #
9
9
  # Jens Wille <jens.wille@gmail.com> #
@@ -51,6 +51,17 @@ class PMS
51
51
  alias_method :|, :or
52
52
  alias_method :-, :not
53
53
 
54
+ { and: :&, or: :|, not: :- }.each { |op, sym|
55
+ class_eval <<-EOT, __FILE__, __LINE__ + 1
56
+ def #{op}(token = nil, &block)
57
+ token ? apply_operator_with_token(#{op.inspect}, token) :
58
+ apply_operator_with_block(#{op.inspect}, &block)
59
+ end
60
+ EOT
61
+
62
+ alias_method sym, op
63
+ }
64
+
54
65
  private
55
66
 
56
67
  def apply_operator_with_token(op, token)
@@ -78,9 +89,7 @@ class PMS
78
89
  end
79
90
 
80
91
  def clone_with_results(results)
81
- clone = self.clone
82
- clone.instance_variable_set(:@results, results)
83
- clone
92
+ clone.tap { |clone| clone.instance_variable_set(:@results, results) }
84
93
  end
85
94
 
86
95
  end
@@ -92,10 +101,8 @@ class PMS
92
101
  def initialize(pms, token)
93
102
  super(pms)
94
103
 
95
- @token = token
96
-
97
104
  @results_with_positions = index.results_with_positions(token)
98
- @results = @results_with_positions.keys
105
+ @token, @results = token, @results_with_positions.keys
99
106
  end
100
107
 
101
108
  def near(token, distance = 1, order = false)
@@ -111,15 +118,12 @@ class PMS
111
118
  !results1[doc_num].any? { |pos1|
112
119
  positions.find { |pos2|
113
120
  diff = pos2 - pos1
114
-
115
- break if order && diff < 0
116
-
117
- diff.abs <= distance
121
+ order && diff < 0 ? break : diff.abs <= distance
118
122
  }
119
123
  }
120
124
  }
121
125
 
122
- apply_operator('and', doc_nums)
126
+ apply_operator(:and, doc_nums)
123
127
  end
124
128
 
125
129
  alias_method :%, :near
@@ -134,10 +138,8 @@ class PMS
134
138
  private
135
139
 
136
140
  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
+ super.tap { |clone| clone.instance_variable_set(:@results_with_positions,
142
+ @results_with_positions.dup.delete_if { |k, _| !results.include?(k) }) }
141
143
  end
142
144
 
143
145
  end
@@ -4,7 +4,7 @@ class PMS
4
4
 
5
5
  MAJOR = 0
6
6
  MINOR = 0
7
- TINY = 6
7
+ TINY = 7
8
8
 
9
9
  class << self
10
10
 
@@ -112,12 +112,12 @@ describe PMS, 'with LSI' do
112
112
 
113
113
  before :each do
114
114
  @pms1 = PMS.new(File.read(FOX))
115
- @pms2 = PMS.new(File.read(FOX), :lsi => true)
115
+ @pms2 = PMS.new(File.read(FOX), lsi: true)
116
116
  end
117
117
 
118
118
  it 'should find more ducks' do
119
119
  @pms1.search('ducks').results.should == [1]
120
- @pms2.search('ducks').results.should == [1, 4, 5]
120
+ @pms2.search('ducks').results.should == [1, 4, 6]
121
121
  end
122
122
 
123
123
  it 'should not report positions for LSI terms' do
@@ -8,3 +8,7 @@ unless Object.const_defined?(:BASE)
8
8
 
9
9
  FOX = File.join(BASE, 'spec', 'fox.txt')
10
10
  end
11
+
12
+ RSpec.configure { |config|
13
+ config.expect_with(:rspec) { |c| c.syntax = [:should, :expect] }
14
+ }
metadata CHANGED
@@ -1,23 +1,77 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pms
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.6
4
+ version: 0.0.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jens Wille
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-12-19 00:00:00.000000000 Z
11
+ date: 2014-12-19 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: lsi4r
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '0.0'
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: 0.0.2
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - "~>"
28
+ - !ruby/object:Gem::Version
29
+ version: '0.0'
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: 0.0.2
13
33
  - !ruby/object:Gem::Dependency
14
34
  name: unicode
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - "~>"
38
+ - !ruby/object:Gem::Version
39
+ version: '0.4'
40
+ type: :runtime
41
+ prerelease: false
42
+ version_requirements: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - "~>"
45
+ - !ruby/object:Gem::Version
46
+ version: '0.4'
47
+ - !ruby/object:Gem::Dependency
48
+ name: hen
49
+ requirement: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - "~>"
52
+ - !ruby/object:Gem::Version
53
+ version: '0.8'
54
+ - - ">="
55
+ - !ruby/object:Gem::Version
56
+ version: 0.8.1
57
+ type: :development
58
+ prerelease: false
59
+ version_requirements: !ruby/object:Gem::Requirement
60
+ requirements:
61
+ - - "~>"
62
+ - !ruby/object:Gem::Version
63
+ version: '0.8'
64
+ - - ">="
65
+ - !ruby/object:Gem::Version
66
+ version: 0.8.1
67
+ - !ruby/object:Gem::Dependency
68
+ name: rake
15
69
  requirement: !ruby/object:Gem::Requirement
16
70
  requirements:
17
71
  - - ">="
18
72
  - !ruby/object:Gem::Version
19
73
  version: '0'
20
- type: :runtime
74
+ type: :development
21
75
  prerelease: false
22
76
  version_requirements: !ruby/object:Gem::Requirement
23
77
  requirements:
@@ -25,20 +79,20 @@ dependencies:
25
79
  - !ruby/object:Gem::Version
26
80
  version: '0'
27
81
  - !ruby/object:Gem::Dependency
28
- name: ruby-nuggets
82
+ name: rspec
29
83
  requirement: !ruby/object:Gem::Requirement
30
84
  requirements:
31
85
  - - ">="
32
86
  - !ruby/object:Gem::Version
33
- version: 0.9.4
34
- type: :runtime
87
+ version: '0'
88
+ type: :development
35
89
  prerelease: false
36
90
  version_requirements: !ruby/object:Gem::Requirement
37
91
  requirements:
38
92
  - - ">="
39
93
  - !ruby/object:Gem::Version
40
- version: 0.9.4
41
- description: Poor Man's Search
94
+ version: '0'
95
+ description: A simple searching facility for (nearly) arbitrary input.
42
96
  email: jens.wille@gmail.com
43
97
  executables: []
44
98
  extensions: []
@@ -47,15 +101,16 @@ extra_rdoc_files:
47
101
  - COPYING
48
102
  - ChangeLog
49
103
  files:
104
+ - COPYING
105
+ - ChangeLog
106
+ - README
107
+ - Rakefile
50
108
  - lib/pms.rb
51
109
  - lib/pms/ext.rb
110
+ - lib/pms/i18n.rb
52
111
  - lib/pms/index.rb
53
112
  - lib/pms/proxy.rb
54
113
  - lib/pms/version.rb
55
- - COPYING
56
- - ChangeLog
57
- - README
58
- - Rakefile
59
114
  - spec/fox.txt
60
115
  - spec/pms/ext_spec.rb
61
116
  - spec/pms/index_spec.rb
@@ -69,14 +124,14 @@ licenses:
69
124
  metadata: {}
70
125
  post_install_message: |2+
71
126
 
72
- pms-0.0.6 [2013-12-19]:
127
+ pms-0.0.7 [2014-12-19]:
73
128
 
74
- * Added LSI support.
75
- * Housekeeping and fixes.
129
+ * Requires at least Ruby 2.0.
130
+ * Slightly refactored.
76
131
 
77
132
  rdoc_options:
78
133
  - "--title"
79
- - pms Application documentation (v0.0.6)
134
+ - pms Application documentation (v0.0.7)
80
135
  - "--charset"
81
136
  - UTF-8
82
137
  - "--line-numbers"
@@ -89,7 +144,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
89
144
  requirements:
90
145
  - - ">="
91
146
  - !ruby/object:Gem::Version
92
- version: '0'
147
+ version: '2.0'
93
148
  required_rubygems_version: !ruby/object:Gem::Requirement
94
149
  requirements:
95
150
  - - ">="
@@ -97,7 +152,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
97
152
  version: '0'
98
153
  requirements: []
99
154
  rubyforge_project:
100
- rubygems_version: 2.1.11
155
+ rubygems_version: 2.4.5
101
156
  signing_key:
102
157
  specification_version: 4
103
158
  summary: Poor Man's Search