Class: Rubyhexagon::Post
- Inherits:
-
Object
- Object
- Rubyhexagon::Post
- Defined in:
- lib/rubyhexagon/post.rb,
lib/rubyhexagon/api/post.rb,
lib/rubyhexagon/post/flag.rb,
lib/rubyhexagon/post/image.rb,
lib/rubyhexagon/api/post/flag.rb,
lib/rubyhexagon/post/tag_item.rb,
lib/rubyhexagon/api/post/tag_item.rb
Overview
A class to interact with the e621 web interface.
Defined Under Namespace
Classes: Flag, Image, Preview, Sample, TagItem
Instance Attribute Summary collapse
-
#artists ⇒ Array<E621::Artist>
readonly
in this post.
-
#author ⇒ E621::User
readonly
User object of who uploaded this post.
-
#children ⇒ Array<E621::Post>
readonly
Array of child posts.
-
#created_at ⇒ Time
readonly
Creation time of post.
-
#delreason ⇒ String|NilClass
readonly
Reason for deletion, if deleted.
-
#description ⇒ String
readonly
Description that’s associated with this post.
-
#fav_count ⇒ Integer
readonly
Number of people, who favorited this post.
-
#id ⇒ Integer
readonly
Id of post information.
-
#image ⇒ E621::Image
readonly
File content of this post.
-
#md5 ⇒ String
readonly
MD5 checksum associated with this post.
- #parent ⇒ E621:post, NilClass readonly
-
#preview ⇒ E621::Preview
readonly
Preview data in E621::Preview format.
-
#rating ⇒ Symbol
readonly
Rating of this post.
-
#sample ⇒ E621::Sample
readonly
Sample data in E621::Sample format.
-
#score ⇒ Integer
readonly
Vote score this post holds.
-
#sources ⇒ Array<String>
readonly
Array of sources.
-
#status ⇒ Symbol
readonly
Status of post, can be :active, :flagged, :pending or :deleted.
-
#tags ⇒ Array<E621::Tag>
readonly
Tags of this post.
Class Method Summary collapse
- .deleted(query) ⇒ Object
- .list(query) ⇒ Object
- .popular_by(period) ⇒ Object
-
.show(post) ⇒ E621::Post
Fetch data for post.
- .tags(post) ⇒ Object
Instance Method Summary collapse
-
#==(other) ⇒ TrueClass, FalseClass
Comparison method for posts.
-
#children? ⇒ TrueClass|FalseClass
Show if post has children.
-
#comments? ⇒ TrueClass|FalseClass
Show if post has comments or not.
- #download(which) ⇒ Object
-
#initialize(post) ⇒ Object
constructor
Initializer for Post.
- #notes ⇒ Object
-
#notes? ⇒ TrueClass, FalseClass
Has post notes?.
-
#parent? ⇒ TrueClass|FalseClass
Show if post has a parent.
- #show ⇒ Object
-
#test(test_var = nil) ⇒ TrueClass, FalseClass
(also: #active?, #flagged?, #pending?, #deleted?, #safe?, #questionable?, #explicit?)
Test status with an optional parameter.
Constructor Details
#initialize(post) ⇒ Object
Initializer for Post.
92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 |
# File 'lib/rubyhexagon/post.rb', line 92 def initialize(post) raise ArgumentError, "#{post.class} is not a Hash" unless post.is_a?(Hash) post[:id] = post[:id].to_i id = post[:id] raise InvalidIDError, "ID out of range: #{id}" unless id.positive? post.each do |k, v| if %i[rating created_at status sources parent_id children description artist tags].include?(k) __send__("setup_#{k}".to_sym, v) elsif %i[id description score fav_count md5 has_comments has_children delreason has_notes].include?(k) instance_variable_set("@#{k}".to_sym, v) end end (post) setup_files(post) end |
Instance Attribute Details
#artists ⇒ Array<E621::Artist> (readonly)
in this post
45 46 47 |
# File 'lib/rubyhexagon/post.rb', line 45 def artists @artists end |
#author ⇒ E621::User (readonly)
Returns user object of who uploaded this post.
30 31 32 |
# File 'lib/rubyhexagon/post.rb', line 30 def @author end |
#children ⇒ Array<E621::Post> (readonly)
Returns Array of child posts.
65 66 67 |
# File 'lib/rubyhexagon/post.rb', line 65 def children @children end |
#created_at ⇒ Time (readonly)
Returns creation time of post.
33 34 35 |
# File 'lib/rubyhexagon/post.rb', line 33 def created_at @created_at end |
#delreason ⇒ String|NilClass (readonly)
Returns reason for deletion, if deleted.
80 81 82 |
# File 'lib/rubyhexagon/post.rb', line 80 def delreason @delreason end |
#description ⇒ String (readonly)
Returns description that’s associated with this post.
48 49 50 |
# File 'lib/rubyhexagon/post.rb', line 48 def description @description end |
#fav_count ⇒ Integer (readonly)
Returns number of people, who favorited this post.
51 52 53 |
# File 'lib/rubyhexagon/post.rb', line 51 def fav_count @fav_count end |
#id ⇒ Integer (readonly)
Returns id of post information.
27 28 29 |
# File 'lib/rubyhexagon/post.rb', line 27 def id @id end |
#image ⇒ E621::Image (readonly)
Returns file content of this post.
71 72 73 |
# File 'lib/rubyhexagon/post.rb', line 71 def image @image end |
#md5 ⇒ String (readonly)
Returns MD5 checksum associated with this post.
68 69 70 |
# File 'lib/rubyhexagon/post.rb', line 68 def md5 @md5 end |
#parent ⇒ E621:post, NilClass (readonly)
62 63 64 |
# File 'lib/rubyhexagon/post.rb', line 62 def parent @parent end |
#preview ⇒ E621::Preview (readonly)
Returns preview data in E621::Preview format.
77 78 79 |
# File 'lib/rubyhexagon/post.rb', line 77 def preview @preview end |
#rating ⇒ Symbol (readonly)
Returns rating of this post. Can be one of :safe, :questionable, :explicit.
58 59 60 |
# File 'lib/rubyhexagon/post.rb', line 58 def @rating end |
#sample ⇒ E621::Sample (readonly)
Returns sample data in E621::Sample format.
74 75 76 |
# File 'lib/rubyhexagon/post.rb', line 74 def sample @sample end |
#score ⇒ Integer (readonly)
Returns vote score this post holds.
54 55 56 |
# File 'lib/rubyhexagon/post.rb', line 54 def score @score end |
#sources ⇒ Array<String> (readonly)
Returns array of sources. This can contain URI in string form.
41 42 43 |
# File 'lib/rubyhexagon/post.rb', line 41 def sources @sources end |
#status ⇒ Symbol (readonly)
Returns status of post, can be :active, :flagged, :pending or :deleted.
37 38 39 |
# File 'lib/rubyhexagon/post.rb', line 37 def status @status end |
#tags ⇒ Array<E621::Tag> (readonly)
Returns tags of this post.
83 84 85 |
# File 'lib/rubyhexagon/post.rb', line 83 def @tags end |
Class Method Details
.deleted(query) ⇒ Object
59 60 61 62 63 64 |
# File 'lib/rubyhexagon/api/post.rb', line 59 def self.deleted(query) raise ArgumentError, 'A Hash is required' unless query.is_a?(Hash) E621::API.fetch(:post, :deleted_index, query).map do |post| new(post) end end |
.list(query) ⇒ Object
52 53 54 55 56 57 |
# File 'lib/rubyhexagon/api/post.rb', line 52 def self.list(query) raise ArgumentError, 'A Hash is required' unless query.is_a?(Hash) E621::API.fetch(:post, :index, query).map do |post| new(post) end end |
.popular_by(period) ⇒ Object
66 67 68 69 70 71 72 73 |
# File 'lib/rubyhexagon/api/post.rb', line 66 def self.popular_by(period) unless %i[day week month].include?(period) raise ArgumentError, 'Period must be day, week or month' end E621::API.fetch(:post, "popular_by_#{period}".to_sym, {}).map do |post| new(post) end end |
.show(post) ⇒ E621::Post
Fetch data for post
32 33 34 35 36 37 38 39 |
# File 'lib/rubyhexagon/api/post.rb', line 32 def self.show(post) unless (post.is_a?(Hash) && post[:id].is_a?(Integer)) || post.is_a?(E621::Post) raise ArgumentError, 'A Hash or post data object are required' end id = post.is_a?(Hash) ? post[:id] : post.id new(E621::API.fetch(:post, :show, id: id)) end |
.tags(post) ⇒ Object
41 42 43 44 45 46 47 48 49 50 |
# File 'lib/rubyhexagon/api/post.rb', line 41 def self.(post) unless (post.is_a?(Hash) && post[:id].is_a?(Integer)) || post.is_a?(E621::Post) raise ArgumentError, 'A Hash or post data object are required' end id = post.is_a?(Hash) ? post[:id] : post.id E621::API.fetch(:post, :tags, id: id).map do |t| E621::Tag.new(t) end end |
Instance Method Details
#==(other) ⇒ TrueClass, FalseClass
Comparison method for posts
166 167 168 |
# File 'lib/rubyhexagon/post.rb', line 166 def ==(other) other.is_a?(Post) && @id == other.id end |
#children? ⇒ TrueClass|FalseClass
Show if post has children
156 157 158 159 |
# File 'lib/rubyhexagon/post.rb', line 156 def children? return false if @has_children.nil? @has_children end |
#comments? ⇒ TrueClass|FalseClass
Show if post has comments or not
137 138 139 140 |
# File 'lib/rubyhexagon/post.rb', line 137 def comments? return false if @has_comments.nil? @has_comments end |
#download(which) ⇒ Object
79 80 81 82 83 84 |
# File 'lib/rubyhexagon/api/post.rb', line 79 def download(which) unless %i[image preview sample].include?(which) raise ArgumentError, 'Unsupported doanload' end E621::API.download(__send__(which).url) end |
#notes ⇒ Object
86 87 88 89 90 |
# File 'lib/rubyhexagon/api/post.rb', line 86 def notes E621::API.fetch(:note, :index, post_id: @id).map do |n| E621::Note.new(n) end end |
#notes? ⇒ TrueClass, FalseClass
Has post notes?
175 176 177 |
# File 'lib/rubyhexagon/post.rb', line 175 def notes? @has_notes end |
#parent? ⇒ TrueClass|FalseClass
Show if post has a parent
147 148 149 |
# File 'lib/rubyhexagon/post.rb', line 147 def parent? !@parent.nil? end |
#show ⇒ Object
75 76 77 |
# File 'lib/rubyhexagon/api/post.rb', line 75 def show E621::Post.new(E621::API.fetch(:post, :show, id: @id)) end |
#test(test_var = nil) ⇒ TrueClass, FalseClass Also known as: active?, flagged?, pending?, deleted?, safe?, questionable?, explicit?
Test status with an optional parameter. This is more meant to be used by alias methods
119 120 121 122 123 |
# File 'lib/rubyhexagon/post.rb', line 119 def test(test_var = nil) test_var ||= __callee__.to_s.sub(/\?/, '').to_sym test_ar = %i[safe questionable explicit] test_ar.include?(test_var) ? @rating == test_var : @status == test_var end |