shanna-dm-sphinx-adapter 0.7.1 → 0.8.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,49 @@
1
+ require 'rubygems'
2
+ require 'rake'
3
+
4
+ begin
5
+ require 'jeweler'
6
+ Jeweler::Tasks.new do |gem|
7
+ gem.name = "dm-sphinx-adapter"
8
+ gem.summary = %q{A DataMapper Sphinx adapter.}
9
+ gem.email = "shane.hanna@gmail.com"
10
+ gem.homepage = "http://github.com/shanna/dm-sphinx-adapter"
11
+ gem.authors = ["Shane Hanna"]
12
+ gem.add_dependency 'dm-core', ['~> 0.9']
13
+ gem.files.reject!{|f| f=~ %r{test/files/tmp/.*}}
14
+ # gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
15
+ end
16
+ rescue LoadError
17
+ puts "Jeweler not available. Install it with: sudo gem install technicalpickles-jeweler -s http://gems.github.com"
18
+ end
19
+
20
+ require 'rake/rdoctask'
21
+ Rake::RDocTask.new do |rdoc|
22
+ rdoc.rdoc_dir = 'rdoc'
23
+ rdoc.title = 'dm-sphinx-adapter'
24
+ rdoc.options << '--line-numbers' << '--inline-source'
25
+ rdoc.rdoc_files.include('README*')
26
+ rdoc.rdoc_files.include('lib/**/*.rb')
27
+ end
28
+
29
+ require 'rake/testtask'
30
+ Rake::TestTask.new(:test) do |test|
31
+ test.libs << 'lib' << 'test'
32
+ test.pattern = 'test/**/test_*.rb'
33
+ test.verbose = true
34
+ end
35
+
36
+ begin
37
+ require 'rcov/rcovtask'
38
+ Rcov::RcovTask.new do |test|
39
+ test.libs << 'test'
40
+ test.pattern = 'test/**/test_*.rb'
41
+ test.verbose = true
42
+ end
43
+ rescue LoadError
44
+ task :rcov do
45
+ abort "RCov is not available. In order to run rcov, you must: sudo gem install spicycode-rcov"
46
+ end
47
+ end
48
+
49
+ task :default => :test
@@ -1,4 +1,4 @@
1
1
  ---
2
2
  :major: 0
3
- :minor: 7
4
- :patch: 1
3
+ :minor: 8
4
+ :patch: 0
@@ -17,6 +17,7 @@ require 'riddle'
17
17
  # TODO: Require farms suck. Do something about it.
18
18
  require dir / 'adapter'
19
19
  require dir / 'attribute'
20
+ require dir / 'collection'
20
21
  require dir / 'index'
21
22
  require dir / 'query'
22
23
  require dir / 'resource'
@@ -140,7 +140,9 @@ module DataMapper
140
140
  DataMapper.logger.info(
141
141
  %q{Sphinx (%.3f): search '%s' in '%s' found %d documents} % [result[:time], search, from, result[:total]]
142
142
  )
143
- result[:matches].map{|doc| doc[:id] = doc[:doc]; doc}
143
+ # TODO: Confusing, call it something other than collection?
144
+ Collection.new(result)
145
+ # result[:matches].map{|doc| doc[:id] = doc[:doc]; doc}
144
146
  end
145
147
 
146
148
 
@@ -0,0 +1,19 @@
1
+ module DataMapper
2
+ module Adapters
3
+ module Sphinx
4
+ class Collection < Array
5
+ attr_accessor :error, :time, :total, :words
6
+
7
+ def initialize(result)
8
+ # TODO: One liner that works in Ruby 1.x now #indexes is #keys?
9
+ @error = result[:error]
10
+ @time = result[:time]
11
+ @total = result[:total]
12
+ @words = result[:words]
13
+ super result[:matches].map{|doc| doc[:id] = doc[:doc]; doc}
14
+ end
15
+
16
+ end
17
+ end # Sphinx
18
+ end # Adapters
19
+ end # DataMapper
@@ -1,8 +1,8 @@
1
- require 'builder'
2
-
3
1
  module DataMapper
4
2
  module Adapters
5
3
  module Sphinx
4
+ require 'builder'
5
+
6
6
 
7
7
  # Sphinx xmlpipe2.
8
8
  #
@@ -3,8 +3,8 @@ require 'rubygems'
3
3
  require 'extlib'
4
4
  require 'extlib/hook'
5
5
  require 'pathname'
6
- require 'shoulda'
7
6
  require 'test/unit'
7
+ require 'shoulda'
8
8
 
9
9
  base = Pathname.new(__FILE__).dirname + '..'
10
10
  files = base + 'test' + 'files'
@@ -0,0 +1,26 @@
1
+ require File.join(File.dirname(__FILE__), 'helper')
2
+
3
+ class TestAdapter < Test::Unit::TestCase
4
+ context 'DM::A::Sphinx::Collection instance' do
5
+ setup do
6
+ load File.join(File.dirname(__FILE__), 'files', 'model.rb')
7
+ @it = repository(:search)
8
+ @resource = Item
9
+ end
10
+
11
+ should 'have total' do
12
+ assert_equal 3, @it.read_many(query).total
13
+ assert_equal 1, @it.read_many(query(:t_string => 'two')).total
14
+ end
15
+
16
+ should 'have words' do
17
+ words = {'two' => {:docs => 1, :hits => 2}}
18
+ assert_equal words, @it.read_many(query(:t_string => 'two')).words
19
+ end
20
+ end
21
+
22
+ protected
23
+ def query(conditions = {})
24
+ DataMapper::Query.new(repository(:search), @resource, conditions)
25
+ end
26
+ end
@@ -3,6 +3,13 @@ require 'dm-sphinx-adapter/xmlpipe2'
3
3
 
4
4
  class TestResource < Test::Unit::TestCase
5
5
  context 'DM::A::Sphinx::Resource module' do
6
+ begin
7
+ require 'nokogiri'
8
+ rescue LoadError
9
+ warn ' * WARNING: Nokogiri not found, skipping xmlpipe2 tests.'
10
+ return nil
11
+ end
12
+
6
13
  setup do
7
14
  load File.join(File.dirname(__FILE__), 'files', 'model.rb')
8
15
  end
@@ -12,7 +19,7 @@ class TestResource < Test::Unit::TestCase
12
19
  end
13
20
 
14
21
  context '#xmlpipe2' do
15
- should 'stream to stdout' do
22
+ setup do
16
23
  $stdout = StringIO.new
17
24
  Item.create(
18
25
  :id => 1,
@@ -24,14 +31,45 @@ class TestResource < Test::Unit::TestCase
24
31
  :t_datetime => Time.at(1235914716)
25
32
  )
26
33
  Item.xmlpipe2(:default, :search)
27
- xml = $stdout.rewind && $stdout.read
34
+ @xml = $stdout.rewind && $stdout.read
35
+ @doc = Nokogiri::XML.parse(@xml) rescue nil
36
+ @ns = {'s' => 'sphinx'}
28
37
  $stdout = STDOUT
38
+ end
29
39
 
30
- # TODO: Nokogiri or something and test some xpaths instead of a big eq match.
31
- assert_equal(
32
- File.open(File.join(File.dirname(__FILE__), 'files', 'test_xmlpipe2.xml')).read.chomp,
33
- xml
34
- )
40
+ should 'stream xml to stdout' do
41
+ assert_not_nil @xml
42
+ assert_not_nil @doc
43
+ end
44
+
45
+ context 'schema' do
46
+ should 'have id field' do
47
+ assert_not_nil @doc.xpath(%q{//s:field[@name='id']}, @ns).first
48
+ end
49
+
50
+ should 'have t_string field' do
51
+ assert_not_nil @doc.xpath(%q{//s:field[@name='t_string']}, @ns).first
52
+ end
53
+
54
+ should 'have text attribute' do
55
+ assert_not_nil @doc.xpath(%q{//s:attr[@name='t_text' and @type='str2ordinal']}, @ns).first
56
+ end
57
+
58
+ should 'have decimal attribute' do
59
+ assert_not_nil @doc.xpath(%q{//s:attr[@name='t_decimal' and @type='float']}, @ns).first
60
+ end
61
+
62
+ should 'have float attribute' do
63
+ assert_not_nil @doc.xpath(%q{//s:attr[@name='t_float' and @type='float']}, @ns).first
64
+ end
65
+
66
+ should 'have int attribute' do
67
+ assert_not_nil @doc.xpath(%q{//s:attr[@name='t_integer' and @type='int']}, @ns).first
68
+ end
69
+
70
+ should 'have timestamp attribute' do
71
+ assert_not_nil @doc.xpath(%q{//s:attr[@name='t_datetime' and @type='timestamp']}, @ns).first
72
+ end
35
73
  end
36
74
  end
37
75
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: shanna-dm-sphinx-adapter
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.1
4
+ version: 0.8.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Shane Hanna
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-03-18 00:00:00 -07:00
12
+ date: 2009-05-10 00:00:00 -07:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -32,53 +32,29 @@ extra_rdoc_files:
32
32
  - README.rdoc
33
33
  files:
34
34
  - README.rdoc
35
+ - Rakefile
35
36
  - VERSION.yml
36
- - lib/dm-sphinx-adapter
37
+ - lib/dm-sphinx-adapter.rb
37
38
  - lib/dm-sphinx-adapter/adapter.rb
38
39
  - lib/dm-sphinx-adapter/attribute.rb
40
+ - lib/dm-sphinx-adapter/collection.rb
39
41
  - lib/dm-sphinx-adapter/index.rb
40
42
  - lib/dm-sphinx-adapter/query.rb
41
43
  - lib/dm-sphinx-adapter/resource.rb
42
44
  - lib/dm-sphinx-adapter/xmlpipe2.rb
43
- - lib/dm-sphinx-adapter.rb
44
- - lib/riddle
45
- - lib/riddle/client
45
+ - lib/riddle.rb
46
+ - lib/riddle/client.rb
46
47
  - lib/riddle/client/filter.rb
47
48
  - lib/riddle/client/message.rb
48
49
  - lib/riddle/client/response.rb
49
- - lib/riddle/client.rb
50
- - lib/riddle.rb
51
- - test/files
52
50
  - test/files/model.rb
53
51
  - test/files/source.xml
54
52
  - test/files/sphinx.conf
55
53
  - test/files/test_xmlpipe2.xml
56
- - test/files/tmp
57
- - test/files/tmp/items.spa
58
- - test/files/tmp/items.spd
59
- - test/files/tmp/items.sph
60
- - test/files/tmp/items.spi
61
- - test/files/tmp/items.spl
62
- - test/files/tmp/items.spm
63
- - test/files/tmp/items.spp
64
- - test/files/tmp/items_delta.spa
65
- - test/files/tmp/items_delta.spd
66
- - test/files/tmp/items_delta.sph
67
- - test/files/tmp/items_delta.spi
68
- - test/files/tmp/items_delta.spm
69
- - test/files/tmp/items_delta.spp
70
- - test/files/tmp/items_main.spa
71
- - test/files/tmp/items_main.spd
72
- - test/files/tmp/items_main.sph
73
- - test/files/tmp/items_main.spi
74
- - test/files/tmp/items_main.spm
75
- - test/files/tmp/items_main.spp
76
- - test/files/tmp/sphinx.log
77
- - test/files/tmp/sphinx.pid
78
- - test/files/tmp/sphinx.query.log
79
54
  - test/helper.rb
80
55
  - test/test_adapter.rb
81
56
  - test/test_attribute.rb
57
+ - test/test_collection.rb
82
58
  - test/test_index.rb
83
59
  - test/test_query.rb
84
60
  - test/test_resource.rb
@@ -87,7 +63,6 @@ has_rdoc: true
87
63
  homepage: http://github.com/shanna/dm-sphinx-adapter
88
64
  post_install_message:
89
65
  rdoc_options:
90
- - --inline-source
91
66
  - --charset=UTF-8
92
67
  require_paths:
93
68
  - lib
@@ -110,5 +85,13 @@ rubygems_version: 1.2.0
110
85
  signing_key:
111
86
  specification_version: 2
112
87
  summary: A DataMapper Sphinx adapter.
113
- test_files: []
114
-
88
+ test_files:
89
+ - test/files/model.rb
90
+ - test/helper.rb
91
+ - test/test_adapter.rb
92
+ - test/test_attribute.rb
93
+ - test/test_collection.rb
94
+ - test/test_index.rb
95
+ - test/test_query.rb
96
+ - test/test_resource.rb
97
+ - test/test_xmlpipe2.rb