codewars_api 0.1.0

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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 41fb6958694a1781c07f257672406e621041accf
4
+ data.tar.gz: 4606f434e3e1ae7a43aae9480493e1a763929f26
5
+ SHA512:
6
+ metadata.gz: 7442b9282618717c40cb4439bb63026204381d6feafc74848a1ea35f6b0050fbe51143244e0862763145265f5aeadb23f15d79971250318e952f53a71347da09
7
+ data.tar.gz: 701cb4057bc2897db42111eae1582be5facad09ce1b46d270627dca82b91d3eb5ed037277011ec27886b1acf5f4adf9ba803c8d80940068d98343936b432e334
data/.gitignore ADDED
@@ -0,0 +1,11 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /Gemfile.lock
4
+ /_yardoc/
5
+ /coverage/
6
+ /doc/
7
+ /pkg/
8
+ /spec/reports/
9
+ /tmp/
10
+ tags
11
+ .DS_Store
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --color
2
+ --order random
data/.rubocop.yml ADDED
@@ -0,0 +1,17 @@
1
+ Metrics/LineLength:
2
+ Max: 100
3
+
4
+ Metrics/AbcSize:
5
+ Max: 25
6
+
7
+ Metrics/MethodLength:
8
+ Max: 15
9
+
10
+ Style/Documentation:
11
+ Enabled: false
12
+
13
+ Style/Encoding:
14
+ Enabled: false
15
+
16
+ Style/RescueModifier:
17
+ Enabled: false
data/.travis.yml ADDED
@@ -0,0 +1,4 @@
1
+ language: ruby
2
+
3
+ rvm:
4
+ - 2.2.2
data/.yardopts ADDED
@@ -0,0 +1 @@
1
+ --markup=markdown
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in codewars.gemspec
4
+ gemspec
data/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2015 Evgeny Morozov
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 all
13
+ 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 THE
21
+ SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,81 @@
1
+ # Codewars API Client
2
+
3
+ [Codewars API](http://dev.codewars.com)
4
+
5
+ ## Installation
6
+
7
+ Add this line to your application's Gemfile `gem 'codewars_api'`
8
+
9
+ And then execute `$ bundle`
10
+
11
+ Or install it yourself as `$ gem install codewars_api`
12
+
13
+ ## Usage
14
+
15
+ http://rdoc.info/gems/codewars_api_client
16
+
17
+ ```ruby
18
+ client = CodewarsApi::Client.new(api_key: your_api_key)
19
+
20
+ train_next_kata = client.train_next_kata(language: language)
21
+ train_next_kata.code_setup
22
+ # => 'function toInteger(n) {}'
23
+
24
+ attempt_solution = client.attempt_solution(
25
+ project_id: train_next_kata.project_id,
26
+ solution_id: train_next_kata.solution_id,
27
+ code: solution_code
28
+ )
29
+
30
+ 10.times do
31
+ deferred_response = client.deferred_response(dmid: attempt_solution.dmid)
32
+ break if deferred_response.success
33
+ sleep 1
34
+ end
35
+
36
+ if deferred_response.valid
37
+ client.finalize_solution(
38
+ project_id: train_next_kata.project_id,
39
+ solution_id: train_next_kata.solution_id
40
+ )
41
+ else
42
+ warn deferred_response.reason
43
+ # => '-e: Value is not what was expected (Test::Error)'
44
+ end
45
+ ```
46
+
47
+ #### Gem structure
48
+
49
+ API endpoint | Wrapper class (in CodewarsApi::) | Client's method to get an instance
50
+ ------------------------------ | -------------------------------- | --------------------------------
51
+ GET User | User | #user
52
+ GET Code Challenge | KataInfo | #kata_info
53
+ POST Train Next Code Challenge | TrainNextKata | #train_next_kata
54
+ POST Train Code Challenge | TrainSpecificKata | #train_specifc_kata
55
+ POST Attempt Solution | AttemptSolution | #attempt_solution
56
+ POST Finalize Solution | FinalizeSolution | #finalize_solution
57
+ GET Deferred Response | DeferredResponse | #deferred_response
58
+
59
+ ## Development
60
+
61
+ #### Check API methods
62
+
63
+ API documentation is a bit out of date. Tests in api_spec.rb make real request and check keys of json in a response against fixture/.json files. If you run these tests often (more then twice per second) your IP can be banned.
64
+
65
+ Execute to run the tests
66
+
67
+ `CHECK_API=true API_KEY=your_key USERNAME=any_user bundle exec rspec spec/api_spec.rb`
68
+
69
+ ## Contributing
70
+
71
+ Bug reports, pull requests and ideas are welcome!
72
+
73
+ Steps to make a pull request:
74
+
75
+ 1. Fork it ( https://github.com/Evmorov/codewars_api_client/fork )
76
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
77
+ 3. Make changes
78
+ 4. Add tests for it
79
+ 5. Commit your changes (`git commit -am 'Add some feature'`)
80
+ 6. Push to the branch (`git push origin my-new-feature`)
81
+ 7. Create a new Pull Request
data/Rakefile ADDED
@@ -0,0 +1,13 @@
1
+ require 'bundler/gem_tasks'
2
+ require 'rspec/core/rake_task'
3
+
4
+ RSpec::Core::RakeTask.new(:spec)
5
+ task test: :spec
6
+
7
+ require 'rubocop/rake_task'
8
+ RuboCop::RakeTask.new
9
+
10
+ require 'yard'
11
+ YARD::Rake::YardocTask.new
12
+
13
+ task default: [:spec, :rubocop]
@@ -0,0 +1,34 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'codewars_api/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = 'codewars_api'
8
+ spec.version = CodewarsApi::VERSION
9
+ spec.authors = ['Evgeny Morozov']
10
+ spec.email = ['evmorov@gmail.com']
11
+
12
+ spec.summary = 'Simple Ruby wrapper for the Codewars API '
13
+ spec.homepage = 'https://github.com/Evmorov/codewars_api_client'
14
+
15
+ spec.files = `git ls-files -z`.split("\x0")
16
+ .reject { |f| f.match(%r{^(test|spec|features)/}) }
17
+ spec.bindir = 'exe'
18
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
19
+ spec.require_paths = ['lib']
20
+ spec.licenses = ['MIT']
21
+
22
+ spec.add_development_dependency 'bundler', '~> 1.10'
23
+ spec.add_development_dependency 'rake', '~> 10.0'
24
+ spec.add_development_dependency 'rspec', '~> 3.3.0'
25
+ spec.add_development_dependency 'webmock', '~> 1.21.0'
26
+ spec.add_development_dependency 'pry-byebug'
27
+ spec.add_development_dependency 'simplecov'
28
+ spec.add_development_dependency 'yard'
29
+ spec.add_development_dependency 'redcarpet'
30
+ spec.add_development_dependency 'rubocop'
31
+
32
+ spec.add_dependency 'httparty', '~> 0.13.7'
33
+ spec.add_dependency 'andand', '~> 1.3.3'
34
+ end
@@ -0,0 +1,31 @@
1
+ module CodewarsApi
2
+ class AttemptSolution
3
+ def initialize(options)
4
+ api_key = options.delete!(:api_key)
5
+ project_id = options.delete!(:project_id)
6
+ solution_id = options.delete!(:solution_id)
7
+
8
+ request_options = {}
9
+ request_options = RequestHelper.add_api_key(request_options, api_key)
10
+ request_options = RequestHelper.add_body_options(request_options, options)
11
+
12
+ @response = RequestHelper.post(
13
+ "#{CodewarsApi::API_URL}"\
14
+ "/code-challenges/projects/#{project_id}/solutions/#{solution_id}/attempt",
15
+ request_options
16
+ )
17
+ end
18
+
19
+ def success
20
+ @response.to_h['success']
21
+ end
22
+
23
+ def dmid
24
+ @response.to_h['dmid']
25
+ end
26
+
27
+ def to_h
28
+ @response.to_h
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,48 @@
1
+ module CodewarsApi
2
+ class Client
3
+ attr_reader :api_key
4
+
5
+ def initialize(options)
6
+ @api_key = options[:api_key] if options[:api_key]
7
+ end
8
+
9
+ def user(username)
10
+ User.new(username)
11
+ end
12
+
13
+ def kata_info(id_or_slug)
14
+ KataInfo.new(id_or_slug)
15
+ end
16
+
17
+ def train_next_kata(options)
18
+ add_api_key(options)
19
+ TrainNextKata.new(options)
20
+ end
21
+
22
+ def train_specific_kata(options)
23
+ add_api_key(options)
24
+ TrainSpecificKata.new(options)
25
+ end
26
+
27
+ def attempt_solution(options)
28
+ add_api_key(options)
29
+ AttemptSolution.new(options)
30
+ end
31
+
32
+ def finalize_solution(options)
33
+ add_api_key(options)
34
+ FinalizeSolution.new(options)
35
+ end
36
+
37
+ def deferred_response(options)
38
+ add_api_key(options)
39
+ DeferredResponse.new(options)
40
+ end
41
+
42
+ private
43
+
44
+ def add_api_key(options)
45
+ options[:api_key] = @api_key
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,81 @@
1
+ module CodewarsApi
2
+ class DeferredResponse
3
+ def initialize(options)
4
+ api_key = options.delete!(:api_key)
5
+ dmid = options.delete!(:dmid)
6
+
7
+ request_options = {}
8
+ request_options = RequestHelper.add_api_key(request_options, api_key)
9
+
10
+ @response = RequestHelper.get("#{CodewarsApi::API_URL}/deferred/#{dmid}", request_options)
11
+ end
12
+
13
+ def success
14
+ @response.to_h['success']
15
+ end
16
+
17
+ def dmid
18
+ @response.to_h['dmid']
19
+ end
20
+
21
+ def solution_id
22
+ @response.to_h['solution_id']
23
+ end
24
+
25
+ def valid
26
+ @response.to_h['valid']
27
+ end
28
+
29
+ def server_error
30
+ @response.to_h['server_error']
31
+ end
32
+
33
+ def passed
34
+ @response.to_h['passed']
35
+ end
36
+
37
+ def errors
38
+ @response.to_h['errors']
39
+ end
40
+
41
+ def failed
42
+ @response.to_h['failed']
43
+ end
44
+
45
+ def timed_out
46
+ @response.to_h['timed_out']
47
+ end
48
+
49
+ def summary_passed
50
+ @response.to_h['summary'].andand['passed']
51
+ end
52
+
53
+ def summary_failed
54
+ @response.to_h['summary'].andand['failed']
55
+ end
56
+
57
+ def summary_errors
58
+ @response.to_h['summary'].andand['errors']
59
+ end
60
+
61
+ def reason
62
+ @response.to_h['reason']
63
+ end
64
+
65
+ def output
66
+ @response.to_h['output']
67
+ end
68
+
69
+ def wall_time
70
+ @response.to_h['wall_time']
71
+ end
72
+
73
+ def status_code
74
+ @response.to_h['status_code']
75
+ end
76
+
77
+ def to_h
78
+ @response.to_h
79
+ end
80
+ end
81
+ end
@@ -0,0 +1,26 @@
1
+ module CodewarsApi
2
+ class FinalizeSolution
3
+ def initialize(options)
4
+ api_key = options.delete!(:api_key)
5
+ project_id = options.delete!(:project_id)
6
+ solution_id = options.delete!(:solution_id)
7
+
8
+ request_options = {}
9
+ request_options = RequestHelper.add_api_key(request_options, api_key)
10
+
11
+ @response = RequestHelper.post(
12
+ "#{CodewarsApi::API_URL}"\
13
+ "/code-challenges/projects/#{project_id}/solutions/#{solution_id}/finalize",
14
+ request_options
15
+ )
16
+ end
17
+
18
+ def success
19
+ @response.to_h['success']
20
+ end
21
+
22
+ def to_h
23
+ @response.to_h
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,103 @@
1
+ module CodewarsApi
2
+ class KataInfo
3
+ def initialize(id)
4
+ @response = RequestHelper.get("#{CodewarsApi::API_URL}/code-challenges/#{id}")
5
+ end
6
+
7
+ def id
8
+ @response.to_h['id']
9
+ end
10
+
11
+ def name
12
+ @response.to_h['name']
13
+ end
14
+
15
+ def slug
16
+ @response.to_h['slug']
17
+ end
18
+
19
+ def category
20
+ @response.to_h['category']
21
+ end
22
+
23
+ def published_at
24
+ @response.to_h['publishedAt']
25
+ end
26
+
27
+ def approved_at
28
+ @response.to_h['approvedAt']
29
+ end
30
+
31
+ def languages
32
+ @response.to_h['languages']
33
+ end
34
+
35
+ def url
36
+ @response.to_h['url']
37
+ end
38
+
39
+ def rank
40
+ @response.to_h['rank']
41
+ end
42
+
43
+ def created_at
44
+ @response.to_h['createdAt']
45
+ end
46
+
47
+ def creater_username
48
+ @response.to_h['createdBy'].andand['username']
49
+ end
50
+
51
+ def creater_url
52
+ @response.to_h['createdBy'].andand['url']
53
+ end
54
+
55
+ def approver_username
56
+ @response.to_h['approvedBy'].andand['username']
57
+ end
58
+
59
+ def approver_url
60
+ @response.to_h['approvedBy'].andand['url']
61
+ end
62
+
63
+ def description
64
+ @response.to_h['description']
65
+ end
66
+
67
+ def total_attempts
68
+ @response.to_h['totalAttempts']
69
+ end
70
+
71
+ def total_completed
72
+ @response.to_h['totalCompleted']
73
+ end
74
+
75
+ def total_stars
76
+ @response.to_h['totalStars']
77
+ end
78
+
79
+ def vote_score
80
+ @response.to_h['voteScore']
81
+ end
82
+
83
+ def tags
84
+ @response.to_h['tags']
85
+ end
86
+
87
+ def contributors_wanted
88
+ @response.to_h['contributorsWanted']
89
+ end
90
+
91
+ def unresolved_issues
92
+ @response.to_h['unresolved'].andand['issues']
93
+ end
94
+
95
+ def unresolved_suggestions
96
+ @response.to_h['unresolved'].andand['suggestions']
97
+ end
98
+
99
+ def to_h
100
+ @response.to_h
101
+ end
102
+ end
103
+ end
@@ -0,0 +1,20 @@
1
+ require 'httparty'
2
+
3
+ module CodewarsApi
4
+ module RequestHelper
5
+ include HTTParty
6
+ base_uri CodewarsApi::BASE_URL
7
+
8
+ def self.add_api_key(request_options, api_key)
9
+ request_options = request_options.dup
10
+ request_options[:headers] = { 'Authorization' => api_key }
11
+ request_options
12
+ end
13
+
14
+ def self.add_body_options(request_options, body_options)
15
+ request_options = request_options.dup
16
+ request_options[:body] = body_options
17
+ request_options
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,77 @@
1
+ module CodewarsApi
2
+ class TrainNextKata
3
+ def initialize(options)
4
+ api_key = options.delete!(:api_key)
5
+ language = options.delete!(:language)
6
+
7
+ request_options = {}
8
+ request_options = RequestHelper.add_api_key(request_options, api_key)
9
+ request_options = RequestHelper.add_body_options(request_options, options)
10
+
11
+ @response = RequestHelper.post(
12
+ "#{CodewarsApi::API_URL}/code-challenges/#{language}/train",
13
+ request_options
14
+ )
15
+ end
16
+
17
+ def success
18
+ @response.to_h['success']
19
+ end
20
+
21
+ def name
22
+ @response.to_h['name']
23
+ end
24
+
25
+ def slug
26
+ @response.to_h['slug']
27
+ end
28
+
29
+ def href
30
+ @response.to_h['href']
31
+ end
32
+
33
+ def description
34
+ @response.to_h['description']
35
+ end
36
+
37
+ def author
38
+ @response.to_h['author']
39
+ end
40
+
41
+ def rank
42
+ @response.to_h['rank']
43
+ end
44
+
45
+ def average_completion
46
+ @response.to_h['averageCompletion']
47
+ end
48
+
49
+ def tags
50
+ @response.to_h['tags']
51
+ end
52
+
53
+ def project_id
54
+ @response.to_h['session'].andand['projectId']
55
+ end
56
+
57
+ def solution_id
58
+ @response.to_h['session'].andand['solutionId']
59
+ end
60
+
61
+ def code_setup
62
+ @response.to_h['session'].andand['setup']
63
+ end
64
+
65
+ def tests_setup
66
+ @response.to_h['session'].andand['exampleFixture']
67
+ end
68
+
69
+ def code
70
+ @response.to_h['session'].andand['code']
71
+ end
72
+
73
+ def to_h
74
+ @response.to_h
75
+ end
76
+ end
77
+ end
@@ -0,0 +1,77 @@
1
+ module CodewarsApi
2
+ class TrainSpecificKata
3
+ def initialize(options)
4
+ api_key = options.delete!(:api_key)
5
+ language = options.delete!(:language)
6
+ id_or_slug = options.delete!(:id_or_slug)
7
+
8
+ request_options = {}
9
+ request_options = RequestHelper.add_api_key(request_options, api_key)
10
+
11
+ @response = RequestHelper.post(
12
+ "#{CodewarsApi::API_URL}/code-challenges/#{id_or_slug}/#{language}/train",
13
+ request_options
14
+ )
15
+ end
16
+
17
+ def success
18
+ @response.to_h['success']
19
+ end
20
+
21
+ def name
22
+ @response.to_h['name']
23
+ end
24
+
25
+ def slug
26
+ @response.to_h['slug']
27
+ end
28
+
29
+ def description
30
+ @response.to_h['description']
31
+ end
32
+
33
+ def author
34
+ @response.to_h['author']
35
+ end
36
+
37
+ def rank
38
+ @response.to_h['rank']
39
+ end
40
+
41
+ def average_completion
42
+ @response.to_h['averageCompletion']
43
+ end
44
+
45
+ def tags
46
+ @response.to_h['tags']
47
+ end
48
+
49
+ def project_id
50
+ @response.to_h['session'].andand['projectId']
51
+ end
52
+
53
+ def solution_id
54
+ @response.to_h['session'].andand['solutionId']
55
+ end
56
+
57
+ def code_setup
58
+ @response.to_h['session'].andand['setup']
59
+ end
60
+
61
+ def tests_setup
62
+ @response.to_h['session'].andand['exampleFixture']
63
+ end
64
+
65
+ def code
66
+ @response.to_h['session'].andand['code']
67
+ end
68
+
69
+ def recently_attempted
70
+ @response.to_h['session'].andand['recentlyAttempted']
71
+ end
72
+
73
+ def to_h
74
+ @response.to_h
75
+ end
76
+ end
77
+ end
@@ -0,0 +1,52 @@
1
+ module CodewarsApi
2
+ class User
3
+ def initialize(username)
4
+ fail 'Username is not set' unless username
5
+ @response = RequestHelper.get("#{CodewarsApi::API_URL}/users/#{username}")
6
+ end
7
+
8
+ def username
9
+ @response.to_h['username']
10
+ end
11
+
12
+ def name
13
+ @response.to_h['name']
14
+ end
15
+
16
+ def honor
17
+ @response.to_h['honor']
18
+ end
19
+
20
+ def clan
21
+ @response.to_h['clan']
22
+ end
23
+
24
+ def leaderboard_position
25
+ @response.to_h['leaderboardPosition']
26
+ end
27
+
28
+ def skills
29
+ @response.to_h['skills']
30
+ end
31
+
32
+ def rank_overall
33
+ @response.to_h['ranks'].andand['overall']
34
+ end
35
+
36
+ def rank_languages
37
+ @response.to_h['ranks'].andand['languages']
38
+ end
39
+
40
+ def katas_authored
41
+ @response.to_h['codeChallenges'].andand['totalAuthored']
42
+ end
43
+
44
+ def katas_completed
45
+ @response.to_h['codeChallenges'].andand['totalCompleted']
46
+ end
47
+
48
+ def to_h
49
+ @response.to_h
50
+ end
51
+ end
52
+ end
@@ -0,0 +1,3 @@
1
+ module CodewarsApi
2
+ VERSION = '0.1.0'
3
+ end
@@ -0,0 +1,29 @@
1
+ begin
2
+ require 'pry'
3
+ rescue LoadError
4
+ nil
5
+ end
6
+
7
+ module CodewarsApi
8
+ BASE_URL = 'https://www.codewars.com'
9
+ API_URL = '/api/v1'
10
+ end
11
+
12
+ class Hash
13
+ def delete!(key)
14
+ fetch(key)
15
+ delete(key)
16
+ end
17
+ end
18
+
19
+ require 'andand'
20
+ require 'codewars_api/request_helper'
21
+ require 'codewars_api/version'
22
+ require 'codewars_api/client'
23
+ require 'codewars_api/user'
24
+ require 'codewars_api/kata_info'
25
+ require 'codewars_api/train_next_kata'
26
+ require 'codewars_api/train_specific_kata'
27
+ require 'codewars_api/attempt_solution'
28
+ require 'codewars_api/finalize_solution'
29
+ require 'codewars_api/deferred_response'
metadata ADDED
@@ -0,0 +1,220 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: codewars_api
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Evgeny Morozov
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2015-11-06 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.0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '10.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rspec
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: 3.3.0
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: 3.3.0
55
+ - !ruby/object:Gem::Dependency
56
+ name: webmock
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: 1.21.0
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: 1.21.0
69
+ - !ruby/object:Gem::Dependency
70
+ name: pry-byebug
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: simplecov
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: yard
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: redcarpet
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
125
+ - !ruby/object:Gem::Dependency
126
+ name: rubocop
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ">="
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ">="
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
139
+ - !ruby/object:Gem::Dependency
140
+ name: httparty
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - "~>"
144
+ - !ruby/object:Gem::Version
145
+ version: 0.13.7
146
+ type: :runtime
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - "~>"
151
+ - !ruby/object:Gem::Version
152
+ version: 0.13.7
153
+ - !ruby/object:Gem::Dependency
154
+ name: andand
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - "~>"
158
+ - !ruby/object:Gem::Version
159
+ version: 1.3.3
160
+ type: :runtime
161
+ prerelease: false
162
+ version_requirements: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - "~>"
165
+ - !ruby/object:Gem::Version
166
+ version: 1.3.3
167
+ description:
168
+ email:
169
+ - evmorov@gmail.com
170
+ executables: []
171
+ extensions: []
172
+ extra_rdoc_files: []
173
+ files:
174
+ - ".gitignore"
175
+ - ".rspec"
176
+ - ".rubocop.yml"
177
+ - ".travis.yml"
178
+ - ".yardopts"
179
+ - Gemfile
180
+ - LICENSE
181
+ - README.md
182
+ - Rakefile
183
+ - codewars_api.gemspec
184
+ - lib/codewars_api.rb
185
+ - lib/codewars_api/attempt_solution.rb
186
+ - lib/codewars_api/client.rb
187
+ - lib/codewars_api/deferred_response.rb
188
+ - lib/codewars_api/finalize_solution.rb
189
+ - lib/codewars_api/kata_info.rb
190
+ - lib/codewars_api/request_helper.rb
191
+ - lib/codewars_api/train_next_kata.rb
192
+ - lib/codewars_api/train_specific_kata.rb
193
+ - lib/codewars_api/user.rb
194
+ - lib/codewars_api/version.rb
195
+ homepage: https://github.com/Evmorov/codewars_api_client
196
+ licenses:
197
+ - MIT
198
+ metadata: {}
199
+ post_install_message:
200
+ rdoc_options: []
201
+ require_paths:
202
+ - lib
203
+ required_ruby_version: !ruby/object:Gem::Requirement
204
+ requirements:
205
+ - - ">="
206
+ - !ruby/object:Gem::Version
207
+ version: '0'
208
+ required_rubygems_version: !ruby/object:Gem::Requirement
209
+ requirements:
210
+ - - ">="
211
+ - !ruby/object:Gem::Version
212
+ version: '0'
213
+ requirements: []
214
+ rubyforge_project:
215
+ rubygems_version: 2.4.5
216
+ signing_key:
217
+ specification_version: 4
218
+ summary: Simple Ruby wrapper for the Codewars API
219
+ test_files: []
220
+ has_rdoc: