Class: E621::Post

Inherits:
Object
  • Object
show all
Defined in:
lib/rubyhexagon/post.rb

Overview

This class holds post information, fetched from e621, and gives access in a more Ruby like manner.

Author:

  • Maxine Michalski

Since:

  • 1.0.0

Direct Known Subclasses

DeletedPost

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(id) ⇒ Object

Initializer for Post.

Parameters:

  • id (Integer)

    post id on e621

Author:

  • Maxine Michalski

Since:

  • 1.0.0



87
88
89
90
91
92
93
# File 'lib/rubyhexagon/post.rb', line 87

def initialize(id)
  id = id.to_i
  unless id.is_a?(Integer) && id > 0
    raise InvalidIDError, "ID out of range: #{id}"
  end
  @id = id
end

Instance Attribute Details

#artistsArray<Artist> (readonly)

Returns array of artists, that work on the image in this post.

Returns:

  • (Array<Artist>)

    array of artists, that work on the image in this post

Since:

  • 1.0.0



43
44
45
# File 'lib/rubyhexagon/post.rb', line 43

def artists
  @artists
end

#authorUser (readonly)

Returns user object of who uploaded this post.

Returns:

  • (User)

    user object of who uploaded this post

Since:

  • 1.0.0



28
29
30
# File 'lib/rubyhexagon/post.rb', line 28

def author
  @author
end

#childrenArray<Post> (readonly)

Returns Array of child posts.

Returns:

  • (Array<Post>)

    Array of child posts

Since:

  • 1.0.0



63
64
65
# File 'lib/rubyhexagon/post.rb', line 63

def children
  @children
end

#created_atTime (readonly)

Returns creation time of post.

Returns:

  • (Time)

    creation time of post

Since:

  • 1.0.0



31
32
33
# File 'lib/rubyhexagon/post.rb', line 31

def created_at
  @created_at
end

#descriptionString (readonly)

Returns description that's associated with this post.

Returns:

  • (String)

    description that's associated with this post

Since:

  • 1.0.0



46
47
48
# File 'lib/rubyhexagon/post.rb', line 46

def description
  @description
end

#favoritesInteger (readonly)

Returns number of people, who favorited this post.

Returns:

  • (Integer)

    number of people, who favorited this post

Since:

  • 1.0.0



49
50
51
# File 'lib/rubyhexagon/post.rb', line 49

def favorites
  @favorites
end

#idInteger (readonly)

Returns id of post information.

Returns:

  • (Integer)

    id of post information

Since:

  • 1.0.0



25
26
27
# File 'lib/rubyhexagon/post.rb', line 25

def id
  @id
end

#imageE621::Image (readonly)

Returns file content of this post.

Returns:

Since:

  • 1.0.0



69
70
71
# File 'lib/rubyhexagon/post.rb', line 69

def image
  @image
end

#md5String (readonly)

Returns MD5 checksum associated with this post.

Returns:

  • (String)

    MD5 checksum associated with this post

Since:

  • 1.0.0



66
67
68
# File 'lib/rubyhexagon/post.rb', line 66

def md5
  @md5
end

#parentPost, NilClass (readonly)

Returns:

  • (Post)

    parent of this post

  • (NilClass)

Since:

  • 1.0.0



60
61
62
# File 'lib/rubyhexagon/post.rb', line 60

def parent
  @parent
end

#previewE621::Preview (readonly)

Returns preview data in E621::Preview format.

Returns:

Since:

  • 1.0.0



75
76
77
# File 'lib/rubyhexagon/post.rb', line 75

def preview
  @preview
end

#ratingSymbol (readonly)

Returns rating of this post. Can be one of :safe, :questionable, :explicit.

Returns:

  • (Symbol)

    rating of this post. Can be one of :safe, :questionable, :explicit

Since:

  • 1.0.0



56
57
58
# File 'lib/rubyhexagon/post.rb', line 56

def rating
  @rating
end

#sampleE621::Sample (readonly)

Returns sample data in E621::Sample format.

Returns:

Since:

  • 1.0.0



72
73
74
# File 'lib/rubyhexagon/post.rb', line 72

def sample
  @sample
end

#scoreInteger (readonly)

Returns vote score this post holds.

Returns:

  • (Integer)

    vote score this post holds

Since:

  • 1.0.0



52
53
54
# File 'lib/rubyhexagon/post.rb', line 52

def score
  @score
end

#sourcesArray<String> (readonly)

Returns array of sources. This can contain URI in string form.

Returns:

  • (Array<String>)

    array of sources. This can contain URI in string form

Since:

  • 1.0.0



39
40
41
# File 'lib/rubyhexagon/post.rb', line 39

def sources
  @sources
end

#statusSymbol (readonly)

Returns status of post, can be :active, :flagged, :pending or :deleted.

Returns:

  • (Symbol)

    status of post, can be :active, :flagged, :pending or :deleted

Since:

  • 1.0.0



35
36
37
# File 'lib/rubyhexagon/post.rb', line 35

def status
  @status
end

#tag_namesArray<String> (readonly)

Returns tag names only for convenience.

Returns:

  • (Array<String>)

    tag names only for convenience

Since:

  • 1.0.0



78
79
80
# File 'lib/rubyhexagon/post.rb', line 78

def tag_names
  @tag_names
end

Instance Method Details

#==(other) ⇒ TrueClass, FalseClass

Comparison method for posts

Returns:

  • (TrueClass, FalseClass)

Author:

  • Maxine Michalski

Since:

  • 1.0.0



160
161
162
# File 'lib/rubyhexagon/post.rb', line 160

def ==(other)
  other.is_a?(Post) && @id == other.id
end

#show(post = nil) ⇒ Object

Fetch data from e621 to current post id

Parameters:

  • post (Hash) (defaults to: nil)

    post data, if present

Author:

  • Maxine Michalski

Since:

  • 1.0.0



115
116
117
118
119
120
# File 'lib/rubyhexagon/post.rb', line 115

def show(post = nil)
  post = API.new.fetch('post', 'show', id: @id) if post.nil?
  tmp = Post.new(post[:id].to_i)
  tmp.show!(post)
  tmp
end

#show!(post = nil) ⇒ Object

Fetch data from e621 to current post id

Parameters:

  • post (Hash) (defaults to: nil)

    post data, if present

Author:

  • Maxine Michalski

Since:

  • 1.0.0



100
101
102
103
104
105
106
107
108
# File 'lib/rubyhexagon/post.rb', line 100

def show!(post = nil)
  post = API.new.fetch('post', 'show', id: @id) if post.nil?
  @created_at = Time.at(post[:created_at][:s].to_i)
  @status = post[:status].to_sym
  setup_author(post)
  setup_relatives(post)
  setup_file_data(post)
  setup_additional_data(post)
end

#tagsArray<Tag>

Retrieve an Array of this post's tags

Returns:

  • (Array<Tag>)

    array of tags

Author:

  • Maxine Michalski

Since:

  • 1.0.0



127
128
129
130
131
# File 'lib/rubyhexagon/post.rb', line 127

def tags
  API.new.fetch('post', 'tags', id: @id).map do |tag|
    Tag.new(tag[:id]).show(tag)
  end
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

Parameters:

  • test_var (Symbol) (defaults to: nil)

    variable under test

Returns:

  • (TrueClass)
  • (FalseClass)

Author:

  • Maxine Michalski

Since:

  • 1.0.0



142
143
144
145
146
# File 'lib/rubyhexagon/post.rb', line 142

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