summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lib/evernote/client.rb12
-rw-r--r--lib/evernote/user_store.rb17
-rw-r--r--spec/evernote/client_spec.rb9
-rw-r--r--spec/evernote/user_store_spec.rb32
4 files changed, 54 insertions, 16 deletions
diff --git a/lib/evernote/client.rb b/lib/evernote/client.rb
index 1141087..e6962dc 100644
--- a/lib/evernote/client.rb
+++ b/lib/evernote/client.rb
@@ -1,13 +1,19 @@
+require 'forwardable'
+
module Evernote
class Client
-
+
THRIFT_DEFAULTS = {
:transport => Thrift::HTTPClientTransport
}.freeze
def initialize(klass, url, thrift_client_options = {})
thrift_opts = THRIFT_DEFAULTS.merge(thrift_client_options)
- ThriftClient.new(klass, url, thrift_opts)
+ @client = ThriftClient.new(klass, url, thrift_opts)
+ end
+
+ def method_missing(name, *args, &block)
+ @client.send(name, *args, &block)
end
end
-end \ No newline at end of file
+end
diff --git a/lib/evernote/user_store.rb b/lib/evernote/user_store.rb
index 1be8cb6..2b60756 100644
--- a/lib/evernote/user_store.rb
+++ b/lib/evernote/user_store.rb
@@ -1,5 +1,10 @@
module Evernote
+
+ VersionOutOfDate = Class.new(StandardError)
+
class UserStore
+ attr_reader :client
+
def initialize(uri, opts = {}, thrift_client_options = {})
@consumer_key = opts[:consumer_key]
@consumer_secret = opts[:consumer_secret]
@@ -10,7 +15,17 @@ module Evernote
raise ArgumentError, ":consumer_key, :consumer_secret, :username and :password are required"
end
- Evernote::Client.new(Evernote::EDAM::UserStore::UserStore::Client, uri, thrift_client_options)
+ @client = Evernote::Client.new(Evernote::EDAM::UserStore::UserStore::Client, uri, thrift_client_options)
+
+ validate_version
+ end
+
+ def validate_version
+ raise VersionOutOfDate, "The vendored Evernote client code is out of date and needs to be regenerated" unless version_valid?
+ end
+
+ def version_valid?
+ @client.checkVersion("Ruby EDAMTest", Evernote::EDAM::UserStore::EDAM_VERSION_MAJOR, Evernote::EDAM::UserStore::EDAM_VERSION_MINOR)
end
end
end
diff --git a/spec/evernote/client_spec.rb b/spec/evernote/client_spec.rb
index 5d3d08c..2a75a74 100644
--- a/spec/evernote/client_spec.rb
+++ b/spec/evernote/client_spec.rb
@@ -8,4 +8,13 @@ describe "Evernote::Client" do
Evernote::Client.new(klass, "https://www.example.com")
end
+
+ it "delegates method calls to the underlying ThriftClient" do
+ client = Evernote::Client.new(Evernote::EDAM::UserStore::UserStore::Client, "https://www.example.com")
+ internal_client = client.instance_variable_get(:@client)
+ internal_client.stub(:checkVersion)
+ internal_client.should_receive(:checkVersion)
+
+ client.checkVersion
+ end
end
diff --git a/spec/evernote/user_store_spec.rb b/spec/evernote/user_store_spec.rb
index 623d80d..6196ffe 100644
--- a/spec/evernote/user_store_spec.rb
+++ b/spec/evernote/user_store_spec.rb
@@ -3,43 +3,51 @@ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
describe "Evernote::UserStore" do
before(:each) do
@opts = { :consumer_key => "12345", :consumer_secret => "ABCDE", :username => "cgs", :password => "password" }
+ @thrift_client_opts = {}
end
- it "initializes an Evernote::Client" do
- Evernote::Client.should_receive(:new).with(Evernote::EDAM::UserStore::UserStore::Client, "https://sandbox.evernote.com/edam/user", {})
+ it "initializes an Evernote::Client and validate the client code version" do
+ client = mock("client", :checkVersion => true)
+ Evernote::Client.should_receive(:new).with(Evernote::EDAM::UserStore::UserStore::Client, "https://sandbox.evernote.com/edam/user", {}).and_return(client)
- Evernote::UserStore.new("https://sandbox.evernote.com/edam/user", @opts)
+ Evernote::UserStore.new("https://sandbox.evernote.com/edam/user", @opts, @thrift_client_opts)
end
+ it "should raise an error on init if the version is not up to date" do
+ client = mock("client", :checkVersion => false)
+ Evernote::Client.should_receive(:new).with(Evernote::EDAM::UserStore::UserStore::Client, "https://sandbox.evernote.com/edam/user", {}).and_return(client)
+
+ lambda {
+ Evernote::UserStore.new("https://sandbox.evernote.com/edam/user", @opts, @thrift_client_opts)
+ }.should raise_error(Evernote::VersionOutOfDate, "The vendored Evernote client code is out of date and needs to be regenerated")
+ end
+
it "raises an exception if no consumer key is set" do
- thrift_client_opts = {}
@opts.delete(:consumer_key)
lambda {
- Evernote::UserStore.new("https://sandbox.evernote.com/edam/user", @opts, thrift_client_opts)
+ Evernote::UserStore.new("https://sandbox.evernote.com/edam/user", @opts, @thrift_client_opts)
}.should raise_error(ArgumentError, ":consumer_key, :consumer_secret, :username and :password are required")
end
-
+
it "raises an exception if no consumer secret is set" do
- thrift_client_opts = {}
@opts.delete(:consumer_secret)
lambda {
- Evernote::UserStore.new("https://sandbox.evernote.com/edam/user", @opts, thrift_client_opts)
+ Evernote::UserStore.new("https://sandbox.evernote.com/edam/user", @opts, @thrift_client_opts)
}.should raise_error(ArgumentError, ":consumer_key, :consumer_secret, :username and :password are required")
end
it "raises an exception if no username is set" do
- thrift_client_opts = {}
@opts.delete(:username)
lambda {
- Evernote::UserStore.new("https://sandbox.evernote.com/edam/user", @opts, thrift_client_opts)
+ Evernote::UserStore.new("https://sandbox.evernote.com/edam/user", @opts, @thrift_client_opts)
}.should raise_error(ArgumentError, ":consumer_key, :consumer_secret, :username and :password are required")
end
it "raises an exception if no password is set" do
- thrift_client_opts = {}
@opts.delete(:password)
lambda {
- Evernote::UserStore.new("https://sandbox.evernote.com/edam/user", @opts, thrift_client_opts)
+ Evernote::UserStore.new("https://sandbox.evernote.com/edam/user", @opts, @thrift_client_opts)
}.should raise_error(ArgumentError, ":consumer_key, :consumer_secret, :username and :password are required")
end
+
end