letsshop_mapper 0.9.0beta → 1.0.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.
@@ -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