evernote_oauth 0.1.0 → 0.1.1

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/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  Evernote OAuth / Thrift API client library for Ruby
2
2
  ===================================================
3
- - Evernote OAuth version 0.1.0
3
+ - Evernote OAuth version 0.1.1
4
4
 
5
5
  Install the gem
6
6
  ---------------
@@ -34,6 +34,7 @@ client = EvernoteOAuth::Client.new(
34
34
 
35
35
  Usage
36
36
  -----
37
+ ### OAuth ###
37
38
  ```ruby
38
39
  client = EvernoteOAuth::Client.new
39
40
  request_token = client.request_token(:oauth_callback => 'YOUR CALLBACK URL')
@@ -46,9 +47,47 @@ access_token = request_token.get_access_token(oauth_verifier: params[:oauth_veri
46
47
  ```
47
48
  Now you can make other API calls
48
49
  ```ruby
49
- client = EvernoteOAuth::Client.new(token: access_token.token)
50
+ token = access_token.token
51
+ client = EvernoteOAuth::Client.new(token: token)
50
52
  note_store = client.note_store
51
- notebooks = note_store.listNotebooks(access_token.token)
53
+ notebooks = note_store.listNotebooks(token)
54
+ ```
55
+
56
+ ### UserStore ###
57
+ Once you acquire token, you can use UserStore. For example, if you want to call UserStore.getUser:
58
+ ```ruby
59
+ user_store = EvernoteOAuth::Client.new(token: token).user_store
60
+ user_store.getUser(token)
61
+ ```
62
+ You can also omit authenticationToken in the arguments of UserStore functions:
63
+ ```ruby
64
+ user_store.getUser
65
+ ```
66
+
67
+ ### NoteStore ###
68
+ If you want to call NoteStore.listNotebooks:
69
+ ```ruby
70
+ note_store = EvernoteOAuth::Client.new(token: token).note_store
71
+ note_store.listNotebooks(token)
72
+ ```
73
+ You can also omit authenticationToken in the arguments of NoteStore functions:
74
+ ```ruby
75
+ note_store.listNotebooks
76
+ ```
77
+
78
+ ### NoteStore for linked notebooks ###
79
+ If you want to get tags for linked notebooks:
80
+ ```ruby
81
+ linked_notebook = note_store.listLinkedNotebooks.first # any notebook
82
+ shared_note_store = client.shared_note_store(linked_notebook)
83
+ stoken = shared_note_store.token
84
+ shared_notebook = shared_note_store.getSharedNotebookByAuth(stoken)
85
+ shared_note_store.listTagsByNotebook(stoken, shared_notebook.notebookGuid)
86
+ ```
87
+ You can also omit authenticationToken in the arguments of NoteStore functions:
88
+ ```ruby
89
+ shared_notebook = shared_note_store.getSharedNotebookByAuth
90
+ shared_note_store.listTagsByNotebook(shared_notebook.notebookGuid)
52
91
  ```
53
92
 
54
93
  References
@@ -4,7 +4,9 @@ require 'yaml'
4
4
 
5
5
  require 'evernote-thrift'
6
6
 
7
+ require 'evernote_oauth/thrift_client_delegation'
7
8
  require 'evernote_oauth/client'
8
9
  require 'evernote_oauth/user_store'
9
10
  require 'evernote_oauth/note_store'
11
+ require 'evernote_oauth/shared_note_store'
10
12
  require 'evernote_oauth/version'
@@ -3,20 +3,20 @@ module EvernoteOAuth
3
3
  class Client
4
4
  def note_store(options={})
5
5
  @note_store = EvernoteOAuth::NoteStore.new(
6
+ token: options[:token] || @token,
6
7
  client: thrift_client(::Evernote::EDAM::NoteStore::NoteStore::Client,
7
- options[:note_store_url] || user_store.getNoteStoreUrl(@token))
8
+ options[:note_store_url] || user_store.getNoteStoreUrl)
8
9
  )
9
10
  end
10
11
  end
11
12
 
12
13
  class NoteStore
14
+ include ::EvernoteOAuth::ThriftClientDelegation
15
+
13
16
  def initialize(options={})
17
+ @token = options[:token]
14
18
  @client = options[:client]
15
19
  end
16
-
17
- def method_missing(name, *args, &block)
18
- @client.send(name, *args, &block)
19
- end
20
20
  end
21
21
 
22
22
  end
@@ -0,0 +1,26 @@
1
+ module EvernoteOAuth
2
+
3
+ class Client
4
+ def shared_note_store(shared_notebook, options={})
5
+ EvernoteOAuth::SharedNoteStore.new(
6
+ shared_notebook: shared_notebook,
7
+ token: options[:token] || @token,
8
+ client: thrift_client(::Evernote::EDAM::NoteStore::NoteStore::Client,
9
+ shared_notebook.noteStoreUrl)
10
+ )
11
+ end
12
+ end
13
+
14
+ class SharedNoteStore
15
+ include ::EvernoteOAuth::ThriftClientDelegation
16
+ attr_reader :token
17
+
18
+ def initialize(options={})
19
+ @shared_notebook = options[:shared_notebook]
20
+ @client = options[:client]
21
+ @token = authenticateToSharedNotebook(@shared_notebook.shareKey,
22
+ options[:token]).authenticationToken
23
+ end
24
+ end
25
+
26
+ end
@@ -0,0 +1,22 @@
1
+ module EvernoteOAuth
2
+
3
+ module ThriftClientDelegation
4
+ def method_missing(name, *args, &block)
5
+ method = @client.class.instance_method(name)
6
+ parameters = method.parameters
7
+ if parameters.size != args.size &&
8
+ idx_token = parameters.index{|e| e.last == :authenticationToken}
9
+ new_args = args.dup.insert(idx_token, @token)
10
+ begin
11
+ @client.send(name, *new_args, &block)
12
+ rescue ArgumentError => e
13
+ puts e.inspect
14
+ @client.send(name, *args, &block)
15
+ end
16
+ else
17
+ @client.send(name, *args, &block)
18
+ end
19
+ end
20
+ end
21
+
22
+ end
@@ -3,6 +3,7 @@ module EvernoteOAuth
3
3
  class Client
4
4
  def user_store
5
5
  @user_store = EvernoteOAuth::UserStore.new(
6
+ token: @token,
6
7
  client: thrift_client(::Evernote::EDAM::UserStore::UserStore::Client,
7
8
  endpoint('edam/user'))
8
9
  )
@@ -10,15 +11,14 @@ module EvernoteOAuth
10
11
  end
11
12
 
12
13
  class UserStore
14
+ include ::EvernoteOAuth::ThriftClientDelegation
15
+
13
16
  def initialize(options={})
17
+ @token = options[:token]
14
18
  @client = options[:client]
15
19
  raise 'API version is not up to date' unless version_valid?
16
20
  end
17
21
 
18
- def method_missing(name, *args, &block)
19
- @client.send(name, *args, &block)
20
- end
21
-
22
22
  def version_valid?
23
23
  checkVersion("EDAMTest",
24
24
  ::Evernote::EDAM::UserStore::EDAM_VERSION_MAJOR,
@@ -1,3 +1,3 @@
1
1
  module EvernoteOAuth
2
- VERSION = "0.1.0"
2
+ VERSION = "0.1.1"
3
3
  end
@@ -2,7 +2,7 @@ require File.join(File.dirname(__FILE__), "/../spec_helper")
2
2
 
3
3
  describe "EvernoteOAuth::NoteStore" do
4
4
  context "#initialize" do
5
- it "assigns instance variables and checks version" do
5
+ it "assigns instance variables" do
6
6
  note_store = EvernoteOAuth::NoteStore.new(client: 'client')
7
7
  note_store.instance_variable_get(:@client).should == 'client'
8
8
  end
@@ -11,6 +11,9 @@ describe "EvernoteOAuth::NoteStore" do
11
11
  it "dispatches method" do
12
12
  mock_client = mock(Object)
13
13
  mock_client.should_receive(:send).with(:call_method, 'args')
14
+ mock_client.class.should_receive(:instance_method).with(:call_method).and_return{
15
+ Proc.new {|a| a}
16
+ }
14
17
  note_store = EvernoteOAuth::NoteStore.new(client: mock_client)
15
18
  note_store.call_method('args')
16
19
  end
@@ -0,0 +1,30 @@
1
+ require File.join(File.dirname(__FILE__), "/../spec_helper")
2
+
3
+ describe "EvernoteOAuth::SharedNoteStore" do
4
+ context "#initialize" do
5
+ it "assigns instance variables" do
6
+ sn = Struct.new(:shareKey).new('shareKey')
7
+ auth_token = Struct.new(:authenticationToken).new('token')
8
+ EvernoteOAuth::SharedNoteStore.any_instance.should_receive(
9
+ :authenticateToSharedNotebook).and_return(auth_token)
10
+ note_store = EvernoteOAuth::SharedNoteStore.new(client: 'client', shared_notebook: sn)
11
+ note_store.instance_variable_get(:@client).should == 'client'
12
+ note_store.token.should == 'token'
13
+ end
14
+ end
15
+ context "#method_missing" do
16
+ it "dispatches method" do
17
+ mock_client = mock(Object)
18
+ mock_client.should_receive(:send).with(:call_method, 'args')
19
+ mock_client.class.should_receive(:instance_method).with(:call_method).and_return{
20
+ Proc.new {|a| a}
21
+ }
22
+ sn = Struct.new(:shareKey).new('shareKey')
23
+ auth_token = Struct.new(:authenticationToken).new('token')
24
+ EvernoteOAuth::SharedNoteStore.any_instance.should_receive(
25
+ :authenticateToSharedNotebook).and_return(auth_token)
26
+ note_store = EvernoteOAuth::SharedNoteStore.new(client: mock_client, shared_notebook: sn)
27
+ note_store.call_method('args')
28
+ end
29
+ end
30
+ end
@@ -16,6 +16,9 @@ describe "EvernoteOAuth::UserStore" do
16
16
  it "dispatches method" do
17
17
  mock_client = mock(Object)
18
18
  mock_client.should_receive(:send).with(:call_method, 'args')
19
+ mock_client.class.should_receive(:instance_method).with(:call_method).and_return{
20
+ Proc.new {|a| a}
21
+ }
19
22
  EvernoteOAuth::UserStore.any_instance.stub(:version_valid?){true}
20
23
  user_store = EvernoteOAuth::UserStore.new(client: mock_client)
21
24
  user_store.call_method('args')
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: evernote_oauth
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -71,11 +71,14 @@ files:
71
71
  - evernote_oauth.gemspec
72
72
  - lib/evernote_oauth/client.rb
73
73
  - lib/evernote_oauth/note_store.rb
74
+ - lib/evernote_oauth/shared_note_store.rb
75
+ - lib/evernote_oauth/thrift_client_delegation.rb
74
76
  - lib/evernote_oauth/user_store.rb
75
77
  - lib/evernote_oauth/version.rb
76
78
  - lib/evernote_oauth.rb
77
79
  - spec/evernote_oauth/client_spec.rb
78
80
  - spec/evernote_oauth/note_store_spec.rb
81
+ - spec/evernote_oauth/shared_note_store_spec.rb
79
82
  - spec/evernote_oauth/user_store_spec.rb
80
83
  - spec/spec_helper.rb
81
84
  homepage: http://github.com/rekotan/evernote_oauth