wanikani 1.5.0 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 138c753cc3cd8de0fdc6431696fafef58e6cc0b2
4
- data.tar.gz: cd01ab65169dc4e9ef4a0e82b82efa0b15d86908
3
+ metadata.gz: d8206559d936c9724dbff8cc1c351d5e20864fae
4
+ data.tar.gz: 7ea4d78d466a1ec67e1990d89689a6a25a3e2b6c
5
5
  SHA512:
6
- metadata.gz: f5722801a57c16801ba3104fac258d7bd4a4a5a97aa340a5c8787d89a7d27df03b702212744b1b656eb85ea90299cee9fe93d7bbcf860d905aac407d4694fb8a
7
- data.tar.gz: 44e0dd55615a5ee0f9243ad3ea7f94db1308725f250535f87ec61e6b32fd4c7e8232f89ad0aa6e538f94754358f87aeb8f8592bdd2d6286cf2e6b6de8fdf14ea
6
+ metadata.gz: b4290df649685629cdf96047fd9563eedaad293e11b0bbd411d176d56a13db789edfa737bb40100e20d4fd572481ed884c12df164faab4502da705d09f05e8cd
7
+ data.tar.gz: f24cab27971276e4ad939e4b6d1af4e16283fa46ff98b661bc44bbdd7acb99b8d853d488c24cb7982c9ac5270fa53bb545cef5d7966c93a8517837ff2d1cbeef
@@ -1,14 +1,5 @@
1
1
  # -*- encoding : utf-8 -*-
2
- require 'faraday'
3
- require 'faraday_middleware'
4
-
5
- require 'wanikani/user'
6
- require 'wanikani/study_queue'
7
- require 'wanikani/level'
8
- require 'wanikani/srs'
9
- require 'wanikani/recent_unlocks'
10
- require 'wanikani/critical_items'
11
- require 'wanikani/exceptions'
2
+ require 'wanikani/client'
12
3
 
13
4
  Encoding.default_external = Encoding::UTF_8
14
5
  Encoding.default_internal = Encoding::UTF_8
@@ -18,67 +9,6 @@ module Wanikani
18
9
  DEFAULT_API_VERSION = "v1.4"
19
10
  VALID_API_VERSIONS = %w(v1 v1.1 v1.2 v1.3 v1.4)
20
11
 
21
- def self.api_key=(api_key)
22
- @api_key = api_key
23
- end
24
-
25
- def self.api_key
26
- @api_key
27
- end
28
-
29
- def self.api_version=(api_version)
30
- raise ArgumentError, "API version should be one of the following: #{VALID_API_VERSIONS.join(', ')}." unless VALID_API_VERSIONS.include?(api_version) || api_version.nil?
31
- @api_version = api_version
32
- end
33
-
34
- def self.api_version
35
- @api_version ||= DEFAULT_API_VERSION
36
- end
37
-
38
- def self.api_response(resource, optional_arg = nil)
39
- raise ArgumentError, "You must define a resource to query Wanikani" if resource.nil? || resource.empty?
40
- raise ArgumentError, "You must set your Wanikani API key before querying the API" if Wanikani.api_key.nil? || Wanikani.api_key.empty?
41
-
42
- begin
43
- res = client.get("/api/#{Wanikani.api_version}/user/#{Wanikani.api_key}/#{resource}/#{optional_arg}")
44
-
45
- if !res.success? || res.body.has_key?("error")
46
- self.raise_exception(res)
47
- else
48
- return res.body
49
- end
50
- rescue => error
51
- raise Exception, "There was an error: #{error.message}"
52
- end
53
- end
54
-
55
- def self.valid_api_key?(api_key = nil)
56
- api_key ||= Wanikani.api_key
57
- return false if api_key.nil? || api_key.empty?
58
-
59
- res = client.get("/api/#{Wanikani.api_version}/user/#{api_key}/user-information")
60
-
61
- return false if !res.success? || res.body.has_key?("error")
62
- return true
63
- end
64
-
65
- private
66
-
67
- def self.client
68
- Faraday.new(url: Wanikani::API_ENDPOINT) do |conn|
69
- conn.response :json, :content_type => /\bjson$/
70
- conn.adapter Faraday.default_adapter
71
- end
72
- end
73
-
74
- def self.raise_exception(response)
75
- raise Wanikani::InvalidKey, "The API key used for this request is invalid." and return if response.status == 401
76
-
77
- message = if response.body.is_a?(Hash) and response.body.has_key?("error")
78
- response.body["error"]["message"]
79
- else
80
- "Status code: #{response.status}"
81
- end
82
- raise Wanikani::Exception, "There was an error fetching the data from Wanikani (#{message})"
83
- end
12
+ class InvalidKey < Exception; end
13
+ class Exception < Exception; end
84
14
  end
@@ -0,0 +1,109 @@
1
+ # -*- encoding : utf-8 -*-
2
+ require 'faraday'
3
+ require 'faraday_middleware'
4
+
5
+ require 'wanikani/user'
6
+ require 'wanikani/study_queue'
7
+ require 'wanikani/level'
8
+ require 'wanikani/srs'
9
+ require 'wanikani/recent_unlocks'
10
+ require 'wanikani/critical_items'
11
+
12
+ module Wanikani
13
+ class Client
14
+ include Wanikani::User
15
+ include Wanikani::StudyQueue
16
+ include Wanikani::Level
17
+ include Wanikani::SRS
18
+ include Wanikani::RecentUnlocks
19
+ include Wanikani::CriticalItems
20
+
21
+ attr_accessor :api_key, :api_version
22
+
23
+ # Initialize a client which will be used to communicate with WaniKani.
24
+ #
25
+ # @param options [Hash] the API key (required) and API version (optional)
26
+ # used to communicate with the WaniKani API.
27
+ # @return [Wanikani::Client] an instance of Wanikani::Client.
28
+ def initialize(options = {})
29
+ raise ArgumentError, "You must specify a WaniKani API key before querying the API." if options[:api_key].nil? || options[:api_key].empty?
30
+ raise ArgumentError, "API version should be one of the following: #{Wanikani::VALID_API_VERSIONS.join(', ')}." unless Wanikani::VALID_API_VERSIONS.include?(options[:api_version]) || options[:api_version].nil?
31
+
32
+ @api_key = options[:api_key]
33
+ @api_version = options[:api_version] ||= Wanikani::DEFAULT_API_VERSION
34
+ end
35
+
36
+ # Verifies if the client's API key is valid by checking WaniKani's API.
37
+ #
38
+ # @param api_key [String] the API key to validate in WaniKani.
39
+ # @return [Boolean] whether the API key is valid.
40
+ def valid_api_key?(api_key = nil)
41
+ api_key ||= @api_key
42
+ return false if api_key.empty?
43
+
44
+ res = client.get("/api/#{@api_version}/user/#{api_key}/user-information")
45
+
46
+ return false if !res.success? || res.body.has_key?("error")
47
+ return true
48
+ end
49
+
50
+ # Verifies if the specified API key is valid by checking WaniKani's API.
51
+ #
52
+ # @param api_key [String] the API key to validate in WaniKani.
53
+ # @return [Boolean] whether the API key is valid.
54
+ def self.valid_api_key?(api_key = nil)
55
+ raise ArgumentError, "You must specify a WaniKani API key before querying the API." if api_key.nil? || api_key.empty?
56
+
57
+ @client = Wanikani::Client.new(api_key: api_key)
58
+ return @client.valid_api_key?
59
+ end
60
+
61
+ private
62
+
63
+ # Sets up the HTTP client for communicating with the WaniKani API.
64
+ #
65
+ # @return [Faraday::Connection] the HTTP client to communicate with the
66
+ # WaniKani API.
67
+ def client
68
+ Faraday.new(url: Wanikani::API_ENDPOINT) do |conn|
69
+ conn.response :json, :content_type => /\bjson$/
70
+ conn.adapter Faraday.default_adapter
71
+ end
72
+ end
73
+
74
+ # Contacts the WaniKani API and returns the data specified.
75
+ #
76
+ # @param resource [String] the resource to access.
77
+ # @param optional_arg [String] optional arguments for the specified resource.
78
+ # @return [Hash] the parsed API response.
79
+ def api_response(resource, optional_arg = nil)
80
+ raise ArgumentError, "You must define a resource to query WaniKani" if resource.nil? || resource.empty?
81
+
82
+ begin
83
+ res = client.get("/api/#{@api_version}/user/#{@api_key}/#{resource}/#{optional_arg}")
84
+
85
+ if !res.success? || res.body.has_key?("error")
86
+ raise_exception(res)
87
+ else
88
+ return res.body
89
+ end
90
+ rescue => error
91
+ raise Exception, "There was an error: #{error.message}"
92
+ end
93
+ end
94
+
95
+ # Handles exceptions according to the API response.
96
+ #
97
+ # @param response [Hash] the parsed API response from WaniKani's API.
98
+ def raise_exception(response)
99
+ raise Wanikani::InvalidKey, "The API key used for this request is invalid." and return if response.status == 401
100
+
101
+ message = if response.body.is_a?(Hash) and response.body.has_key?("error")
102
+ response.body["error"]["message"]
103
+ else
104
+ "Status code: #{response.status}"
105
+ end
106
+ raise Wanikani::Exception, "There was an error fetching the data from WaniKani (#{message})"
107
+ end
108
+ end
109
+ end
@@ -1,23 +1,23 @@
1
1
  # -*- encoding : utf-8 -*-
2
2
  module Wanikani
3
- class CriticalItems
3
+ module CriticalItems
4
4
  # Gets the user's current items under 'Critical Items'.
5
5
  #
6
- # @param [Integer] percentage maximum percentage
7
- # @return [Array] Returns hashes of critical items and their related information.
8
- def self.critical(percentage = 75)
6
+ # @param percentage [Integer] the maximum percentage of correctness.
7
+ # @return [Array<Hash>] critical items and their related information.
8
+ def critical_items(percentage = 75)
9
9
  raise ArgumentError, "Percentage must be an Integer between 0 and 100" if !percentage.between?(0, 100)
10
- api_response = Wanikani.api_response("critical-items", percentage)
11
- return api_response["requested_information"]
10
+ response = api_response("critical-items", percentage)
11
+ return response["requested_information"]
12
12
  end
13
13
 
14
14
  # Gets the full response of the Critical Items List API call.
15
15
  #
16
- # @param [Integer] percentage maximum percentage
17
- # @return [Hash] Full response from the Critical Items List API call.
18
- def self.full_response(percentage = 75)
16
+ # @param percentage [Integer] the maximum percentage of correctness.
17
+ # @return [Hash] full response from the Critical Items List API call.
18
+ def full_critical_items_response(percentage = 75)
19
19
  raise ArgumentError, "Percentage must be an Integer between 0 and 100" if !percentage.between?(0, 100)
20
- return Wanikani.api_response("critical-items", percentage)
20
+ return api_response("critical-items", percentage)
21
21
  end
22
22
  end
23
23
  end
@@ -1,37 +1,67 @@
1
1
  # -*- encoding : utf-8 -*-
2
2
  module Wanikani
3
- class Level
3
+ module Level
4
4
  # Gets the user's current level progression (radicals and Kanji).
5
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
- current_level = { "current_level" => api_response["user_information"]["level"] }
10
- return api_response["requested_information"].merge(current_level)
6
+ # @return [Hash] progress and total of radicals and Kanji for the user's current level.
7
+ def level_progression
8
+ response = api_response("level-progression")
9
+ current_level = { "current_level" => response["user_information"]["level"] }
10
+ return response["requested_information"].merge(current_level)
11
+ end
12
+
13
+ # Gets the user's full list of radicals and stats.
14
+ #
15
+ # @param levels [Integer, Array<Integer>] a specific level or array of
16
+ # levels to fetch items for.
17
+ # @return [Hash] radicals with the user's stats.
18
+ def radicals_list(levels = nil)
19
+ return level_items_list("radicals", levels)
20
+ end
21
+
22
+ # Gets the user's full list of kanji and stats.
23
+ #
24
+ # @param levels [Integer, Array<Integer>] a specific level or array of
25
+ # levels to fetch items for.
26
+ # @return [Hash] kanji with the user's stats.
27
+ def kanji_list(levels = nil)
28
+ return level_items_list("kanji", levels)
29
+ end
30
+
31
+ # Gets the user's full list of vocabulary and stats.
32
+ #
33
+ # @param levels [Integer, Array<Integer>] a specific level or array of
34
+ # levels to fetch items for.
35
+ # @return [Hash] vocabulary with the user's stats.
36
+ def vocabulary_list(levels = nil)
37
+ return level_items_list("vocabulary", levels)
11
38
  end
12
39
 
13
40
  # Gets the full response of the Level Progression API call.
14
41
  #
15
- # @return [Hash] Full response from the Level Progression API call.
16
- def self.full_response
17
- return Wanikani.api_response("level-progression")
42
+ # @return [Hash] full response from the Level Progression API call.
43
+ def full_level_progression_response
44
+ return api_response("level-progression")
18
45
  end
19
46
 
20
47
  private
21
48
 
22
- def self.method_missing(name, *args)
23
- super unless [:radicals, :kanji, :vocabulary].include?(name)
24
-
25
- levels = args.push
49
+ # Fetches the specified item type list from WaniKani's API
50
+ #
51
+ # @param type [String] The type of item to fetch.
52
+ # @param levels [Integer, Array<Integer>] a specific level or array of
53
+ # levels to fetch items for.
54
+ # @return [Hash] list of items of the specified type and levels.
55
+ def level_items_list(type, levels)
26
56
  levels = levels.join(',') if levels.is_a?(Array)
27
- api_response = Wanikani.api_response(name.to_s, levels)
57
+ response = api_response(type, levels)
28
58
 
29
59
  # The vocabulary API call without specifying levels returns a Hash instead
30
60
  # of an Array, so this is a hacky way of dealing with it.
31
- if api_response["requested_information"].is_a?(Hash)
32
- return api_response["requested_information"]["general"]
61
+ if response["requested_information"].is_a?(Hash)
62
+ return response["requested_information"]["general"]
33
63
  else
34
- return api_response["requested_information"]
64
+ return response["requested_information"]
35
65
  end
36
66
  end
37
67
  end
@@ -1,32 +1,25 @@
1
1
  # -*- encoding : utf-8 -*-
2
2
  module Wanikani
3
- class RecentUnlocks
3
+ module RecentUnlocks
4
4
  # Gets the recent unlocked items (radicals, Kanji and vocabulary).
5
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"]
6
+ # @param options [Hash] the options to limit the number and type of items.
7
+ # @return [Array<Hash>] hashes of unlocked items and related information.
8
+ def recent_unlocks(options = {})
9
+ response = api_response("recent-unlocks", options[:limit])
10
+ if options[:type]
11
+ return response["requested_information"].select { |unlock| unlock["type"] == options[:type] }
12
+ else
13
+ return response["requested_information"]
14
+ end
11
15
  end
12
16
 
13
17
  # Gets the full response of the Recents Unlocks List API call.
14
18
  #
15
- # @param [Integer] limit the total number of items returned.
16
- # @return [Hash] Full response from the Recent Unlocks List API call.
17
- def self.full_response(limit = 10)
18
- return Wanikani.api_response("recent-unlocks", limit)
19
- end
20
-
21
- private
22
-
23
- def self.method_missing(name, *args)
24
- super unless [:radicals, :vocabulary, :kanji].include?(name)
25
-
26
- limit = args.shift || 10
27
- type = name == :radicals ? name.to_s.chop! : name.to_s
28
- unlock_list = self.list(limit)
29
- return unlock_list.select { |unlock| unlock["type"] == type }
19
+ # @param options [Integer] limit the total number of items returned.
20
+ # @return [Hash] full response from the Recent Unlocks List API call.
21
+ def full_recent_unlocks_response(options = {})
22
+ return api_response("recent-unlocks", options[:limit])
30
23
  end
31
24
  end
32
25
  end
@@ -1,17 +1,17 @@
1
1
  # -*- encoding : utf-8 -*-
2
2
  module Wanikani
3
- class SRS
3
+ module SRS
4
4
  ITEM_TYPES = %w(apprentice guru master enlighten burned all)
5
5
 
6
6
  # Gets the counts for each SRS level and item types.
7
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")
8
+ # @param item_type [String] the SRS level that will be returned.
9
+ # @return [Hash] the SRS information for each level for the user.
10
+ def srs_distribution(item_type = "all")
11
11
  raise ArgumentError, "Please use a valid SRS type (or none for all types)" if !ITEM_TYPES.include?(item_type)
12
12
 
13
- api_response = Wanikani.api_response("srs-distribution")
14
- srs_distribution = api_response["requested_information"]
13
+ response = api_response("srs-distribution")
14
+ srs_distribution = response["requested_information"]
15
15
 
16
16
  return srs_distribution if item_type == "all"
17
17
  return srs_distribution[item_type]
@@ -19,14 +19,14 @@ module Wanikani
19
19
 
20
20
  # Gets all items for a specific SRS level.
21
21
  #
22
- # @param [String] item_type the SRS level for the items returned.
23
- # @return [Array] Returns all the items matching the specified SRS for each level for the user.
24
- def self.items_by_type(item_type)
22
+ # @param item_type [String] the SRS level for the items returned.
23
+ # @return [Array<Hash>] all the items matching the specified SRS for each level for the user.
24
+ def srs_items_by_type(item_type)
25
25
  raise ArgumentError, "Please use a valid SRS type." if !ITEM_TYPES.include?(item_type) || item_type == "all"
26
26
 
27
27
  items_by_type = []
28
28
  %w(radicals kanji vocabulary).each do |type|
29
- items = Wanikani::Level.send(type)
29
+ items = send("#{type}_list")
30
30
  items.reject! { |item| item["user_specific"].nil? || item["user_specific"]["srs"] != item_type }.map! do |item|
31
31
  item.merge!("type" => (type == 'radicals' ? 'radical' : type))
32
32
  end
@@ -38,9 +38,9 @@ module Wanikani
38
38
 
39
39
  # Gets the full response of the SRS Distribution API call.
40
40
  #
41
- # @return [Hash] Full response from the SRS Distribution API call.
42
- def self.full_response
43
- return Wanikani.api_response("srs-distribution")
41
+ # @return [Hash] full response from the SRS Distribution API call.
42
+ def full_srs_distribution_response
43
+ return api_response("srs-distribution")
44
44
  end
45
45
  end
46
46
  end
@@ -1,33 +1,33 @@
1
1
  # -*- encoding : utf-8 -*-
2
2
  module Wanikani
3
- class StudyQueue
3
+ module StudyQueue
4
4
  # Get the number of lessons and reviews that are currently in the user's queue.
5
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"]
6
+ # @return [Hash] the number of lessons and reviews pending, along with upcoming review information.
7
+ def study_queue
8
+ response = api_response("study-queue")
9
+ return response["requested_information"]
10
10
  end
11
11
 
12
12
  # Check if there are lessons available.
13
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?
14
+ # @return [Boolean] true if there's at least one lesson available, or false if there are none.
15
+ def lessons_available?
16
+ return !study_queue["lessons_available"].zero?
17
17
  end
18
18
 
19
19
  # Check if there are reviews available.
20
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?
21
+ # @return [Boolean] true if there's at least one review available, or false if there are none.
22
+ def reviews_available?
23
+ return !study_queue["reviews_available"].zero?
24
24
  end
25
25
 
26
26
  # Gets the full response of the Study Queue API call.
27
27
  #
28
- # @return [Hash] Full response from the Study Queue API call.
29
- def self.full_response
30
- return Wanikani.api_response("study-queue")
28
+ # @return [Hash] full response from the Study Queue API call.
29
+ def full_study_queue_response
30
+ return api_response("study-queue")
31
31
  end
32
32
  end
33
33
  end
@@ -1,33 +1,33 @@
1
1
  # -*- encoding : utf-8 -*-
2
2
  module Wanikani
3
- class User
3
+ module User
4
4
  # Gets the user information from WaniKani.
5
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"]
6
+ # @return [Hash] the user information for the WaniKani account by from the API key.
7
+ def user_information
8
+ response = api_response("user-information")
9
+ return response["user_information"]
10
10
  end
11
11
 
12
12
  # Checks if the user is currently in vacation mode.
13
13
  #
14
14
  # @return [Boolean] true if vacation_date contains a timestamp, false if
15
15
  # vacation_date is null.
16
- def self.on_vacation?
17
- api_response = Wanikani.api_response("user-information")
18
- vacation_date = api_response["user_information"]["vacation_date"]
16
+ def on_vacation?
17
+ response = api_response("user-information")
18
+ vacation_date = response["user_information"]["vacation_date"]
19
19
  return !vacation_date.nil?
20
20
  end
21
21
 
22
22
  # Returns the Gravatar image URL using the Gravatar hash from the user's information.
23
23
  #
24
- # @param options [Hash] Optional settings for the gravatar URL.
25
- # @return [String] The Gravatar URL, with the optional size parameter, nil if
24
+ # @param options [Hash] optional settings for the gravatar URL.
25
+ # @return [String, nil] the Gravatar URL, with the optional size parameter, nil if
26
26
  # the user information contains no Gravatar hash.
27
- def self.gravatar_url(options = {})
27
+ def gravatar_url(options = {})
28
28
  raise ArgumentError, "The size parameter must be an integer" if options[:size] && !options[:size].is_a?(Integer)
29
- api_response = Wanikani.api_response("user-information")
30
- hash = api_response["user_information"]["gravatar"]
29
+ response = api_response("user-information")
30
+ hash = response["user_information"]["gravatar"]
31
31
 
32
32
  return nil if hash.nil?
33
33
  return build_gravatar_url(hash, options)
@@ -35,14 +35,19 @@ module Wanikani
35
35
 
36
36
  # Gets the full response of the User Information API call.
37
37
  #
38
- # @return [Hash] Full response from the User Information API call.
39
- def self.full_response
40
- return Wanikani.api_response("user-information")
38
+ # @return [Hash] full response from the User Information API call.
39
+ def full_user_response
40
+ return api_response("user-information")
41
41
  end
42
42
 
43
43
  private
44
44
 
45
- def self.build_gravatar_url(hash, options)
45
+ # Builds the URL for displaying the Gravatar URL with different params.
46
+ #
47
+ # @param hash [String] the Gravatar hash for the user's image.
48
+ # @param options [Hash] optional params for building the Gravatar URL.
49
+ # @return [String] the Gravatar URL according to the specified params.
50
+ def build_gravatar_url(hash, options = {})
46
51
  params = "d=mm" # Use 'Mystery Man' image if no image found.
47
52
  params += "&size=#{options[:size]}" if options[:size]
48
53
 
@@ -1,3 +1,3 @@
1
1
  module Wanikani
2
- VERSION = '1.5.0'
2
+ VERSION = '2.0.0'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: wanikani
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.5.0
4
+ version: 2.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dennis Martinez
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-08-25 00:00:00.000000000 Z
11
+ date: 2017-09-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: faraday
@@ -73,8 +73,8 @@ extensions: []
73
73
  extra_rdoc_files: []
74
74
  files:
75
75
  - lib/wanikani.rb
76
+ - lib/wanikani/client.rb
76
77
  - lib/wanikani/critical_items.rb
77
- - lib/wanikani/exceptions.rb
78
78
  - lib/wanikani/level.rb
79
79
  - lib/wanikani/recent_unlocks.rb
80
80
  - lib/wanikani/srs.rb
@@ -85,7 +85,9 @@ homepage: https://github.com/dennmart/wanikani-gem
85
85
  licenses:
86
86
  - MIT
87
87
  metadata: {}
88
- post_install_message:
88
+ post_install_message: |2
89
+ Version 2.0 of the wanikani gem introduces many breaking changes.
90
+ Please view the README for more information: https://github.com/dennmart/wanikani-gem
89
91
  rdoc_options: []
90
92
  require_paths:
91
93
  - lib
@@ -101,7 +103,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
101
103
  version: '0'
102
104
  requirements: []
103
105
  rubyforge_project:
104
- rubygems_version: 2.6.11
106
+ rubygems_version: 2.6.13
105
107
  signing_key:
106
108
  specification_version: 4
107
109
  summary: Add Japanese Kanji learning goodness to your Ruby projects!
@@ -1,4 +0,0 @@
1
- module Wanikani
2
- class InvalidKey < Exception; end
3
- class Exception < Exception; end
4
- end