wanikani 0.0.2
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/lib/wanikani.rb +45 -0
- data/lib/wanikani/level.rb +12 -0
- data/lib/wanikani/recent_unlocks.rb +40 -0
- data/lib/wanikani/srs.rb +20 -0
- data/lib/wanikani/study_queue.rb +26 -0
- data/lib/wanikani/user.rb +12 -0
- metadata +115 -0
data/lib/wanikani.rb
ADDED
@@ -0,0 +1,45 @@
|
|
1
|
+
# -*- encoding : utf-8 -*-
|
2
|
+
require 'rest_client'
|
3
|
+
require 'multi_json'
|
4
|
+
|
5
|
+
require 'wanikani/user'
|
6
|
+
require 'wanikani/study_queue'
|
7
|
+
require 'wanikani/level'
|
8
|
+
require 'wanikani/srs'
|
9
|
+
require 'wanikani/recent_unlocks'
|
10
|
+
|
11
|
+
module Wanikani
|
12
|
+
API_ENDPOINT = "http://www.wanikani.com/api/user"
|
13
|
+
|
14
|
+
def self.api_key=(api_key)
|
15
|
+
@api_key = api_key
|
16
|
+
end
|
17
|
+
|
18
|
+
def self.api_key
|
19
|
+
@api_key
|
20
|
+
end
|
21
|
+
|
22
|
+
def self.api_response(resource, optional_arg = nil)
|
23
|
+
raise ArgumentError, "You must define a resource to query Wanikani" if resource.nil? || resource.empty?
|
24
|
+
raise ArgumentError, "You must set your Wanikani API key before querying the API" if Wanikani.api_key.nil? || Wanikani.api_key.empty?
|
25
|
+
|
26
|
+
begin
|
27
|
+
response = RestClient.get("#{Wanikani::API_ENDPOINT}/#{Wanikani.api_key}/#{resource}/#{optional_arg}")
|
28
|
+
parsed_response = MultiJson.load(response)
|
29
|
+
|
30
|
+
if parsed_response.has_key?("error")
|
31
|
+
self.raise_exception(parsed_response["error"]["message"])
|
32
|
+
else
|
33
|
+
return parsed_response
|
34
|
+
end
|
35
|
+
rescue => error
|
36
|
+
self.raise_exception(error.message)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
private
|
41
|
+
|
42
|
+
def self.raise_exception(message)
|
43
|
+
raise Exception, "There was an error fetching the data from Wanikani (#{message})"
|
44
|
+
end
|
45
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
# -*- encoding : utf-8 -*-
|
2
|
+
module Wanikani
|
3
|
+
class Level
|
4
|
+
# Gets the user's current level progression (radicals and Kanji).
|
5
|
+
#
|
6
|
+
# @return [Hash] Progress and total of radicals and Kanji for the user's current level.
|
7
|
+
def self.progression
|
8
|
+
api_response = Wanikani.api_response("level-progression")
|
9
|
+
return api_response["requested_information"]
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
# -*- encoding : utf-8 -*-
|
2
|
+
module Wanikani
|
3
|
+
class RecentUnlocks
|
4
|
+
# Gets the recent unlocked items (radicals, Kanji and vocabulary).
|
5
|
+
#
|
6
|
+
# @param [Integer] limit the total number of items returned.
|
7
|
+
# @return [Array] Returns hashes of unlocked items and related information.
|
8
|
+
def self.list(limit = 10)
|
9
|
+
api_response = Wanikani.api_response("recent-unlocks", limit)
|
10
|
+
return api_response["requested_information"]
|
11
|
+
end
|
12
|
+
|
13
|
+
# Gets the recent unlocked radicals.
|
14
|
+
#
|
15
|
+
# @param [Integer] limit the total number of items returned.
|
16
|
+
# @return [Array] Returns hashes of unlocked radicals and related information.
|
17
|
+
def self.radicals(limit = 10)
|
18
|
+
unlock_list = self.list(limit)
|
19
|
+
return unlock_list.select { |unlock| unlock["type"] == "radical" }
|
20
|
+
end
|
21
|
+
|
22
|
+
# Gets the recent unlocked vocabulary.
|
23
|
+
#
|
24
|
+
# @param [Integer] limit the total number of items returned.
|
25
|
+
# @return [Array] Returns hashes of unlocked vocabulary and related information.
|
26
|
+
def self.vocabulary(limit = 10)
|
27
|
+
unlock_list = self.list(limit)
|
28
|
+
return unlock_list.select { |unlock| unlock["type"] == "vocabulary" }
|
29
|
+
end
|
30
|
+
|
31
|
+
# Gets the recent unlocked Kanji.
|
32
|
+
#
|
33
|
+
# @param [Integer] limit the total number of items returned.
|
34
|
+
# @return [Array] Returns hashes of unlocked Kanji and related information.
|
35
|
+
def self.kanji(limit = 10)
|
36
|
+
unlock_list = self.list(limit)
|
37
|
+
return unlock_list.select { |unlock| unlock["type"] == "kanji" }
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
data/lib/wanikani/srs.rb
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
# -*- encoding : utf-8 -*-
|
2
|
+
module Wanikani
|
3
|
+
class SRS
|
4
|
+
ITEM_TYPES = %w(apprentice guru master enlighten burned all)
|
5
|
+
|
6
|
+
# Gets the counts for each SRS level and item types.
|
7
|
+
#
|
8
|
+
# @param [String] item_type the SRS level that will be returned.
|
9
|
+
# @return [Hash] Returns the SRS information for each level for the user.
|
10
|
+
def self.distribution(item_type = "all")
|
11
|
+
raise ArgumentError, "Please use a valid SRS type (or none for all types)" if !ITEM_TYPES.include?(item_type)
|
12
|
+
|
13
|
+
api_response = Wanikani.api_response("srs-distribution")
|
14
|
+
srs_distribution = api_response["requested_information"]
|
15
|
+
|
16
|
+
return srs_distribution if item_type == "all"
|
17
|
+
return srs_distribution[item_type]
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
# -*- encoding : utf-8 -*-
|
2
|
+
module Wanikani
|
3
|
+
class StudyQueue
|
4
|
+
# Get the number of lessons and reviews that are currently in the user's queue.
|
5
|
+
#
|
6
|
+
# @return [Hash] Returns the number of lessons and reviews pending, along with upcoming review information.
|
7
|
+
def self.queue
|
8
|
+
api_response = Wanikani.api_response("study-queue")
|
9
|
+
return api_response["requested_information"]
|
10
|
+
end
|
11
|
+
|
12
|
+
# Check if there are lessons available.
|
13
|
+
#
|
14
|
+
# @return [Boolean] Returns true if there's at least one lesson available, or false if there are none.
|
15
|
+
def self.lessons_available?
|
16
|
+
return !self.queue["lessons_available"].zero?
|
17
|
+
end
|
18
|
+
|
19
|
+
# Check if there are reviews available.
|
20
|
+
#
|
21
|
+
# @return [Boolean] Returns true if there's at least one review available, or false if there are none.
|
22
|
+
def self.reviews_available?
|
23
|
+
return !self.queue["reviews_available"].zero?
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
# -*- encoding : utf-8 -*-
|
2
|
+
module Wanikani
|
3
|
+
class User
|
4
|
+
# Gets the user information from WaniKani.
|
5
|
+
#
|
6
|
+
# @return [Hash] The user information for the WaniKani account by from the API key.
|
7
|
+
def self.information
|
8
|
+
api_response = Wanikani.api_response("user-information")
|
9
|
+
return api_response["user_information"]
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
metadata
ADDED
@@ -0,0 +1,115 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: wanikani
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
prerelease:
|
5
|
+
version: 0.0.2
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Dennis Martinez
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2012-12-31 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
type: :runtime
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ~>
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '1.6'
|
22
|
+
prerelease: false
|
23
|
+
version_requirements: !ruby/object:Gem::Requirement
|
24
|
+
none: false
|
25
|
+
requirements:
|
26
|
+
- - ~>
|
27
|
+
- !ruby/object:Gem::Version
|
28
|
+
version: '1.6'
|
29
|
+
name: rest-client
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
type: :runtime
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
34
|
+
requirements:
|
35
|
+
- - ~>
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: 1.5.0
|
38
|
+
prerelease: false
|
39
|
+
version_requirements: !ruby/object:Gem::Requirement
|
40
|
+
none: false
|
41
|
+
requirements:
|
42
|
+
- - ~>
|
43
|
+
- !ruby/object:Gem::Version
|
44
|
+
version: 1.5.0
|
45
|
+
name: multi_json
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
type: :development
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
50
|
+
requirements:
|
51
|
+
- - ~>
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '2.12'
|
54
|
+
prerelease: false
|
55
|
+
version_requirements: !ruby/object:Gem::Requirement
|
56
|
+
none: false
|
57
|
+
requirements:
|
58
|
+
- - ~>
|
59
|
+
- !ruby/object:Gem::Version
|
60
|
+
version: '2.12'
|
61
|
+
name: rspec
|
62
|
+
- !ruby/object:Gem::Dependency
|
63
|
+
type: :development
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
65
|
+
none: false
|
66
|
+
requirements:
|
67
|
+
- - ~>
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: 1.3.0
|
70
|
+
prerelease: false
|
71
|
+
version_requirements: !ruby/object:Gem::Requirement
|
72
|
+
none: false
|
73
|
+
requirements:
|
74
|
+
- - ~>
|
75
|
+
- !ruby/object:Gem::Version
|
76
|
+
version: 1.3.0
|
77
|
+
name: fakeweb
|
78
|
+
description: Use WaniKani's (http://www.wanikani.com/) API in your Ruby applications
|
79
|
+
email: dennis@dennmart.com
|
80
|
+
executables: []
|
81
|
+
extensions: []
|
82
|
+
extra_rdoc_files: []
|
83
|
+
files:
|
84
|
+
- lib/wanikani/study_queue.rb
|
85
|
+
- lib/wanikani/recent_unlocks.rb
|
86
|
+
- lib/wanikani/srs.rb
|
87
|
+
- lib/wanikani/user.rb
|
88
|
+
- lib/wanikani/level.rb
|
89
|
+
- lib/wanikani.rb
|
90
|
+
homepage: http://github.com/dennmart/wanikani-gem
|
91
|
+
licenses: []
|
92
|
+
post_install_message:
|
93
|
+
rdoc_options: []
|
94
|
+
require_paths:
|
95
|
+
- lib
|
96
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
97
|
+
none: false
|
98
|
+
requirements:
|
99
|
+
- - ! '>='
|
100
|
+
- !ruby/object:Gem::Version
|
101
|
+
version: '0'
|
102
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
103
|
+
none: false
|
104
|
+
requirements:
|
105
|
+
- - ! '>='
|
106
|
+
- !ruby/object:Gem::Version
|
107
|
+
version: '0'
|
108
|
+
requirements: []
|
109
|
+
rubyforge_project:
|
110
|
+
rubygems_version: 1.8.24
|
111
|
+
signing_key:
|
112
|
+
specification_version: 3
|
113
|
+
summary: Add Japanese Kanji learning goodness to your Ruby projects!
|
114
|
+
test_files: []
|
115
|
+
has_rdoc:
|