diff options
| -rw-r--r-- | Rakefile | 2 | ||||
| -rw-r--r-- | evernote.gemspec | 30 | ||||
| -rw-r--r-- | lib/evernote/client.rb | 6 | ||||
| -rw-r--r-- | lib/evernote/user_store.rb | 28 | ||||
| -rw-r--r-- | spec/evernote/client_spec.rb | 9 | ||||
| -rw-r--r-- | spec/evernote/user_store_spec.rb | 56 | 
6 files changed, 76 insertions, 55 deletions
| @@ -9,7 +9,7 @@ begin      gem.email = "chris.sepic@gmail.com"      gem.homepage = "http://github.com/cgs/evernote"      gem.authors = ["Chris Sepic"] -    gem.files.include %w{vendor/**/*} +    gem.files.include %w{vendor/**/* spec/evernote/auth.yaml}      gem.add_dependency("thrift_client")      gem.add_development_dependency "rspec"      gem.add_development_dependency "yard" diff --git a/evernote.gemspec b/evernote.gemspec index a6ee8d8..b630d3c 100644 --- a/evernote.gemspec +++ b/evernote.gemspec @@ -1,15 +1,15 @@  # Generated by jeweler -# DO NOT EDIT THIS FILE -# Instead, edit Jeweler::Tasks in Rakefile, and run `rake gemspec` +# DO NOT EDIT THIS FILE DIRECTLY +# Instead, edit Jeweler::Tasks in rakefile, and run the gemspec command  # -*- encoding: utf-8 -*-  Gem::Specification.new do |s|    s.name = %q{evernote} -  s.version = "0.1.0" +  s.version = "0.2.0"    s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=    s.authors = ["Chris Sepic"] -  s.date = %q{2010-01-30} +  s.date = %q{2010-02-27}    s.email = %q{chris.sepic@gmail.com}    s.extra_rdoc_files = [      "LICENSE", @@ -24,32 +24,24 @@ Gem::Specification.new do |s|       "VERSION",       "evernote.gemspec",       "lib/evernote.rb", -     "spec/evernote_spec.rb", +     "lib/evernote/client.rb", +     "lib/evernote/user_store.rb", +     "spec/evernote/auth.yaml", +     "spec/evernote/client_spec.rb", +     "spec/evernote/user_store_spec.rb",       "spec/spec.opts",       "spec/spec_helper.rb",       "vendor/gen-rb/evernote.rb", -     "vendor/gen-rb/evernote.rb", -     "vendor/gen-rb/evernote/edam/errors_types.rb",       "vendor/gen-rb/evernote/edam/errors_types.rb",       "vendor/gen-rb/evernote/edam/limits_constants.rb", -     "vendor/gen-rb/evernote/edam/limits_constants.rb",       "vendor/gen-rb/evernote/edam/limits_types.rb", -     "vendor/gen-rb/evernote/edam/limits_types.rb", -     "vendor/gen-rb/evernote/edam/note_store.rb",       "vendor/gen-rb/evernote/edam/note_store.rb",       "vendor/gen-rb/evernote/edam/note_store_constants.rb", -     "vendor/gen-rb/evernote/edam/note_store_constants.rb",       "vendor/gen-rb/evernote/edam/note_store_types.rb", -     "vendor/gen-rb/evernote/edam/note_store_types.rb", -     "vendor/gen-rb/evernote/edam/types_constants.rb",       "vendor/gen-rb/evernote/edam/types_constants.rb",       "vendor/gen-rb/evernote/edam/types_types.rb", -     "vendor/gen-rb/evernote/edam/types_types.rb",       "vendor/gen-rb/evernote/edam/user_store.rb", -     "vendor/gen-rb/evernote/edam/user_store.rb", -     "vendor/gen-rb/evernote/edam/user_store_constants.rb",       "vendor/gen-rb/evernote/edam/user_store_constants.rb", -     "vendor/gen-rb/evernote/edam/user_store_types.rb",       "vendor/gen-rb/evernote/edam/user_store_types.rb"    ]    s.homepage = %q{http://github.com/cgs/evernote} @@ -58,7 +50,8 @@ Gem::Specification.new do |s|    s.rubygems_version = %q{1.3.5}    s.summary = %q{High level wrapper for the Evernote API}    s.test_files = [ -    "spec/evernote_spec.rb", +    "spec/evernote/client_spec.rb", +     "spec/evernote/user_store_spec.rb",       "spec/spec_helper.rb"    ] @@ -81,3 +74,4 @@ Gem::Specification.new do |s|      s.add_dependency(%q<yard>, [">= 0"])    end  end + diff --git a/lib/evernote/client.rb b/lib/evernote/client.rb index 1141087..80eb484 100644 --- a/lib/evernote/client.rb +++ b/lib/evernote/client.rb @@ -7,7 +7,11 @@ module Evernote      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 diff --git a/lib/evernote/user_store.rb b/lib/evernote/user_store.rb index 1be8cb6..bbbdfcb 100644 --- a/lib/evernote/user_store.rb +++ b/lib/evernote/user_store.rb @@ -1,16 +1,30 @@  module Evernote    class UserStore -    def initialize(uri, opts = {}, thrift_client_options = {}) -      @consumer_key = opts[:consumer_key] -      @consumer_secret = opts[:consumer_secret] -      @username = opts[:username] -      @password = opts[:password] +    AuthenticationFailure = Class.new(StandardError) +     +    def initialize(uri, auth_file, auth_env, thrift_client_options = {}) +      credentials = YAML.load_file(auth_file)[auth_env.to_s] +       +      @consumer_key = credentials["consumer_key"] +      @consumer_secret = credentials["consumer_secret"] +      @username = credentials["username"] +      @password = credentials["password"]        unless @consumer_key && @consumer_secret && @username && @password -        raise ArgumentError, ":consumer_key, :consumer_secret, :username and :password are required" +        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) +    end +     +    def authenticate +      @client.authenticate(@username, @password, @consumer_key, @consumer_secret) +    rescue Evernote::EDAM::Error::EDAMUserException +      raise AuthenticationFailure +    end +     +    def method_missing(name, *args, &block) +      @client.send(name, *args, &block)      end    end  end diff --git a/spec/evernote/client_spec.rb b/spec/evernote/client_spec.rb index 5d3d08c..a2902f2 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 "should proxy methods" do +    thrift_client = mock("ThriftClient") +    ThriftClient.stub!(:new => thrift_client) +    thrift_client.should_receive(:foobar) + +    client = Evernote::Client.new(mock("SomeInternalEvernoteClass"), "https://www.example.com") +    client.foobar +  end  end diff --git a/spec/evernote/user_store_spec.rb b/spec/evernote/user_store_spec.rb index 623d80d..04ec737 100644 --- a/spec/evernote/user_store_spec.rb +++ b/spec/evernote/user_store_spec.rb @@ -2,44 +2,44 @@ 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" } +    @auth_file = File.dirname(__FILE__) + "/auth.yaml" +    @env = :sandbox    end    it "initializes an Evernote::Client" do      Evernote::Client.should_receive(:new).with(Evernote::EDAM::UserStore::UserStore::Client, "https://sandbox.evernote.com/edam/user", {}) -    Evernote::UserStore.new("https://sandbox.evernote.com/edam/user", @opts) +    Evernote::UserStore.new("https://sandbox.evernote.com/edam/user", @auth_file, @env)    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) -    }.should raise_error(ArgumentError, ":consumer_key, :consumer_secret, :username and :password are required") +  %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) +      }.should raise_error(ArgumentError, "'consumer_key', 'consumer_secret', 'username' and 'password' are required") +    end    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) -    }.should raise_error(ArgumentError, ":consumer_key, :consumer_secret, :username and :password are required") +   +  it "should authenticate" do +    user_store = Evernote::UserStore.new("https://sandbox.evernote.com/edam/user", @auth_file, @env) +    user_store.instance_variable_get(:@client).should_receive(:authenticate).with("cgs", "password", "12345", "ABCDE").and_return(nil) +     +    user_store.authenticate    end - -  it "raises an exception if no username is set" do -    thrift_client_opts = {} -    @opts.delete(:username) +   +  it "should wrap authentication failure" do +    user_store = Evernote::UserStore.new("https://sandbox.evernote.com/edam/user", @auth_file, @env) +    user_store.instance_variable_get(:@client).should_receive(:authenticate).and_raise(Evernote::EDAM::Error::EDAMUserException) +          lambda { -      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") +      user_store.authenticate +    }.should raise_error(Evernote::UserStore::AuthenticationFailure)    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) -    }.should raise_error(ArgumentError, ":consumer_key, :consumer_secret, :username and :password are required") +   +  it "should proxy methods" do +    user_store = Evernote::UserStore.new("https://sandbox.evernote.com/edam/user", @auth_file, @env) +    user_store.instance_variable_get(:@client).should_receive(:foobar).and_return(nil) +     +    user_store.foobar    end  end | 
