shinybooru 1.2.2 → 1.2.3

Sign up to get free protection for your applications and to get access to all the features.
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