letsshop_mapper 1.0.0 → 1.1.1
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/letsshop_mapper/connection.rb +11 -0
- data/lib/letsshop_mapper/model/opensearch/entry.rb +0 -2
- data/lib/letsshop_mapper/model/suggest/item.rb +32 -0
- data/lib/letsshop_mapper/model/suggest/suggest.rb +31 -0
- data/lib/letsshop_mapper/model/tree/tree.rb +5 -4
- data/lib/letsshop_mapper/version.rb +2 -2
- data/lib/letsshop_mapper.rb +4 -0
- data/test/letsshop_mapper_test.rb +27 -2
- metadata +7 -5
@@ -10,6 +10,7 @@ module LetsShopMapper
|
|
10
10
|
attr_reader :response
|
11
11
|
attr_reader :feed
|
12
12
|
attr_reader :tree
|
13
|
+
attr_reader :suggest
|
13
14
|
|
14
15
|
def initialize(server = nil, key = nil)
|
15
16
|
@server = server
|
@@ -62,6 +63,16 @@ module LetsShopMapper
|
|
62
63
|
raise LetsShopMapper::Error::RequestBaseSearchException::new
|
63
64
|
end
|
64
65
|
end
|
66
|
+
|
67
|
+
def do_suggest(word = nil)
|
68
|
+
uri = "http://#{@server}/suggest/#{@key}"
|
69
|
+
begin
|
70
|
+
@response = Net::HTTP.get_response(URI.parse("#{uri}/?q=#{word}"))
|
71
|
+
@suggest = LetsShopMapper::Model::Suggest::Suggest::new(@response.body)
|
72
|
+
rescue Exception
|
73
|
+
raise LetsShopMapper::Error::RequestBaseSearchException::new
|
74
|
+
end
|
75
|
+
end
|
65
76
|
end
|
66
77
|
end
|
67
78
|
end
|
@@ -13,10 +13,8 @@ module LetsShopMapper
|
|
13
13
|
attr_reader :thumb
|
14
14
|
attr_reader :supplier
|
15
15
|
attr_reader :facets
|
16
|
-
attr_reader :xml
|
17
16
|
|
18
17
|
def initialize(entry = nil)
|
19
|
-
@xml = entry
|
20
18
|
@id, @link, @title, @description, @price, @thumb, @supplier = nil
|
21
19
|
@facets = []
|
22
20
|
parse(entry) if entry
|
@@ -0,0 +1,32 @@
|
|
1
|
+
module LetsShopMapper
|
2
|
+
module Model
|
3
|
+
module Suggest
|
4
|
+
class Item
|
5
|
+
attr_reader :text
|
6
|
+
attr_reader :type
|
7
|
+
attr_reader :nhits
|
8
|
+
attr_reader :filter
|
9
|
+
|
10
|
+
def initialize(item = nil)
|
11
|
+
@text, @type, @nhits, @filter = nil
|
12
|
+
parse(item) if item
|
13
|
+
end
|
14
|
+
|
15
|
+
def parse(item)
|
16
|
+
@text = item.at('text').text
|
17
|
+
@type = item.at('text')['type']
|
18
|
+
@nhits = item.at('nhits').text
|
19
|
+
@filter = Base::Filter::new(item.at('filter')['value'])
|
20
|
+
end
|
21
|
+
|
22
|
+
def to_s(localtime = true)
|
23
|
+
s = ''
|
24
|
+
s += "Text: #{@text}\n"
|
25
|
+
s += "Type: #{@type}\n"
|
26
|
+
s += "NHits: #{@nhits}\n"
|
27
|
+
s += "Filter: \n#{@filter}\n"
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
module LetsShopMapper
|
2
|
+
module Model
|
3
|
+
module Suggest
|
4
|
+
class Suggest
|
5
|
+
attr_reader :items
|
6
|
+
attr_reader :xml
|
7
|
+
|
8
|
+
def initialize(suggest = nil)
|
9
|
+
@items = []
|
10
|
+
parse(suggest) if suggest
|
11
|
+
end
|
12
|
+
|
13
|
+
def parse(suggest)
|
14
|
+
@xml = Nokogiri::XML(suggest)
|
15
|
+
if @xml.at('suggest')
|
16
|
+
@xml.xpath('suggest/item').each do |c|
|
17
|
+
@items << Item::new(c)
|
18
|
+
end
|
19
|
+
else
|
20
|
+
raise LetsShopMapper::Error::UnknownFeedTypeException::new
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def to_s(localtime = true)
|
25
|
+
s = ''
|
26
|
+
@items.each { |i| s += i.to_s(localtime) }
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -5,12 +5,13 @@ module LetsShopMapper
|
|
5
5
|
attr_reader :categories
|
6
6
|
attr_reader :xml
|
7
7
|
|
8
|
-
def initialize(
|
9
|
-
|
8
|
+
def initialize(tree = nil)
|
9
|
+
@categories = []
|
10
|
+
parse(tree) if tree
|
10
11
|
end
|
11
12
|
|
12
|
-
def parse(
|
13
|
-
@xml = Nokogiri::XML(
|
13
|
+
def parse(tree)
|
14
|
+
@xml = Nokogiri::XML(tree)
|
14
15
|
if @xml.at('/categories')
|
15
16
|
@xml.xpath('/categories/category').each do |c|
|
16
17
|
@categories = Base::Category::new
|
data/lib/letsshop_mapper.rb
CHANGED
@@ -19,6 +19,10 @@ module LetsShopMapper
|
|
19
19
|
module Tree
|
20
20
|
autoload :Tree, "letsshop_mapper/model/tree/tree"
|
21
21
|
end
|
22
|
+
module Suggest
|
23
|
+
autoload :Suggest, "letsshop_mapper/model/suggest/suggest"
|
24
|
+
autoload :Item, "letsshop_mapper/model/suggest/item"
|
25
|
+
end
|
22
26
|
end
|
23
27
|
def self.Boolean(string)
|
24
28
|
return true if string == true || string =~ /^true$/i
|
@@ -78,7 +78,7 @@ module LetsShopMapper
|
|
78
78
|
assert_equal "Search: ", lshop.feed.title
|
79
79
|
assert_equal "http://letsshop.dev.happun.com/search/82842d494583280b940b208664f34014", lshop.feed.link
|
80
80
|
f = lshop.feed.entries[0].get_facets_by("category")
|
81
|
-
assert_equal "
|
81
|
+
assert_equal "botte", f[0].title
|
82
82
|
assert_equal "subset", f[0].role
|
83
83
|
f = lshop.feed.entries[0].get_facets_by("universe")
|
84
84
|
assert_equal "mode", f[0].title
|
@@ -90,7 +90,7 @@ module LetsShopMapper
|
|
90
90
|
assert_equal "Search: escarpin AND noir", lshop.feed.title
|
91
91
|
assert_equal "http://letsshop.dev.happun.com/search/82842d494583280b940b208664f34014", lshop.feed.link
|
92
92
|
f = lshop.feed.entries[0].get_facets_by("category")
|
93
|
-
assert_equal "
|
93
|
+
assert_equal "escarpin", f[0].title
|
94
94
|
assert_equal "subset", f[0].role
|
95
95
|
f = lshop.feed.entries[0].get_facets_by("universe")
|
96
96
|
assert_equal "mode", f[0].title
|
@@ -175,6 +175,31 @@ module LetsShopMapper
|
|
175
175
|
assert_equal "femme", lshopTree.categories.children[0].children[0].filters[0].value
|
176
176
|
end
|
177
177
|
end
|
178
|
+
def test_suggest
|
179
|
+
Dir.foreach(FIXTURESDIR) do |f|
|
180
|
+
next if f !~ /suggest*.xml$/
|
181
|
+
puts "Checking #{f}"
|
182
|
+
str = File::read(FIXTURESDIR + '/' + f)
|
183
|
+
lshopSuggest = LetsShopMapper::Model::Suggest::Suggest::new(str)
|
184
|
+
assert_equal "asos", lshopSuggest.items[0].text
|
185
|
+
assert_equal "supplier", lshopSuggest.items[0].type
|
186
|
+
assert_equal "supplier:asos", lshopSuggest.items[0].filter.str_value
|
187
|
+
assert_equal "achatdesign", lshopSuggest.items[8].text
|
188
|
+
assert_equal "brand", lshopSuggest.items[8].type
|
189
|
+
assert_equal "brand:achatdesign", lshopSuggest.items[8].filter.str_value
|
190
|
+
end
|
191
|
+
end
|
192
|
+
def test_suggest_request
|
193
|
+
config = YAML.load_file('test/letsshop.yml')['development']
|
194
|
+
lshop = LetsShopMapper::Connection::Base::new(config["server"], config["key"])
|
195
|
+
lshop.do_suggest("ju")
|
196
|
+
assert_equal "jupe", lshop.suggest.items[0].text
|
197
|
+
assert_equal "category", lshop.suggest.items[0].type
|
198
|
+
assert_equal "category:jupe", lshop.suggest.items[0].filter.str_value
|
199
|
+
assert_equal "junk de luxe", lshop.suggest.items[9].text
|
200
|
+
assert_equal "brand", lshop.suggest.items[9].type
|
201
|
+
assert_equal "brand:junk de luxe", lshop.suggest.items[9].filter.str_value
|
202
|
+
end
|
178
203
|
end
|
179
204
|
end
|
180
205
|
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: letsshop_mapper
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 17
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 1
|
8
|
-
-
|
9
|
-
-
|
10
|
-
version: 1.
|
8
|
+
- 1
|
9
|
+
- 1
|
10
|
+
version: 1.1.1
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- happun
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2010-08-
|
18
|
+
date: 2010-08-25 00:00:00 +02:00
|
19
19
|
default_executable:
|
20
20
|
dependencies: []
|
21
21
|
|
@@ -37,6 +37,8 @@ files:
|
|
37
37
|
- lib/letsshop_mapper/version.rb
|
38
38
|
- lib/letsshop_mapper/patch/rexml.rb
|
39
39
|
- lib/letsshop_mapper/model/tree/tree.rb
|
40
|
+
- lib/letsshop_mapper/model/suggest/suggest.rb
|
41
|
+
- lib/letsshop_mapper/model/suggest/item.rb
|
40
42
|
- lib/letsshop_mapper/model/opensearch/feed.rb
|
41
43
|
- lib/letsshop_mapper/model/opensearch/entry.rb
|
42
44
|
- lib/letsshop_mapper/model/base/filter.rb
|