ar_book_finder 1.1.0 → 1.1.1

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
@@ -88,7 +88,7 @@ book.author
88
88
  Return publisher data...
89
89
  ```ruby
90
90
  ...
91
- publisher = book.publishers
91
+ publisher = book.publishers[0]
92
92
  publisher.name
93
93
  publisher.isbn
94
94
  ...
@@ -110,8 +110,9 @@ results = ARBookFinder.collection({ 'State Lists' => { 'Indiana' => 'IN Young Ho
110
110
  ### Pagination
111
111
  It's also possible to paginate search results.
112
112
  ```ruby
113
- # Retrieve results for page 2 and sort on title
113
+ # Retrieve results for page 2
114
114
  results = ARBookFinder.search('harry potter', 2)
115
+ results.current_page # should == 2
115
116
  ```
116
117
 
117
118
  ## Contributing
@@ -1,9 +1,13 @@
1
1
  module ARBookFinder
2
2
  class SearchResultsParser
3
+ SEARCH_ROOT_XPATH = '//*[@id="ctl00_ContentPlaceHolder1_pnlSearchFormPanel"]'
3
4
  SEARCH_PAGE_COUNT_XPATH = '//*[@id="ctl00_ContentPlaceHolder1_ucSeachResults_lblResultsSummaryTop"]'
5
+ SEARCH_RESULTS_COUNT = '//*[@id="ctl00_ContentPlaceHolder1_ucSearchResultsHeader_lblResultSummary"]'
4
6
  SEARCH_RESULTS_XPATH = '//*[@id="ctl00_ContentPlaceHolder1_ucSeachResults_lblQuizzes"]/table'
5
7
 
8
+ COLLECTION_ROOT_XPATH = '//*[@id="ctl00_ContentPlaceHolder1_ucCollection_pnlSearchFormPanel"]'
6
9
  COLLECTION_PAGE_COUNT_XPATH = '//*[@id="ctl00_ContentPlaceHolder1_ucCollection_ucSeachResults_lblResultsSummaryTop"]'
10
+ COLLECTION_RESULTS_COUNT = '//*[@id="ctl00_ContentPlaceHolder1_ucCollection_ucSearchResultsHeader_lblResultSummary"]'
7
11
  COLLECTION_RESULTS_XPATH = '//*[@id="ctl00_ContentPlaceHolder1_ucCollection_ucSeachResults_lblQuizzes"]/table'
8
12
 
9
13
  BOOK_XPATH = 'tbody/tr/td[2]'
@@ -15,28 +19,34 @@ module ARBookFinder
15
19
  def initialize(html, collection = false)
16
20
  @doc = Nokogiri::HTML.parse(html)
17
21
  @xpath_const = collection ? :COLLECTION : :SEARCH
22
+ @root = @doc.xpath(self.class.const_get(:"#{@xpath_const}_ROOT_XPATH"))
18
23
  @books = []
19
24
  end
20
25
 
21
26
  def parse
22
27
  @current_page = parse_current_page.to_i
23
28
  @page_count = parse_page_count.to_i
29
+ @total_books = parse_total_books.to_i
24
30
  @books = parse_results
25
31
  self
26
32
  end
27
33
 
28
34
  private
29
35
  def parse_current_page
30
- @doc.xpath(self.class.const_get(:"#{@xpath_const}_PAGE_COUNT_XPATH")).text.gsub(/Page /, '').gsub(/ of \d+/, '')
36
+ @root.xpath(self.class.const_get(:"#{@xpath_const}_PAGE_COUNT_XPATH")).text.gsub(/Page /, '').gsub(/ of \d+/, '')
31
37
  end
32
38
 
33
39
  def parse_page_count
34
- @doc.xpath(self.class.const_get(:"#{@xpath_const}_PAGE_COUNT_XPATH")).text.gsub(/Page \d+ of /, '')
40
+ @root.xpath(self.class.const_get(:"#{@xpath_const}_PAGE_COUNT_XPATH")).text.gsub(/Page \d+ of /, '')
41
+ end
42
+
43
+ def parse_total_books
44
+ @root.xpath(self.class.const_get(:"#{@xpath_const}_RESULTS_COUNT")).text.gsub(/Titles \d+ - \d+ of /, '')
35
45
  end
36
46
 
37
47
  def parse_results
38
48
  books = []
39
- @doc.xpath(self.class.const_get(:"#{@xpath_const}_RESULTS_XPATH")).each_with_index do |result, i|
49
+ @root.xpath(self.class.const_get(:"#{@xpath_const}_RESULTS_XPATH")).each_with_index do |result, i|
40
50
  next if i.odd?
41
51
  book = result.xpath(BOOK_XPATH)
42
52
  book_detail = book.xpath(BOOK_DETAIL_XPATH)
@@ -1,3 +1,3 @@
1
1
  module ARBookFinder
2
- VERSION = '1.1.0'
2
+ VERSION = '1.1.1'
3
3
  end
@@ -16,6 +16,11 @@ describe 'Collection' do
16
16
  results.current_page.should == 2
17
17
  end
18
18
 
19
+ it 'should return total book count' do
20
+ results = ARBookFinder.collection({ 'Awards' => 'ALA Notable/Best Books' })
21
+ results.total_books.should > 0
22
+ end
23
+
19
24
  it 'should fetch book data' do
20
25
  results = ARBookFinder.collection('Awards' => 'ALA Notable/Best Books')
21
26
  book = results.books[0]
@@ -11,6 +11,11 @@ describe 'Search' do
11
11
  results.current_page.should == 2
12
12
  end
13
13
 
14
+ it 'should return total book count' do
15
+ results = ARBookFinder.search('harry potter')
16
+ results.total_books.should > 0
17
+ end
18
+
14
19
  it 'should fetch book data' do
15
20
  results = ARBookFinder.search('harry potter')
16
21
  book = results.books[0]
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: ar_book_finder
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 1.1.0
5
+ version: 1.1.1
6
6
  platform: ruby
7
7
  authors:
8
8
  - Anthony Smith