summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--README.mkd8
-rw-r--r--lib/evernote/user_store.rb12
-rw-r--r--spec/evernote/user_store_spec.rb26
3 files changed, 33 insertions, 13 deletions
diff --git a/README.mkd b/README.mkd
index 8e6d79d..6a28037 100644
--- a/README.mkd
+++ b/README.mkd
@@ -9,7 +9,13 @@ Get yourself a "Client application" API key from Evernote (http://www.evernote.c
require 'evernote'
user_store_url = "https://sandbox.evernote.com/edam/user"
- config={'username'=>'YOUR_USERNAME','password'=>'YOUR_PASSWORD','consumer_key'=>'YOUR_CONSUMER_KEY_FROM_EVERNOTE','consumer_secret'=>'YOUR_CONSUMER_SECRECT_FROM_EVERNOTE'}
+
+ config = {
+ :username => 'YOUR_USERNAME',
+ :password => 'YOUR_PASSWORD',
+ :consumer_key => 'YOUR_CONSUMER_KEY_FROM_EVERNOTE',
+ :consumer_secret => 'YOUR_CONSUMER_SECRECT_FROM_EVERNOTE'
+ }
# note, you could also read in your consumer key information from a YML file
diff --git a/lib/evernote/user_store.rb b/lib/evernote/user_store.rb
index 44574fc..884ca24 100644
--- a/lib/evernote/user_store.rb
+++ b/lib/evernote/user_store.rb
@@ -7,10 +7,14 @@ module Evernote
def initialize(uri, credentials, thrift_client_options = {})
- @consumer_key = credentials["consumer_key"]
- @consumer_secret = credentials["consumer_secret"]
- @username = credentials["username"]
- @password = credentials["password"]
+ raise ArgumentError, "credentials must be passed in as a hash" unless credentials.class == Hash
+
+ credentials=credentials.inject({}) { |h,(k,v)| h[k.to_sym] = v; h } # convert any stringifyed hash keys into symbols
+
+ @consumer_key = credentials[:consumer_key]
+ @consumer_secret = credentials[:consumer_key]
+ @username = credentials[:username]
+ @password = credentials[:password]
unless @consumer_key && @consumer_secret && @username && @password
raise ArgumentError, "'consumer_key', 'consumer_secret', 'username' and 'password' are required"
diff --git a/spec/evernote/user_store_spec.rb b/spec/evernote/user_store_spec.rb
index dcc33cd..1f769ee 100644
--- a/spec/evernote/user_store_spec.rb
+++ b/spec/evernote/user_store_spec.rb
@@ -2,44 +2,54 @@ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
describe "Evernote::UserStore" do
before(:each) do
- @auth_file = File.dirname(__FILE__) + "/auth.yaml"
- @env = :sandbox
+ @user_store_url = "https://sandbox.evernote.com/edam/user"
+ @config = {
+ :username => 'cgs',
+ :password => 'password',
+ :consumer_key => '12345',
+ :consumer_secret => 'ABCDE'
+ }
end
it "initializes an Evernote::Client and validate the client code version" do
client = mock("Evernote::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", @auth_file, @env)
+ Evernote::UserStore.new(@user_store_url, @config)
end
it "should raise an error on init if the version is not up to date" do
Evernote::Client.stub!(:new => mock("Evernote::Client", :checkVersion => false))
lambda {
- Evernote::UserStore.new("https://sandbox.evernote.com/edam/user", @auth_file, @env)
+ Evernote::UserStore.new(@user_store_url, @config)
}.should raise_error(Evernote::VersionOutOfDate, "The vendored Evernote client code is out of date and needs to be regenerated")
end
%w(consumer_key consumer_secret username password).each do |credential|
it "raises an exception if no #{credential} is set" do
lambda {
- Evernote::UserStore.new("https://sandbox.evernote.com/edam/user", @auth_file, :invalid)
+ Evernote::UserStore.new(@user_store_url, Hash.new)
}.should raise_error(ArgumentError, "'consumer_key', 'consumer_secret', 'username' and 'password' are required")
end
end
it "should authenticate" do
Evernote::Client.stub!(:new => mock("Evernote::Client", :checkVersion => true))
- user_store = Evernote::UserStore.new("https://sandbox.evernote.com/edam/user", @auth_file, @env)
+ Evernote::UserStore.new(@user_store_url, @config)
user_store.instance_variable_get(:@client).should_receive(:authenticate).with("cgs", "password", "12345", "ABCDE").and_return(nil)
user_store.authenticate
end
+ it "should raise an exception if the config parameter is not a hash" do
+ not_a_hash="hello, I am a string"
+ Evernote::UserStore.new(@user_store_url, not_a_hash).should raise_error(ArgumentError, "credentials must be passed in as a hash")
+ end
+
it "should wrap authentication failure" do
Evernote::Client.stub!(:new => mock("Evernote::Client", :checkVersion => true))
- user_store = Evernote::UserStore.new("https://sandbox.evernote.com/edam/user", @auth_file, @env)
+ Evernote::UserStore.new(@user_store_url, @config)
user_store.instance_variable_get(:@client).should_receive(:authenticate).and_raise(Evernote::EDAM::Error::EDAMUserException)
lambda {
@@ -49,7 +59,7 @@ describe "Evernote::UserStore" do
it "should proxy methods" do
Evernote::Client.stub!(:new => mock("Evernote::Client", :checkVersion => true))
- user_store = Evernote::UserStore.new("https://sandbox.evernote.com/edam/user", @auth_file, @env)
+ Evernote::UserStore.new(@user_store_url, @config)
user_store.instance_variable_get(:@client).should_receive(:foobar).and_return(nil)
user_store.foobar