ann_wrapper 1.1.2 → 1.1.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: 8527b835977682de747e937629083821269c86f3
4
- data.tar.gz: 37915e0c85143251ea32954ee34be0236002a10a
3
+ metadata.gz: 5c633706a6c6f24e42f1f8bcb15df77b55438922
4
+ data.tar.gz: 59bc45c410c7ee4d5f7e438002d02d264ee4f6db
5
5
  SHA512:
6
- metadata.gz: a039e4b0a25587dbc4ead543fa1512788ad7990e8b271b88367d7312b90aec131d3927caf388cb7184c7fe20ede10740631b92ddc8287d0f08caa621c75c6fee
7
- data.tar.gz: 871b0a8e7033996ecf74afb762c2cfab678bcca359311cf519ff9a03ff273e1fb759397cf98765a558b256510fbbb0e6a5db6a07af0cd874e284e5d4f368fe45
6
+ metadata.gz: b6388bdc6f50cb1058c36d02d5d4ae82fa50eea95bce3f7791839e15747b0e29c2ca31d68e5b0740ae07b930e6324e0d1acffbaf31dfa077939965a09aa74f2d
7
+ data.tar.gz: 83aebf0d4c30a3f97b3af180773e707d727685c40d6b03757eb6a0eacec80717ea1ecf62c665d2f60db723cb77c409002fd35f191321844b1baae85c878ae4cb
data/README.md CHANGED
@@ -3,6 +3,7 @@
3
3
 
4
4
  [![Gem Version](https://badge.fury.io/rb/ann_wrapper.png)](http://badge.fury.io/rb/ann_wrapper)
5
5
  [![Build Status](https://travis-ci.org/Getkura/ann_wrapper.png?branch=dev)](https://travis-ci.org/Getkura/ann_wrapper)
6
+ [![Code Climate](https://codeclimate.com/github/Getkura/ann_wrapper.png)](https://codeclimate.com/github/Getkura/ann_wrapper)
6
7
 
7
8
 
8
9
  A simple ruby wrapper/abstraction for the [Anime News Network API](http://www.animenewsnetwork.com/encyclopedia/api.php)
@@ -23,7 +24,75 @@ Or install it yourself as:
23
24
 
24
25
  ## Usage
25
26
 
26
- TODO: Write usage instructions here
27
+ Fetch an anime:
28
+
29
+ steins_gate = ANN_Wrapper.fetch_anime 11770
30
+
31
+ Info:
32
+
33
+ steins_gate.title
34
+ => ["Steins;Gate"]
35
+
36
+ steins_gate.alt_titles
37
+ => {"PT"=>["Steins-Gate e a Teoria do Caos"], "JA"=>["シュタインズ・ゲート"], "ZH-TW"=>["命運石之門"], "KO"=>["슈타인즈 게이트"]}
38
+
39
+ steins_gate.synopsis
40
+ => ["Rintaro Okabe is a self-proclaimed "mad scientist" ... "]
41
+
42
+ steins_gate.num_episodes
43
+ => ["24"]
44
+
45
+ steins_gate.vintage
46
+ => ["2011-04-03 (Advanced screening)", "2011-04-05 to 2011-09-13"]
47
+
48
+ steins_gate.genres
49
+ => ["adventure", "comedy", "drama", "mystery", "psychological", "romance", "science fiction", "thriller"]
50
+
51
+ steins_gate.themes
52
+ => ["butterfly effect", "conspiracy", "technology", "Time travel"]
53
+
54
+ steins_gate.op_theme
55
+ => ["\"Hacking to the Gate\" by Kanako Ito"]
56
+
57
+ steins_gate.ed_theme
58
+ => ["\"Tokitsukasadoru Jūni no Meiyaku\" (刻司ル十二ノ盟約) by Yui Sakakibara", "#2: \"Sukai Kuraddo no Kansokusha\" (スカイクラッドの観測者) by Kanako Ito (ep 23)", "#3: \"Another Heaven\" by Kanako Itou (ep 24)"]
59
+
60
+
61
+ Cast and Staff:
62
+
63
+ steins_gate.cast.find_all {|c| c.name.include? "Hanazawa"}
64
+ => [#<struct ANN_Cast id="53741", role="Mayuri Shiina", name="Kana Hanazawa", lang="JA">]
65
+
66
+ steins_gate.staff.find_all {|s| s.task.eql? "Director"}
67
+ => [
68
+ #<struct ANN_Staff id="593", task="Director", name="Takuya Satō">,
69
+ #<struct ANN_Staff id="9693", task="Director", name="Hiroshi Hamasaki">,
70
+ #<struct ANN_Staff id="35713", task="Director", name="Tomoki Kobayashi">
71
+ ]
72
+
73
+
74
+ Episodes:
75
+
76
+ steins_gate.episodes.first
77
+ => #<struct ANN_Episode number="1", title="Prologue of the Beginning and End", lang="EN">
78
+
79
+ steins_gate.episodes.find_all {|e| e.title.include? "Prologue"}
80
+ => [
81
+ #<struct ANN_Episode number="1", title="Prologue of the Beginning and End", lang="EN">,
82
+ #<struct ANN_Episode number="24", title="The Prologue Begins With the End", lang="EN">
83
+ ]
84
+
85
+ Images:
86
+
87
+ steins_gate.images
88
+ => [
89
+ #<struct ANN_Image src="http://cdn.animenewsnetwork.com/thumbnails/fit200x200/encyc/A11770-1864351140.1370764886.jpg", width="200", height="125">,
90
+ #<struct ANN_Image src="http://cdn.animenewsnetwork.com/thumbnails/fit200x200/encyc/A11770-8.jpg", width="200", height="200">
91
+ ]
92
+
93
+
94
+
95
+
27
96
 
28
97
  ## Contributing
29
98
 
@@ -10,7 +10,7 @@ Gem::Specification.new do |spec|
10
10
  spec.email = ["getkura+ann_wrapper@gmail.com"]
11
11
  spec.description = 'A simple wrapper for the Anime News Network API'
12
12
  spec.summary = 'Anime News Network API wrapper'
13
- spec.homepage = ""
13
+ spec.homepage = "http://documentup.com/Getkura/ann_wrapper"
14
14
  spec.license = "MIT"
15
15
 
16
16
  spec.files = `git ls-files`.split($/)
@@ -5,43 +5,20 @@
5
5
  require "net/http"
6
6
  require "nokogiri"
7
7
  require 'ann_wrapper/ann_objects'
8
- require 'singleton'
9
8
 
10
9
  # wrapper class for ANN API
11
- class ANN_Wrapper
12
- include Singleton
10
+ module ANN_Wrapper
11
+ extend ANN_Wrapper
12
+
13
13
  # ANN API anime url
14
14
  ANN_URL = "http://cdn.animenewsnetwork.com/encyclopedia"
15
15
  ANN_API_URL = "#{ANN_URL}/api.xml"
16
16
  ANN_REPORTS_URL = "#{ANN_URL}/reports.xml"
17
17
 
18
- # fetch data from ANN API via http GET request
19
- # returns Nokogiri or ANN_Error
20
- def fetch(url)
21
- begin
22
- # send http GET request with uri parsed from url
23
- resp = Net::HTTP.get_response(URI.parse(url))
24
-
25
- # get the response body and try converting to Nokogiri object
26
- Nokogiri.XML(resp.body)
27
- rescue
28
- ANN_Error.new("xml format error, API likely unavailable")
29
- end
30
- end
31
-
32
- # attempt to grab error message from XMLObject
33
- def get_xml_error(xobj)
34
- begin
35
- xobj.at_xpath('//ann/warning').content
36
- rescue NameError
37
- "bad response"
38
- end
39
- end
40
-
41
18
  # fetch anime and convert to ANN_Anime
42
- def fetch_ann_anime(id)
19
+ def fetch_anime(id, api_url=ANN_API_URL)
43
20
  # append id to API url and send request
44
- url = "#{ANN_API_URL}?anime=#{id.to_s}"
21
+ url = "#{api_url}?anime=#{id.to_s}"
45
22
 
46
23
  ann = fetch(url)
47
24
 
@@ -54,8 +31,8 @@ class ANN_Wrapper
54
31
  end
55
32
 
56
33
  # fetch list of titles via reports
57
- def fetch_titles(type="anime", nskip=0, nlist=50, name="")
58
- url = "#{ANN_REPORTS_URL}?id=155&type=#{type}&nskip=#{nskip}&nlist=#{nlist}"
34
+ def fetch_titles(type="anime", nskip=0, nlist=50, name="", api_url=ANN_REPORTS_URL)
35
+ url = "#{api_url}?id=155&type=#{type}&nskip=#{nskip}&nlist=#{nlist}"
59
36
  report = fetch(url)
60
37
 
61
38
  return report if report.is_a?(ANN_Error)
@@ -63,9 +40,31 @@ class ANN_Wrapper
63
40
  reports = report.xpath('//report/item')
64
41
 
65
42
  return ANN_Error.new(get_xml_error(report)) if reports.nil?
66
-
67
- reports.map do |item|
68
- ANN_Report.new(item)
43
+
44
+ reports.map { |item| ANN_Report.new(item) }
45
+ end
46
+
47
+ private
48
+ # fetch data from ANN API via http GET request
49
+ # returns Nokogiri or ANN_Error
50
+ def fetch(url)
51
+ begin
52
+ # send http GET request with uri parsed from url
53
+ resp = Net::HTTP.get_response(URI.parse(url))
54
+
55
+ # get the response body and try converting to Nokogiri object
56
+ Nokogiri.XML(resp.body)
57
+ rescue
58
+ ANN_Error.new("xml format error, API likely unavailable")
59
+ end
60
+ end
61
+
62
+ # attempt to grab error message from XMLObject
63
+ def get_xml_error(xobj)
64
+ begin
65
+ xobj.at_xpath('//ann/warning').content
66
+ rescue NameError
67
+ "bad response"
68
+ end
69
69
  end
70
70
  end
71
- end
@@ -156,17 +156,18 @@ class ANN_Report < ANN
156
156
  # initialize and build access methods
157
157
  def initialize(ann_report)
158
158
  @id, @type, @name, @precision, @vintage = ""
159
+ @ann_report = ann_report
159
160
 
160
161
  self.instance_variables.each do |iv|
161
162
  var_name = iv.to_s.partition("@").last
162
- create_method(var_name) { get_info_on(ann_report, var_name) }
163
+ create_method(var_name) { get_info_on(var_name) }
163
164
  end
164
165
  end
165
166
 
166
167
  # get info from xml
167
- def get_info_on(ann_report, var_name)
168
+ def get_info_on(var_name)
168
169
  begin
169
- ann_report.at_xpath(var_name).content
170
+ @ann_report.at_xpath(var_name).content
170
171
  rescue NameError
171
172
  nil
172
173
  end
@@ -1,3 +1,3 @@
1
1
  module AnnWrapper
2
- VERSION = "1.1.2"
2
+ VERSION = "1.1.3"
3
3
  end
@@ -4,7 +4,7 @@ describe "fetch_ann_anime" do
4
4
 
5
5
  context "a valid id is provided" do
6
6
  it "should return data for an ann anime" do
7
- anime = ANN_Wrapper.instance.fetch_ann_anime(11770)
7
+ anime = ANN_Wrapper.fetch_anime(11770)
8
8
  anime.should_not be_nil
9
9
  anime.title.first.should eql "Steins;Gate"
10
10
  end
@@ -12,7 +12,7 @@ describe "fetch_ann_anime" do
12
12
 
13
13
  context "an invalid id is provided" do
14
14
  it "should return an ANN_Error" do
15
- anime = ANN_Wrapper.instance.fetch_ann_anime(117700)
15
+ anime = ANN_Wrapper.fetch_anime(117700)
16
16
  anime.should_not be_nil
17
17
  anime.should be_kind_of(ANN_Error)
18
18
  anime.message.should_not be_nil
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ann_wrapper
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.2
4
+ version: 1.1.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - shawntoffel
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-01-07 00:00:00.000000000 Z
11
+ date: 2014-01-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: nokogiri
@@ -85,7 +85,7 @@ files:
85
85
  - lib/ann_wrapper/version.rb
86
86
  - spec/ann_wrapper_spec.rb
87
87
  - spec/spec_helper.rb
88
- homepage: ''
88
+ homepage: http://documentup.com/Getkura/ann_wrapper
89
89
  licenses:
90
90
  - MIT
91
91
  metadata: {}