Class: Pixiv::SearchResultList

Inherits:
IllustList show all
Defined in:
lib/pixiv/search_result_list.rb

Constant Summary collapse

ILLUSTS_PER_PAGE =
20

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from IllustList

#doc, #illust_hashes, #page_class

Methods included from PageCollection

#page_class, #size

Methods inherited from Page

#bind, #doc, #fetched?, #force, lazy_new

Constructor Details

#initialize(doc_or_doc_creator, attrs = {}) ⇒ SearchResultList

Returns a new instance of SearchResultList.

Raises:

  • (ArgumentError)


56
57
58
59
60
# File 'lib/pixiv/search_result_list.rb', line 56

def initialize(doc_or_doc_creator, attrs = {})
  raise ArgumentError, "`attrs[:query]' must be present" unless attrs[:query]
  raise ArgumentError, "`attrs[:search_opts]' must be present" unless attrs[:search_opts]
  super
end

Instance Attribute Details

#last?Object (readonly)

Lazily returns last?



68
69
70
# File 'lib/pixiv/search_result_list.rb', line 68

lazy_attr_reader(:last?) {
  doc.at('//nav[@class="pager"]//a[@rel="next"]').nil?
}

#pageObject (readonly)

Lazily returns page



65
66
67
# File 'lib/pixiv/search_result_list.rb', line 65

lazy_attr_reader(:page) {
  at!('.pager li.current').inner_text.to_i
}

#page_hashesObject (readonly)

Lazily returns page_hashes



74
75
76
# File 'lib/pixiv/search_result_list.rb', line 74

lazy_attr_reader(:page_hashes) {
  search!('#search-result li.image').map {|n| hash_from_list_item(n) }
}

#queryObject (readonly)

Returns the value of attribute query.



62
63
64
# File 'lib/pixiv/search_result_list.rb', line 62

def query
  @query
end

#search_optsObject (readonly)

Returns the value of attribute search_opts.



63
64
65
# File 'lib/pixiv/search_result_list.rb', line 63

def search_opts
  @search_opts
end

#total_countObject (readonly)

Lazily returns total_count



71
72
73
# File 'lib/pixiv/search_result_list.rb', line 71

lazy_attr_reader(:total_count) {
  at!('.info > .count').inner_text.to_i
}

Class Method Details

.url(query, opts = {}) ⇒ Object



51
52
53
54
# File 'lib/pixiv/search_result_list.rb', line 51

def self.url(query, opts = {})
  word = URI::encode_www_form({word: query})
  "#{ROOT_URL}/search.php?s_mode=s_tag&#{word}&p=#{opts[:page] || 1}" # FIXME
end

Instance Method Details

#first?Boolean

Returns:

  • (Boolean)


82
83
84
# File 'lib/pixiv/search_result_list.rb', line 82

def first?
  page == 1
end

#max_sizeObject



108
109
110
# File 'lib/pixiv/search_result_list.rb', line 108

def max_size
  ILLUSTS_PER_PAGE
end

#next_attrsObject



100
101
102
# File 'lib/pixiv/search_result_list.rb', line 100

def next_attrs
  {query: query, search_opts: search_opts, page: page + 1}
end

#next_urlObject



86
87
88
89
90
91
# File 'lib/pixiv/search_result_list.rb', line 86

def next_url
  return if last?
  opts = search_opts.dup
  opts[:page] = page + 1
  self.class.url(query, opts)
end

#prev_attrsObject



104
105
106
# File 'lib/pixiv/search_result_list.rb', line 104

def prev_attrs
  {query: query, search_opts: search_opts, page: page - 1}
end

#prev_urlObject



93
94
95
96
97
98
# File 'lib/pixiv/search_result_list.rb', line 93

def prev_url
  return if first?
  opts = query_opts.dup
  opts[:page] = page - 1
  self.class.url(query, opts)
end

#urlObject



78
79
80
# File 'lib/pixiv/search_result_list.rb', line 78

def url
  self.class.url(query, search_opts)
end