gamesdb 0.0.1

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.
data/Gemfile ADDED
@@ -0,0 +1,8 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gemspec
4
+
5
+ group :test do
6
+ gem 'guard-rspec'
7
+ gem 'rspec'
8
+ end
@@ -0,0 +1,53 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ gamesdb (0.0.1)
5
+ cistern
6
+ excon
7
+ nokogiri
8
+ rest-client
9
+
10
+ GEM
11
+ remote: https://rubygems.org/
12
+ specs:
13
+ cistern (0.1.4)
14
+ coderay (1.0.8)
15
+ diff-lcs (1.1.3)
16
+ excon (0.16.10)
17
+ guard (1.5.4)
18
+ listen (>= 0.4.2)
19
+ lumberjack (>= 1.0.2)
20
+ pry (>= 0.9.10)
21
+ thor (>= 0.14.6)
22
+ guard-rspec (2.3.1)
23
+ guard (>= 1.1)
24
+ rspec (~> 2.11)
25
+ listen (0.6.0)
26
+ lumberjack (1.0.2)
27
+ method_source (0.8.1)
28
+ mime-types (1.21)
29
+ nokogiri (1.5.5)
30
+ pry (0.9.10)
31
+ coderay (~> 1.0.5)
32
+ method_source (~> 0.8)
33
+ slop (~> 3.3.1)
34
+ rest-client (1.6.7)
35
+ mime-types (>= 1.16)
36
+ rspec (2.12.0)
37
+ rspec-core (~> 2.12.0)
38
+ rspec-expectations (~> 2.12.0)
39
+ rspec-mocks (~> 2.12.0)
40
+ rspec-core (2.12.2)
41
+ rspec-expectations (2.12.1)
42
+ diff-lcs (~> 1.1.3)
43
+ rspec-mocks (2.12.2)
44
+ slop (3.3.3)
45
+ thor (0.17.0)
46
+
47
+ PLATFORMS
48
+ ruby
49
+
50
+ DEPENDENCIES
51
+ gamesdb!
52
+ guard-rspec
53
+ rspec
@@ -0,0 +1,4 @@
1
+ gamesdb
2
+ =======
3
+
4
+ Quick Gem for dealing with thegamesdb.net API
@@ -0,0 +1,23 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ lib = File.expand_path('../lib', __FILE__)
4
+
5
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
6
+ require 'gamesdb/version'
7
+
8
+ Gem::Specification.new do |gem|
9
+ gem.name = "gamesdb"
10
+ gem.version = Gamesdb::Version
11
+ gem.authors = ["Eugene Howe"]
12
+ gem.email = "eugene@xtreme-computers.net"
13
+ gem.summary = "Gem for searching thegamesdb.net"
14
+ gem.homepage = "https://github.com/ehowe/gamesdb.git"
15
+
16
+ gem.files = `git ls-files`.split($/)
17
+ gem.require_paths = ["lib"]
18
+
19
+ gem.add_dependency 'cistern'
20
+ gem.add_dependency 'excon'
21
+ gem.add_dependency 'nokogiri'
22
+ gem.add_dependency 'rest-client'
23
+ end
@@ -0,0 +1,12 @@
1
+ require 'gamesdb/version'
2
+
3
+ require 'excon'
4
+ require 'nokogiri'
5
+ require 'cistern'
6
+ require 'rest-client'
7
+
8
+ module Gamesdb
9
+ autoload :Client, 'gamesdb/client'
10
+ autoload :SaxDocument, 'gamesdb/saxdocument'
11
+
12
+ end
@@ -0,0 +1,71 @@
1
+ class Gamesdb::Client < Cistern::Service
2
+
3
+ model_path "gamesdb/models"
4
+ request_path "gamesdb/requests"
5
+
6
+ model :game
7
+ collection :games
8
+ request :list_games
9
+
10
+ class Real
11
+ attr_reader :connection
12
+
13
+ def initialize(options={})
14
+ url = options[:url] || 'http://thegamesdb.net/api'
15
+
16
+ @connection = RestClient::Resource.new(url) #Excon.new(url)
17
+ end
18
+
19
+ def request(options)
20
+ path = options[:path]
21
+ method = options[:method] || :get
22
+ method = method.to_sym
23
+ headers = options[:headers] || {}
24
+ body = options[:body] || nil
25
+ expects = options[:expects] || 200
26
+ query = options[:query] || nil
27
+
28
+ connect_hash = {
29
+ :method => method,
30
+ :headers => headers,
31
+ :path => path,
32
+ :expects => expects,
33
+ :body => body,
34
+ #:query => query
35
+ }
36
+
37
+ path = "#{path}?#{query.map{|k,v| "#{URI.escape(k.to_s)}=#{URI.escape(v.to_s)}"}.join("&")}" unless query.empty?
38
+ response = case method
39
+ when :get
40
+ connection[path].get(headers)
41
+ when :post
42
+ connection[path].post(body, headers)
43
+ when :delete
44
+ connection[path].delete(headers)
45
+ end
46
+
47
+ document = Gamesdb::SaxDocument.new
48
+ parser = Nokogiri::XML::SAX::PushParser.new(document)
49
+ parser << response
50
+ parser.finish
51
+ document.body
52
+ end
53
+ end
54
+
55
+ class Mock
56
+ def initialize(options={})
57
+ end
58
+
59
+ def self.data
60
+ @data ||= {}
61
+ end
62
+
63
+ def self.reset!
64
+ @data = nil
65
+ end
66
+
67
+ def data
68
+ self.class.data
69
+ end
70
+ end
71
+ end
@@ -0,0 +1,7 @@
1
+ class Gamesdb::Client::Game < Cistern::Model
2
+ identity :id
3
+
4
+ attribute :game_title, aliases: "GameTitle"
5
+ attribute :release_data, aliases: "ReleaseDate"
6
+ attribute :platform, aliases: "Platform"
7
+ end
@@ -0,0 +1,10 @@
1
+ class Gamesdb::Client::Games < Cistern::Collection
2
+
3
+ model Gamesdb::Client::Game
4
+
5
+ def search(name)
6
+ if data = self.connection.list_games(name)["Game"]
7
+ self.clone.load(data)
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,16 @@
1
+ class Gamesdb::Client
2
+ class Real
3
+ def list_games(search)
4
+ request(
5
+ :path => "/GetGamesList.php",
6
+ :query => {"name" => search},
7
+ )
8
+ end
9
+ end
10
+
11
+ class Mock
12
+ def list_games(search)
13
+ YAML.load_file(File.expand_path("../../seeds/games.yaml", __FILE__))
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,63 @@
1
+ class Gamesdb::SaxDocument < Nokogiri::XML::SAX::Document
2
+ attr_reader :stack
3
+
4
+ def initialize
5
+ @stack = []
6
+ end
7
+
8
+ def characters(string)
9
+ @value ||= ''
10
+ @value << string.strip
11
+ end
12
+
13
+ def body
14
+ @stack.first.each do |key, value|
15
+ @stack.first[key] = [value] if value.is_a?(Hash)
16
+ end
17
+ end
18
+
19
+ def end_element(name)
20
+ last = @stack.pop
21
+ if last.empty? && @value.empty?
22
+ @stack.last[name] = ''
23
+ elsif last == {:i_nil=>"true"}
24
+ @stack.last[name] = nil
25
+ elsif !@value.empty?
26
+ @stack.last[name] = @value
27
+ end
28
+ @value = ''
29
+ end
30
+
31
+ def start_element(name, attributes = [])
32
+ @value = ''
33
+ parsed_attributes = {}
34
+ until attributes.empty?
35
+ if attributes.first.is_a?(Array)
36
+ key, value = attributes.shift
37
+ else
38
+ key, value = attributes.shift, attributes.shift
39
+ end
40
+ parsed_attributes[key.gsub(':','_')] = value
41
+ end
42
+ if @stack.last.is_a?(Array)
43
+ @stack.last << {name => parsed_attributes}
44
+ else
45
+ data = if @stack.empty?
46
+ @stack.push(parsed_attributes)
47
+ parsed_attributes
48
+ elsif @stack.last[name]
49
+ unless @stack.last[name].is_a?(Array)
50
+ @stack.last[name] = [@stack.last[name]]
51
+ end
52
+ @stack.last[name] << parsed_attributes
53
+ @stack.last[name].last
54
+ else
55
+ @stack.last[name] = {}
56
+ @stack.last[name].merge!(parsed_attributes)
57
+ @stack.last[name]
58
+ end
59
+ @stack.push(data)
60
+ end
61
+ end
62
+ end
63
+
@@ -0,0 +1,82 @@
1
+ ---
2
+ Game:
3
+ - id: '665'
4
+ GameTitle: X-Men
5
+ ReleaseDate: '1993'
6
+ Platform: Sega Genesis
7
+ - id: '8104'
8
+ GameTitle: X-Men
9
+ ReleaseDate: 01/01/1993
10
+ Platform: Sega Mega Drive
11
+ - id: '14795'
12
+ GameTitle: X-Men
13
+ ReleaseDate: 01/01/1994
14
+ Platform: Sega Game Gear
15
+ - id: '1386'
16
+ GameTitle: The Uncanny X-Men
17
+ ReleaseDate: 12/01/1989
18
+ Platform: Nintendo Entertainment System (NES)
19
+ - id: '4763'
20
+ GameTitle: X-Men Legends
21
+ ReleaseDate: 09/21/2004
22
+ Platform: Sony Playstation 2
23
+ - id: '4765'
24
+ GameTitle: ! 'X-Men: Next Dimension'
25
+ ReleaseDate: 10/15/2002
26
+ Platform: Sony Playstation 2
27
+ - id: '5444'
28
+ GameTitle: X-Men Legends
29
+ ReleaseDate: 09/24/2004
30
+ Platform: Nintendo GameCube
31
+ - id: '8311'
32
+ GameTitle: ! 'X-Men: Destiny'
33
+ ReleaseDate: 09/27/2011
34
+ Platform: Sony Playstation 3
35
+ - id: '8898'
36
+ GameTitle: ! 'X-Men: Destiny'
37
+ ReleaseDate: 09/27/2011
38
+ Platform: Microsoft Xbox 360
39
+ - id: '11467'
40
+ GameTitle: ! 'X-Men: Next Dimension'
41
+ ReleaseDate: 10/15/2002
42
+ Platform: Nintendo GameCube
43
+ - id: '14096'
44
+ GameTitle: ! 'X-Men: Destiny'
45
+ ReleaseDate: 09/27/2011
46
+ Platform: Nintendo Wii
47
+ - id: '628'
48
+ GameTitle: X-Men vs. Street Fighter
49
+ ReleaseDate: 06/30/1998
50
+ Platform: Sony Playstation
51
+ - id: '2468'
52
+ GameTitle: ! 'X-Men: Children Of The Atom'
53
+ ReleaseDate: '1994'
54
+ Platform: Arcade
55
+ - id: '3123'
56
+ GameTitle: ! 'X-Men: Mojo World'
57
+ ReleaseDate: 09/14/1996
58
+ Platform: Sega Master System
59
+ - id: '3291'
60
+ GameTitle: ! 'X-Men: Mutant Apocalypse'
61
+ ReleaseDate: 01/01/1994
62
+ Platform: Super Nintendo (SNES)
63
+ - id: '4209'
64
+ GameTitle: ! 'X-Men Origins: Wolverine'
65
+ ReleaseDate: 05/01/2009
66
+ Platform: PC
67
+ - id: '4034'
68
+ GameTitle: ! 'X-Men: The Official Game'
69
+ ReleaseDate: 05/16/2006
70
+ Platform: Nintendo Game Boy Advance
71
+ - id: '4146'
72
+ GameTitle: ! 'X-Men: Reign of Apocalypse'
73
+ ReleaseDate: 09/25/2001
74
+ Platform: Nintendo Game Boy Advance
75
+ - id: '4978'
76
+ GameTitle: ! 'X-Men Origins: Wolverine'
77
+ ReleaseDate: 05/01/2009
78
+ Platform: Nintendo Wii
79
+ - id: '5374'
80
+ GameTitle: ! 'X-Men: The Official Game'
81
+ ReleaseDate: 05/16/2006
82
+ Platform: Sony Playstation 2
@@ -0,0 +1,3 @@
1
+ module Gamesdb
2
+ Version = "0.0.1"
3
+ end
@@ -0,0 +1,10 @@
1
+ require 'spec_helper'
2
+
3
+ describe "Gamesdb::Games" do
4
+ let(:client) { create_client }
5
+ it "should have games" do
6
+ games = client.games.search('x-men')
7
+ games.should_not be_empty
8
+ games.first.should be_a_kind_of(Gamesdb::Client::Game)
9
+ end
10
+ end
@@ -0,0 +1,17 @@
1
+ ENV['MOCK_GAMES'] ||= "false"
2
+
3
+ Bundler.require(:test)
4
+
5
+ require File.expand_path('../../lib/gamesdb', __FILE__)
6
+
7
+ Dir[File.expand_path('../{support,matchers}/*.rb', __FILE__)].each { |f| require(f) }
8
+
9
+ if ENV['MOCK_GAMES'] == "true"
10
+ Gamesdb::Client.mock!
11
+ end
12
+
13
+ RSpec.configure do |config|
14
+ config.before(:all) do
15
+ Gamesdb::Client.reset! if Gamesdb::Client.mocking?
16
+ end
17
+ end
@@ -0,0 +1,9 @@
1
+ module ClientHelper
2
+ def create_client
3
+ Gamesdb::Client.new
4
+ end
5
+ end
6
+
7
+ RSpec.configure do |config|
8
+ config.include(ClientHelper)
9
+ end
metadata ADDED
@@ -0,0 +1,124 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: gamesdb
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Eugene Howe
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2013-02-14 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: cistern
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '0'
30
+ - !ruby/object:Gem::Dependency
31
+ name: excon
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
38
+ type: :runtime
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
46
+ - !ruby/object:Gem::Dependency
47
+ name: nokogiri
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ type: :runtime
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ - !ruby/object:Gem::Dependency
63
+ name: rest-client
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ! '>='
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
70
+ type: :runtime
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
77
+ version: '0'
78
+ description:
79
+ email: eugene@xtreme-computers.net
80
+ executables: []
81
+ extensions: []
82
+ extra_rdoc_files: []
83
+ files:
84
+ - Gemfile
85
+ - Gemfile.lock
86
+ - README.md
87
+ - gamesdb.gemspec
88
+ - lib/gamesdb.rb
89
+ - lib/gamesdb/client.rb
90
+ - lib/gamesdb/models/game.rb
91
+ - lib/gamesdb/models/games.rb
92
+ - lib/gamesdb/requests/list_games.rb
93
+ - lib/gamesdb/saxdocument.rb
94
+ - lib/gamesdb/seeds/games.yaml
95
+ - lib/gamesdb/version.rb
96
+ - spec/games_spec.rb
97
+ - spec/spec_helper.rb
98
+ - spec/support/client_helper.rb
99
+ homepage: https://github.com/ehowe/gamesdb.git
100
+ licenses: []
101
+ post_install_message:
102
+ rdoc_options: []
103
+ require_paths:
104
+ - lib
105
+ required_ruby_version: !ruby/object:Gem::Requirement
106
+ none: false
107
+ requirements:
108
+ - - ! '>='
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ required_rubygems_version: !ruby/object:Gem::Requirement
112
+ none: false
113
+ requirements:
114
+ - - ! '>='
115
+ - !ruby/object:Gem::Version
116
+ version: '0'
117
+ requirements: []
118
+ rubyforge_project:
119
+ rubygems_version: 1.8.24
120
+ signing_key:
121
+ specification_version: 3
122
+ summary: Gem for searching thegamesdb.net
123
+ test_files: []
124
+ has_rdoc: