cloud_search 0.0.3 → 0.0.4

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/README.md CHANGED
@@ -2,7 +2,8 @@
2
2
 
3
3
  # CloudSearch
4
4
 
5
- TODO: Write a gem description
5
+ This is a simple Ruby wrapper around the Amazon's CloudSearch API. It has support for searching (with both simple and boolean queries), pagination
6
+ and documents indexing.
6
7
 
7
8
  ## Installation
8
9
 
@@ -22,7 +23,7 @@ Or install it yourself as:
22
23
 
23
24
  The example bellow uses the Amazon's example database called `imdb-movies`:
24
25
 
25
- # Use your AWS CloudSearch configuration
26
+ ### Use your AWS CloudSearch configuration
26
27
  ``` ruby
27
28
  CloudSearch.configure do |config|
28
29
  config.domain_id = "pl6u4t3elu7dhsbwaqbsy3y6be"
@@ -30,23 +31,31 @@ CloudSearch.configure do |config|
30
31
  end
31
32
  ```
32
33
 
33
- # Search for 'star wars' on 'imdb-movies'
34
+ ### Search for 'star wars' on 'imdb-movies'
34
35
  ``` ruby
35
- search = CloudSearch::Search.new
36
- resp = search.with_fields(:actor, :director, :title, :year, :text_relevance)
37
- .with_query("star wars")
38
- .search
36
+ searcher = CloudSearch::Searcher.new
37
+ resp = searcher.with_fields(:actor, :director, :title, :year, :text_relevance)
38
+ .with_query("star wars")
39
+ .search
39
40
  ```
40
41
 
41
- # Or you can search using part of the name
42
+ ### Or you can search using part of the name
42
43
  ``` ruby
43
- search = CloudSearch::Search.new
44
- resp = search.with_fields(:actor, :director, :title, :year, :text_relevance)
45
- .with_query("matri*")
46
- .search
44
+ searcher = CloudSearch::Searcher.new
45
+ resp = searcher.with_fields(:actor, :director, :title, :year, :text_relevance)
46
+ .with_query("matri*")
47
+ .search
47
48
  ```
48
49
 
49
- # Results
50
+ ### You can also search using boolean queries
51
+ ``` ruby
52
+ searcher = CloudSearch::Searcher.new
53
+ resp = searcher.with_fields(:actor, :director, :title, :year, :text_relevance)
54
+ .with_boolean_query("year:2000")
55
+ .search
56
+ ```
57
+
58
+ ## Results
50
59
  ``` ruby
51
60
  resp.results.each do |result|
52
61
  movie = result["data"]
@@ -66,14 +75,14 @@ end
66
75
  ## Pagination
67
76
 
68
77
  The results you get back are (currently) API-compatible with will\_paginate:
69
-
78
+
70
79
  ``` ruby
71
- search = CloudSearch::Search.new
72
- resp = search.with_fields(:actor, :director, :title, :year, :text_relevance)
73
- .with_query("star wars")
74
- .with_items_per_page(30)
75
- .at_pate(10)
76
- .search
80
+ searcher = CloudSearch::Searcher.new
81
+ resp = searcher.with_fields(:actor, :director, :title, :year, :text_relevance)
82
+ .with_query("star wars")
83
+ .with_items_per_page(30)
84
+ .at_page(10)
85
+ .search
77
86
 
78
87
  resp.total_entries #=> 5000
79
88
  resp.total_pages #=> 167
@@ -85,13 +94,14 @@ resp.page_size #=> 30
85
94
  ## Indexing documents
86
95
 
87
96
  ``` ruby
88
- document = CloudSearch::Document.new :type => "add", # or "delete"
97
+ document = CloudSearch::Document.new :type => "add", # or "delete"
89
98
  :version => 123,
90
- :id => 680, :lang => :en,
91
- :fields => {:title => "Lord of the Rings"}
99
+ :id => 680,
100
+ :lang => :en,
101
+ :fields => {:title => "Lord of the Rings"}
92
102
 
93
103
  indexer = CloudSearch::Indexer.new
94
- indexer << document # add as many documents as you want
104
+ indexer << document # add as many documents as you want (CloudSearch currently sets a limit of 5MB per documents batch)
95
105
  indexer.index
96
106
  ```
97
107
 
@@ -25,16 +25,26 @@ module CloudSearch
25
25
  response.items_per_page = items_per_page
26
26
  response
27
27
  end
28
-
28
+
29
29
  def with_query(query)
30
30
  @query = query
31
31
  self
32
32
  end
33
33
 
34
+ def with_boolean_query(query)
35
+ @boolean = true
36
+ with_query query
37
+ self
38
+ end
39
+
34
40
  def query
35
41
  @query or ''
36
42
  end
37
43
 
44
+ def boolean_query?
45
+ !!@boolean
46
+ end
47
+
38
48
  def with_fields(*fields)
39
49
  @fields = fields
40
50
  self
@@ -65,10 +75,16 @@ module CloudSearch
65
75
 
66
76
  def url
67
77
  "#{CloudSearch.config.search_url}/search".tap do |u|
68
- u.concat("?q=#{CGI.escape(query)}&size=#{items_per_page}&start=#{start}")
78
+ u.concat("?#{query_parameter}=#{CGI.escape(query)}&size=#{items_per_page}&start=#{start}")
69
79
  u.concat("&return-fields=#{CGI.escape(@fields.join(","))}") unless @fields.nil? or @fields.empty?
70
80
  end
71
81
  end
82
+
83
+ private
84
+
85
+ def query_parameter
86
+ boolean_query? ? "bq" : "q"
87
+ end
72
88
  end
73
89
  end
74
90
 
@@ -1,3 +1,3 @@
1
1
  module CloudSearch
2
- VERSION = "0.0.3"
2
+ VERSION = "0.0.4"
3
3
  end
@@ -3,6 +3,10 @@ require "spec_helper"
3
3
  describe CloudSearch::Searcher do
4
4
  subject { described_class.new }
5
5
 
6
+ let(:url_prefix) do
7
+ "#{CloudSearch.config.search_url}/search?"
8
+ end
9
+
6
10
  describe "#query" do
7
11
  it "returns default query" do
8
12
  subject.query.should == ""
@@ -25,6 +29,27 @@ describe CloudSearch::Searcher do
25
29
  end
26
30
  end
27
31
 
32
+ describe "#with_boolean_query" do
33
+ it "sets the query mode to 'boolean'" do
34
+ subject.with_boolean_query("year:2000")
35
+ subject.should be_boolean_query
36
+ end
37
+
38
+ it "returns the searcher instance" do
39
+ subject.with_boolean_query("year:2000").should == subject
40
+ end
41
+
42
+ it "sets the query term" do
43
+ subject.with_boolean_query("year:2000")
44
+ subject.query.should == "year:2000"
45
+ end
46
+
47
+ it "uses 'bq' to specify the query in the URL" do
48
+ subject.with_boolean_query("year:2000")
49
+ subject.url.should == "#{url_prefix}bq=year%3A2000&size=10&start=0"
50
+ end
51
+ end
52
+
28
53
  describe "#with_fields" do
29
54
  it "returns #{described_class} instance" do
30
55
  subject.with_fields(:foo).should == subject
@@ -42,7 +67,7 @@ describe CloudSearch::Searcher do
42
67
 
43
68
  it "returns default items per page when it's tried to set nil value" do
44
69
  subject.with_items_per_page(nil)
45
- subject.items_per_page.should == 10
70
+ subject.items_per_page.should == 10
46
71
  end
47
72
  end
48
73
 
@@ -91,10 +116,6 @@ describe CloudSearch::Searcher do
91
116
  end
92
117
 
93
118
  describe "#url" do
94
- let(:url_prefix) do
95
- "#{CloudSearch.config.search_url}/search?"
96
- end
97
-
98
119
  it "returns default cloud search url" do
99
120
  subject.url.should == "#{url_prefix}q=&size=10&start=0"
100
121
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cloud_search
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors: