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 | 
| 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 | 
            -
                  @ | 
| 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 | 
            -
                  @ | 
| 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 | 
            -
                  @ | 
| 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)
         | 
| @@ -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]
         |