letsshop_mapper 0.9.0beta → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,9 +1,8 @@
1
1
  require 'rubygems'
2
2
  require 'tempfile'
3
- require 'rexml/document'
3
+ require 'nokogiri'
4
4
 
5
5
  module LetsShopMapper
6
- autoload :REXML, "letsshop_mapper/patch/rexml"
7
6
  autoload :Version, "letsshop_mapper/version"
8
7
  autoload :Connection, "letsshop_mapper/connection"
9
8
  autoload :Error, "letsshop_mapper/exceptions"
@@ -8,7 +8,6 @@ module LetsShopMapper
8
8
  attr_reader :server
9
9
  attr_reader :key
10
10
  attr_reader :response
11
-
12
11
  attr_reader :feed
13
12
  attr_reader :tree
14
13
 
@@ -16,6 +15,7 @@ module LetsShopMapper
16
15
  @server = server
17
16
  @key = key
18
17
  end
18
+
19
19
  def connect_and_get()
20
20
  uri = "http://#{@server}/search/#{@key}"
21
21
  begin
@@ -25,6 +25,7 @@ module LetsShopMapper
25
25
  raise LetsShopMapper::RequestBaseSearchException::new
26
26
  end
27
27
  end
28
+
28
29
  def find(conditions = {})
29
30
  uri = "http://#{@server}/search/#{@key}"
30
31
  query = "?"
@@ -50,6 +51,7 @@ module LetsShopMapper
50
51
  raise LetsShopMapper::Error::RequestBaseSearchException::new
51
52
  end
52
53
  end
54
+
53
55
  def get_tree(category = nil)
54
56
  uri = "http://#{@server}/tree/#{@key}"
55
57
  id = "#{category}" if category != nil
@@ -1,38 +1,41 @@
1
- include REXML
2
1
  module LetsShopMapper
3
2
  module Model
4
3
  module Base
5
4
  class Category
6
5
  attr_accessor :id
7
6
  attr_accessor :name
8
- attr_reader :children
9
- attr_reader :filters
7
+ attr_reader :children
8
+ attr_reader :filters
10
9
 
11
10
  def initialize()
12
11
  @id, @name = nil
13
12
  @children = []
14
13
  @filters = []
15
14
  end
15
+
16
16
  def recurse(category, par = nil)
17
- category.each_child_element do |child|
17
+ category.children.each do |child|
18
18
  if child.name == "category"
19
19
  chl = add_category(child)
20
20
  par.children << chl
21
21
  elsif child.name == "filter"
22
- par.filters << Filter::new(child.attributes.get_attribute("value"))
22
+ par.filters << Filter::new(child['value'])
23
23
  end
24
24
  recurse(child, chl)
25
25
  end
26
26
  end
27
+
27
28
  def add_category(category)
28
29
  c = Category::new
29
- c.name = category.elements['name'].text
30
- c.id = category.elements['name'].attributes.get_attribute("id").value
30
+ c.name = category.at("name").text
31
+ c.id = category.at("name")['id']
31
32
  return c
32
33
  end
34
+
33
35
  def to_map
34
36
  {@name => @children.empty? ? nil : @children.map {|child| child.to_map}}
35
37
  end
38
+
36
39
  def to_s(localtime = true)
37
40
  self.to_map.to_yaml
38
41
  end
@@ -8,12 +8,9 @@ module LetsShopMapper
8
8
  attr_reader :role
9
9
  attr_reader :selected
10
10
  attr_reader :nhits
11
-
12
- attr_reader :feed
13
11
  attr_reader :xml
14
12
 
15
- def initialize(facet = nil, feed = nil)
16
- @feed = feed
13
+ def initialize(facet = nil)
17
14
  @xml = facet
18
15
  @title, @type, @filter, @role, @selected, @nhits = nil
19
16
  @selected = false
@@ -21,15 +18,15 @@ module LetsShopMapper
21
18
  end
22
19
 
23
20
  def parse(facet)
24
- @title = facet.attributes.get_attribute("title").value.split(":")[1]
25
- @type = facet.attributes.get_attribute("title").value.split(":")[0]
26
- @filter = Filter::new(facet.attributes.get_attribute("title"))
27
- @role = facet.attributes.get_attribute("role").value
28
- if facet.attributes.get_attribute("nhits")
29
- @nhits = facet.attributes.get_attribute("nhits").value
21
+ @title = facet['title'].split(":")[1]
22
+ @type = facet['title'].split(":")[0]
23
+ @filter = Filter::new(facet['title'])
24
+ @role = facet['role']
25
+ if facet['nhits']
26
+ @nhits = facet['nhits']
30
27
  end
31
- if facet.attributes.get_attribute("selected")
32
- @selected = LetsShopMapper.Boolean(facet.attributes.get_attribute("selected").value)
28
+ if facet['selected']
29
+ @selected = LetsShopMapper.Boolean(facet['selected'])
33
30
  end
34
31
  end
35
32
 
@@ -12,11 +12,13 @@ module LetsShopMapper
12
12
  @depend = false
13
13
  parse(filtr) if filtr
14
14
  end
15
+
15
16
  def parse(filtr)
16
- @str_value = filtr.value
17
- @key = filtr.value.split(":")[0]
18
- @value = filtr.value.split(":")[1]
17
+ @str_value = filtr
18
+ @key = filtr.split(":")[0]
19
+ @value = filtr.split(":")[1]
19
20
  end
21
+
20
22
  def to_s(localtime = true)
21
23
  s = ''
22
24
  s += "Key: #{@key}\n"
@@ -13,47 +13,32 @@ module LetsShopMapper
13
13
  attr_reader :thumb
14
14
  attr_reader :supplier
15
15
  attr_reader :facets
16
-
17
- attr_reader :feed
18
16
  attr_reader :xml
19
17
 
20
- def initialize(entry = nil, feed = nil)
21
- @feed = feed
18
+ def initialize(entry = nil)
22
19
  @xml = entry
23
20
  @id, @link, @title, @description, @price, @thumb, @supplier = nil
24
21
  @facets = []
25
22
  parse(entry) if entry
26
23
  end
27
24
 
28
- # parse entry
29
25
  def parse(entry)
30
- @id = entry.elements["id"].text
31
- if (e = entry.elements['link'])
32
- @link = e.attribute('href').value
33
- end
34
- if (e = entry.elements['title']) && e.text
35
- @title = e.text
36
- end
37
- if (e = entry.elements['description']) && e.text
38
- @description = e.text
39
- end
40
- if (e = entry.elements['letsshop/thumb'])
41
- @thumb = e.text
42
- end
43
- if (e = entry.elements['letsshop/price']) && e.text
44
- @price = e.text
45
- @currency = e.attributes.get_attribute("currency").value
46
- @discount = e.attributes.get_attribute("discount").value
47
- @older_price = e.attributes.get_attribute("older").value
48
- end
49
- entry.each_element('Query') do |f|
50
- if !f.attributes.get_attribute("title").value.index("supplier:").nil?
51
- @supplier = f.attributes.get_attribute("title").value.gsub("supplier:","")
26
+ @id = entry.at('id').text
27
+ @link = entry.at('link')['href']
28
+ @title = entry.at('title').text
29
+ @description = entry.at('description').text
30
+ @thumb =entry.at('letsshop/thumb').text
31
+ @price = entry.at('letsshop/price').text
32
+ @currency = entry.at('letsshop/price')['currency']
33
+ @discount = entry.at('letsshop/price')['discount']
34
+ @older_price = entry.at('letsshop/price')['older']
35
+
36
+ entry.children.search('Query').each do |f|
37
+ @facets << Base::Facet::new(f)
38
+ if !f['title'].index("supplier:").nil?
39
+ @supplier = f['title'].gsub("supplier:","")
52
40
  end
53
41
  end
54
- entry.each_element('Query') do |e|
55
- @facets << Base::Facet::new(e, self)
56
- end
57
42
  end
58
43
 
59
44
  def get_facets_by(scope)
@@ -8,9 +8,7 @@ module LetsShopMapper
8
8
  attr_reader :startindex
9
9
  attr_reader :itemsperpage
10
10
  attr_reader :totalresults
11
-
12
11
  attr_reader :facets
13
-
14
12
  attr_reader :xml
15
13
  attr_reader :encoding
16
14
 
@@ -22,32 +20,21 @@ module LetsShopMapper
22
20
  end
23
21
 
24
22
  def parse(str)
25
- doc = REXML::Document.new(str)
26
- @xml = doc.root
27
- @encoding = doc.encoding
28
- if doc.root.elements['/feed']
29
- if (e = doc.root.elements['/feed/title']) && e.text
30
- @title = e.text
31
- end
32
- if (e = doc.root.elements['/feed/link'])
33
- @link = e.attribute('href').value
34
- end
35
- if (e = doc.root.elements['/feed/startIndex']) && e.text
36
- @startindex = e.text
37
- end
38
- if (e = doc.root.elements['/feed/itemsPerPage']) && e.text
39
- @itemsperpage = e.text
40
- end
41
- if (e = doc.root.elements['/feed/totalResults']) && e.text
42
- @totalresults = e.text
43
- end
23
+ @xml = Nokogiri::XML(str)
24
+ @encoding = @xml.encoding
25
+ if @xml.at('/xmlns:feed')
26
+ @title = @xml.at('/xmlns:feed/xmlns:title').text
27
+ @link = @xml.at('/xmlns:feed/xmlns:link')['href']
28
+ @startindex = @xml.at('/xmlns:feed/xmlns:startIndex').text
29
+ @itemsperpage = @xml.at('/xmlns:feed/xmlns:itemsPerPage').text
30
+ @totalresults = @xml.at('/xmlns:feed/xmlns:totalResults').text
44
31
  # Facets
45
- doc.root.each_element_with_attribute('role', 'subset') do |f|
46
- @facets << Base::Facet::new(f, self)
32
+ @xml.xpath('/xmlns:feed/xmlns:Query[@role="subset"]').each do |f|
33
+ @facets << Base::Facet::new(f)
47
34
  end
48
35
  # Entries
49
- doc.root.each_element('/feed/entry') do |e|
50
- @entries << Entry::new(e, self)
36
+ @xml.xpath('/xmlns:feed/xmlns:entry').each do |e|
37
+ @entries << Entry::new(e)
51
38
  end
52
39
  else
53
40
  raise LetsShopMapper::Error::UnknownFeedTypeException::new
@@ -3,22 +3,21 @@ module LetsShopMapper
3
3
  module Tree
4
4
  class Tree
5
5
  attr_reader :categories
6
-
7
6
  attr_reader :xml
8
7
 
9
8
  def initialize(str = nil)
10
9
  parse(str) if str
11
10
  end
11
+
12
12
  def parse(str)
13
- doc = REXML::Document.new(str)
14
- @xml = doc.root
15
- if doc.root.elements['/categories']
16
- doc.root.each_element('/categories/category') do |c|
13
+ @xml = Nokogiri::XML(str)
14
+ if @xml.at('/categories')
15
+ @xml.xpath('/categories/category').each do |c|
17
16
  @categories = Base::Category::new
18
17
  @categories.recurse(c, @categories)
19
18
  end
20
- elsif doc.root.elements['/category']
21
- doc.root.each_element('/category') do |c|
19
+ elsif @xml.at('/category')
20
+ @xml.xpath('/category').each do |c|
22
21
  @categories = Base::Category::new
23
22
  @categories.recurse(c, @categories)
24
23
  end
@@ -26,6 +25,7 @@ module LetsShopMapper
26
25
  raise LetsShopMapper::Error::UnknownFeedTypeException::new
27
26
  end
28
27
  end
28
+
29
29
  def to_s(localtime = true)
30
30
  s = @categories.to_s(localtime)
31
31
  end
@@ -1,9 +1,9 @@
1
1
  module LetsShopMapper
2
2
  module Version
3
- MAJOR = 0
4
- MINOR = 9
3
+ MAJOR = 1
4
+ MINOR = 0
5
5
  TINY = 0
6
- BUILD = "beta"
6
+ BUILD = ""
7
7
  STRING = [MAJOR, MINOR, TINY, BUILD].join('.')
8
8
  end
9
9
  end
@@ -111,6 +111,13 @@ module LetsShopMapper
111
111
  assert_equal "11", lshopTree.categories.children[0].children[0].children[4].id.split('-')[1]
112
112
  end
113
113
  end
114
+ def test_tree_perf
115
+ config = YAML.load_file('test/letsshop.yml')['development']
116
+ lshop = LetsShopMapper::Connection::Base::new(config["server"], config["key"])
117
+ tstart = Time.now.to_f
118
+ lshop.get_tree()
119
+ puts "Time elapsed: #{Time.now.to_f-tstart}"
120
+ end
114
121
  def test_tree
115
122
  config = YAML.load_file('test/letsshop.yml')['development']
116
123
  lshop = LetsShopMapper::Connection::Base::new(config["server"], config["key"])
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: -1139874821
5
- prerelease: true
4
+ hash: 23
5
+ prerelease: false
6
6
  segments:
7
+ - 1
7
8
  - 0
8
- - 9
9
- - 0beta
10
- version: 0.9.0beta
9
+ - 0
10
+ version: 1.0.0
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-10 00:00:00 +02:00
18
+ date: 2010-08-23 00:00:00 +02:00
19
19
  default_executable:
20
20
  dependencies: []
21
21
 
@@ -71,14 +71,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
71
71
  required_rubygems_version: !ruby/object:Gem::Requirement
72
72
  none: false
73
73
  requirements:
74
- - - ">"
74
+ - - ">="
75
75
  - !ruby/object:Gem::Version
76
- hash: 25
76
+ hash: 3
77
77
  segments:
78
- - 1
79
- - 3
80
- - 1
81
- version: 1.3.1
78
+ - 0
79
+ version: "0"
82
80
  requirements: []
83
81
 
84
82
  rubyforge_project: letsshop_mapper