mtg_api 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 1b2702f5d06b9a76653603f369583c1963519792
4
+ data.tar.gz: b901c287139a30e2b7455059d91b333cea1748b3
5
+ SHA512:
6
+ metadata.gz: 181f33bf30d336e2739948ddc84a593786e3dd4b0d2a35610681f84f613136c684167b4f04f103a20a113f120129ba49f80137436bd42faf5c810a6a5b19f4ef
7
+ data.tar.gz: 207f44f75f510c0f5309af0cbddb0d837c98767d58865efce9176e971699650b1f99b209e36a589e81ed524a8d24b33f7d4d4df9f2d8d23aa41c6e4576343f25
data/.gitignore ADDED
@@ -0,0 +1,5 @@
1
+ /.bundle/
2
+ /coverage/
3
+ /doc/
4
+ /Gemfile.lock
5
+ /.yardoc/
data/.rubocop.yml ADDED
@@ -0,0 +1,24 @@
1
+ AllCops:
2
+ Exclude:
3
+ - 'test/**/*'
4
+ - 'vendor/**/*'
5
+
6
+ Metrics/LineLength:
7
+ Max: 100
8
+
9
+ Style/EmptyLinesAroundClassBody:
10
+ Enabled: false
11
+
12
+ Style/EmptyLinesAroundModuleBody:
13
+ Enabled: false
14
+
15
+ Style/IndentationConsistency:
16
+ Enabled: false
17
+
18
+ Style/PercentLiteralDelimiters:
19
+ PreferredDelimiters:
20
+ '%w': '[]'
21
+
22
+ Style/PerlBackrefs:
23
+ Enabled: false
24
+
data/.ruby-version ADDED
@@ -0,0 +1 @@
1
+ 2.2.2
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gemspec
data/LICENSE.txt ADDED
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2015 Kevin Deisz
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in
13
+ all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,39 @@
1
+ # MtgApi
2
+
3
+ Integrate with the mtgapi.com API.
4
+
5
+ ## Installation
6
+
7
+ Add this line to your application's Gemfile:
8
+
9
+ ```ruby
10
+ gem 'mtgapi'
11
+ ```
12
+
13
+ And then execute:
14
+
15
+ $ bundle
16
+
17
+ Or install it yourself as:
18
+
19
+ $ gem install mtgapi
20
+
21
+ ## Usage
22
+
23
+ Query cards with `MtgApi::Card` and sets with `MtgApi::Set`. Use ActiveRecord-like syntax (i.e. `MtgApi::Set.where(code: 'UNH').limit(3).first`).
24
+
25
+ ## Development
26
+
27
+ After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake test` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
28
+
29
+ To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
30
+
31
+ ## Contributing
32
+
33
+ Bug reports and pull requests are welcome on GitHub at https://github.com/kddeisz/mtgapi.
34
+
35
+
36
+ ## License
37
+
38
+ The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
39
+
data/Rakefile ADDED
@@ -0,0 +1,27 @@
1
+ begin
2
+ require 'bundler/setup'
3
+ rescue LoadError
4
+ puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
5
+ end
6
+
7
+ require 'rdoc/task'
8
+ require 'rake/testtask'
9
+
10
+ Bundler::GemHelper.install_tasks
11
+
12
+ RDoc::Task.new(:rdoc) do |rdoc|
13
+ rdoc.rdoc_dir = 'rdoc'
14
+ rdoc.title = 'MtgApi'
15
+ rdoc.options << '--line-numbers'
16
+ rdoc.rdoc_files.include('README.md')
17
+ rdoc.rdoc_files.include('lib/**/*.rb')
18
+ end
19
+
20
+ Rake::TestTask.new(:test) do |t|
21
+ t.libs << 'lib'
22
+ t.libs << 'test'
23
+ t.pattern = 'test/**/*_test.rb'
24
+ t.verbose = false
25
+ end
26
+
27
+ task default: :test
data/bin/console ADDED
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'bundler/setup'
4
+ require 'mtg_api'
5
+
6
+ require 'irb'
7
+ IRB.start
data/bin/setup ADDED
@@ -0,0 +1,5 @@
1
+ #!/bin/bash
2
+ set -euo pipefail
3
+ IFS=$'\n\t'
4
+
5
+ bundle install
@@ -0,0 +1,24 @@
1
+ module MtgApi
2
+
3
+ # represents a card in MtG
4
+ class Card < RequestEntity
5
+
6
+ configure do
7
+ attribute :artist, :border, :cmc, :colors, :flavor, :foreign_names, :hand, :layout
8
+ attribute :legalities, :life, :loyalty, :mana_cost, :multiverseid, :name, :names
9
+ attribute :number, :original_text, :original_type, :power, :printings, :rarity
10
+ attribute :rulings, :set, :subtypes, :supertypes, :text, :toughness, :type, :types
11
+ attribute :variations, :watermark
12
+
13
+ property :images, :links
14
+
15
+ setter :border, Utilities::Border
16
+ setter :colors, Utilities::ColorList
17
+ end
18
+
19
+ # the set that this card corresponds to
20
+ def set
21
+ Set.where(code: @set).first
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,55 @@
1
+ module MtgApi
2
+
3
+ # the configured properties of an entity
4
+ class Config
5
+
6
+ # the stored properties of this config
7
+ attr_accessor :attributes, :name, :properties, :setters
8
+
9
+ # store the class name and initialize empty lists
10
+ def initialize(clazz)
11
+ self.name = clazz.name
12
+ self.attributes = []
13
+ self.properties = []
14
+ self.setters = {}
15
+ end
16
+
17
+ # the list of attributes to build attr_accessors for
18
+ def accessors
19
+ attributes + properties - setters.keys
20
+ end
21
+
22
+ # add to the attributes list (queryable)
23
+ def attribute(*attributes)
24
+ self.attributes += attributes
25
+ end
26
+
27
+ # the endpoint to send to the api for the entity
28
+ def endpoint
29
+ @endpoint ||= '/' + response_key
30
+ end
31
+
32
+ # the full list of attributes set
33
+ def full_config
34
+ (attributes + properties + setters.keys).uniq
35
+ end
36
+
37
+ # add to the properties list (unqueryable)
38
+ def property(*properties)
39
+ self.properties += properties
40
+ end
41
+
42
+ # the key in the response for the api
43
+ def response_key
44
+ @response_key ||= name.downcase.split('::').last + 's'
45
+ end
46
+
47
+ # build a setter that can map the return value from the api
48
+ def setter(attribute, clazz = nil, &block)
49
+ setters[attribute] = proc do |value|
50
+ value = clazz.nil? ? block.call(value) : clazz.new(value)
51
+ instance_variable_set(:"@#{attribute}", value)
52
+ end
53
+ end
54
+ end
55
+ end
@@ -0,0 +1,75 @@
1
+ module MtgApi
2
+
3
+ # builds queries to send to the api
4
+ class QueryBuilder
5
+
6
+ # the stored class and query parameters
7
+ attr_accessor :clazz, :stored_conditions, :stored_limit, :stored_order
8
+
9
+ extend Forwardable
10
+ def_delegators :all, :each, :last, :inspect
11
+
12
+ include Enumerable
13
+
14
+ # store the class and initialize an empty conditions hash
15
+ def initialize(clazz)
16
+ self.clazz = clazz
17
+ self.stored_conditions = {}
18
+ end
19
+
20
+ # builds a request object and maps the responses onto the class
21
+ def all
22
+ response = Request.new(endpoint).response_for(clazz.config.response_key)
23
+ response = response[0...stored_limit] unless stored_limit.nil?
24
+
25
+ response.map! do |attributes|
26
+ clazz.new(attributes)
27
+ end
28
+ response.sort_by!(&stored_order.to_proc) unless stored_order.nil?
29
+
30
+ response
31
+ end
32
+
33
+ # store the limit to the response of the query if it is valid
34
+ def limit(limit)
35
+ fail ArgumentError, "Invalid limit given: #{limit}" unless limit > 0
36
+
37
+ self.stored_limit = limit
38
+ self
39
+ end
40
+
41
+ # store the order to sort the response of the query if it is valid
42
+ def order(order)
43
+ unless clazz.attributes.include?(order)
44
+ fail ArgumentError, "Invalid order given: #{order}"
45
+ end
46
+
47
+ self.stored_order = order
48
+ self
49
+ end
50
+
51
+ # store the conditions of this query if they are valid
52
+ def where(conditions)
53
+ if (invalid = (conditions.keys - clazz.attributes)).any?
54
+ fail ArgumentError, "Invalid conditions given: #{invalid.join(', ')}"
55
+ end
56
+
57
+ stored_conditions.merge!(conditions)
58
+ self
59
+ end
60
+
61
+ private
62
+
63
+ # the configured endpoint, taking into account conditions
64
+ def endpoint
65
+ endpoint = clazz.config.endpoint.dup
66
+ if stored_conditions.any?
67
+ query_string = stored_conditions.map do |key, value|
68
+ URI.escape("#{key}=#{value}")
69
+ end
70
+ endpoint << '?' + query_string.join('&')
71
+ end
72
+ endpoint
73
+ end
74
+ end
75
+ end
@@ -0,0 +1,44 @@
1
+ module MtgApi
2
+
3
+ # builds and sends requests to the api server
4
+ class Request
5
+
6
+ # the root url of the api
7
+ ROOT_URL = 'http://api.mtgapi.com/v2'
8
+
9
+ # the url for this request
10
+ attr_accessor :endpoint
11
+
12
+ # build a new request
13
+ def initialize(endpoint)
14
+ self.endpoint = URI(ROOT_URL + endpoint)
15
+ end
16
+
17
+ # get the response
18
+ def response
19
+ puts "\e[32mGET #{endpoint}\e[0m"
20
+ @response ||= JSON.parse(raw_response)
21
+ end
22
+
23
+ # the section of the response, formatted in snake case
24
+ def response_for(response_key)
25
+ (response[response_key] || []).map do |entity|
26
+ rubyify(entity)
27
+ end
28
+ end
29
+
30
+ private
31
+
32
+ # the response from the server
33
+ def raw_response
34
+ Net::HTTP.get(endpoint)
35
+ end
36
+
37
+ # format a hash to have snake case keys
38
+ def rubyify(entity)
39
+ entity.map do |key, value|
40
+ [key.to_s.gsub(/([A-Z])/) { '_' + $1.downcase }, value]
41
+ end.to_h
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,47 @@
1
+ module MtgApi
2
+
3
+ # represents an entity being returned from the API
4
+ class RequestEntity
5
+
6
+ # build a card set from a set of attributes
7
+ def initialize(attributes = {})
8
+ attributes.each do |key, value|
9
+ send(:"#{key}=", value) if respond_to?(:"#{key}=")
10
+ end
11
+ end
12
+
13
+ # the attributes of this request entity
14
+ def attributes
15
+ self.class.config.full_config.map { |attribute| [attribute, send(attribute)] }.to_h
16
+ end
17
+
18
+ class << self
19
+ # the stored Config instance for this class
20
+ attr_accessor :config
21
+
22
+ extend Forwardable
23
+ def_delegators :config, :attributes, :properties
24
+ def_delegators :query_builder, :all, :limit, :where, :first, :last, :order
25
+
26
+ # build a config and evaluate the block inside of it
27
+ def configure(&block)
28
+ self.config = Config.new(self)
29
+ config.instance_eval(&block)
30
+
31
+ attr_accessor *config.accessors
32
+ attr_reader *config.setters.keys
33
+
34
+ config.setters.each do |name, definition|
35
+ define_method(:"#{name}=", definition)
36
+ end
37
+ end
38
+
39
+ private
40
+
41
+ # build a query builder whenever query methods are called on this class
42
+ def query_builder
43
+ QueryBuilder.new(self)
44
+ end
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,27 @@
1
+ module MtgApi
2
+
3
+ # represents a set in MtG
4
+ class Set < RequestEntity
5
+
6
+ configure do
7
+ attribute :block, :border, :code, :gatherer_code, :name
8
+ attribute :old_code, :online_only, :release_date, :type
9
+
10
+ property :card_count, :links, :symbol_images
11
+
12
+ setter :border, Utilities::Border
13
+ setter :links do |links|
14
+ Utilities::SetLinks.new(links.map { |key, value| [key.to_sym, value] }.to_h)
15
+ end
16
+ setter :release_date do |date|
17
+ Date.parse(date) if date
18
+ end
19
+ setter :type, Utilities::SetType
20
+ end
21
+
22
+ # the cards that belong to this set
23
+ def cards
24
+ Card.where(set: code)
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,11 @@
1
+ module MtgApi
2
+ module Utilities
3
+
4
+ # stores the border of a card or set
5
+ class Border < WhiteList
6
+
7
+ self.list = %w[white black silver]
8
+
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,11 @@
1
+ module MtgApi
2
+ module Utilities
3
+
4
+ # stores the list of colors on a card
5
+ class ColorList < WhiteList
6
+
7
+ self.list = ['white', 'blue', 'green', 'red', 'black', nil]
8
+
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,17 @@
1
+ module MtgApi
2
+ module Utilities
3
+
4
+ # stores the links to the cards or booster of a set
5
+ class SetLinks
6
+
7
+ # the urls
8
+ attr_accessor :cards, :booster
9
+
10
+ # store the given values
11
+ def initialize(args = {})
12
+ self.cards = args[:cards]
13
+ self.booster = args[:booster]
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,13 @@
1
+ module MtgApi
2
+ module Utilities
3
+
4
+ # stores the type of a set
5
+ class SetType < WhiteList
6
+
7
+ self.list = ['archenemy', 'box', 'commander', 'conspiracy', 'core', 'duel deck',
8
+ 'expansion', 'from the vault', 'masters', 'planechase', 'premium deck',
9
+ 'promo', 'reprint', 'starter', 'un', 'vanguard']
10
+
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,34 @@
1
+ module MtgApi
2
+ module Utilities
3
+
4
+ # a class that validates that the initialization value is
5
+ # contained in the list stored on the class
6
+ class WhiteList
7
+
8
+ # the value of this instance of a whitelist
9
+ attr_accessor :value
10
+
11
+ # store and validate the given value
12
+ def initialize(value)
13
+ self.value = value
14
+ fail ArgumentError, "Invalid value given: #{value.inspect}" unless valid?
15
+ end
16
+
17
+ class << self
18
+ # the list of available values
19
+ attr_accessor :list
20
+ end
21
+
22
+ private
23
+
24
+ # whether or not the given value is valid
25
+ def valid?
26
+ if value.is_a?(Array)
27
+ (value - self.class.list).none?
28
+ else
29
+ self.class.list.include?(value)
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,12 @@
1
+ require 'mtg_api/utilities/white_list'
2
+ require 'mtg_api/utilities/border'
3
+ require 'mtg_api/utilities/color_list'
4
+ require 'mtg_api/utilities/set_type'
5
+ require 'mtg_api/utilities/set_links'
6
+
7
+ module MtgApi
8
+
9
+ # builds structures for attributes of entities
10
+ module Utilities
11
+ end
12
+ end
@@ -0,0 +1,5 @@
1
+ module MtgApi
2
+
3
+ # the current version of this gem
4
+ VERSION = '0.0.1'
5
+ end
data/lib/mtg_api.rb ADDED
@@ -0,0 +1,16 @@
1
+ require 'forwardable'
2
+ require 'json'
3
+ require 'net/http'
4
+
5
+ require 'mtg_api/config'
6
+ require 'mtg_api/request'
7
+ require 'mtg_api/request_entity'
8
+ require 'mtg_api/query_builder'
9
+ require 'mtg_api/utilities'
10
+
11
+ require 'mtg_api/card'
12
+ require 'mtg_api/set'
13
+
14
+ # namespace for the MtgApi gem
15
+ module MtgApi
16
+ end
data/mtg_api.gemspec ADDED
@@ -0,0 +1,28 @@
1
+ # coding: utf-8
2
+
3
+ lib = File.expand_path('../lib', __FILE__)
4
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
5
+ require 'mtg_api/version'
6
+
7
+ Gem::Specification.new do |spec|
8
+ spec.name = 'mtg_api'
9
+ spec.version = MtgApi::VERSION
10
+ spec.authors = ['Kevin Deisz']
11
+ spec.email = ['kevin.deisz@gmail.com']
12
+ spec.homepage = 'https://github.com/kddeisz/mtg_api'
13
+
14
+ spec.summary = 'Ruby integration with mtgapi.com'
15
+ spec.description = 'Query for cards, sets, and boosters against the mtgapi.com API'
16
+ spec.license = 'MIT'
17
+
18
+ spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test)/}) }
19
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
20
+ spec.require_paths = ['lib']
21
+
22
+ spec.add_development_dependency 'bundler', '~> 1.10'
23
+ spec.add_development_dependency 'rake', '~> 10.4'
24
+ spec.add_development_dependency 'minitest', '~> 5.8'
25
+ spec.add_development_dependency 'simplecov', '~> 0.10'
26
+ spec.add_development_dependency 'rubocop', '~> 0.33'
27
+ spec.add_development_dependency 'yard', '~> 0.8'
28
+ end
metadata ADDED
@@ -0,0 +1,153 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: mtg_api
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Kevin Deisz
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-08-19 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.10'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.10'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '10.4'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '10.4'
41
+ - !ruby/object:Gem::Dependency
42
+ name: minitest
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '5.8'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '5.8'
55
+ - !ruby/object:Gem::Dependency
56
+ name: simplecov
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '0.10'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '0.10'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rubocop
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '0.33'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '0.33'
83
+ - !ruby/object:Gem::Dependency
84
+ name: yard
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '0.8'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '0.8'
97
+ description: Query for cards, sets, and boosters against the mtgapi.com API
98
+ email:
99
+ - kevin.deisz@gmail.com
100
+ executables: []
101
+ extensions: []
102
+ extra_rdoc_files: []
103
+ files:
104
+ - ".gitignore"
105
+ - ".rubocop.yml"
106
+ - ".ruby-version"
107
+ - Gemfile
108
+ - LICENSE.txt
109
+ - README.md
110
+ - Rakefile
111
+ - bin/console
112
+ - bin/setup
113
+ - lib/mtg_api.rb
114
+ - lib/mtg_api/card.rb
115
+ - lib/mtg_api/config.rb
116
+ - lib/mtg_api/query_builder.rb
117
+ - lib/mtg_api/request.rb
118
+ - lib/mtg_api/request_entity.rb
119
+ - lib/mtg_api/set.rb
120
+ - lib/mtg_api/utilities.rb
121
+ - lib/mtg_api/utilities/border.rb
122
+ - lib/mtg_api/utilities/color_list.rb
123
+ - lib/mtg_api/utilities/set_links.rb
124
+ - lib/mtg_api/utilities/set_type.rb
125
+ - lib/mtg_api/utilities/white_list.rb
126
+ - lib/mtg_api/version.rb
127
+ - mtg_api.gemspec
128
+ homepage: https://github.com/kddeisz/mtg_api
129
+ licenses:
130
+ - MIT
131
+ metadata: {}
132
+ post_install_message:
133
+ rdoc_options: []
134
+ require_paths:
135
+ - lib
136
+ required_ruby_version: !ruby/object:Gem::Requirement
137
+ requirements:
138
+ - - ">="
139
+ - !ruby/object:Gem::Version
140
+ version: '0'
141
+ required_rubygems_version: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - ">="
144
+ - !ruby/object:Gem::Version
145
+ version: '0'
146
+ requirements: []
147
+ rubyforge_project:
148
+ rubygems_version: 2.4.5
149
+ signing_key:
150
+ specification_version: 4
151
+ summary: Ruby integration with mtgapi.com
152
+ test_files: []
153
+ has_rdoc: