nov-iknow 0.0.3 → 0.0.4

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/ChangeLog CHANGED
@@ -2,3 +2,11 @@
2
2
 
3
3
  * initial release
4
4
 
5
+ == 0.0.2
6
+
7
+ == 0.0.3
8
+
9
+ == 0.0.4
10
+
11
+ * add new API calls
12
+ * add new attributes
data/Rakefile CHANGED
@@ -62,7 +62,7 @@ spec = Gem::Specification.new do |s|
62
62
 
63
63
  s.add_dependency('rails', '>=2.1.0')
64
64
  s.add_dependency('json')
65
- s.add_dependency('oauth', '=0.2.4')
65
+ s.add_dependency('oauth', '>=0.2.4')
66
66
  s.required_ruby_version = '>= 1.8.6'
67
67
 
68
68
  s.files = %w(README ChangeLog Rakefile) +
@@ -2,9 +2,9 @@ require 'rubygems'
2
2
  require 'iknow'
3
3
 
4
4
  Iknow::Config.init do |conf|
5
- conf.api_key = ''
6
- conf.oauth_consumer_key = ''
7
- conf.oauth_consumer_secret = ''
5
+ conf.api_key = 'SET_YOUR_API_KEY'
6
+ conf.oauth_consumer_key = 'SET_YOUR_OAUTH_CONSUMER_KEY'
7
+ conf.oauth_consumer_secret = 'SET_YOUR_OAUTH_CONSUMER_SECRET'
8
8
  end
9
9
 
10
10
  please_get_api_key =<<EOS
@@ -24,25 +24,31 @@ if Iknow::Config.api_key == ''# or
24
24
  end
25
25
 
26
26
  ## User API
27
- @user = Iknow::User.find('matake')
28
- @user.items
27
+ @user = Iknow::User.find('kirk')
28
+ @user.items(:include_sentences => true)
29
29
  @user.lists
30
30
  @user.friends
31
31
  @user.study.results
32
- @matchied_users = Iknow::User.matching('matake')
32
+ @user.study.total_results
33
+ @matched_users = Iknow::User.matching('matake')
33
34
 
34
- # ## List API
35
+ ## List API
35
36
  @recent_lists = Iknow::List.recent
36
- @matchied_lists = Iknow::List.matching("遺伝的アルゴリズム")
37
- @matchied_lists.first.items
38
- @matchied_lists.first.sentences
37
+ @list = Iknow::List.find(31509, :include_sentences => true, :include_items => true)
38
+ @list.items
39
+ @list.sentences
40
+ @matched_lists = Iknow::List.matching("イタリア語であいさつ")
39
41
 
40
- # ## Item API
41
- @recent_items = Iknow::Item.recent
42
- @matchied_items = Iknow::Item.matching('record')
42
+ # puts Iknow::List.find(31509, :include_sentences => true, :include_items => true).inspect
43
+
44
+ ## Item API
45
+ @recent_items = Iknow::Item.recent(:include_sentences => true)
46
+ @item = Iknow::Item.find(437525)
47
+ @matched_items = Iknow::Item.matching('record', :include_sentences => true)
43
48
  @items = Iknow::Item.extract("sometimes, often, electrical")
44
49
  @items.first.sentences
45
50
 
46
51
  ## Sentence API
47
52
  @recent_sentences = Iknow::Sentence.recent
48
- @matchied_sentences = Iknow::Sentence.matching('record')
53
+ @sentence = Iknow::Sentence.find(312271)
54
+ @matched_sentences = Iknow::Sentence.matching('record')
data/lib/ext/hash.rb CHANGED
@@ -7,4 +7,17 @@ class Hash
7
7
  end
8
8
  result.chop
9
9
  end
10
+ def symbolize_keys!
11
+ self.each do |key, value|
12
+ unless self.delete(key.to_s).nil?
13
+ if value.is_a?(Hash)
14
+ value.symbolize_keys!
15
+ elsif value.is_a?(Array)
16
+ value.map!{ |v| v.symbolize_keys! if v.is_a?(Hash) }
17
+ end
18
+ self[key.to_sym] = value
19
+ end
20
+ end
21
+ self
22
+ end
10
23
  end
@@ -1,7 +1,7 @@
1
1
  module Iknow::Version
2
2
  MAJOR = 0
3
3
  MINOR = 0
4
- REVISION = 2
4
+ REVISION = 4
5
5
  class << self
6
6
  def to_version
7
7
  "#{MAJOR}.#{MINOR}.#{REVISION}"
@@ -5,13 +5,21 @@ class Iknow::Base
5
5
  def attributes; self.class.attributes end
6
6
 
7
7
  def self.deserialize(response, params = {})
8
- return nil if response.is_a?(Hash) and
8
+ return nil if response.nil? or
9
+ (response.is_a?(Hash) and
9
10
  !response['error'].nil? and
10
- response['error']['code'].to_i == 404
11
+ response['error']['code'].to_i == 404)
11
12
 
12
- klass = params[:as] ? params[:as] : self
13
- response.is_a?(Array) ? response.inject([]) { |results, params| results << klass.new(params) } :
14
- klass.new(response)
13
+ klass = params[:as] ? params[:as] : self
14
+ if response.is_a?(Array)
15
+ response.inject([]) { |results, hash|
16
+ hash.symbolize_keys!
17
+ results << klass.new(hash)
18
+ }
19
+ else
20
+ response.symbolize_keys!
21
+ klass.new(response)
22
+ end
15
23
  end
16
24
 
17
25
  def deserialize(response, params = {})
@@ -3,24 +3,27 @@ class Iknow::Item < Iknow::Base
3
3
  attr_reader *ATTRIBUTES
4
4
 
5
5
  class Response
6
- ATTRIBUTES = [:text]
6
+ ATTRIBUTES = [:text, :type, :language]
7
7
  attr_reader *ATTRIBUTES
8
8
 
9
9
  def initialize(params = {})
10
- @text = params['text']
10
+ @text = params[:text]
11
+ @type = params[:type]
12
+ @language = params[:language]
11
13
  end
12
14
  end
13
15
 
14
16
  class Cue
15
- ATTRIBUTES = [:sound, :part_of_speech, :text]
17
+ ATTRIBUTES = [:text, :sound, :part_of_speech, :language]
16
18
  NOT_WRITABLE_ATTRIBUTES = [:text]
17
19
  attr_accessor *(ATTRIBUTES - NOT_WRITABLE_ATTRIBUTES)
18
20
  attr_reader *NOT_WRITABLE_ATTRIBUTES
19
21
 
20
22
  def initialize(params = {})
21
- @text = params['text']
22
- @sound = params['sound']
23
- @image = params['part_of_speech']
23
+ @text = params[:text]
24
+ @sound = params[:sound]
25
+ @part_of_speech = params[:part_of_speech]
26
+ @language = params[:language]
24
27
  end
25
28
  end
26
29
 
@@ -29,6 +32,12 @@ class Iknow::Item < Iknow::Base
29
32
  self.deserialize(response) || []
30
33
  end
31
34
 
35
+ def self.find(item_id, params = {})
36
+ params[:id] = item_id
37
+ response = Iknow::RestClient::Item.find(params)
38
+ self.deserialize(response)
39
+ end
40
+
32
41
  def self.matching(keyword, params = {})
33
42
  params[:keyword] = keyword
34
43
  response = Iknow::RestClient::Item.matching(params)
@@ -42,13 +51,10 @@ class Iknow::Item < Iknow::Base
42
51
  end
43
52
 
44
53
  def initialize(params = {})
45
- @id = params['id'].to_i
46
- @sentences = []
47
- params['sentences'].each do |sentence|
48
- @sentences << Iknow::Sentence.new(sentence)
49
- end
50
- @response = params['response'] ? Iknow::Item::Response.new(params['response']) : nil
51
- @cue = Iknow::Item::Cue.new(params['cue'])
54
+ @id = params[:id].to_i
55
+ @cue = self.deserialize(params[:cue], :as => Iknow::Item::Cue)
56
+ @responses = self.deserialize(params[:responses], :as => Iknow::Item::Response)
57
+ @sentences = self.deserialize(params[:sentences], :as => Iknow::Sentence)
52
58
  end
53
59
 
54
60
  end
@@ -1,16 +1,50 @@
1
+ # "iknow": true,
2
+ # "description": "hogehoge",
3
+ # "translation_language": "ja",
4
+ # "dictation": true,
5
+ # "icon": "http://www.iknow.co.jp/assets/courses/m4.jpg",
6
+ # "brainspeed": true,
7
+ # "language": "en",
8
+ # "item_count": 117,
9
+ # "author_id": "Cerego",
10
+ # "user_count": 45056,
11
+ # "author": "Team iKnow!",
12
+ # "title": "\u65c5\u306b\u51fa\u3088\u3046\uff01\uff08\u51fa\u56fd\uff06\u8857\u3092\u6b69\u304f\uff09",
13
+ # "id": 708,
14
+ # "author_url": "http://www.iknow.co.jp/user/Cerego"
15
+
1
16
  class Iknow::List < Iknow::Base
2
- ATTRIBUTES = [:list_id, :title, :description, :link,
17
+ ATTRIBUTES = [:list_id, :title, :description, :icon, :item_count, :user_count, :iknow, :dictation, :brainspeed,
3
18
  :language, :translation_language, :list_type, :transcript, :embed,
4
- :tags, :media_entry, :author, :author_url, :attribution_license_id]
5
- NOT_WRITABLE_ATTRIBUTES = [:list_id]
19
+ :tags, :media_entry, :author, :author_id, :author_url, :attribution_license_id,
20
+ :items, :sentences]
21
+ NOT_WRITABLE_ATTRIBUTES = [:list_id, :icon, :item_count, :user_count, :iknow, :dictation, :brainspeed]
6
22
  attr_accessor *(ATTRIBUTES - NOT_WRITABLE_ATTRIBUTES)
7
23
  attr_reader *NOT_WRITABLE_ATTRIBUTES
8
24
 
25
+ class Application
26
+ attr_reader :application, :list_id, :lang
27
+ def initialize(params = {})
28
+ @application = params[:application]
29
+ @list_id = params[:list_id]
30
+ @lang = params[:lang]
31
+ end
32
+ def url
33
+ "http://www.iknow.co.jp/flash?swf=#{self.name}&course_id=#{self.list_id}&lang=#{self.lang}"
34
+ end
35
+ end
36
+
9
37
  def self.recent(params = {})
10
38
  response = Iknow::RestClient::List.recent(params)
11
39
  self.deserialize(response) || []
12
40
  end
13
41
 
42
+ def self.find(list_id, params = {})
43
+ params[:id] = list_id
44
+ response = Iknow::RestClient::List.find(params)
45
+ self.deserialize(response)
46
+ end
47
+
14
48
  def self.matching(keyword, params = {})
15
49
  params[:keyword] = keyword
16
50
  response = Iknow::RestClient::List.matching(params)
@@ -23,10 +57,31 @@ class Iknow::List < Iknow::Base
23
57
  end
24
58
 
25
59
  def initialize(params = {})
26
- @list_id = params['id'].to_i if params['id']
27
- @title = params[:title] || params['title']
28
- @description = params[:description] || params['description']
29
- @link = params[:link] || params['link']
60
+ @list_id = (params[:id].to_i rescue nil)
61
+ @title = params[:title]
62
+ @description = params[:description]
63
+ @icon = params[:icon]
64
+ @item_count = (params[:item_count].to_i rescue nil)
65
+ @user_count = (params[:user_count].to_i rescue nil)
66
+ @language = params[:language]
67
+ @translation_language = params[:translation_language]
68
+ if @list_id and @translation_language
69
+ common_settings = {:list_id => @list_id, :lang => @translation_language}
70
+ @iknow = Application.new(common_settings.merge(:application => 'iknow')) if params[:iknow]
71
+ @dictation = Application.new(common_settings.merge(:application => 'dictation')) if params[:dictation]
72
+ @brainspeed = Application.new(common_settings.merge(:application => 'brainspeed')) if params[:brainspeed]
73
+ end
74
+ @author = params[:author] # display_name or username
75
+ @author_id = params[:author_id] # username
76
+ @author_url = params[:author_url]
77
+ @list_type = params[:list_type] # for list creation
78
+ @transcript = params[:transcript] # for list creation
79
+ @embed = params[:embed] # for list creation
80
+ @tags = params[:tags] # for list creation
81
+ @media_entry = params[:media_entry] # for list creation
82
+ @attribution_license_id = params[:attribution_license_id] # for list creation
83
+ @items = self.deserialize(params[:items], :as => Iknow::Item)
84
+ @sentences = self.deserialize(params[:sentences], :as => Iknow::Sentence)
30
85
  end
31
86
 
32
87
  def items(params = {})
@@ -1,5 +1,5 @@
1
1
  class Iknow::Sentence < Iknow::Base
2
- ATTRIBUTES = [:sound, :image, :text]
2
+ ATTRIBUTES = [:sound, :image, :text, :language, :id, :transliterations, :translations]
3
3
  WRITABLE_ATTRIBUTES = [:sound, :image]
4
4
  attr_accessor *WRITABLE_ATTRIBUTES
5
5
  attr_reader *(ATTRIBUTES - WRITABLE_ATTRIBUTES)
@@ -9,6 +9,12 @@ class Iknow::Sentence < Iknow::Base
9
9
  self.deserialize(response) || []
10
10
  end
11
11
 
12
+ def self.find(sentence_id, params = {})
13
+ params[:id] = sentence_id
14
+ response = Iknow::RestClient::Sentence.find(params)
15
+ self.deserialize(response)
16
+ end
17
+
12
18
  def self.matching(keyword, params = {})
13
19
  params[:keyword] = keyword
14
20
  response = Iknow::RestClient::Sentence.matching(params)
@@ -16,9 +22,13 @@ class Iknow::Sentence < Iknow::Base
16
22
  end
17
23
 
18
24
  def initialize(params = {})
19
- @sound = params['sound']
20
- @image = params['image']
21
- @text = params['text']
25
+ @id = params[:id]
26
+ @sound = params[:sound]
27
+ @image = params[:image]
28
+ @text = params[:text]
29
+ @language = params[:language]
30
+ @transliterations = params[:transliterations]
31
+ @translations = self.deserialize(params[:translations], :as => Iknow::Sentence)
22
32
  end
23
33
 
24
34
  end
@@ -7,19 +7,19 @@ class Iknow::User < Iknow::Base
7
7
  attr_reader *ATTRIBUTES
8
8
 
9
9
  def initialize(params = {})
10
- @name = params['name']
11
- @gender = params['gender']
12
- @birthday = (Date.parse(params['birthday']) rescue nil)
13
- @description = params['description']
14
- @blog_url = params['blog_url']
15
- @profile_url = params['profile_url']
16
- @foaf_url = params['foaf_url']
17
- @icon_url = params['icon_url']
10
+ @name = params[:name]
11
+ @gender = params[:gender]
12
+ @birthday = (Date.parse(params[:birthday]) rescue nil)
13
+ @description = params[:description]
14
+ @blog_url = params[:blog_url]
15
+ @profile_url = params[:profile_url]
16
+ @foaf_url = params[:foaf_url]
17
+ @icon_url = params[:icon_url]
18
18
  end
19
19
  end
20
20
 
21
21
  class Study < Iknow::Base
22
- ATTRIBUTES = [:today, :results]
22
+ ATTRIBUTES = [:today, :results, :total_summary]
23
23
  attr_reader *ATTRIBUTES
24
24
 
25
25
  class Result < Iknow::Base
@@ -27,28 +27,43 @@ class Iknow::User < Iknow::Base
27
27
  attr_reader *ATTRIBUTES
28
28
 
29
29
  def initialize(params = {})
30
- @timestamp = (params['timestamp'].to_i rescue nil)
31
- @seconds = (params['seconds'].to_i rescue nil)
30
+ @timestamp = (params[:timestamp].to_i rescue nil)
31
+ @seconds = (params[:seconds].to_i rescue nil)
32
32
  @totals = {
33
- :seconds => (params['totals']['seconds'].to_i rescue nil),
34
- :seen => (params['totals']['seen'].to_i rescue nil),
35
- :completed => (params['totals']['completed'].to_i rescue nil)
33
+ :seconds => (params[:totals][:seconds].to_i rescue nil),
34
+ :seen => (params[:totals][:seen].to_i rescue nil),
35
+ :completed => (params[:totals][:completed].to_i rescue nil)
36
36
  }
37
- @seen = (params['seen'].to_i rescue nil)
38
- @completed = (params['completed'].to_i rescue nil)
39
- @date = (Date.parse(params['date']) rescue nil)
37
+ @seen = (params[:seen].to_i rescue nil)
38
+ @completed = (params[:completed].to_i rescue nil)
39
+ @date = (Date.parse(params[:date]) rescue nil)
40
+ end
41
+ end
42
+
43
+ class TotalSummary < Iknow::Base
44
+ ATTRIBUTES = [:studied, :completed, :performance, :best_speed, :best_score]
45
+ attr_reader *ATTRIBUTES
46
+
47
+ def initialize(params = {})
48
+ @studied = params[:studied]
49
+ @completed = params[:completed]
50
+ @performance = params[:performance]
51
+ @best_speed = params[:best_speed]
52
+ @best_score = params[:best_score]
40
53
  end
41
54
  end
42
55
 
43
56
  def initialize(params = {})
44
- @today = (Date.parse(params['today']) rescue nil)
45
- @results = self.deserialize(params['study_results'], :as => Iknow::User::Study::Result)
57
+ @today = (Date.parse(params[:today]) rescue nil)
58
+ @results = self.deserialize(params[:study_results], :as => Iknow::User::Study::Result)
59
+ @total_summary = self.deserialize(params[:total_summary], :as => Iknow::User::Study::TotalSummary)
46
60
  end
47
61
 
48
62
  end
49
63
 
50
- def self.find(username)
51
- response = Iknow::RestClient::User.find(:username => username)
64
+ def self.find(username, params = {})
65
+ params[:username] = username
66
+ response = Iknow::RestClient::User.find(params)
52
67
  self.deserialize(response)
53
68
  end
54
69
 
@@ -59,8 +74,8 @@ class Iknow::User < Iknow::Base
59
74
  end
60
75
 
61
76
  def initialize(params)
62
- @profile = Profile.new(params['profile'])
63
- @username = params['username']
77
+ @profile = Profile.new(params[:profile])
78
+ @username = params[:username]
64
79
  end
65
80
 
66
81
  def items(params = {})
@@ -2,6 +2,7 @@ class Iknow::RestClient::Item < Iknow::RestClient::Base
2
2
 
3
3
  ACTIONS = {
4
4
  :recent => { :path => '/items' },
5
+ :find => { :path => '/items/__id__' },
5
6
  :matching => { :path => '/items/matching/__keyword__' },
6
7
  :add_image => { :path => '/items/__id__/images', :http_method => :post },
7
8
  :add_sound => { :path => '/items/__id__/sounds', :http_method => :post },
@@ -2,6 +2,7 @@ class Iknow::RestClient::List < Iknow::RestClient::Base
2
2
 
3
3
  ACTIONS = {
4
4
  :recent => { :path => '/lists' },
5
+ :find => { :path => '/lists/__id__' },
5
6
  :items => { :path => '/lists/__id__/items' },
6
7
  :sentences => { :path => '/lists/__id__/sentences' },
7
8
  :matching => { :path => '/lists/matching/__keyword__' },
@@ -2,6 +2,7 @@ class Iknow::RestClient::Sentence < Iknow::RestClient::Base
2
2
 
3
3
  ACTIONS = {
4
4
  :recent => { :path => '/sentences' },
5
+ :find => { :path => '/sentences/__id__' },
5
6
  :matching => { :path => '/sentences/matching/__keyword__' },
6
7
  :create => { :path => '/sentences', :http_method => :post },
7
8
  :add_image => { :path => '/sentences/__id__/images', :http_method => :post },
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: nov-iknow
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - nov
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2008-10-18 00:00:00 -07:00
12
+ date: 2008-11-29 00:00:00 -08:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -35,7 +35,7 @@ dependencies:
35
35
  version_requirement:
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - "="
38
+ - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: 0.2.4
41
41
  version: