shinybooru 1.2.2 → 1.2.3

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: fa0dfa2ceed79ad1356ed6f287a82c6a6f3ead4e
4
- data.tar.gz: 0620cff0dd21ca745a355dbee80ed373864bfe21
3
+ metadata.gz: 0f5d98dd9a4f66c28a4cfaa465234ccc3db7b7ef
4
+ data.tar.gz: 02ff295c1cac7811a3b1638c9c3720aebadae704
5
5
  SHA512:
6
- metadata.gz: 586b817c72b1d8c2811515de10f6a3400b96ec2e6e1c46def32067ed0fc83da47bb3c752bc72f439c02d5b46ff0711e4c951b201a436a4e1013d6b9ff68bac4a
7
- data.tar.gz: 4ad348ad731f8434c19ffed053c4fb1b04c61c105d76f13a02b00327925850e5e81e0102b46f63d903d0c088e8e9ef8e47d2cf62f3a30535bae5d2b9962de5df
6
+ metadata.gz: 58e9f503cfc4ca936378d57f560068b98668024998df688e754ab5d4eaaef8e8c1ac35fb20ceffc602ea42dcc0a42f2f4f3722d61497a1b9ccbc79b6468a1396
7
+ data.tar.gz: 4b5188ed3c1c33fe6b9b53b47fa574434af7589d3381de850dd12cd57b2111e48729223ca2e821a697a9b66de99734f44ade23d2f47eca085bbd0d15fcc854ba
data/.gitignore CHANGED
@@ -1,10 +1,47 @@
1
- /.bundle/
2
- /.yardoc
3
- /Gemfile.lock
4
- /_yardoc/
1
+ *.gem
2
+ *.rbc
3
+ /.config
5
4
  /coverage/
6
- /doc/
5
+ /InstalledFiles
7
6
  /pkg/
8
7
  /spec/reports/
8
+ /spec/examples.txt
9
+ /test/tmp/
10
+ /test/version_tmp/
9
11
  /tmp/
10
- /idea/
12
+
13
+ ## Specific to RubyMotion:
14
+ .dat*
15
+ .repl_history
16
+ build/
17
+
18
+ ## Documentation cache and generated files:
19
+ /.yardoc/
20
+ /_yardoc/
21
+ /doc/
22
+ /rdoc/
23
+
24
+ ## Environment normalization:
25
+ /.bundle/
26
+ /vendor/bundle
27
+ /lib/bundler/man/
28
+
29
+ # for a library or gem, you might want to ignore these files since the code is
30
+ # intended to run in multiple environments; otherwise, check them in:
31
+ # Gemfile.lock
32
+ # .ruby-version
33
+ # .ruby-gemset
34
+
35
+ # unless supporting rvm < 1.11.0 or doing something fancy, ignore this:
36
+ .rvmrc
37
+
38
+ # swap
39
+ [._]*.s[a-w][a-z]
40
+ [._]s[a-w][a-z]
41
+ # session
42
+ Session.vim
43
+ # temporary
44
+ .netrwhist
45
+ *~
46
+ # auto-generated tag files
47
+ tags
data/README.md CHANGED
@@ -1,7 +1,7 @@
1
1
  # Shinybooru
2
2
  [![Build Status](https://travis-ci.org/calvcoll/shinybooru.svg?branch=master)](https://travis-ci.org/calvcoll/shinybooru)
3
3
 
4
- A gem which returns an easy to use object for Gelbooru requests
4
+ A gem which returns an easy to use object for Gelbooru/Safebooru requests
5
5
 
6
6
  ## Installation
7
7
 
@@ -26,6 +26,13 @@ Or install it yourself as:
26
26
  booru = Shinybooru::Booru.new
27
27
  ```
28
28
 
29
+ Optionally, provide the site URL. Only safebooru.org and gelbooru.com
30
+ are supported at this time.
31
+
32
+ ```ruby
33
+ booru = Shinybooru::Booru.new 'safebooru.org'
34
+ ```
35
+
29
36
  ###Retrieving posts from Gelbooru server
30
37
  ```ruby
31
38
  booru = Shinybooru::Booru.new
@@ -35,7 +42,14 @@ post = booru.posts 1 #returns Shinybooru::Post
35
42
  ###Retrieving posts from Gelbooru server
36
43
  ```ruby
37
44
  booru = Shinybooru::Booru.new
38
- posts = booru.posts 10 #returns Array of Shinybooru::Post
45
+ posts = booru.posts limit: 10 #returns Array of Shinybooru::Post
46
+ ```
47
+
48
+ ###Searching for tags
49
+ ```ruby
50
+ booru = Shinybooru::Booru.new
51
+ posts = booru.posts tags: "highres" #returns Shinybooru::Post, with tag highres
52
+ posts = booru.posts tags: ["highres", "couple"] #returns Shinybooru::Post, with tags highres, couple
39
53
  ```
40
54
 
41
55
  ## Development
@@ -1,22 +1,28 @@
1
- require "shinybooru/version"
2
- require "http_requestor"
3
- require "nokogiri"
1
+ require 'shinybooru/version'
2
+ require 'http_requestor'
3
+ require 'nokogiri'
4
4
 
5
5
  module Shinybooru
6
+ # A gem which returns an easy to use object for Gelbooru requests
6
7
  class Booru
7
- attr_accessor :online
8
+ attr_accessor :online, :url
8
9
 
9
- def initialize
10
- @booru = HTTP::Requestor.new "gelbooru.com"
11
- checkConnection
10
+ def initialize(site = nil)
11
+ good_sites = %w(gelbooru.com safebooru.org)
12
+ # Default to safebooru
13
+ @url = if good_sites.include? site
14
+ site
15
+ else
16
+ 'safebooru.org'
17
+ end
18
+ @booru = HTTP::Requestor.new @url
19
+ check_connection
12
20
  end
13
21
 
14
- def checkConnection
22
+ def check_connection
15
23
  begin
16
24
  conn = @booru.get 'index.php'
17
- if conn
18
- @online = true
19
- end
25
+ @online = true if conn
20
26
  rescue TimeoutError
21
27
  @online = false
22
28
  end
@@ -26,47 +32,48 @@ module Shinybooru
26
32
  !@online
27
33
  end
28
34
 
29
- def booru_get (page)
35
+ def booru_get(page)
30
36
  @booru.get '/index.php?page=dapi&s=post&q=index' + page
31
37
  end
32
38
 
33
- def posts (args=Hash.new)
34
- limit = args[:limit]
35
- limit = 1 if limit.nil?
36
- nsfw = args[:nsfw]
37
- nsfw = true if nsfw.nil?
38
- tags = args[:tags]
39
- tags = [] if tags.nil?
40
- if @online
41
- req = '&limit=' + limit.to_s
42
- if tags
43
- unless tags.is_a? String
44
- tags = tags.join('%20')
45
- end
46
- req += '&tags=' + tags
47
- end
48
- unless nsfw
49
- explicit_tags = '-rating%3aquestionable%20-rating%3explicit'
50
- unless tags
51
- req += '&tags=' + explicit_tags
52
- else
53
- req += '%20' + explicit_tags
54
- end
55
- end
56
- data = Nokogiri::Slop((booru_get req).body)
57
- posts = []
58
- data.posts.children.each do |post|
59
- if post.is_a? Nokogiri::XML::Element
60
- posts.push Shinybooru::Post.new(post)
61
- end
62
- end
63
- if posts.length > 1
64
- posts
65
- else
66
- posts[0]
39
+ def posts(args = {})
40
+ limit = args[:limit].nil? ? 10 : args[:limit]
41
+ tags = args[:tags].nil? ? [] : args[:tags]
42
+ sfw = args[:sfw] == true
43
+ # Always sfw if safebooru, so no need for rating tags
44
+ sfw = false if @url == 'safebooru.org'
45
+
46
+ raise Shinybooru::OfflineError unless @online
47
+
48
+ req = '&limit=' + limit.to_s
49
+
50
+ if tags
51
+ tags = tags.join('%20') unless tags.is_a? String
52
+ req += '&tags=' + tags
53
+ end
54
+
55
+ if sfw
56
+ explicit_tags = '-rating%3aquestionable%20-rating%3explicit'
57
+ req += if tags
58
+ '%20' + explicit_tags
59
+ else
60
+ '&tags=' + explicit_tags
61
+ end
62
+ end
63
+
64
+ data = Nokogiri::Slop((booru_get req).body)
65
+ posts = []
66
+
67
+ data.posts.children.each do |post|
68
+ if post.is_a? Nokogiri::XML::Element
69
+ posts.push Shinybooru::Post.new(post)
67
70
  end
71
+ end
72
+
73
+ if posts.length > 1
74
+ posts
68
75
  else
69
- raise Shinybooru::OfflineError
76
+ posts[0]
70
77
  end
71
78
  end
72
79
  end
@@ -74,19 +81,22 @@ module Shinybooru
74
81
  class OfflineError < StandardError
75
82
  end
76
83
 
84
+ # Used internally
77
85
  class Post
78
86
  attr_reader :data
79
- def initialize (nokogiri_data)
80
- @data = Hash.new
87
+ def initialize(nokogiri_data)
88
+ @data = {}
81
89
  nokogiri_data.attribute_nodes.each do |node|
82
- unless node.name == "tags"
83
- @data[node.name.to_sym] = node.value
84
- end
85
- if node.name == "tags" # so the tags are a list
86
- @data[node.name.to_sym] = node.value.split " "
87
- end
90
+ @data[node.name.to_sym] = if node.name == 'tags'
91
+ # so that the tags are a list
92
+ node.value.split ' '
93
+ else
94
+ node.value
95
+ end
88
96
  data
89
97
  end
90
98
  end
91
99
  end
92
100
  end
101
+
102
+ # vim:tabstop=2 softtabstop=2 expandtab shiftwidth=2 smarttab foldmethod=syntax:
@@ -1,3 +1,3 @@
1
1
  module Shinybooru
2
- VERSION = "1.2.2"
2
+ VERSION = '1.2.3'.freeze
3
3
  end
@@ -4,24 +4,24 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
4
  require 'shinybooru/version'
5
5
 
6
6
  Gem::Specification.new do |spec|
7
- spec.name = "shinybooru"
7
+ spec.name = 'shinybooru'
8
8
  spec.version = Shinybooru::VERSION
9
- spec.authors = ["Calv Collins"]
10
- spec.email = ["calvcoll@gmail.com"]
9
+ spec.authors = ['Calv Collins']
10
+ spec.email = ['calvcoll@gmail.com']
11
11
 
12
- spec.summary = %q{API for Gelbooru}
13
- spec.description = %q{Provides, hopefully, an easy to use interface for Gelbooru}
14
- spec.homepage = "https://github.com/calvcoll/shinybooru"
15
- spec.license = "MIT"
12
+ spec.summary = 'API for Gelbooru'
13
+ spec.description = 'Provides, hopefully, an easy to use interface for Gelbooru'
14
+ spec.homepage = 'https://github.com/calvcoll/shinybooru'
15
+ spec.license = 'MIT'
16
16
 
17
17
  spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
18
- spec.bindir = "exe"
18
+ spec.bindir = 'exe'
19
19
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
20
- spec.require_paths = ["lib"]
20
+ spec.require_paths = ['lib']
21
21
 
22
- spec.add_development_dependency "bundler", "~> 1.10"
23
- spec.add_development_dependency "rake", "~> 10.0"
24
- spec.add_development_dependency "rspec"
25
- spec.add_runtime_dependency "http-requestor", "~> 1.0.4"
26
- spec.add_runtime_dependency "nokogiri", "~> 1.6.6.2"
22
+ spec.add_development_dependency 'bundler', '>= 1.10'
23
+ spec.add_development_dependency 'rake', '>= 10.0'
24
+ spec.add_development_dependency 'rspec'
25
+ spec.add_runtime_dependency 'http-requestor', '>= 1.0'
26
+ spec.add_runtime_dependency 'nokogiri', '>= 1.6'
27
27
  end
metadata CHANGED
@@ -1,41 +1,41 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: shinybooru
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.2
4
+ version: 1.2.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Calv Collins
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2015-08-29 00:00:00.000000000 Z
11
+ date: 2016-04-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "~>"
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
19
  version: '1.10'
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - "~>"
24
+ - - ">="
25
25
  - !ruby/object:Gem::Version
26
26
  version: '1.10'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rake
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - "~>"
31
+ - - ">="
32
32
  - !ruby/object:Gem::Version
33
33
  version: '10.0'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - "~>"
38
+ - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: '10.0'
41
41
  - !ruby/object:Gem::Dependency
@@ -56,30 +56,30 @@ dependencies:
56
56
  name: http-requestor
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - "~>"
59
+ - - ">="
60
60
  - !ruby/object:Gem::Version
61
- version: 1.0.4
61
+ version: '1.0'
62
62
  type: :runtime
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - "~>"
66
+ - - ">="
67
67
  - !ruby/object:Gem::Version
68
- version: 1.0.4
68
+ version: '1.0'
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: nokogiri
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
- - - "~>"
73
+ - - ">="
74
74
  - !ruby/object:Gem::Version
75
- version: 1.6.6.2
75
+ version: '1.6'
76
76
  type: :runtime
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
- - - "~>"
80
+ - - ">="
81
81
  - !ruby/object:Gem::Version
82
- version: 1.6.6.2
82
+ version: '1.6'
83
83
  description: Provides, hopefully, an easy to use interface for Gelbooru
84
84
  email:
85
85
  - calvcoll@gmail.com
@@ -119,7 +119,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
119
119
  version: '0'
120
120
  requirements: []
121
121
  rubyforge_project:
122
- rubygems_version: 2.4.8
122
+ rubygems_version: 2.5.1
123
123
  signing_key:
124
124
  specification_version: 4
125
125
  summary: API for Gelbooru