model_set 1.0.0 → 1.1.0

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.
@@ -57,9 +57,9 @@ module Sphinx
57
57
  # Current client-side command implementation versions
58
58
 
59
59
  # search command version
60
- VER_COMMAND_SEARCH = 0x116
60
+ VER_COMMAND_SEARCH = 0x119
61
61
  # excerpt command version
62
- VER_COMMAND_EXCERPT = 0x100
62
+ VER_COMMAND_EXCERPT = 0x102
63
63
  # update command version
64
64
  VER_COMMAND_UPDATE = 0x102
65
65
  # keywords command version
@@ -107,7 +107,12 @@ module Sphinx
107
107
  SPH_RANK_WORDCOUNT = 3
108
108
  # phrase proximity
109
109
  SPH_RANK_PROXIMITY = 4
110
-
110
+ SPH_RANK_MATCHANY = 5
111
+ SPH_RANK_FIELDMASK = 6
112
+ SPH_RANK_SPH04 = 7
113
+ SPH_RANK_EXPR = 8
114
+ SPH_RANK_TOTAL = 9
115
+
111
116
  # Known sort modes
112
117
 
113
118
  # sort by document relevance desc, then by date
@@ -147,8 +152,11 @@ module Sphinx
147
152
  SPH_ATTR_FLOAT = 5
148
153
  # signed 64-bit integer
149
154
  SPH_ATTR_BIGINT = 6
155
+ # string
156
+ SPH_ATTR_STRING = 7
150
157
  # this attr has multiple values (0 or more)
151
- SPH_ATTR_MULTI = 0x40000000
158
+ SPH_ATTR_MULTI = 0x40000001
159
+ SPH_ATTR_MULTI64 = 0x40000002
152
160
 
153
161
  # Known grouping functions
154
162
 
@@ -169,7 +177,7 @@ module Sphinx
169
177
  def initialize
170
178
  # per-client-object settings
171
179
  @host = 'localhost' # searchd host (default is "localhost")
172
- @port = 3312 # searchd port (default is 3312)
180
+ @port = 9312 # searchd port (default is 9312)
173
181
 
174
182
  # per-query settings
175
183
  @offset = 0 # how many records to seek from result-set start (default is 0)
@@ -192,6 +200,7 @@ module Sphinx
192
200
  @anchor = [] # geographical anchor point
193
201
  @indexweights = [] # per-index weights
194
202
  @ranker = SPH_RANK_PROXIMITY_BM25 # ranking mode (default is SPH_RANK_PROXIMITY_BM25)
203
+ @rankexpr = '' # ranker expression for SPH_RANK_EXPR
195
204
  @maxquerytime = 0 # max query time, milliseconds (default is 0, do not limit)
196
205
  @fieldweights = {} # per-field-name weights
197
206
  @overrides = [] # per-query attribute values overrides
@@ -262,14 +271,19 @@ module Sphinx
262
271
  end
263
272
 
264
273
  # Set ranking mode.
265
- def SetRankingMode(ranker)
274
+ def SetRankingMode(ranker, rankexpr = '')
266
275
  assert { ranker == SPH_RANK_PROXIMITY_BM25 \
267
276
  || ranker == SPH_RANK_BM25 \
268
277
  || ranker == SPH_RANK_NONE \
269
278
  || ranker == SPH_RANK_WORDCOUNT \
270
- || ranker == SPH_RANK_PROXIMITY }
279
+ || ranker == SPH_RANK_PROXIMITY \
280
+ || ranker == SPH_RANK_MATCHANY \
281
+ || ranker == SPH_RANK_FIELDMASK \
282
+ || ranker == SPH_RANK_SPH04 \
283
+ || ranker == SPH_RANK_EXPR }
271
284
 
272
285
  @ranker = ranker
286
+ @rankexpr = rankexpr
273
287
  end
274
288
 
275
289
  # Set matches sorting mode.
@@ -349,7 +363,7 @@ module Sphinx
349
363
 
350
364
  if values.instance_of?(Array) && values.size > 0
351
365
  values.each do |value|
352
- assert { value.instance_of? Fixnum or value.instance_of? Bignum }
366
+ assert { value.instance_of? Fixnum }
353
367
  end
354
368
 
355
369
  @filters << { 'type' => SPH_FILTER_VALUES, 'attr' => attribute, 'exclude' => exclude, 'values' => values }
@@ -564,7 +578,14 @@ module Sphinx
564
578
 
565
579
  # mode and limits
566
580
  request = Request.new
567
- request.put_int @offset, @limit, @mode, @ranker, @sort
581
+ request.put_int @offset, @limit, @mode, @ranker
582
+ # process the 'expr' ranker
583
+ if @ranker == SPH_RANK_EXPR
584
+ request.put_string @rankexpr
585
+ end
586
+
587
+ request.put_int @sort
588
+
568
589
  request.put_string @sortby
569
590
  # query itself
570
591
  request.put_string query
@@ -758,14 +779,23 @@ module Sphinx
758
779
  when SPH_ATTR_FLOAT
759
780
  # handle floats
760
781
  r['attrs'][a] = response.get_float
782
+ when SPH_ATTR_STRING
783
+ # handle string
784
+ r['attrs'][a] = response.get_string
761
785
  else
762
786
  # handle everything else as unsigned ints
763
787
  val = response.get_int
764
- if (attrs[a] & SPH_ATTR_MULTI) != 0
788
+ if attrs[a]==SPH_ATTR_MULTI
765
789
  r['attrs'][a] = []
766
790
  1.upto(val) do
767
791
  r['attrs'][a] << response.get_int
768
792
  end
793
+ elsif attrs[a]==SPH_ATTR_MULTI64
794
+ r['attrs'][a] = []
795
+ val = val/2
796
+ 1.upto(val) do
797
+ r['attrs'][a] << response.get_int64
798
+ end
769
799
  else
770
800
  r['attrs'][a] = val
771
801
  end
@@ -825,12 +855,18 @@ module Sphinx
825
855
  opts['before_match'] ||= '<b>';
826
856
  opts['after_match'] ||= '</b>';
827
857
  opts['chunk_separator'] ||= ' ... ';
858
+ opts['html_strip_mode'] ||= 'index';
828
859
  opts['limit'] ||= 256;
860
+ opts['limit_passages'] ||= 0;
861
+ opts['limit_words'] ||= 0;
829
862
  opts['around'] ||= 5;
863
+ opts['start_passage_id'] ||= 1;
830
864
  opts['exact_phrase'] ||= false
831
865
  opts['single_passage'] ||= false
832
866
  opts['use_boundaries'] ||= false
833
867
  opts['weight_order'] ||= false
868
+ opts['load_files'] ||= false
869
+ opts['allow_empty'] ||= false
834
870
 
835
871
  # build request
836
872
 
@@ -840,6 +876,10 @@ module Sphinx
840
876
  flags |= 4 if opts['single_passage']
841
877
  flags |= 8 if opts['use_boundaries']
842
878
  flags |= 16 if opts['weight_order']
879
+ flags |= 32 if opts['query_mode']
880
+ flags |= 64 if opts['force_all_words']
881
+ flags |= 128 if opts['load_files']
882
+ flags |= 256 if opts['allow_empty']
843
883
 
844
884
  request = Request.new
845
885
  request.put_int 0, flags # mode=0, flags=1 (remove spaces)
@@ -853,6 +893,12 @@ module Sphinx
853
893
  request.put_string opts['after_match']
854
894
  request.put_string opts['chunk_separator']
855
895
  request.put_int opts['limit'].to_i, opts['around'].to_i
896
+
897
+ # options v1.2
898
+ request.put_int opts['limit_passages'].to_i
899
+ request.put_int opts['limit_words'].to_i
900
+ request.put_int opts['start_passage_id'].to_i
901
+ request.put_string opts['html_strip_mode']
856
902
 
857
903
  # documents
858
904
  request.put_int docs.size
@@ -989,9 +1035,13 @@ module Sphinx
989
1035
  # Connect to searchd server.
990
1036
  def Connect
991
1037
  begin
992
- sock = TCPSocket.new(@host, @port)
993
- rescue
994
- @error = "connection to #{@host}:#{@port} failed"
1038
+ if @host[0,1]=='/'
1039
+ sock = UNIXSocket.new(@host)
1040
+ else
1041
+ sock = TCPSocket.new(@host, @port)
1042
+ end
1043
+ rescue => err
1044
+ @error = "connection to #{@host}:#{@port} failed (error=#{err})"
995
1045
  raise SphinxConnectError, @error
996
1046
  end
997
1047
 
@@ -1032,9 +1082,9 @@ module Sphinx
1032
1082
  # check response
1033
1083
  read = response.length
1034
1084
  if response.empty? or read != len.to_i
1035
- @error = len \
1036
- ? "failed to read searchd response (status=#{status}, ver=#{ver}, len=#{len}, read=#{read})" \
1037
- : 'received zero-sized searchd response'
1085
+ @error = response.empty? \
1086
+ ? 'received zero-sized searchd response' \
1087
+ : "failed to read searchd response (status=#{status}, ver=#{ver}, len=#{len}, read=#{read})"
1038
1088
  raise SphinxResponseError, @error
1039
1089
  end
1040
1090
 
@@ -1076,9 +1126,9 @@ module Sphinx
1076
1126
  command_ver = Sphinx::Client.const_get('VER_COMMAND_' + cmd)
1077
1127
 
1078
1128
  sock = self.Connect
1079
- len = request.to_s.length + (additional != nil ? 4 : 0)
1129
+ len = request.to_s.length + (additional != nil ? 8 : 0)
1080
1130
  header = [command_id, command_ver, len].pack('nnN')
1081
- header << [additional].pack('N') if additional != nil
1131
+ header << [0, additional].pack('NN') if additional != nil
1082
1132
  sock.send(header + request.to_s, 0)
1083
1133
  response = self.GetResponse(sock, command_ver)
1084
1134
  return Response.new(response)
@@ -1,69 +1,69 @@
1
- module Sphinx
2
- # Unpack internal Sphinx representation of ints, floats, strings, and arrays.
3
- # needed by Sphinx search engine.
4
- class Response
5
- # Initialize new request.
6
- def initialize(response)
7
- @response = response
8
- @position = 0
9
- @size = response.length
10
- end
11
-
12
- # Gets current stream position.
13
- def position
14
- @position
15
- end
16
-
17
- # Gets response size.
18
- def size
19
- @size
20
- end
21
-
22
- # Returns <tt>true</tt> when response stream is out.
23
- def eof?
24
- @position >= @size
25
- end
26
-
27
- # Get int from stream.
28
- def get_int
29
- raise EOFError if @position + 4 > @size
30
- value = @response[@position, 4].unpack('N*').first
31
- @position += 4
32
- return value
33
- end
34
-
35
- # Get 64-bit int from stream.
36
- def get_int64
37
- raise EOFError if @position + 8 > @size
38
- hi, lo = @response[@position, 8].unpack('N*N*')
39
- @position += 8
40
- return (hi << 32) + lo
41
- end
42
-
43
- # Get array of <tt>count</tt> ints from stream.
44
- def get_ints(count)
45
- length = 4 * count
46
- raise EOFError if @position + length > @size
47
- values = @response[@position, length].unpack('N*' * count)
48
- @position += length
49
- return values
50
- end
51
-
52
- # Get string from stream.
53
- def get_string
54
- length = get_int
55
- raise EOFError if @position + length > @size
56
- value = length > 0 ? @response[@position, length] : ''
57
- @position += length
58
- return value
59
- end
60
-
61
- # Get float from stream.
62
- def get_float
63
- raise EOFError if @position + 4 > @size
64
- uval = @response[@position, 4].unpack('N*').first;
65
- @position += 4
66
- return ([uval].pack('L')).unpack('f*').first
67
- end
68
- end
1
+ module Sphinx
2
+ # Unpack internal Sphinx representation of ints, floats, strings, and arrays.
3
+ # needed by Sphinx search engine.
4
+ class Response
5
+ # Initialize new request.
6
+ def initialize(response)
7
+ @response = response
8
+ @position = 0
9
+ @size = response.length
10
+ end
11
+
12
+ # Gets current stream position.
13
+ def position
14
+ @position
15
+ end
16
+
17
+ # Gets response size.
18
+ def size
19
+ @size
20
+ end
21
+
22
+ # Returns <tt>true</tt> when response stream is out.
23
+ def eof?
24
+ @position >= @size
25
+ end
26
+
27
+ # Get int from stream.
28
+ def get_int
29
+ raise EOFError if @position + 4 > @size
30
+ value = @response[@position, 4].unpack('N*').first
31
+ @position += 4
32
+ return value
33
+ end
34
+
35
+ # Get 64-bit int from stream.
36
+ def get_int64
37
+ raise EOFError if @position + 8 > @size
38
+ hi, lo = @response[@position, 8].unpack('N*N*')
39
+ @position += 8
40
+ return (hi << 32) + lo
41
+ end
42
+
43
+ # Get array of <tt>count</tt> ints from stream.
44
+ def get_ints(count)
45
+ length = 4 * count
46
+ raise EOFError if @position + length > @size
47
+ values = @response[@position, length].unpack('N*' * count)
48
+ @position += length
49
+ return values
50
+ end
51
+
52
+ # Get string from stream.
53
+ def get_string
54
+ length = get_int
55
+ raise EOFError if @position + length > @size
56
+ value = length > 0 ? @response[@position, length] : ''
57
+ @position += length
58
+ return value
59
+ end
60
+
61
+ # Get float from stream.
62
+ def get_float
63
+ raise EOFError if @position + 4 > @size
64
+ uval = @response[@position, 4].unpack('N*').first;
65
+ @position += 4
66
+ return ([uval].pack('L')).unpack('f*').first
67
+ end
68
+ end
69
69
  end
@@ -30,14 +30,14 @@ describe 'The Connect method of Sphinx::Client' do
30
30
  end
31
31
 
32
32
  it 'should establish TCP connection to the server and initialize session' do
33
- TCPSocket.should_receive(:new).with('localhost', 3312).and_return(@sock)
33
+ TCPSocket.should_receive(:new).with('localhost', 9312).and_return(@sock)
34
34
  @sock.should_receive(:recv).with(4).and_return([1].pack('N'))
35
35
  @sock.should_receive(:send).with([1].pack('N'), 0)
36
36
  @sphinx.send(:Connect).should be(@sock)
37
37
  end
38
38
 
39
39
  it 'should raise exception when searchd protocol is not 1+' do
40
- TCPSocket.should_receive(:new).with('localhost', 3312).and_return(@sock)
40
+ TCPSocket.should_receive(:new).with('localhost', 9312).and_return(@sock)
41
41
  @sock.should_receive(:recv).with(4).and_return([0].pack('N'))
42
42
  @sock.should_receive(:close)
43
43
  lambda { @sphinx.send(:Connect) }.should raise_error(Sphinx::SphinxConnectError)
@@ -45,9 +45,9 @@ describe 'The Connect method of Sphinx::Client' do
45
45
  end
46
46
 
47
47
  it 'should raise exception on connection error' do
48
- TCPSocket.should_receive(:new).with('localhost', 3312).and_raise(Errno::EBADF)
48
+ TCPSocket.should_receive(:new).with('localhost', 9312).and_raise(Errno::EBADF)
49
49
  lambda { @sphinx.send(:Connect) }.should raise_error(Sphinx::SphinxConnectError)
50
- @sphinx.GetLastError.should == 'connection to localhost:3312 failed'
50
+ @sphinx.GetLastError.should == 'connection to localhost:9312 failed'
51
51
  end
52
52
 
53
53
  it 'should use custom host and port' do
@@ -1,8 +1,8 @@
1
- <?php
2
-
3
- require ("sphinxapi.php");
4
-
5
- $cl = new SphinxClient();
6
- $cl->BuildKeywords('test', 'index', true);
7
-
1
+ <?php
2
+
3
+ require ("sphinxapi.php");
4
+
5
+ $cl = new SphinxClient();
6
+ $cl->BuildKeywords('test', 'index', true);
7
+
8
8
  ?>
@@ -5,7 +5,9 @@
5
5
  //
6
6
 
7
7
  //
8
- // Copyright (c) 2001-2008, Andrew Aksyonoff. All rights reserved.
8
+ // Copyright (c) 2001-2012, Andrew Aksyonoff
9
+ // Copyright (c) 2008-2012, Sphinx Technologies Inc
10
+ // All rights reserved
9
11
  //
10
12
  // This program is free software; you can redistribute it and/or modify
11
13
  // it under the terms of the GNU General Public License. You should have
@@ -177,7 +179,7 @@ function sphUnpack64 ( $v )
177
179
  class SphinxClient
178
180
  {
179
181
  var $_host; ///< searchd host (default is "localhost")
180
- var $_port; ///< searchd port (default is 3312)
182
+ var $_port; ///< searchd port (default is 9312)
181
183
  var $_offset; ///< how many records to seek from result-set start (default is 0)
182
184
  var $_limit; ///< how many records to return from result-set starting at offset (default is 20)
183
185
  var $_mode; ///< query matching mode (default is SPH_MATCH_ALL)
@@ -219,7 +221,7 @@ class SphinxClient
219
221
  {
220
222
  // per-client-object settings
221
223
  $this->_host = "localhost";
222
- $this->_port = 3312;
224
+ $this->_port = 9312;
223
225
 
224
226
  // per-query settings
225
227
  $this->_offset = 0;
@@ -57,7 +57,7 @@ indexer
57
57
 
58
58
  searchd
59
59
  {
60
- port = 3312
60
+ port = 9312
61
61
  log = /opt/sphinx-0.9.9-id64/var/log/searchd.log
62
62
  query_log = /opt/sphinx-0.9.9-id64/var/log/query.log
63
63
  read_timeout = 5
@@ -57,7 +57,7 @@ indexer
57
57
 
58
58
  searchd
59
59
  {
60
- port = 3312
60
+ port = 9312
61
61
  log = /opt/sphinx-0.9.9/var/log/searchd.log
62
62
  query_log = /opt/sphinx-0.9.9/var/log/query.log
63
63
  read_timeout = 5
@@ -0,0 +1,27 @@
1
+ #
2
+ # $Id$
3
+ #
4
+
5
+ require 'init.rb'
6
+
7
+ q = ARGV.join(' ')
8
+ @sphinx = Sphinx::Client.new
9
+ # @sphinx.SetSortMode(Sphinx::Client::SPH_SORT_ATTR_ASC, 'created_at')
10
+ results = @sphinx.Query(q)
11
+
12
+ puts "Query '#{q}' retrieved #{results['total']} of #{results['total_found']} matches in #{results['time']} sec.";
13
+ puts "Query stats:";
14
+ results['words'].each do |word, info|
15
+ puts " '#{word}' found #{info['hits']} times in #{info['docs']} documents\n"
16
+ end
17
+ puts
18
+
19
+ n = 1
20
+ results['matches'].each do |doc|
21
+ print "#{n}. doc_id=#{doc['id']}, weight=#{doc['weight']}"
22
+ doc['attrs'].each do |attr, value|
23
+ print ", #{attr}=#{value}"
24
+ end
25
+ puts
26
+ n = n+1
27
+ end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: model_set
3
3
  version: !ruby/object:Gem::Version
4
- hash: 23
5
- prerelease: false
4
+ hash: 19
5
+ prerelease:
6
6
  segments:
7
7
  - 1
8
+ - 1
8
9
  - 0
9
- - 0
10
- version: 1.0.0
10
+ version: 1.1.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Justin Balthrop
@@ -15,13 +15,113 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-06-02 00:00:00 -07:00
18
+ date: 2013-06-03 00:00:00 -07:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
22
- name: ordered_set
22
+ name: shoulda
23
23
  prerelease: false
24
24
  requirement: &id001 !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - "="
28
+ - !ruby/object:Gem::Version
29
+ hash: 5
30
+ segments:
31
+ - 3
32
+ - 0
33
+ - 1
34
+ version: 3.0.1
35
+ type: :development
36
+ version_requirements: *id001
37
+ - !ruby/object:Gem::Dependency
38
+ name: mocha
39
+ prerelease: false
40
+ requirement: &id002 !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ">="
44
+ - !ruby/object:Gem::Version
45
+ hash: 3
46
+ segments:
47
+ - 0
48
+ version: "0"
49
+ type: :development
50
+ version_requirements: *id002
51
+ - !ruby/object:Gem::Dependency
52
+ name: rsolr
53
+ prerelease: false
54
+ requirement: &id003 !ruby/object:Gem::Requirement
55
+ none: false
56
+ requirements:
57
+ - - ">="
58
+ - !ruby/object:Gem::Version
59
+ hash: 3
60
+ segments:
61
+ - 0
62
+ version: "0"
63
+ type: :development
64
+ version_requirements: *id003
65
+ - !ruby/object:Gem::Dependency
66
+ name: json
67
+ prerelease: false
68
+ requirement: &id004 !ruby/object:Gem::Requirement
69
+ none: false
70
+ requirements:
71
+ - - ">="
72
+ - !ruby/object:Gem::Version
73
+ hash: 3
74
+ segments:
75
+ - 0
76
+ version: "0"
77
+ type: :development
78
+ version_requirements: *id004
79
+ - !ruby/object:Gem::Dependency
80
+ name: rake
81
+ prerelease: false
82
+ requirement: &id005 !ruby/object:Gem::Requirement
83
+ none: false
84
+ requirements:
85
+ - - ">="
86
+ - !ruby/object:Gem::Version
87
+ hash: 3
88
+ segments:
89
+ - 0
90
+ version: "0"
91
+ type: :development
92
+ version_requirements: *id005
93
+ - !ruby/object:Gem::Dependency
94
+ name: system_timer
95
+ prerelease: false
96
+ requirement: &id006 !ruby/object:Gem::Requirement
97
+ none: false
98
+ requirements:
99
+ - - ">="
100
+ - !ruby/object:Gem::Version
101
+ hash: 3
102
+ segments:
103
+ - 0
104
+ version: "0"
105
+ type: :development
106
+ version_requirements: *id006
107
+ - !ruby/object:Gem::Dependency
108
+ name: activerecord-postgresql-adapter
109
+ prerelease: false
110
+ requirement: &id007 !ruby/object:Gem::Requirement
111
+ none: false
112
+ requirements:
113
+ - - ">="
114
+ - !ruby/object:Gem::Version
115
+ hash: 3
116
+ segments:
117
+ - 0
118
+ version: "0"
119
+ type: :development
120
+ version_requirements: *id007
121
+ - !ruby/object:Gem::Dependency
122
+ name: ordered_set
123
+ prerelease: false
124
+ requirement: &id008 !ruby/object:Gem::Requirement
25
125
  none: false
26
126
  requirements:
27
127
  - - ">="
@@ -33,11 +133,11 @@ dependencies:
33
133
  - 1
34
134
  version: 1.0.1
35
135
  type: :runtime
36
- version_requirements: *id001
136
+ version_requirements: *id008
37
137
  - !ruby/object:Gem::Dependency
38
138
  name: deep_clonable
39
139
  prerelease: false
40
- requirement: &id002 !ruby/object:Gem::Requirement
140
+ requirement: &id009 !ruby/object:Gem::Requirement
41
141
  none: false
42
142
  requirements:
43
143
  - - ">="
@@ -49,33 +149,37 @@ dependencies:
49
149
  - 0
50
150
  version: 1.1.0
51
151
  type: :runtime
52
- version_requirements: *id002
152
+ version_requirements: *id009
53
153
  - !ruby/object:Gem::Dependency
54
154
  name: activerecord
55
155
  prerelease: false
56
- requirement: &id003 !ruby/object:Gem::Requirement
156
+ requirement: &id010 !ruby/object:Gem::Requirement
57
157
  none: false
58
158
  requirements:
59
- - - ">="
159
+ - - ~>
60
160
  - !ruby/object:Gem::Version
61
- hash: 15
161
+ hash: 17
62
162
  segments:
63
163
  - 2
64
- - 0
65
- - 0
66
- version: 2.0.0
164
+ - 3
165
+ - 9
166
+ version: 2.3.9
67
167
  type: :runtime
68
- version_requirements: *id003
168
+ version_requirements: *id010
69
169
  description: Easy manipulation of sets of ActiveRecord models
70
- email: code@justinbalthrop.com
170
+ email:
171
+ - git@justinbalthrop.com
71
172
  executables: []
72
173
 
73
174
  extensions: []
74
175
 
75
- extra_rdoc_files:
76
- - LICENSE
77
- - README.rdoc
176
+ extra_rdoc_files: []
177
+
78
178
  files:
179
+ - .gitignore
180
+ - .rbenv-gemsets
181
+ - .rbenv-version
182
+ - Gemfile
79
183
  - LICENSE
80
184
  - README.rdoc
81
185
  - Rakefile
@@ -172,8 +276,9 @@ files:
172
276
  - vendor/sphinx_client/spec/sphinx/sphinx_test.sql
173
277
  - vendor/sphinx_client/sphinx.yml.tpl
174
278
  - vendor/sphinx_client/tasks/sphinx.rake
279
+ - vendor/sphinx_client/test.rb
175
280
  has_rdoc: true
176
- homepage: http://github.com/ninjudd/model_set
281
+ homepage: https://github.com/ninjudd/model_set
177
282
  licenses: []
178
283
 
179
284
  post_install_message:
@@ -202,9 +307,11 @@ required_rubygems_version: !ruby/object:Gem::Requirement
202
307
  requirements: []
203
308
 
204
309
  rubyforge_project:
205
- rubygems_version: 1.3.7
310
+ rubygems_version: 1.5.2
206
311
  signing_key:
207
312
  specification_version: 3
208
313
  summary: Easy manipulation of sets of ActiveRecord models
209
- test_files: []
210
-
314
+ test_files:
315
+ - test/model_set_test.rb
316
+ - test/multi_set_test.rb
317
+ - test/test_helper.rb