rubyhexagon 2.0.1 → 3.0.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -23,53 +23,57 @@ module Rubyhexagon
23
23
  #
24
24
  # @api private
25
25
  # @author Maxine Michalski
26
- # @since 1.0.0
27
- class Image
28
- # Image url
29
- # @return [URI] url of file
26
+ # @since 3.0.0
27
+ class File
28
+ # File url
29
+ # @return [URI] url of file or nil
30
30
  attr_reader :url
31
31
 
32
- # Image file extension
32
+ # File file extension
33
33
  # @return [String] extension of file
34
34
  attr_reader :ext
35
35
 
36
- # Image width
36
+ # File width
37
37
  # @return [Integer] image/video width
38
38
  attr_reader :width
39
39
 
40
- # Image height
40
+ # File height
41
41
  # @return [Integer] image/video height
42
42
  attr_reader :height
43
43
 
44
- # Image file size
44
+ # File size
45
45
  # @return [Integer] file size in bytes
46
46
  attr_reader :size
47
47
 
48
+ # File MD5 hash string
49
+ # @return [String] MD5 hash
50
+ attr_reader :md5
51
+
48
52
  # @author Maxine Michalski
49
53
  #
50
- # Initializer for an Image
54
+ # Initializer for an File
51
55
  #
52
- # @param image [Hash] image information
56
+ # @param image [Hash] file information
53
57
  # @option image [String] :url URI location
54
58
  # @option image [String] :ext extension string
55
- # @option image [Integer] :width of image
56
- # @option image [Integer] :height of image
57
- # @option image [Integer] :size of image
59
+ # @option image [Integer] :width of file
60
+ # @option image [Integer] :height of file
61
+ # @option image [Integer] :size of file
62
+ # @option image [String] :md5 of file
58
63
  #
59
64
  # @return the object
60
- def initialize(image)
61
- unless image.is_a?(Hash)
62
- raise ArgumentError, "#{image.class} is not a Hash"
65
+ def initialize(file)
66
+ unless file.is_a?(Hash)
67
+ raise ArgumentError, "#{file.class} is not a Hash"
63
68
  end
64
- if image.keys != %i[url ext width height size]
65
- mis = %i[url ext width height size] - image.keys
66
- raise ArgumentError, "Missing key#{mis.count > 1 ? 's' : ''}: #{mis}"
69
+ unless file.keys.sort == %i[ext height md5 size url width]
70
+ raise ArgumentError, 'Missing keys in file Hash.'
67
71
  end
68
- image.each do |k, v|
69
- if %i[ext width height size].include?(k)
72
+ file.each do |k, v|
73
+ if %i[width height ext size md5].include?(k)
70
74
  instance_variable_set("@#{k}".to_sym, v)
71
75
  elsif k == :url
72
- @url = URI.parse(v)
76
+ @url = v.nil? ? nil : URI.parse(v)
73
77
  end
74
78
  end
75
79
  end
@@ -94,20 +98,21 @@ module Rubyhexagon
94
98
 
95
99
  # @author Maxine Michalski
96
100
  #
97
- # Comparison method to comapre two Image objects (and sub class objects)
101
+ # Comparison method to comapre two File objects (and sub class objects)
98
102
  #
99
103
  # @example Compare two notes, that are unequal
100
104
  # Note.new(id: 1) == Note.new(id: 2) #=> false
101
105
  # @return [TrueClass, FalseClass]
102
106
  def ==(other)
103
- other.is_a?(Image) && @url == other.url && @size == other.size
107
+ other.is_a?(File) && @md5 == other.md5 && @url == other.url &&
108
+ @size == other.size
104
109
  end
105
110
 
106
111
  # @author Maxine Michalski
107
112
  #
108
113
  # Turn object into a hash representation of itself
109
114
  #
110
- # @example Turn an Image into a Hash
115
+ # @example Turn an File into a Hash
111
116
  # Note.new(id: 1).to_hash #=> { id: 1 }
112
117
  # @return [Hash]
113
118
  def to_hash
@@ -118,19 +123,5 @@ module Rubyhexagon
118
123
  hash
119
124
  end
120
125
  end
121
-
122
- # class for samples, that is just a copy of Image
123
- #
124
- # @api private
125
- # @author Maxine Michalski
126
- # @since 1.0,0
127
- class Sample < Image; end
128
-
129
- # class for previews, that is just a copy of Image
130
- #
131
- # @api private
132
- # @author Maxine Michalski
133
- # @since 1.0,0
134
- class Preview < Image; end
135
126
  end
136
127
  end
@@ -18,26 +18,36 @@
18
18
 
19
19
  module Rubyhexagon
20
20
  class Post
21
- # A class to interact with the e621 web interface.
21
+ # Class for post preview data. This is mostly an abstraction to have data
22
+ # structures in a more Ruby like nature.
22
23
  #
24
+ # @api private
23
25
  # @author Maxine Michalski
24
- # @api public
25
- # @since 2.0.0
26
- class Flag
26
+ # @since 3.0.0
27
+ class Preview < File
27
28
  # @author Maxine Michalski
28
29
  #
29
- # Fetch a list of flags
30
+ # Initializer for an Preview
30
31
  #
31
- # @example Get a list of posts
32
- # E621::Post::Flagi.list(page: 1) #=> Array<E621::Post::Flag>
33
- # @return [Array<E621::Flag>]
34
- # @see https://e621.net/help/show/api#flaghistory
35
- def self.list(query)
36
- unless query.is_a?(Hash)
37
- raise ArgumentError, 'A Hash or Post object is required'
32
+ # @param image [Hash] preview information
33
+ # @option image [String] :url URI location
34
+ # @option image [Integer] :width of preview
35
+ # @option image [Integer] :height of preview
36
+ #
37
+ # @return the object
38
+ def initialize(preview)
39
+ unless preview.is_a?(Hash)
40
+ raise ArgumentError, "#{preview.class} is not a Hash"
41
+ end
42
+ unless preview.keys.sort == %i[height url width]
43
+ raise ArgumentError, 'Missing keys in preview Hash.'
38
44
  end
39
- E621::API.fetch(:post_flag_history, :index, query).map do |note|
40
- new(note)
45
+ preview.each do |k, v|
46
+ if %i[width height].include?(k)
47
+ instance_variable_set("@#{k}".to_sym, v)
48
+ elsif k == :url
49
+ @url = v.nil? ? nil : URI.parse(v)
50
+ end
41
51
  end
42
52
  end
43
53
  end
@@ -0,0 +1,65 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Copyright 2014-2018, 2020 Maxine Michalski <maxine@furfind.net>
4
+ #
5
+ # This file is part of rubyhexagon.
6
+ #
7
+ # rubyhexagon is free software: you can redistribute it and/or modify
8
+ # it under the terms of the GNU General Public License as published by
9
+ # the Free Software Foundation, either version 3 of the License, or
10
+ # (at your option) any later version.
11
+ #
12
+ # rubyhexagon is distributed in the hope that it will be useful,
13
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
14
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15
+ # GNU General Public License for more details.
16
+ # You should have received a copy of the GNU General Public License
17
+ # along with rubyhexagon. If not, see <http://www.gnu.org/licenses/>.
18
+
19
+ module Rubyhexagon
20
+ class Post
21
+ # Class for post preview data. This is mostly an abstraction to have data
22
+ # structures in a more Ruby like nature.
23
+ #
24
+ # @api private
25
+ # @author Maxine Michalski
26
+ # @since 3.0.0
27
+ class Sample < File
28
+ # @author Maxine Michalski
29
+ #
30
+ # Initializer for an Sample
31
+ #
32
+ # @param image [Hash] preview information
33
+ # @option image [String] :url URI location
34
+ # @option image [Integer] :width of sample
35
+ # @option image [Integer] :height of sample
36
+ # @option image [TrueClass|FalseClass] :has
37
+ #
38
+ # @return the object
39
+ def initialize(sample)
40
+ unless sample.is_a?(Hash)
41
+ raise ArgumentError, "#{sample.class} is not a Hash"
42
+ end
43
+ unless sample.keys.sort == %i[has height url width]
44
+ raise ArgumentError, 'Missing keys in sample Hash.'
45
+ end
46
+ sample.each do |k, v|
47
+ if %i[width height has].include?(k)
48
+ instance_variable_set("@#{k}".to_sym, v)
49
+ elsif k == :url
50
+ @url = v.nil? ? nil : URI.parse(v)
51
+ end
52
+ end
53
+ end
54
+
55
+ # @author Maxine Michalski
56
+ #
57
+ # Show if post has a sample or not.
58
+ #
59
+ # @return [TrueClass|FalseClass]
60
+ def exist?
61
+ @has
62
+ end
63
+ end
64
+ end
65
+ end
@@ -18,28 +18,43 @@
18
18
 
19
19
  module Rubyhexagon
20
20
  class Post
21
- # A class to interact with the e621 web interface.
21
+ # Class for post file data. This is mostly an abstraction to have data
22
+ # structures in a more Ruby like nature.
22
23
  #
24
+ # @api private
23
25
  # @author Maxine Michalski
24
- # @api public
25
- # @since 2.0.0
26
- class TagItem
27
- # @author Maxine Michalski
28
- #
29
- # Fetch a list of tag items
30
- #
31
- # @example Get a list of posts
32
- # E621::Post::TagItem.list(page: 1) #=> Array<E621::Post::TagItem>
33
- # @return [Array<E621::TagItem>]
34
- # @see https://e621.net/help/show/api#taghistory
35
- def self.list(query)
36
- unless query.is_a?(Hash)
37
- raise ArgumentError, 'A Hash or Post object is required'
26
+ # @since 3.0.0
27
+ class Score
28
+
29
+ attr_reader :up
30
+ attr_reader :down
31
+ attr_reader :total
32
+
33
+ def initialize(score)
34
+ raise ArgumentError, 'Hash required' unless score.is_a?(Hash)
35
+ unless score.keys.sort == %i[down total up]
36
+ raise ArgumentError, 'Missing Hash keys.'
38
37
  end
39
- E621::API.fetch(:post_tag_history, :index, query).map do |note|
40
- new(note)
38
+ score.each do |k, v|
39
+ instance_variable_set("@#{k}".to_sym, v)
41
40
  end
42
41
  end
42
+
43
+ def to_i
44
+ @total
45
+ end
46
+
47
+ def positive?
48
+ @total.positive?
49
+ end
50
+
51
+ def negative?
52
+ @total.negative?
53
+ end
54
+
55
+ def zero?
56
+ @total.zero?
57
+ end
43
58
  end
44
59
  end
45
60
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rubyhexagon
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.1
4
+ version: 3.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Maxine Michalski
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-01-13 00:00:00.000000000 Z
11
+ date: 2020-04-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: json
@@ -32,31 +32,13 @@ extra_rdoc_files: []
32
32
  files:
33
33
  - lib/rubyhexagon.rb
34
34
  - lib/rubyhexagon/api.rb
35
- - lib/rubyhexagon/api/artist.rb
36
- - lib/rubyhexagon/api/pool.rb
37
35
  - lib/rubyhexagon/api/post.rb
38
- - lib/rubyhexagon/api/post/flag.rb
39
- - lib/rubyhexagon/api/post/note.rb
40
- - lib/rubyhexagon/api/post/tag_item.rb
41
- - lib/rubyhexagon/api/tag.rb
42
- - lib/rubyhexagon/api/tag/alias.rb
43
- - lib/rubyhexagon/api/tag/implication.rb
44
- - lib/rubyhexagon/api/user.rb
45
- - lib/rubyhexagon/artist.rb
46
36
  - lib/rubyhexagon/error.rb
47
- - lib/rubyhexagon/pool.rb
48
37
  - lib/rubyhexagon/post.rb
49
- - lib/rubyhexagon/post/flag.rb
50
- - lib/rubyhexagon/post/image.rb
51
- - lib/rubyhexagon/post/note.rb
52
- - lib/rubyhexagon/post/tag_item.rb
53
- - lib/rubyhexagon/search/posts.rb
54
- - lib/rubyhexagon/tag.rb
55
- - lib/rubyhexagon/tag/alias.rb
56
- - lib/rubyhexagon/tag/implication.rb
57
- - lib/rubyhexagon/tag/type.rb
58
- - lib/rubyhexagon/user.rb
59
- - lib/rubyhexagon/user/level.rb
38
+ - lib/rubyhexagon/post/file.rb
39
+ - lib/rubyhexagon/post/preview.rb
40
+ - lib/rubyhexagon/post/sample.rb
41
+ - lib/rubyhexagon/post/score.rb
60
42
  homepage: https://github.com/maxine-red/rubyhexagon
61
43
  licenses:
62
44
  - GPL-3.0
@@ -76,8 +58,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
76
58
  - !ruby/object:Gem::Version
77
59
  version: '0'
78
60
  requirements: []
79
- rubyforge_project:
80
- rubygems_version: 2.5.2.1
61
+ rubygems_version: 3.1.2
81
62
  signing_key:
82
63
  specification_version: 4
83
64
  summary: Rubyhexagon, Ruby bindings for e621.
@@ -1,42 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- # Copyright 2014-2018, 2020 Maxine Michalski <maxine@furfind.net>
4
- #
5
- # This file is part of rubyhexagon.
6
- #
7
- # rubyhexagon is free software: you can redistribute it and/or modify
8
- # it under the terms of the GNU General Public License as published by
9
- # the Free Software Foundation, either version 3 of the License, or
10
- # (at your option) any later version.
11
- #
12
- # rubyhexagon is distributed in the hope that it will be useful,
13
- # but WITHOUT ANY WARRANTY; without even the implied warranty of
14
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15
- # GNU General Public License for more details.
16
- # You should have received a copy of the GNU General Public License
17
- # along with rubyhexagon. If not, see <http://www.gnu.org/licenses/>.
18
-
19
- module Rubyhexagon
20
- # A class to interact with the e621 web interface.
21
- #
22
- # @author Maxine Michalski
23
- # @api public
24
- # @since 2.0.0
25
- class Artist
26
- # @author Maxine Michalski
27
- #
28
- # Fetch a list of artists
29
- #
30
- # @param query [Hsah] Query for fetching artist data
31
- # @example Get list of artists
32
- # E621::Artist.list(name: 'artist') #=> Array<E621::Artist>
33
- # @return [Array<E621::Artist>]
34
- # @see https://e621.net/help/show/api#artists
35
- def self.list(query)
36
- raise ArgumentError, 'A Hash is required' unless query.is_a?(Hash)
37
- E621::API.fetch(:artist, :index, query).map do |artist|
38
- new(artist)
39
- end
40
- end
41
- end
42
- end
@@ -1,80 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- # Copyright 2014-2018, 2020 Maxine Michalski <maxine@furfind.net>
4
- #
5
- # This file is part of rubyhexagon.
6
- #
7
- # rubyhexagon is free software: you can redistribute it and/or modify
8
- # it under the terms of the GNU General Public License as published by
9
- # the Free Software Foundation, either version 3 of the License, or
10
- # (at your option) any later version.
11
- #
12
- # rubyhexagon is distributed in the hope that it will be useful,
13
- # but WITHOUT ANY WARRANTY; without even the implied warranty of
14
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15
- # GNU General Public License for more details.
16
- # You should have received a copy of the GNU General Public License
17
- # along with rubyhexagon. If not, see <http://www.gnu.org/licenses/>.
18
-
19
- module Rubyhexagon
20
- # A class to interact with the e621 web interface.
21
- #
22
- # @author Maxine Michalski
23
- # @api public
24
- # @since 1.4.0
25
- class Pool
26
- # @author Maxine Michalski
27
- #
28
- # Fetch pool information
29
- #
30
- # @param pool [E621::Pool|Hash] A pool or hash to fetch data for
31
- # @param page [Hash]
32
- # @example Get pool information
33
- # E621::Pool.show(id: 1, page: 1) #=> E621::Pool
34
- # @return [E621::Pool]
35
- # @see https://e621.net/help/show/api#pools
36
- def self.show(pool, page = nil)
37
- unless (pool.is_a?(Hash) && pool[:id].is_a?(Integer)) ||
38
- pool.is_a?(E621::Pool)
39
- raise ArgumentError, 'A Hash or pool object are required'
40
- end
41
- id = pool.is_a?(Hash) ? pool[:id] : pool.id
42
- page = page.nil? ? pool[:page] : page[:page]
43
- E621::API.fetch(:pool, :show, id: id, page: page)[:posts].map do |post|
44
- E621::Post.new(post)
45
- end
46
- end
47
-
48
- # @author Maxine Michalski
49
- #
50
- # Fetch a list of pools
51
- #
52
- # @param query [Hsah] Query for fetching pool data
53
- # @example Get list of pools
54
- # E621::Pool.list(name: 'moo', page: 1) #=> Array<E621::Pool>
55
- # @return [Array<E621::Pool>]
56
- # @see https://e621.net/help/show/api#pools
57
- def self.list(query)
58
- raise ArgumentError, 'A Hash is required' unless query.is_a?(Hash)
59
- E621::API.fetch(:pool, :index, query).map do |pool|
60
- new(pool)
61
- end
62
- end
63
-
64
- # @author Maxine Michalski
65
- #
66
- # Fetch pool information
67
- #
68
- # @param page [Hash]
69
- # @example Get pool information
70
- # poolshow(page: 1) #=> E621::Pool
71
- # @return [E621::Pool]
72
- # @see https://e621.net/help/show/api#pools
73
- def show(page)
74
- page = page[:page]
75
- E621::API.fetch(:pool, :show, id: @id, page: page)[:posts].map do |post|
76
- E621::Post.new(post)
77
- end
78
- end
79
- end
80
- end