rubyhexagon 0.4.3 → 1.0.0
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.
- checksums.yaml +5 -5
- data/lib/rubyhexagon.rb +36 -28
- data/lib/rubyhexagon/artist.rb +92 -0
- data/lib/rubyhexagon/error.rb +21 -0
- data/lib/rubyhexagon/helper/api.rb +93 -0
- data/lib/rubyhexagon/image.rb +112 -0
- data/lib/rubyhexagon/level.rb +56 -0
- data/lib/rubyhexagon/post.rb +256 -0
- data/lib/rubyhexagon/search/posts.rb +99 -0
- data/lib/rubyhexagon/search/tags.rb +65 -0
- data/lib/rubyhexagon/tag.rb +89 -0
- data/lib/rubyhexagon/type.rb +70 -0
- data/lib/rubyhexagon/user.rb +78 -0
- metadata +34 -21
- data/lib/api.rb +0 -79
- data/lib/container.rb +0 -45
- data/lib/pool.rb +0 -71
- data/lib/post.rb +0 -50
- data/lib/search.rb +0 -100
- data/lib/set.rb +0 -59
- data/lib/standard/error.rb +0 -24
- data/lib/standard/hash.rb +0 -29
- data/lib/standard/http.rb +0 -92
- data/lib/standard/int.rb +0 -36
- data/lib/standard/string.rb +0 -91
- data/lib/standard/time.rb +0 -30
@@ -0,0 +1,70 @@
|
|
1
|
+
# Copyright 2014-2018 Maxine Michalski <maxine@furfind.net>
|
2
|
+
#
|
3
|
+
# This file is part of rubyhexagon.
|
4
|
+
#
|
5
|
+
# rubyhexagon is free software: you can redistribute it and/or modify
|
6
|
+
# it under the terms of the GNU General Public License as published by
|
7
|
+
# the Free Software Foundation, either version 3 of the License, or
|
8
|
+
# (at your option) any later version.
|
9
|
+
#
|
10
|
+
# rubyhexagon is distributed in the hope that it will be useful,
|
11
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
12
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
13
|
+
# GNU General Public License for more details.
|
14
|
+
# You should have received a copy of the GNU General Public License
|
15
|
+
# along with rubyhexagon. If not, see <http://www.gnu.org/licenses/>.
|
16
|
+
|
17
|
+
module E621
|
18
|
+
# Class to hold type information.
|
19
|
+
#
|
20
|
+
# @api private
|
21
|
+
# @author Maxine Michalski
|
22
|
+
# @since 1.0.0
|
23
|
+
class Type
|
24
|
+
# @return [Integer] id of type
|
25
|
+
attr_reader :id
|
26
|
+
|
27
|
+
# @return [String] name of type
|
28
|
+
attr_reader :name
|
29
|
+
|
30
|
+
# @author Maxine Michalski
|
31
|
+
#
|
32
|
+
# Initializer for Type.
|
33
|
+
#
|
34
|
+
# @raise ArgumentError if type ID is not valid
|
35
|
+
#
|
36
|
+
# @param type [Hash] type data, fetched from e621
|
37
|
+
# @option type [Integer] :id Type ID (can be one of 0, 1, 3, 4 or 5
|
38
|
+
# @option type [
|
39
|
+
#
|
40
|
+
# @return the object
|
41
|
+
def initialize(id, locked)
|
42
|
+
unless [0, 1, 3, 4, 5].include?(id)
|
43
|
+
raise ArgumentError, "Unkown type id: #{id}"
|
44
|
+
end
|
45
|
+
@id = id.to_i
|
46
|
+
@name = [:general, :artist, nil, :copyright, :character, :species][@id]
|
47
|
+
@locked = locked ? true : false
|
48
|
+
end
|
49
|
+
|
50
|
+
# @author Maxine Michalski
|
51
|
+
#
|
52
|
+
# Comparison method for Types, to give a more meaningful comparison.
|
53
|
+
#
|
54
|
+
# @return [TrueClass, FalseClass]
|
55
|
+
def ==(other)
|
56
|
+
other.is_a?(Type) && @id == other.id && @name == other.name &&
|
57
|
+
@locked == other.locked?
|
58
|
+
end
|
59
|
+
|
60
|
+
# @author Maxine Michalski
|
61
|
+
#
|
62
|
+
# Check if this type is locked for the tag who has it assigned.
|
63
|
+
#
|
64
|
+
# @return [TrueClass] tag type is locked
|
65
|
+
# @return [FalseClass] tag type is not locked
|
66
|
+
def locked?
|
67
|
+
@locked
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
@@ -0,0 +1,78 @@
|
|
1
|
+
# Copyright 2014-2018 Maxine Michalski <maxine@furfind.net>
|
2
|
+
#
|
3
|
+
# This file is part of rubyhexagon.
|
4
|
+
#
|
5
|
+
# rubyhexagon is free software: you can redistribute it and/or modify
|
6
|
+
# it under the terms of the GNU General Public License as published by
|
7
|
+
# the Free Software Foundation, either version 3 of the License, or
|
8
|
+
# (at your option) any later version.
|
9
|
+
#
|
10
|
+
# rubyhexagon is distributed in the hope that it will be useful,
|
11
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
12
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
13
|
+
# GNU General Public License for more details.
|
14
|
+
# You should have received a copy of the GNU General Public License
|
15
|
+
# along with rubyhexagon. If not, see <http://www.gnu.org/licenses/>.
|
16
|
+
|
17
|
+
require 'time'
|
18
|
+
|
19
|
+
module E621
|
20
|
+
# Class to hold user information for users on e621.
|
21
|
+
#
|
22
|
+
# @author Maxine Michalski
|
23
|
+
# @since 1.0.0
|
24
|
+
class User
|
25
|
+
# @return [Integer] id of user
|
26
|
+
attr_reader :id
|
27
|
+
|
28
|
+
# @return [String] name of user
|
29
|
+
attr_reader :name
|
30
|
+
|
31
|
+
# @return [Level] level of access, this user holds
|
32
|
+
attr_reader :level
|
33
|
+
|
34
|
+
# @return [Time] registration time of this user
|
35
|
+
attr_reader :created_at
|
36
|
+
|
37
|
+
# @author Maxine Michalski
|
38
|
+
#
|
39
|
+
# Initializer for User.
|
40
|
+
#
|
41
|
+
# @param user [Hash] user data, fetched from e621
|
42
|
+
#
|
43
|
+
# @return the object
|
44
|
+
def initialize(user)
|
45
|
+
@id = user[:id].to_i
|
46
|
+
@name = user[:name]
|
47
|
+
end
|
48
|
+
|
49
|
+
# @author Maxine Michalski
|
50
|
+
#
|
51
|
+
# Fill this object with user data.
|
52
|
+
def show!
|
53
|
+
user = API.new.fetch('user', 'show', id: @id)
|
54
|
+
@level = Level.new(user[:level].to_i)
|
55
|
+
@created_at = Time.parse(user[:created_at])
|
56
|
+
end
|
57
|
+
|
58
|
+
# @author Maxine Michalski
|
59
|
+
#
|
60
|
+
# Returns a filled User object
|
61
|
+
#
|
62
|
+
# @return [User] filled out user object
|
63
|
+
def show
|
64
|
+
user = User.new(id: @id, name: @name)
|
65
|
+
user.show!
|
66
|
+
user
|
67
|
+
end
|
68
|
+
|
69
|
+
# @author Maxine Michalski
|
70
|
+
#
|
71
|
+
# Comparison method for User objects
|
72
|
+
#
|
73
|
+
# @return [TrueClass, FalseClass]
|
74
|
+
def ==(other)
|
75
|
+
other.is_a?(User) && @id == other.id && @name == other.name
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
metadata
CHANGED
@@ -1,34 +1,47 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rubyhexagon
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
|
-
- Maxine
|
7
|
+
- Maxine Michalski
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
12
|
-
dependencies:
|
13
|
-
|
11
|
+
date: 2018-03-25 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: json
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '2.0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '2.0'
|
27
|
+
description: Rubyhexagon provides Ruby bindings for the e621 API.
|
14
28
|
email: maxine@furfind.net
|
15
29
|
executables: []
|
16
30
|
extensions: []
|
17
31
|
extra_rdoc_files: []
|
18
32
|
files:
|
19
|
-
- lib/api.rb
|
20
|
-
- lib/container.rb
|
21
|
-
- lib/pool.rb
|
22
|
-
- lib/post.rb
|
23
33
|
- lib/rubyhexagon.rb
|
24
|
-
- lib/
|
25
|
-
- lib/
|
26
|
-
- lib/
|
27
|
-
- lib/
|
28
|
-
- lib/
|
29
|
-
- lib/
|
30
|
-
- lib/
|
31
|
-
- lib/
|
34
|
+
- lib/rubyhexagon/artist.rb
|
35
|
+
- lib/rubyhexagon/error.rb
|
36
|
+
- lib/rubyhexagon/helper/api.rb
|
37
|
+
- lib/rubyhexagon/image.rb
|
38
|
+
- lib/rubyhexagon/level.rb
|
39
|
+
- lib/rubyhexagon/post.rb
|
40
|
+
- lib/rubyhexagon/search/posts.rb
|
41
|
+
- lib/rubyhexagon/search/tags.rb
|
42
|
+
- lib/rubyhexagon/tag.rb
|
43
|
+
- lib/rubyhexagon/type.rb
|
44
|
+
- lib/rubyhexagon/user.rb
|
32
45
|
homepage: https://github.com/maxine-red/rubyhexagon
|
33
46
|
licenses:
|
34
47
|
- GPL-3.0
|
@@ -39,9 +52,9 @@ require_paths:
|
|
39
52
|
- lib
|
40
53
|
required_ruby_version: !ruby/object:Gem::Requirement
|
41
54
|
requirements:
|
42
|
-
- - "
|
55
|
+
- - "~>"
|
43
56
|
- !ruby/object:Gem::Version
|
44
|
-
version: 1
|
57
|
+
version: '2.1'
|
45
58
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
46
59
|
requirements:
|
47
60
|
- - ">="
|
@@ -49,8 +62,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
49
62
|
version: '0'
|
50
63
|
requirements: []
|
51
64
|
rubyforge_project:
|
52
|
-
rubygems_version: 2.
|
65
|
+
rubygems_version: 2.7.6
|
53
66
|
signing_key:
|
54
67
|
specification_version: 4
|
55
|
-
summary: Rubyhexagon, Ruby bindings for e621
|
68
|
+
summary: Rubyhexagon, Ruby bindings for e621.
|
56
69
|
test_files: []
|
data/lib/api.rb
DELETED
@@ -1,79 +0,0 @@
|
|
1
|
-
=begin
|
2
|
-
Copyright 2014, 2015, 2017 Maxine Michalski <maxine@furfind.net>
|
3
|
-
|
4
|
-
This file is part of rubyhexagon.
|
5
|
-
|
6
|
-
rubyhexagon is free software: you can redistribute it and/or modify
|
7
|
-
it under the terms of the GNU General Public License as published by
|
8
|
-
the Free Software Foundation, either version 3 of the License, or
|
9
|
-
(at your option) any later version.
|
10
|
-
|
11
|
-
rubyhexagon is distributed in the hope that it will be useful,
|
12
|
-
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
13
|
-
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
14
|
-
GNU General Public License for more details.
|
15
|
-
|
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
|
-
=end
|
19
|
-
|
20
|
-
require "standard/http"
|
21
|
-
|
22
|
-
module E621
|
23
|
-
class API
|
24
|
-
def initialize(user=nil,pass=nil)
|
25
|
-
@http = HTTP.new
|
26
|
-
login(user,pass) if !defined? @@login
|
27
|
-
end
|
28
|
-
# A wrapper function to fit into the general theme better.
|
29
|
-
def post_list(*args)
|
30
|
-
post_index(*args)
|
31
|
-
end
|
32
|
-
# Send commands to API and parse all answers, even errors.
|
33
|
-
# Also make it work with POST and GET requests.
|
34
|
-
def method_missing(method,*args)
|
35
|
-
request = request2body(args.first)
|
36
|
-
method = method.to_s.split("_")
|
37
|
-
m = case method[0]
|
38
|
-
when "post" then
|
39
|
-
case method[1]
|
40
|
-
when "show" then :get
|
41
|
-
else :post
|
42
|
-
end
|
43
|
-
else :post
|
44
|
-
end
|
45
|
-
@http.__send__(m,"/#{method.join("/")}.json",request)
|
46
|
-
end
|
47
|
-
private
|
48
|
-
# This helper function provides the functionality of translating Ruby Hashes
|
49
|
-
# into HTTP POST body strings.
|
50
|
-
def request2body(request)
|
51
|
-
query = @@login ? "#@@login&" : String.new
|
52
|
-
request = request.map do |k,v|
|
53
|
-
if v.is_a?(Hash) then
|
54
|
-
raise Argumenterror, "Hashes as request values aren't allowed."
|
55
|
-
elsif v.is_a?(Array) then
|
56
|
-
v = v.join(",")
|
57
|
-
end
|
58
|
-
"#{k}=#{v}"
|
59
|
-
end
|
60
|
-
query += request.join("&")
|
61
|
-
return query
|
62
|
-
end
|
63
|
-
# Perform an API and site login. This function needs to be called once
|
64
|
-
# before any actual API call can be made.
|
65
|
-
def login(user,pass)
|
66
|
-
if user == nil && pass == nil then
|
67
|
-
@@login = nil
|
68
|
-
else
|
69
|
-
request = {name:name,password:pass}
|
70
|
-
body = @http.get("/user/login.json",request)
|
71
|
-
if body.has_key?("success") && (!body["success"] || body["success"] == "failed") then
|
72
|
-
raise AuthentificationError, "Username or password wrong!"
|
73
|
-
else
|
74
|
-
@@login = "login=#{body["name"]}&password_hash=#{body["password_hash"]}"
|
75
|
-
end
|
76
|
-
end
|
77
|
-
end
|
78
|
-
end
|
79
|
-
end
|
data/lib/container.rb
DELETED
@@ -1,45 +0,0 @@
|
|
1
|
-
=begin
|
2
|
-
Copyright 2014, 2015, 2017 Maxine Michalski <maxine@furfind.net>
|
3
|
-
|
4
|
-
This file is part of rubyhexagon.
|
5
|
-
|
6
|
-
rubyhexagon is free software: you can redistribute it and/or modify
|
7
|
-
it under the terms of the GNU General Public License as published by
|
8
|
-
the Free Software Foundation, either version 3 of the License, or
|
9
|
-
(at your option) any later version.
|
10
|
-
|
11
|
-
rubyhexagon is distributed in the hope that it will be useful,
|
12
|
-
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
13
|
-
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
14
|
-
GNU General Public License for more details.
|
15
|
-
|
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
|
-
=end
|
19
|
-
|
20
|
-
module E621
|
21
|
-
class Container
|
22
|
-
def method_missing(method)
|
23
|
-
if instance_variables.include?("@#{method}".to_sym) && method != :api then
|
24
|
-
return instance_variable_get("@#{method}")
|
25
|
-
else
|
26
|
-
raise NoMethodError, "undefined method #{method} for #{self.class}"
|
27
|
-
end
|
28
|
-
end
|
29
|
-
private
|
30
|
-
def set_variables(container)
|
31
|
-
container.each do |k,v|
|
32
|
-
if (k == "created_at" || k == "updated_at") && v.is_a?(Hash) then
|
33
|
-
v = Time.at(v["s"])
|
34
|
-
elsif (k == "created_at" || k == "updated_at") && !v.is_a?(Hash) then
|
35
|
-
v = Time.at(v)
|
36
|
-
elsif k == "cached_tags" then
|
37
|
-
k = "tags"
|
38
|
-
elsif k == "posts" then
|
39
|
-
v.map!{|post|Post.new(post)}
|
40
|
-
end
|
41
|
-
instance_variable_set("@#{k}",v)
|
42
|
-
end
|
43
|
-
end
|
44
|
-
end
|
45
|
-
end
|
data/lib/pool.rb
DELETED
@@ -1,71 +0,0 @@
|
|
1
|
-
=begin
|
2
|
-
Copyright 2014, 2015, 2017 Maxine Michalski <maxine@furfind.net>
|
3
|
-
|
4
|
-
This file is part of rubyhexagon.
|
5
|
-
|
6
|
-
rubyhexagon is free software: you can redistribute it and/or modify
|
7
|
-
it under the terms of the GNU General Public License as published by
|
8
|
-
the Free Software Foundation, either version 3 of the License, or
|
9
|
-
(at your option) any later version.
|
10
|
-
|
11
|
-
rubyhexagon is distributed in the hope that it will be useful,
|
12
|
-
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
13
|
-
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
14
|
-
GNU General Public License for more details.
|
15
|
-
|
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
|
-
=end
|
19
|
-
|
20
|
-
require "digest/md5"
|
21
|
-
|
22
|
-
module E621
|
23
|
-
class Pool < Container
|
24
|
-
def initialize(post)
|
25
|
-
@api = API.new("pool")
|
26
|
-
if post.is_a?(Hash) then
|
27
|
-
set_variables(post)
|
28
|
-
elsif post.is_a?(Fixnum) then
|
29
|
-
set_variables(@api.get("show",{"id"=>post}))
|
30
|
-
else
|
31
|
-
raise ArgumentError, "Parameter must be Hash or Number."
|
32
|
-
end
|
33
|
-
end
|
34
|
-
|
35
|
-
def keys
|
36
|
-
return instance_variables.map{|i|i.to_s.sub("@","")}
|
37
|
-
end
|
38
|
-
|
39
|
-
def updated_at=(time)
|
40
|
-
@updated_at = time
|
41
|
-
end
|
42
|
-
|
43
|
-
def name=(name)
|
44
|
-
@name = name
|
45
|
-
end
|
46
|
-
|
47
|
-
def posts=(posts)
|
48
|
-
@posts = posts
|
49
|
-
end
|
50
|
-
|
51
|
-
def to_json(n=nil)
|
52
|
-
json_hash = Hash.new
|
53
|
-
instance_variables.each do |i|
|
54
|
-
v = instance_variable_get(i)
|
55
|
-
v = v.is_a?(Time) ? v.to_i : v
|
56
|
-
json_hash.store(i.to_s.sub("@",""),v)
|
57
|
-
end
|
58
|
-
return json_hash.to_json
|
59
|
-
end
|
60
|
-
|
61
|
-
def each_post
|
62
|
-
(@post_count/24.0).ceil.times do |page|
|
63
|
-
@posts.each do |post|
|
64
|
-
yield post
|
65
|
-
end
|
66
|
-
post = api.get("show",{"id"=>@id,"page"=>page+2})
|
67
|
-
set_variables(post)
|
68
|
-
end
|
69
|
-
end
|
70
|
-
end
|
71
|
-
end
|
data/lib/post.rb
DELETED
@@ -1,50 +0,0 @@
|
|
1
|
-
=begin
|
2
|
-
Copyright 2014, 2015, 2017 Maxine Michalski <maxine@furfind.net>
|
3
|
-
|
4
|
-
This file is part of rubyhexagon.
|
5
|
-
|
6
|
-
rubyhexagon is free software: you can redistribute it and/or modify
|
7
|
-
it under the terms of the GNU General Public License as published by
|
8
|
-
the Free Software Foundation, either version 3 of the License, or
|
9
|
-
(at your option) any later version.
|
10
|
-
|
11
|
-
rubyhexagon is distributed in the hope that it will be useful,
|
12
|
-
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
13
|
-
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
14
|
-
GNU General Public License for more details.
|
15
|
-
|
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
|
-
=end
|
19
|
-
|
20
|
-
require "digest/md5"
|
21
|
-
|
22
|
-
module E621
|
23
|
-
class Post < Container
|
24
|
-
def initialize(post)
|
25
|
-
@api = API.new
|
26
|
-
if post.is_a?(Fixnum) || (post.is_a?(String) && post.match(/^[0-9,a-f]+$/i)) then
|
27
|
-
post = if post.is_a?(String) && post.length == 32 then {md5:post}
|
28
|
-
elsif post.is_a?(Fixnum) || (post.is_a?(String) && post.match(/^\d+$/)) then
|
29
|
-
{id:post.to_i}
|
30
|
-
else
|
31
|
-
raise ArgumentError, "Neither an ID nor a MD5 Hash."
|
32
|
-
end
|
33
|
-
post = @api.post_show(post)
|
34
|
-
elsif post.is_a?(Hash) then # Variable post is ready to use. Do nothing.
|
35
|
-
else
|
36
|
-
raise ArgumentError, "Post only accepts an id, a MD5 hashsum or a Ruby hash."
|
37
|
-
end
|
38
|
-
set_variables(post)
|
39
|
-
end
|
40
|
-
alias show initialize
|
41
|
-
# Cast a vote! Any value above 0 votes up, every value below 0 votes down.
|
42
|
-
# Zero itself causes an error.
|
43
|
-
def vote(direction)
|
44
|
-
if direction > 0 then @api.post_vote(1)
|
45
|
-
elsif direction < 0 then @api.post_vote(-1)
|
46
|
-
else raise ArgumentError, "Zero isn't allowed for voting results."
|
47
|
-
end
|
48
|
-
end
|
49
|
-
end
|
50
|
-
end
|