evernote 0.1.0 → 0.8.0

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.mkd CHANGED
@@ -1,10 +1,48 @@
1
1
  # evernote #
2
- This gem is a high level wrapper around Evernote's Thrift-generated ruby code. It currently just bundles up Evernote's thrift-generated code. After installing, just require the gem in your project:
2
+ This gem is a high level wrapper around Evernote's Thrift-generated ruby code. It bundles up Evernote's thrift-generated code and creates some simple wrapper classes.
3
3
 
4
- require 'evernote'
4
+ # usage #
5
+ Create a config yml:
5
6
 
6
- # future releases #
7
- This gem will eventually provide a cleaner API around the generated code, so you don't feel like you're writing Java.
7
+ sandbox:
8
+ username: user
9
+ password: password
10
+ consumer_key: key
11
+ consumer_secret: secret
12
+
13
+ production:
14
+ username: user
15
+ password: password
16
+ consumer_key: key
17
+ consumer_secret: secret
18
+
19
+ Here's an example using the sandbox key:
20
+
21
+ require 'evernote'
22
+
23
+ user_store_url = "https://sandbox.evernote.com/edam/user"
24
+ config = File.dirname(__FILE__) + "/config.yml"
25
+ user_store = Evernote::UserStore.new(user_store_url, config, "sandbox")
26
+
27
+ auth_result = user_store.authenticate
28
+ user = auth_result.user
29
+ auth_token = auth_result.authenticationToken
30
+ puts "Authentication was successful for #{user.username}"
31
+ puts "Authentication token = #{auth_token}"
32
+
33
+ Once you've authenticated, you could do something like list all of your notebooks:
34
+
35
+ note_store_url = "http://sandbox.evernote.com/edam/note/#{user.shardId}"
36
+ note_store = Evernote::NoteStore.new(note_store_url)
37
+
38
+ notebooks = note_store.listNotebooks(auth_token)
39
+ puts "Found #{notebooks.size} notebooks:"
40
+ default_notebook = notebooks[0]
41
+ notebooks.each { |notebook| puts " * #{notebook.name}"}
42
+
43
+ The evernote API can be viewed at http://www.evernote.com/about/developer/api/ref/
44
+
45
+ If the vendored code is out of date and you get an error indicating so, feel free to create an issue at http://github.com/cgs/evernote/issues
8
46
 
9
47
  ## Copyright ##
10
48
  Copyright (c) 2010 Chris Sepic. See LICENSE for details.
data/Rakefile CHANGED
@@ -9,7 +9,7 @@ begin
9
9
  gem.email = "chris.sepic@gmail.com"
10
10
  gem.homepage = "http://github.com/cgs/evernote"
11
11
  gem.authors = ["Chris Sepic"]
12
- gem.files.include %w{vendor/**/*}
12
+ gem.files.include %w{vendor/**/* spec/evernote/auth.yaml}
13
13
  gem.add_dependency("thrift_client")
14
14
  gem.add_development_dependency "rspec"
15
15
  gem.add_development_dependency "yard"
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.0
1
+ 0.8.0
@@ -1,15 +1,15 @@
1
1
  # Generated by jeweler
2
- # DO NOT EDIT THIS FILE
3
- # Instead, edit Jeweler::Tasks in Rakefile, and run `rake gemspec`
2
+ # DO NOT EDIT THIS FILE DIRECTLY
3
+ # Instead, edit Jeweler::Tasks in rakefile, and run the gemspec command
4
4
  # -*- encoding: utf-8 -*-
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{evernote}
8
- s.version = "0.1.0"
8
+ s.version = "0.8.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Chris Sepic"]
12
- s.date = %q{2010-01-30}
12
+ s.date = %q{2010-03-19}
13
13
  s.email = %q{chris.sepic@gmail.com}
14
14
  s.extra_rdoc_files = [
15
15
  "LICENSE",
@@ -24,32 +24,26 @@ Gem::Specification.new do |s|
24
24
  "VERSION",
25
25
  "evernote.gemspec",
26
26
  "lib/evernote.rb",
27
- "spec/evernote_spec.rb",
27
+ "lib/evernote/client.rb",
28
+ "lib/evernote/note_store.rb",
29
+ "lib/evernote/user_store.rb",
30
+ "spec/evernote/auth.yaml",
31
+ "spec/evernote/client_spec.rb",
32
+ "spec/evernote/note_store_spec.rb",
33
+ "spec/evernote/user_store_spec.rb",
28
34
  "spec/spec.opts",
29
35
  "spec/spec_helper.rb",
30
36
  "vendor/gen-rb/evernote.rb",
31
- "vendor/gen-rb/evernote.rb",
32
- "vendor/gen-rb/evernote/edam/errors_types.rb",
33
37
  "vendor/gen-rb/evernote/edam/errors_types.rb",
34
38
  "vendor/gen-rb/evernote/edam/limits_constants.rb",
35
- "vendor/gen-rb/evernote/edam/limits_constants.rb",
36
39
  "vendor/gen-rb/evernote/edam/limits_types.rb",
37
- "vendor/gen-rb/evernote/edam/limits_types.rb",
38
- "vendor/gen-rb/evernote/edam/note_store.rb",
39
40
  "vendor/gen-rb/evernote/edam/note_store.rb",
40
41
  "vendor/gen-rb/evernote/edam/note_store_constants.rb",
41
- "vendor/gen-rb/evernote/edam/note_store_constants.rb",
42
42
  "vendor/gen-rb/evernote/edam/note_store_types.rb",
43
- "vendor/gen-rb/evernote/edam/note_store_types.rb",
44
- "vendor/gen-rb/evernote/edam/types_constants.rb",
45
43
  "vendor/gen-rb/evernote/edam/types_constants.rb",
46
44
  "vendor/gen-rb/evernote/edam/types_types.rb",
47
- "vendor/gen-rb/evernote/edam/types_types.rb",
48
45
  "vendor/gen-rb/evernote/edam/user_store.rb",
49
- "vendor/gen-rb/evernote/edam/user_store.rb",
50
- "vendor/gen-rb/evernote/edam/user_store_constants.rb",
51
46
  "vendor/gen-rb/evernote/edam/user_store_constants.rb",
52
- "vendor/gen-rb/evernote/edam/user_store_types.rb",
53
47
  "vendor/gen-rb/evernote/edam/user_store_types.rb"
54
48
  ]
55
49
  s.homepage = %q{http://github.com/cgs/evernote}
@@ -58,7 +52,9 @@ Gem::Specification.new do |s|
58
52
  s.rubygems_version = %q{1.3.5}
59
53
  s.summary = %q{High level wrapper for the Evernote API}
60
54
  s.test_files = [
61
- "spec/evernote_spec.rb",
55
+ "spec/evernote/client_spec.rb",
56
+ "spec/evernote/note_store_spec.rb",
57
+ "spec/evernote/user_store_spec.rb",
62
58
  "spec/spec_helper.rb"
63
59
  ]
64
60
 
@@ -81,3 +77,4 @@ Gem::Specification.new do |s|
81
77
  s.add_dependency(%q<yard>, [">= 0"])
82
78
  end
83
79
  end
80
+
@@ -5,3 +5,6 @@ gen_rb_path = File.expand_path(File.dirname(__FILE__) + "/../vendor/gen-rb")
5
5
  $LOAD_PATH.unshift gen_rb_path
6
6
  $LOAD_PATH.unshift "#{gen_rb_path}/evernote/edam"
7
7
  require "#{gen_rb_path}/evernote"
8
+ require "evernote/client"
9
+ require "evernote/user_store"
10
+ require "evernote/note_store"
@@ -0,0 +1,17 @@
1
+ module Evernote
2
+ class Client
3
+
4
+ THRIFT_DEFAULTS = {
5
+ :transport => Thrift::HTTPClientTransport
6
+ }.freeze
7
+
8
+ def initialize(klass, url, thrift_client_options = {})
9
+ thrift_opts = THRIFT_DEFAULTS.merge(thrift_client_options)
10
+ @client = ThriftClient.new(klass, url, thrift_opts)
11
+ end
12
+
13
+ def method_missing(name, *args, &block)
14
+ @client.send(name, *args, &block)
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,11 @@
1
+ module Evernote
2
+ class NoteStore
3
+ def initialize(uri, thrift_client_options = {})
4
+ @client = Evernote::Client.new(Evernote::EDAM::NoteStore::NoteStore::Client, uri, thrift_client_options)
5
+ end
6
+
7
+ def method_missing(name, *args, &block)
8
+ @client.send(name, *args, &block)
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,43 @@
1
+ module Evernote
2
+
3
+ VersionOutOfDate = Class.new(StandardError)
4
+
5
+ class UserStore
6
+ AuthenticationFailure = Class.new(StandardError)
7
+
8
+ def initialize(uri, auth_file, auth_env, thrift_client_options = {})
9
+ credentials = YAML.load_file(auth_file)[auth_env.to_s]
10
+
11
+ @consumer_key = credentials["consumer_key"]
12
+ @consumer_secret = credentials["consumer_secret"]
13
+ @username = credentials["username"]
14
+ @password = credentials["password"]
15
+
16
+ unless @consumer_key && @consumer_secret && @username && @password
17
+ raise ArgumentError, "'consumer_key', 'consumer_secret', 'username' and 'password' are required"
18
+ end
19
+
20
+ @client = Evernote::Client.new(Evernote::EDAM::UserStore::UserStore::Client, uri, thrift_client_options)
21
+
22
+ validate_version
23
+ end
24
+
25
+ def authenticate
26
+ @client.authenticate(@username, @password, @consumer_key, @consumer_secret)
27
+ rescue Evernote::EDAM::Error::EDAMUserException
28
+ raise AuthenticationFailure
29
+ end
30
+
31
+ def method_missing(name, *args, &block)
32
+ @client.send(name, *args, &block)
33
+ end
34
+
35
+ def validate_version
36
+ raise VersionOutOfDate, "The vendored Evernote client code is out of date and needs to be regenerated" unless version_valid?
37
+ end
38
+
39
+ def version_valid?
40
+ checkVersion("Ruby EDAMTest", Evernote::EDAM::UserStore::EDAM_VERSION_MAJOR, Evernote::EDAM::UserStore::EDAM_VERSION_MINOR)
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,11 @@
1
+ sandbox:
2
+ username: cgs
3
+ password: password
4
+ consumer_key: "12345"
5
+ consumer_secret: ABCDE
6
+
7
+ invalid:
8
+ username:
9
+ password:
10
+ consumer_key:
11
+ consumer_secret:
@@ -0,0 +1,20 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
+
3
+ describe "Evernote::Client" do
4
+ it "initializes a ThriftClient instance that uses HTTP transport" do
5
+ klass = mock("SomeInternalEvernoteClass")
6
+ opts = { :transport => Thrift::HTTPClientTransport }
7
+ ThriftClient.should_receive(:new).with(klass, "https://www.example.com", opts)
8
+
9
+ Evernote::Client.new(klass, "https://www.example.com")
10
+ end
11
+
12
+ it "should proxy methods" do
13
+ thrift_client = mock("ThriftClient")
14
+ ThriftClient.stub!(:new => thrift_client)
15
+ thrift_client.should_receive(:foobar)
16
+
17
+ client = Evernote::Client.new(mock("SomeInternalEvernoteClass"), "https://www.example.com")
18
+ client.foobar
19
+ end
20
+ end
@@ -0,0 +1,10 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
+
3
+ describe "Evernote::NoteStore" do
4
+ it "should proxy methods" do
5
+ note_store = Evernote::NoteStore.new("http://sandbox.evernote.com/edam/note/")
6
+ note_store.instance_variable_get(:@client).should_receive(:foobar).and_return(nil)
7
+
8
+ note_store.foobar
9
+ end
10
+ end
@@ -0,0 +1,57 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
+
3
+ describe "Evernote::UserStore" do
4
+ before(:each) do
5
+ @auth_file = File.dirname(__FILE__) + "/auth.yaml"
6
+ @env = :sandbox
7
+ end
8
+
9
+ it "initializes an Evernote::Client and validate the client code version" do
10
+ client = mock("Evernote::Client", :checkVersion => true)
11
+ Evernote::Client.should_receive(:new).with(Evernote::EDAM::UserStore::UserStore::Client, "https://sandbox.evernote.com/edam/user", {}).and_return(client)
12
+
13
+ Evernote::UserStore.new("https://sandbox.evernote.com/edam/user", @auth_file, @env)
14
+ end
15
+
16
+ it "should raise an error on init if the version is not up to date" do
17
+ Evernote::Client.stub!(:new => mock("Evernote::Client", :checkVersion => false))
18
+
19
+ lambda {
20
+ Evernote::UserStore.new("https://sandbox.evernote.com/edam/user", @auth_file, @env)
21
+ }.should raise_error(Evernote::VersionOutOfDate, "The vendored Evernote client code is out of date and needs to be regenerated")
22
+ end
23
+
24
+ %w(consumer_key consumer_secret username password).each do |credential|
25
+ it "raises an exception if no #{credential} is set" do
26
+ lambda {
27
+ Evernote::UserStore.new("https://sandbox.evernote.com/edam/user", @auth_file, :invalid)
28
+ }.should raise_error(ArgumentError, "'consumer_key', 'consumer_secret', 'username' and 'password' are required")
29
+ end
30
+ end
31
+
32
+ it "should authenticate" do
33
+ Evernote::Client.stub!(:new => mock("Evernote::Client", :checkVersion => true))
34
+ user_store = Evernote::UserStore.new("https://sandbox.evernote.com/edam/user", @auth_file, @env)
35
+ user_store.instance_variable_get(:@client).should_receive(:authenticate).with("cgs", "password", "12345", "ABCDE").and_return(nil)
36
+
37
+ user_store.authenticate
38
+ end
39
+
40
+ it "should wrap authentication failure" do
41
+ Evernote::Client.stub!(:new => mock("Evernote::Client", :checkVersion => true))
42
+ user_store = Evernote::UserStore.new("https://sandbox.evernote.com/edam/user", @auth_file, @env)
43
+ user_store.instance_variable_get(:@client).should_receive(:authenticate).and_raise(Evernote::EDAM::Error::EDAMUserException)
44
+
45
+ lambda {
46
+ user_store.authenticate
47
+ }.should raise_error(Evernote::UserStore::AuthenticationFailure)
48
+ end
49
+
50
+ it "should proxy methods" do
51
+ Evernote::Client.stub!(:new => mock("Evernote::Client", :checkVersion => true))
52
+ user_store = Evernote::UserStore.new("https://sandbox.evernote.com/edam/user", @auth_file, @env)
53
+ user_store.instance_variable_get(:@client).should_receive(:foobar).and_return(nil)
54
+
55
+ user_store.foobar
56
+ end
57
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: evernote
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.8.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Chris Sepic
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2010-01-30 00:00:00 -06:00
12
+ date: 2010-03-19 00:00:00 -05:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -60,7 +60,13 @@ files:
60
60
  - VERSION
61
61
  - evernote.gemspec
62
62
  - lib/evernote.rb
63
- - spec/evernote_spec.rb
63
+ - lib/evernote/client.rb
64
+ - lib/evernote/note_store.rb
65
+ - lib/evernote/user_store.rb
66
+ - spec/evernote/auth.yaml
67
+ - spec/evernote/client_spec.rb
68
+ - spec/evernote/note_store_spec.rb
69
+ - spec/evernote/user_store_spec.rb
64
70
  - spec/spec.opts
65
71
  - spec/spec_helper.rb
66
72
  - vendor/gen-rb/evernote.rb
@@ -104,5 +110,7 @@ signing_key:
104
110
  specification_version: 3
105
111
  summary: High level wrapper for the Evernote API
106
112
  test_files:
107
- - spec/evernote_spec.rb
113
+ - spec/evernote/client_spec.rb
114
+ - spec/evernote/note_store_spec.rb
115
+ - spec/evernote/user_store_spec.rb
108
116
  - spec/spec_helper.rb
@@ -1,7 +0,0 @@
1
- require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
-
3
- describe "Evernote" do
4
- it "fails" do
5
- fail "hey buddy, you should probably rename this file and start specing for real"
6
- end
7
- end