nov-iknow 0.0.1 → 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.
Files changed (56) hide show
  1. data/README +14 -30
  2. data/Rakefile +4 -3
  3. data/examples/iknow_on_rails/app/controllers/application.rb +15 -0
  4. data/examples/iknow_on_rails/app/controllers/iknow_oauth_controller.rb +24 -0
  5. data/examples/iknow_on_rails/app/controllers/users_controller.rb +10 -0
  6. data/examples/iknow_on_rails/app/helpers/application_helper.rb +3 -0
  7. data/examples/iknow_on_rails/app/helpers/iknow_oauth_helper.rb +3 -0
  8. data/examples/iknow_on_rails/app/helpers/users_helper.rb +2 -0
  9. data/examples/iknow_on_rails/app/models/iknow_oauth_token.rb +37 -0
  10. data/examples/iknow_on_rails/config/boot.rb +109 -0
  11. data/examples/iknow_on_rails/config/environment.rb +76 -0
  12. data/examples/iknow_on_rails/config/environments/development.rb +17 -0
  13. data/examples/iknow_on_rails/config/environments/production.rb +22 -0
  14. data/examples/iknow_on_rails/config/environments/test.rb +22 -0
  15. data/examples/iknow_on_rails/config/initializers/inflections.rb +10 -0
  16. data/examples/iknow_on_rails/config/initializers/mime_types.rb +5 -0
  17. data/examples/iknow_on_rails/config/initializers/new_rails_defaults.rb +17 -0
  18. data/examples/iknow_on_rails/config/routes.rb +44 -0
  19. data/examples/iknow_on_rails/db/migrate/20081017012212_create_iknow_oauth_tokens.rb +15 -0
  20. data/examples/iknow_on_rails/db/schema.rb +23 -0
  21. data/examples/iknow_on_rails/lib/iknow_oauth_system.rb +26 -0
  22. data/examples/iknow_on_rails/public/dispatch.rb +10 -0
  23. data/examples/iknow_on_rails/test/functional/iknow_oauth_controller_test.rb +7 -0
  24. data/examples/iknow_on_rails/test/functional/users_controller_test.rb +8 -0
  25. data/examples/iknow_on_rails/test/test_helper.rb +38 -0
  26. data/examples/iknow_on_rails/test/unit/iknow_oauth_token_test.rb +7 -0
  27. data/examples/pure_ruby.rb +8 -3
  28. data/generators/iknow/USAGE +12 -0
  29. data/generators/iknow/iknow_generator.rb +22 -0
  30. data/generators/iknow/templates/iknow_oauth_controller.rb +24 -0
  31. data/generators/iknow/templates/iknow_oauth_controller_test.rb +7 -0
  32. data/generators/iknow/templates/iknow_oauth_helper.rb +3 -0
  33. data/generators/iknow/templates/iknow_oauth_system.rb +26 -0
  34. data/generators/iknow/templates/iknow_oauth_token.rb +37 -0
  35. data/generators/iknow/templates/iknow_oauth_token_test.rb +7 -0
  36. data/generators/iknow/templates/iknow_oauth_tokens_migration.rb +15 -0
  37. data/generators/iknow/templates/index.rhtml +4 -0
  38. data/generators/iknow_oauth/USAGE +12 -0
  39. data/generators/iknow_oauth/iknow_oauth_generator.rb +22 -0
  40. data/generators/iknow_oauth/templates/iknow_oauth_controller.rb +24 -0
  41. data/generators/iknow_oauth/templates/iknow_oauth_controller_test.rb +7 -0
  42. data/generators/iknow_oauth/templates/iknow_oauth_helper.rb +3 -0
  43. data/generators/iknow_oauth/templates/iknow_oauth_system.rb +26 -0
  44. data/generators/iknow_oauth/templates/iknow_oauth_token.rb +37 -0
  45. data/generators/iknow_oauth/templates/iknow_oauth_token_test.rb +7 -0
  46. data/generators/iknow_oauth/templates/iknow_oauth_tokens_migration.rb +15 -0
  47. data/generators/iknow_oauth/templates/index.rhtml +4 -0
  48. data/lib/iknow/core/config.rb +26 -10
  49. data/lib/iknow/core/version.rb +1 -1
  50. data/lib/iknow/model/base.rb +9 -2
  51. data/lib/iknow/model/item.rb +3 -3
  52. data/lib/iknow/model/list.rb +4 -10
  53. data/lib/iknow/model/sentence.rb +6 -6
  54. data/lib/iknow/model/user.rb +31 -28
  55. data/lib/iknow/rest_client/base.rb +13 -27
  56. metadata +69 -3
@@ -2,8 +2,9 @@ require 'rubygems'
2
2
  require 'iknow'
3
3
 
4
4
  Iknow::Config.init do |conf|
5
- conf.api_key = "" # Set your iKnow! API key, here.
6
- conf.host = "api.iknow.co.jp"
5
+ conf.api_key = 'yarpp3tnrk77qx9vwwjnpt42'
6
+ conf.oauth_consumer_key = ''
7
+ conf.oauth_consumer_secret = ''
7
8
  end
8
9
 
9
10
  please_get_api_key =<<EOS
@@ -16,7 +17,11 @@ iKnow! Developers (http://developer.iknow.co.jp/)
16
17
  Thanks!
17
18
  EOS
18
19
 
19
- raise ArgumentError.new(please_get_api_key) if Iknow::Config.instance.api_key == ''
20
+ if Iknow::Config.api_key == ''# or
21
+ # Iknow::Config.oauth_consumer_key == '' or
22
+ # Iknow::Config.oauth_consumer_secret == ''
23
+ raise ArgumentError.new(please_get_api_key)
24
+ end
20
25
 
21
26
  ## User API
22
27
  @user = Iknow::User.find('matake')
@@ -0,0 +1,12 @@
1
+ NAME
2
+ iknow_oauth - creates a functional iknow oauth consumer
3
+
4
+ SYNOPSIS
5
+ nothing
6
+
7
+ Description:
8
+ Generates a model, controller, helper, view and library for making a OAuth consumer of iKnow! API.
9
+ No arguments are needed.
10
+
11
+ Example:
12
+ ./script/generate iknow_oauth
@@ -0,0 +1,22 @@
1
+ require 'rails_generator/base'
2
+
3
+ class IknowGenerator < Rails::Generator::Base
4
+ def manifest
5
+ record do |m|
6
+ m.class_collisions 'IknowOauthController', 'IknowOauthControllerTest', 'IknowOauthHelper',
7
+ 'IknowOauthSystem', 'IknowOauthToken', 'IknowOauthTokenTest'
8
+
9
+ m.migration_template 'iknow_oauth_tokens_migration.rb', 'db/migrate', :migration_file_name => 'create_iknow_oauth_tokens'
10
+
11
+ m.template 'iknow_oauth_controller.rb', File.join('app/controllers', 'iknow_oauth_controller.rb' )
12
+ m.template 'iknow_oauth_controller_test.rb', File.join('test/functional', 'iknow_oauth_controller_test.rb')
13
+ m.template 'iknow_oauth_helper.rb', File.join('app/helpers', 'iknow_oauth_helper.rb' )
14
+ m.template 'iknow_oauth_system.rb', File.join('lib', 'iknow_oauth_system.rb' )
15
+ m.template 'iknow_oauth_token.rb', File.join('app/models', 'iknow_oauth_token.rb' )
16
+ m.template 'iknow_oauth_token_test.rb', File.join('test/unit', 'iknow_oauth_token_test.rb' )
17
+
18
+ m.directory File.join('app/views', 'iknow_oauth')
19
+ m.template 'index.rhtml', File.join('app/views', 'iknow_oauth', 'index.rhtml')
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,24 @@
1
+ class IknowOauthController < ApplicationController
2
+
3
+ def index; end
4
+
5
+ def new_request
6
+ request_token = IknowOauthToken.new_request_token
7
+
8
+ session[:iknow_username] = params[:iknow_username]
9
+ session[:request_token] = request_token
10
+ session[:redirect_url_after_auth] = params[:redirect_url_after_auth] || request.referer
11
+
12
+ if request_token
13
+ redirect_to(request_token.authorize_url)
14
+ else
15
+ raise RuntimeError.new("Failed to get a iKnow! Request Token")
16
+ end
17
+ end
18
+
19
+ def callback
20
+ AuthToken.establish_auth_token(session[:iknow_username], session[:request_token])
21
+ redirect_to(session[:redirect_url_after_auth])
22
+ end
23
+
24
+ end
@@ -0,0 +1,7 @@
1
+ require File.dirname(__FILE__) + '/../test_helper'
2
+
3
+ class IknowOauthControllerTest < ActionController::TestCase
4
+ def test_true
5
+ true
6
+ end
7
+ end
@@ -0,0 +1,3 @@
1
+ module IknowOauthHelper
2
+ # add any methods if you want
3
+ end
@@ -0,0 +1,26 @@
1
+ module IknowOauthSystem
2
+
3
+ protected
4
+
5
+ def require_iknow_oauth
6
+ unless iknow_username_exists?
7
+ redirect_to(:controller => 'iknow_oauth', :action => 'index')
8
+ return false
9
+ end
10
+
11
+ iknow_oauth_token = IknowOauthToken.find_by_username(session[:iknow_username])
12
+ unless iknow_oauth_token
13
+ redirect_to(:controller => 'iknow_oauth', :action => 'new_request')
14
+ return false
15
+ end
16
+
17
+ true
18
+ end
19
+
20
+ private
21
+
22
+ def iknow_username_exists?
23
+ !session[:iknow_username].blank?
24
+ end
25
+
26
+ end
@@ -0,0 +1,37 @@
1
+ require 'oauth/consumer'
2
+
3
+ class IknowOauthToken < ActiveRecord::Base
4
+
5
+ def self.consumer
6
+ @@consumer ||= OAuth::Consumer.new(
7
+ Iknow::Config.oauth_consumer_key,
8
+ Iknow::Config.oauth_consumer_secret,
9
+ :site => Iknow::Config.iknow_api_base_url,
10
+ :authorize_url => "#{Iknow::Config.iknow_base_url}/oauth/authorize"
11
+ )
12
+ end
13
+
14
+ def self.new_request_token
15
+ begin
16
+ self.consumer.get_request_token
17
+ rescue Exception => e
18
+ nil
19
+ end
20
+ end
21
+
22
+ def self.establish_auth_token(iknow_username, request_token)
23
+ access_token = request_token.get_access_token
24
+
25
+ auth_token = IknowAuthToken.new
26
+ auth_token.username = iknow_username
27
+ auth_token.token = access_token.token
28
+ auth_token.secret = access_token.secret
29
+ auth_token.save!
30
+ end
31
+
32
+ def to_access_token
33
+ OAuth::AccessToken.new(self.class.consumer, self.token, self.secret)
34
+ end
35
+
36
+ end
37
+
@@ -0,0 +1,7 @@
1
+ require 'test/unit'
2
+
3
+ class IkonwOauthTokenTest < Test::Unit::TestCase
4
+ def test_true
5
+ true
6
+ end
7
+ end
@@ -0,0 +1,15 @@
1
+ class CreateIknowOauthTokens < ActiveRecord::Migration
2
+ def self.up
3
+ create_table :iknow_oauth_tokens do |t|
4
+ t.column :iknow_username, :string, :null => false
5
+ t.column :token, :string, :unique => true
6
+ t.column :secret, :string
7
+ end
8
+ add_index :iknow_oauth_tokens, :token, :unique => true
9
+ add_index :iknow_oauth_tokens, :iknow_username
10
+ end
11
+
12
+ def self.down
13
+ drop_table :iknow_oauth_tokens
14
+ end
15
+ end
@@ -0,0 +1,4 @@
1
+ <%% form_tag(:controller => 'iknow_oauth', :action => 'new_request') do %>
2
+ <label for="iknow_username">iKnow! Username</label>
3
+ <%%= text_field_tag "iknow_username" %>
4
+ <%% end %>
@@ -0,0 +1,12 @@
1
+ NAME
2
+ iknow_oauth - creates a functional iknow oauth consumer
3
+
4
+ SYNOPSIS
5
+ nothing
6
+
7
+ Description:
8
+ Generates a model, controller, helper, view and library for making a OAuth consumer of iKnow! API.
9
+ No arguments are needed.
10
+
11
+ Example:
12
+ ./script/generate iknow_oauth
@@ -0,0 +1,22 @@
1
+ require 'rails_generator/base'
2
+
3
+ class IknowOauthGenerator < Rails::Generator::Base
4
+ def manifest
5
+ record do |m|
6
+ m.class_collisions 'IknowOauthController', 'IknowOauthControllerTest', 'IknowOauthHelper',
7
+ 'IknowOauthSystem', 'IknowOauthToken', 'IknowOauthTokenTest'
8
+
9
+ m.migration_template 'iknow_oauth_tokens_migration.rb', 'db/migrate', :migration_file_name => 'create_iknow_oauth_tokens'
10
+
11
+ m.template 'iknow_oauth_controller.rb', File.join('app/controllers', 'iknow_oauth_controller.rb' )
12
+ m.template 'iknow_oauth_controller_test.rb', File.join('test/functional', 'iknow_oauth_controller_test.rb')
13
+ m.template 'iknow_oauth_helper.rb', File.join('app/helpers', 'iknow_oauth_helper.rb' )
14
+ m.template 'iknow_oauth_system.rb', File.join('lib', 'iknow_oauth_system.rb' )
15
+ m.template 'iknow_oauth_token.rb', File.join('app/models', 'iknow_oauth_token.rb' )
16
+ m.template 'iknow_oauth_token_test.rb', File.join('test/unit', 'iknow_oauth_token_test.rb' )
17
+
18
+ m.directory File.join('app/views', 'iknow_oauth')
19
+ m.template 'index.rhtml', File.join('app/views', 'iknow_oauth', 'index.rhtml')
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,24 @@
1
+ class IknowOauthController < ApplicationController
2
+
3
+ def index; end
4
+
5
+ def new_request
6
+ request_token = IknowOauthToken.new_request_token
7
+
8
+ session[:iknow_username] = params[:iknow_username]
9
+ session[:request_token] = request_token
10
+ session[:redirect_url_after_auth] = params[:redirect_url_after_auth] || request.referer
11
+
12
+ if request_token
13
+ redirect_to(request_token.authorize_url)
14
+ else
15
+ raise RuntimeError.new("Failed to get a iKnow! Request Token")
16
+ end
17
+ end
18
+
19
+ def callback
20
+ AuthToken.establish_auth_token(session[:iknow_username], session[:request_token])
21
+ redirect_to(session[:redirect_url_after_auth])
22
+ end
23
+
24
+ end
@@ -0,0 +1,7 @@
1
+ require File.dirname(__FILE__) + '/../test_helper'
2
+
3
+ class IknowOauthControllerTest < ActionController::TestCase
4
+ def test_true
5
+ true
6
+ end
7
+ end
@@ -0,0 +1,3 @@
1
+ module IknowOauthHelper
2
+ # add any methods if you want
3
+ end
@@ -0,0 +1,26 @@
1
+ module IknowOauthSystem
2
+
3
+ protected
4
+
5
+ def require_iknow_oauth
6
+ unless iknow_username_exists?
7
+ redirect_to(:controller => 'iknow_oauth', :action => 'index')
8
+ return false
9
+ end
10
+
11
+ iknow_oauth_token = IknowOauthToken.find_by_username(session[:iknow_username])
12
+ unless iknow_oauth_token
13
+ redirect_to(:controller => 'iknow_oauth', :action => 'new_request')
14
+ return false
15
+ end
16
+
17
+ true
18
+ end
19
+
20
+ private
21
+
22
+ def iknow_username_exists?
23
+ !session[:iknow_username].blank?
24
+ end
25
+
26
+ end
@@ -0,0 +1,37 @@
1
+ require 'oauth/consumer'
2
+
3
+ class IknowOauthToken < ActiveRecord::Base
4
+
5
+ def self.consumer
6
+ @@consumer ||= OAuth::Consumer.new(
7
+ Iknow::Config.oauth_consumer_key,
8
+ Iknow::Config.oauth_consumer_secret,
9
+ :site => Iknow::Config.iknow_api_base_url,
10
+ :authorize_url => "#{Iknow::Config.iknow_base_url}/oauth/authorize"
11
+ )
12
+ end
13
+
14
+ def self.new_request_token
15
+ begin
16
+ self.consumer.get_request_token
17
+ rescue Exception => e
18
+ nil
19
+ end
20
+ end
21
+
22
+ def self.establish_auth_token(iknow_username, request_token)
23
+ access_token = request_token.get_access_token
24
+
25
+ auth_token = IknowAuthToken.new
26
+ auth_token.username = iknow_username
27
+ auth_token.token = access_token.token
28
+ auth_token.secret = access_token.secret
29
+ auth_token.save!
30
+ end
31
+
32
+ def to_access_token
33
+ OAuth::AccessToken.new(self.class.consumer, self.token, self.secret)
34
+ end
35
+
36
+ end
37
+
@@ -0,0 +1,7 @@
1
+ require 'test/unit'
2
+
3
+ class IkonwOauthTokenTest < Test::Unit::TestCase
4
+ def test_true
5
+ true
6
+ end
7
+ end
@@ -0,0 +1,15 @@
1
+ class CreateIknowOauthTokens < ActiveRecord::Migration
2
+ def self.up
3
+ create_table :iknow_oauth_tokens do |t|
4
+ t.column :iknow_username, :string, :null => false
5
+ t.column :token, :string, :unique => true
6
+ t.column :secret, :string
7
+ end
8
+ add_index :iknow_oauth_tokens, :token, :unique => true
9
+ add_index :iknow_oauth_tokens, :iknow_username
10
+ end
11
+
12
+ def self.down
13
+ drop_table :iknow_oauth_tokens
14
+ end
15
+ end
@@ -0,0 +1,4 @@
1
+ <%% form_tag(:controller => 'iknow_oauth', :action => 'new_request') do %>
2
+ <label for="iknow_username">iKnow! Username</label>
3
+ <%%= text_field_tag "iknow_username" %>
4
+ <%% end %>
@@ -2,19 +2,26 @@ require 'singleton'
2
2
 
3
3
  class Iknow::Config
4
4
  include Singleton
5
- attr_accessor :protocol, :host, :port, :user_agent, :api_key, :application_name, :application_version, :application_url, :source
5
+ attr_accessor :protocol, :host, :port, :api_protocol, :api_host, :api_port,
6
+ :api_key, :oauth_consumer_key, :oauth_consumer_secret,
7
+ :user_agent, :application_name, :application_version, :application_url, :source
6
8
 
7
9
  def self.init(&block)
8
10
  conf = Iknow::Config.instance
9
- { :protocol => 'http',
10
- :host => 'api.iknow.co.jp',
11
- :port => 80,
12
- :user_agent => 'default',
13
- :api_key => '',
14
- :application_name => 'iKnow! API',
15
- :application_version => Iknow::Version.to_version,
16
- :application_url => 'http://github.com/nov/iknow',
17
- :source => 'iknow'
11
+ { :protocol => 'http',
12
+ :host => 'www.iknow.co.jp',
13
+ :port => 80,
14
+ :api_protocol => 'http',
15
+ :api_host => 'api.iknow.co.jp',
16
+ :api_port => 80,
17
+ :api_key => '',
18
+ :oauth_consumer_key => '',
19
+ :oauth_consumer_secret => '',
20
+ :user_agent => 'default',
21
+ :application_name => 'A rubygem for iKnow! API',
22
+ :application_version => Iknow::Version.to_version,
23
+ :application_url => 'http://github.com/nov/iknow_oauth_generator',
24
+ :source => 'iknow'
18
25
  }.each do |key, value| conf.send("#{key}=", value) end
19
26
  yield conf if block_given?
20
27
  conf
@@ -25,4 +32,13 @@ class Iknow::Config
25
32
  "#{self.protocol}://#{self.host}#{port}"
26
33
  end
27
34
 
35
+ def iknow_api_base_url
36
+ port = self.api_port==80 ? nil : ":#{self.api_port}"
37
+ "#{self.api_protocol}://#{self.api_host}#{port}"
38
+ end
39
+
40
+ def self.method_missing(method, *args)
41
+ self.instance.send(method, *args)
42
+ end
43
+
28
44
  end
@@ -1,7 +1,7 @@
1
1
  module Iknow::Version
2
2
  MAJOR = 0
3
3
  MINOR = 0
4
- REVISION = 1
4
+ REVISION = 2
5
5
  class << self
6
6
  def to_version
7
7
  "#{MAJOR}.#{MINOR}.#{REVISION}"
@@ -1,12 +1,19 @@
1
1
  class Iknow::Base
2
- # TODO: define self.attributes
2
+
3
3
  def self.attributes; self::ATTRIBUTES end
4
+
4
5
  def attributes; self.class.attributes end
5
6
 
6
7
  def self.deserialize(response, params = {})
8
+ return nil if response.is_a?(Hash) and
9
+ !response['error'].blank? and
10
+ response['error']['code'].to_i == 404
11
+
7
12
  klass = params[:as] ? params[:as] : self
8
- response.is_a?(Array) ? response.inject([]) { |results, params| results << klass.new(params) } : klass.new(response)
13
+ response.is_a?(Array) ? response.inject([]) { |results, params| results << klass.new(params) } :
14
+ klass.new(response)
9
15
  end
16
+
10
17
  def deserialize(response, params = {})
11
18
  self.class.deserialize(response, params)
12
19
  end
@@ -26,19 +26,19 @@ class Iknow::Item < Iknow::Base
26
26
 
27
27
  def self.recent(params = {})
28
28
  response = Iknow::RestClient::Item.recent(params)
29
- self.deserialize(response)
29
+ self.deserialize(response) || []
30
30
  end
31
31
 
32
32
  def self.matching(keyword, params = {})
33
33
  params[:keyword] = keyword
34
34
  response = Iknow::RestClient::Item.matching(params)
35
- self.deserialize(response)
35
+ self.deserialize(response) || []
36
36
  end
37
37
 
38
38
  def self.extract(text, params = {})
39
39
  params[:text] = text
40
40
  response = Iknow::RestClient::Item.extract(params)
41
- self.deserialize(response)
41
+ self.deserialize(response) || []
42
42
  end
43
43
 
44
44
  def initialize(params = {})
@@ -8,13 +8,13 @@ class Iknow::List < Iknow::Base
8
8
 
9
9
  def self.recent(params = {})
10
10
  response = Iknow::RestClient::List.recent(params)
11
- self.deserialize(response)
11
+ self.deserialize(response) || []
12
12
  end
13
13
 
14
14
  def self.matching(keyword, params = {})
15
15
  params[:keyword] = keyword
16
16
  response = Iknow::RestClient::List.matching(params)
17
- self.deserialize(response)
17
+ self.deserialize(response) || []
18
18
  end
19
19
 
20
20
  def self.create(params = {})
@@ -30,19 +30,13 @@ class Iknow::List < Iknow::Base
30
30
  end
31
31
 
32
32
  def items(params = {})
33
- return @items if @items
34
-
35
33
  response = Iknow::RestClient::List.items(params.merge(:id => self.list_id))
36
- @items = self.deserialize(response, :as => Iknow::Item)
37
- @items
34
+ self.deserialize(response, :as => Iknow::Item) || []
38
35
  end
39
36
 
40
37
  def sentences(params = {})
41
- return @sentences if @sentences
42
-
43
38
  response = Iknow::RestClient::List.sentences(params.merge(:id => self.list_id))
44
- @sentences = self.deserialize(response, :as => Iknow::Sentence)
45
- @sentences
39
+ self.deserialize(response, :as => Iknow::Sentence) || []
46
40
  end
47
41
 
48
42
  def save!
@@ -3,22 +3,22 @@ class Iknow::Sentence < Iknow::Base
3
3
  WRITABLE_ATTRIBUTES = [:sound, :image]
4
4
  attr_accessor *WRITABLE_ATTRIBUTES
5
5
  attr_reader *(ATTRIBUTES - WRITABLE_ATTRIBUTES)
6
-
6
+
7
7
  def self.recent(params = {})
8
8
  response = Iknow::RestClient::Sentence.recent(params)
9
- self.deserialize(response)
9
+ self.deserialize(response) || []
10
10
  end
11
-
11
+
12
12
  def self.matching(keyword, params = {})
13
13
  params[:keyword] = keyword
14
14
  response = Iknow::RestClient::Sentence.matching(params)
15
- self.deserialize(response)
15
+ self.deserialize(response) || []
16
16
  end
17
-
17
+
18
18
  def initialize(params = {})
19
19
  @sound = params['sound']
20
20
  @image = params['image']
21
21
  @text = params['text']
22
22
  end
23
-
23
+
24
24
  end
@@ -2,7 +2,7 @@ class Iknow::User < Iknow::Base
2
2
  ATTRIBUTES = [:username, :profile]
3
3
  attr_reader *ATTRIBUTES
4
4
 
5
- class Profile < Iknow::User
5
+ class Profile < Iknow::Base
6
6
  ATTRIBUTES = [:name, :gender, :birthday, :description, :blog_url, :profile_url, :foaf_url, :icon_url]
7
7
  attr_reader *ATTRIBUTES
8
8
 
@@ -18,22 +18,33 @@ class Iknow::User < Iknow::Base
18
18
  end
19
19
  end
20
20
 
21
- class StudyResult < Iknow::User
22
- ATTRIBUTES = [:timestamp, :seconds, :totals, :seen, :completed, :date]
21
+ class Study < Iknow::Base
22
+ ATTRIBUTES = [:today, :results]
23
23
  attr_reader *ATTRIBUTES
24
24
 
25
+ class Result < Iknow::Base
26
+ ATTRIBUTES = [:timestamp, :seconds, :totals, :seen, :completed, :date]
27
+ attr_reader *ATTRIBUTES
28
+
29
+ def initialize(params = {})
30
+ @timestamp = (params['timestamp'].to_i rescue nil)
31
+ @seconds = (params['seconds'].to_i rescue nil)
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)
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)
40
+ end
41
+ end
42
+
25
43
  def initialize(params = {})
26
- @timestamp = (params['timestamp'].to_i rescue nil)
27
- @seconds = (params['seconds'].to_i rescue nil)
28
- @totals = {
29
- :seconds => (params['totals']['seconds'].to_i rescue nil),
30
- :seen => (params['totals']['seen'].to_i rescue nil),
31
- :completed => (params['totals']['completed'].to_i rescue nil)
32
- }
33
- @seen = (params['seen'].to_i rescue nil)
34
- @completed = (params['completed'].to_i rescue nil)
35
- @date = (Date.parse(params['date']) rescue nil)
44
+ @today = (Date.parse(params['today']) rescue nil)
45
+ @results = self.deserialize(params['study_results'], :as => Iknow::User::Study::Result)
36
46
  end
47
+
37
48
  end
38
49
 
39
50
  def self.find(username)
@@ -44,7 +55,7 @@ class Iknow::User < Iknow::Base
44
55
  def self.matching(keyword, params = {})
45
56
  params[:keyword] = keyword
46
57
  response = Iknow::RestClient::User.matching(params)
47
- self.deserialize(response)
58
+ self.deserialize(response) || []
48
59
  end
49
60
 
50
61
  def initialize(params)
@@ -53,32 +64,24 @@ class Iknow::User < Iknow::Base
53
64
  end
54
65
 
55
66
  def items(params = {})
56
- return @items if @items
57
-
58
67
  response = Iknow::RestClient::User.items(params.merge(:username => self.username))
59
- self.deserialize(response, :as => Iknow::Item)
68
+ self.deserialize(response, :as => Iknow::Item) || []
60
69
  end
61
70
 
62
71
  def lists(params = {})
63
- return @lists if @lists
64
-
65
72
  response = Iknow::RestClient::User.lists(params.merge(:username => self.username))
66
- self.deserialize(response, :as => Iknow::List)
73
+ self.deserialize(response, :as => Iknow::List) || []
67
74
  end
68
75
 
69
76
  def friends(params = {})
70
- return @friends if @friends
71
-
72
77
  response = Iknow::RestClient::User.friends(params.merge(:username => self.username))
73
- self.deserialize(response)
78
+ self.deserialize(response) || []
74
79
  end
75
80
 
76
- def study_results(params = {})
77
- return @study_results if @study_results
78
-
79
- params[:application] ||= :iknow
81
+ def study(params = {})
82
+ params[:application] ||= 'iknow'
80
83
  response = Iknow::RestClient::User.study_results(params.merge(:username => self.username))
81
- self.deserialize(response, :as => Iknow::User::StudyResult)
84
+ self.deserialize(response, :as => Iknow::User::Study)
82
85
  end
83
86
 
84
87
  end