tanker 0.0.0 → 0.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.
data/Gemfile.lock CHANGED
@@ -29,4 +29,4 @@ PLATFORMS
29
29
  DEPENDENCIES
30
30
  jeweler
31
31
  rspec (>= 2.0.0.beta.22)
32
- will_paginate
32
+ will_paginate (>= 2.3.15)
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.0
1
+ 0.1.0
data/lib/tanker.rb CHANGED
@@ -48,30 +48,39 @@ module Tanker
48
48
  @tanker_indexes << field
49
49
  end
50
50
 
51
- end
52
-
53
- # these are the instace methods included que
54
- module InstanceMethods
55
-
56
- def tanker_indexes
57
- self.class.tanker_indexes
58
- end
59
-
60
51
  def api
61
52
  @api ||= IndexTank::ApiClient.new(Tanker.configuration[:url])
62
53
  end
63
54
 
64
55
  def index
65
- @index ||= api.get_index(self.class.index_name)
56
+ @index ||= api.get_index(self.index_name)
66
57
  end
67
58
 
68
- def search_tank(query, page = 1, per_page = self.class.per_page)
59
+ def search_tank(query, options = {})
60
+ page = options.delete(:page) || 1
61
+ per_page = options.delete(:per_page) || self.per_page
62
+
63
+ # transform fields in query
64
+ if options.has_key? :conditions
65
+ options[:conditions].each do |field,value|
66
+ query += " #{field}:(#{value})"
67
+ end
68
+ end
69
+
70
+ query = "__any:(#{query.to_s}) __type:#{self.name}"
71
+ options = { :start => page - 1, :len => per_page }.merge(options)
72
+
73
+ results = index.search(query, options)
74
+
75
+ unless results[:results].empty?
76
+ ids = results[:results].map{|res| res[:docid].split(" ", 2)}
77
+ else
78
+ return nil
79
+ end
69
80
 
70
- results = index.search(query, :start => page, :len => per_page )
71
- ids = results[:results].map{|res| res[:docid]}
72
81
 
73
82
  @entries = WillPaginate::Collection.create(page, per_page) do |pager|
74
- result = self.class.find(ids)
83
+ result = self.find(ids)
75
84
  # inject the result array into the paginated collection:
76
85
  pager.replace(result)
77
86
 
@@ -81,16 +90,36 @@ module Tanker
81
90
  end
82
91
  end
83
92
  end
93
+
94
+ end
95
+
96
+ # these are the instace methods included que
97
+ module InstanceMethods
98
+
99
+ def tanker_indexes
100
+ self.class.tanker_indexes
101
+ end
102
+
84
103
  def update_tank_indexes
85
- hash = {}
86
- tanker_indexes.each do |idx|
87
- hash[idx] = self.send(idx.to_s)
104
+ data = {}
105
+
106
+ tanker_indexes.each do |field|
107
+ val = self.instance_eval(field.to_s)
108
+ data[field.to_s] = val.to_s unless val.nil?
88
109
  end
89
- index.add_document(id, hash)
110
+
111
+ data[:__any] = data.values.join " . "
112
+ data[:__type] = self.class.name
113
+
114
+ self.class.index.add_document(it_doc_id, data)
90
115
  end
91
116
 
92
117
  def delete_tank_indexes
93
- index.delete_document(id)
118
+ self.class.index.delete_document(it_doc_id)
119
+ end
120
+
121
+ def it_doc_id
122
+ self.class.name + ' ' + self.id.to_s
94
123
  end
95
124
 
96
125
  end
data/spec/tanker_spec.rb CHANGED
@@ -61,36 +61,30 @@ describe Tanker do
61
61
 
62
62
  describe 'tanker instance' do
63
63
  it 'should create an api instance' do
64
- person = Person.new
65
-
66
- person.api.class.should == IndexTank::ApiClient
64
+ Person.api.class.should == IndexTank::ApiClient
67
65
  end
68
66
 
69
67
  it 'should create a connexion to index tank' do
70
- person = Person.new
71
-
72
- person.index.class.should == IndexTank::IndexClient
68
+ Person.index.class.should == IndexTank::IndexClient
73
69
  end
74
70
 
75
71
  it 'should be able to perform a seach query' do
76
- person = Person.new
77
-
78
- person.index.should_receive(:search).and_return(
72
+ Person.index.should_receive(:search).and_return(
79
73
  {
80
74
  :matches => 1,
81
75
  :results => [{
82
- :docid => 1,
76
+ :docid => Person.new.it_doc_id,
83
77
  :name => 'pedro'
84
78
  }],
85
79
  :search_time => 1
86
80
  }
87
81
  )
88
82
 
89
- person.class.should_receive(:find).and_return(
90
- [person]
83
+ Person.should_receive(:find).and_return(
84
+ [Person.new]
91
85
  )
92
86
 
93
- collection = person.search_tank('hey!')
87
+ collection = Person.search_tank('hey!')
94
88
  collection.class.should == WillPaginate::Collection
95
89
  collection.total_entries.should == 1
96
90
  collection.total_pages.should == 1
@@ -101,7 +95,7 @@ describe Tanker do
101
95
  it 'should be able to update the index' do
102
96
  person = Person.new
103
97
 
104
- person.index.should_receive(:add_document)
98
+ Person.index.should_receive(:add_document)
105
99
 
106
100
  person.update_tank_indexes
107
101
  end
@@ -109,7 +103,7 @@ describe Tanker do
109
103
  it 'should be able to delete de document from the index' do
110
104
  person = Person.new
111
105
 
112
- person.index.should_receive(:delete_document)
106
+ Person.index.should_receive(:delete_document)
113
107
 
114
108
  person.delete_tank_indexes
115
109
  end
data/tanker.gemspec CHANGED
@@ -5,7 +5,7 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{tanker}
8
- s.version = "0.0.0"
8
+ s.version = "0.1.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["@kidpollo"]
metadata CHANGED
@@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version
4
4
  prerelease: false
5
5
  segments:
6
6
  - 0
7
+ - 1
7
8
  - 0
8
- - 0
9
- version: 0.0.0
9
+ version: 0.1.0
10
10
  platform: ruby
11
11
  authors:
12
12
  - "@kidpollo"