nov-iknow 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
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