evertils-common 0.2.9 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +13 -0
- data/README.md +6 -3
- data/Rakefile +22 -0
- data/evertils-common.gemspec +1 -1
- data/lib/evertils/common.rb +38 -4
- data/lib/evertils/common/authentication.rb +19 -11
- data/lib/evertils/common/entity.rb +5 -4
- data/lib/evertils/common/entity/note.rb +22 -5
- data/lib/evertils/common/entity/notebook.rb +20 -1
- data/lib/evertils/common/manager.rb +35 -0
- data/lib/evertils/common/manager/note.rb +23 -0
- data/lib/evertils/common/manager/notebook.rb +37 -0
- data/lib/evertils/common/manager/sync.rb +16 -0
- data/lib/evertils/common/manager/tag.rb +23 -0
- data/lib/evertils/common/query/backup.rb +10 -9
- data/lib/evertils/common/query/simple.rb +52 -27
- data/lib/evertils/common/query/time.rb +0 -5
- data/lib/evertils/common/version.rb +1 -1
- data/lib/evertils/test.rb +29 -0
- data/lib/evertils/test/base.rb +116 -0
- data/lib/evertils/test/seed/all.yml +24 -0
- metadata +19 -10
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b9038ca948f737bd4428305769288a85266cb578
|
4
|
+
data.tar.gz: 34bc8249af09505f5ce018145ff20db106e674cb
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c34cf9d3614cb2fbed819e6b4b987d22eb4d989dfef1d35a348f2d77b8fbf6fc3ed829c362c6ed534fff72d8e01e76e8e8c320eef0e5231c450a6017ef4d6ae1
|
7
|
+
data.tar.gz: e1d991a75e40f0763fb541bc7421bc6fcddea49097c7eeef171c0390cadfc29ebb3476646837b3aee31e28985ee47b94fae1a0cceac1086c3af0328705e2e787
|
data/.travis.yml
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
language: ruby
|
2
|
+
rvm:
|
3
|
+
- "2.2.1"
|
4
|
+
script:
|
5
|
+
- bundle exec rake cleanup
|
6
|
+
- bundle exec rake test
|
7
|
+
after_failure:
|
8
|
+
- bundle exec rake cleanup
|
9
|
+
env:
|
10
|
+
- EVERTILS_SB_TOKEN="S=s1:U=91e14:E=1594288f829:C=151ead7c908:P=1cd:A=en-devtoken:V=2:H=f688ac96519d5c525929073624a38ac2"
|
11
|
+
addons:
|
12
|
+
code_climate:
|
13
|
+
repo_token: 68c56c90c9e17fd1da015529e8957ca50855d5b4b3436641449c84ad1d0bddfc
|
data/README.md
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# Evertils::Common
|
2
2
|
|
3
|
-
[![Code Climate](https://codeclimate.com/github/aapis/evertils-common/badges/gpa.svg)](https://codeclimate.com/github/aapis/evertils-common)
|
3
|
+
[![Code Climate](https://codeclimate.com/github/aapis/evertils-common/badges/gpa.svg)](https://codeclimate.com/github/aapis/evertils-common) [![Build Status](https://travis-ci.org/aapis/evertils-common.svg?branch=master)](https://travis-ci.org/aapis/evertils-common)
|
4
4
|
|
5
5
|
Evertils::Common is an abstraction library for interacting with the Evernote API.
|
6
6
|
|
@@ -9,7 +9,7 @@ Evertils::Common is an abstraction library for interacting with the Evernote API
|
|
9
9
|
```ruby
|
10
10
|
gem 'evertils-common'
|
11
11
|
|
12
|
-
# or
|
12
|
+
# or from the command line
|
13
13
|
gem install evertils-common
|
14
14
|
```
|
15
15
|
|
@@ -17,9 +17,12 @@ Then add the following to your ~/.bash_profile
|
|
17
17
|
|
18
18
|
```shell
|
19
19
|
export EVERTILS_TOKEN="token_goes_here"
|
20
|
+
|
21
|
+
# add the following if you plan on running the test suite
|
22
|
+
export EVERTILS_SB_TOKEN="sandbox token here"
|
20
23
|
```
|
21
24
|
|
22
|
-
Get your Evernote Developer Tokens [here](https://www.evernote.com/
|
25
|
+
Get your production Evernote Developer Tokens [here](https://www.evernote.com/api/DeveloperToken.action) and your sandbox tokens [here](https://sandbox.evernote.com/api/DeveloperToken.action).
|
23
26
|
|
24
27
|
## Usage
|
25
28
|
|
data/Rakefile
CHANGED
@@ -1,9 +1,31 @@
|
|
1
1
|
require "bundler/gem_tasks"
|
2
2
|
require 'rake/testtask'
|
3
|
+
require 'evertils/test'
|
3
4
|
|
4
5
|
Rake::TestTask.new do |t|
|
5
6
|
t.libs << 'test'
|
6
7
|
end
|
7
8
|
|
9
|
+
task :seed do
|
10
|
+
if ENV['TEST'].nil?
|
11
|
+
Evertils::Test::Base.before
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
task :cleanup do
|
16
|
+
if ENV['TEST'].nil?
|
17
|
+
Evertils::Test::Base.after
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
# hack from
|
22
|
+
# http://stackoverflow.com/questions/1689504/how-do-i-make-a-rake-task-run-after-all-other-tasks-i-e-a-rake-afterbuild-tas
|
23
|
+
current_tasks = Rake.application.top_level_tasks
|
24
|
+
if current_tasks.include?('test')
|
25
|
+
current_tasks << :cleanup
|
26
|
+
Rake.application.instance_variable_set(:@top_level_tasks, current_tasks)
|
27
|
+
task :test => :seed
|
28
|
+
end
|
29
|
+
|
8
30
|
desc "Run tests"
|
9
31
|
task :default => :test
|
data/evertils-common.gemspec
CHANGED
@@ -18,8 +18,8 @@ Gem::Specification.new do |spec|
|
|
18
18
|
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
19
19
|
spec.require_paths = ["lib"]
|
20
20
|
|
21
|
-
spec.add_development_dependency "bundler", "~> 1.10"
|
22
21
|
spec.add_development_dependency "rake", "~> 10.0"
|
22
|
+
spec.add_development_dependency "minitest"
|
23
23
|
|
24
24
|
spec.add_runtime_dependency 'mime-types'
|
25
25
|
spec.add_runtime_dependency "evernote-thrift"
|
data/lib/evertils/common.rb
CHANGED
@@ -8,17 +8,51 @@ require 'evertils/common/enml'
|
|
8
8
|
require 'evertils/common/entity'
|
9
9
|
require 'evertils/common/query'
|
10
10
|
require 'evertils/common/converter'
|
11
|
+
require 'evertils/common/manager'
|
11
12
|
require 'evertils/common/version'
|
12
|
-
|
13
|
+
|
13
14
|
require 'evertils/common/query/simple'
|
14
15
|
require 'evertils/common/query/time'
|
16
|
+
require 'evertils/common/query/backup'
|
17
|
+
|
18
|
+
require 'evertils/common/manager/note'
|
19
|
+
require 'evertils/common/manager/notebook'
|
20
|
+
require 'evertils/common/manager/sync'
|
21
|
+
require 'evertils/common/manager/tag'
|
22
|
+
|
23
|
+
require 'evertils/common/entity/notebook'
|
24
|
+
require 'evertils/common/entity/notebooks'
|
25
|
+
require 'evertils/common/entity/notes'
|
26
|
+
require 'evertils/common/entity/note'
|
27
|
+
require 'evertils/common/entity/tag'
|
28
|
+
require 'evertils/common/entity/tags'
|
29
|
+
require 'evertils/common/entity/sync'
|
30
|
+
|
15
31
|
require 'evertils/common/converter/yaml_to_enml'
|
16
32
|
|
17
33
|
module Evertils
|
18
|
-
module Common
|
19
34
|
|
20
|
-
|
21
|
-
|
35
|
+
#
|
36
|
+
# @since 0.3.0
|
37
|
+
def self.token
|
38
|
+
ENV['EVERTILS_TOKEN']
|
39
|
+
end
|
40
|
+
|
41
|
+
#
|
42
|
+
# @since 0.3.0
|
43
|
+
def self.host
|
44
|
+
'www.evernote.com'
|
45
|
+
end
|
22
46
|
|
47
|
+
#
|
48
|
+
# @since 0.3.0
|
49
|
+
def self.is_test?
|
50
|
+
false
|
23
51
|
end
|
52
|
+
|
53
|
+
# define Common namespace
|
54
|
+
# @since 0.3.0
|
55
|
+
module Common
|
56
|
+
end
|
57
|
+
|
24
58
|
end
|
@@ -1,24 +1,27 @@
|
|
1
1
|
module Evertils
|
2
2
|
module Common
|
3
3
|
class Authentication
|
4
|
+
include Singleton
|
4
5
|
|
5
6
|
attr_accessor :store, :shardId, :version
|
6
7
|
|
7
8
|
def initialize
|
8
9
|
begin
|
9
|
-
if Evertils
|
10
|
+
if Evertils.token.nil?
|
10
11
|
Notify.error("Evernote developer token is not configured properly!\n$EVERTILS_TOKEN == nil")
|
11
12
|
end
|
12
13
|
|
13
|
-
userStoreUrl = "https://#{Evertils
|
14
|
+
userStoreUrl = "https://#{Evertils.host}/edam/user"
|
14
15
|
|
15
16
|
userStoreTransport = Thrift::HTTPClientTransport.new(userStoreUrl)
|
16
17
|
userStoreProtocol = Thrift::BinaryProtocol.new(userStoreTransport)
|
17
18
|
@@user = ::Evernote::EDAM::UserStore::UserStore::Client.new(userStoreProtocol)
|
18
19
|
|
19
|
-
|
20
|
-
|
21
|
-
|
20
|
+
if Evertils.is_test?
|
21
|
+
puts "TEST USER: #{info[:user]}"
|
22
|
+
end
|
23
|
+
|
24
|
+
versionOK = @@user.checkVersion("evernote-data", ::Evernote::EDAM::UserStore::EDAM_VERSION_MAJOR, ::Evernote::EDAM::UserStore::EDAM_VERSION_MINOR)
|
22
25
|
|
23
26
|
@version = "#{::Evernote::EDAM::UserStore::EDAM_VERSION_MAJOR}.#{::Evernote::EDAM::UserStore::EDAM_VERSION_MINOR}"
|
24
27
|
@shardId = user.shardId
|
@@ -27,7 +30,7 @@ module Evertils
|
|
27
30
|
Notify.error("Evernote API requires an update. Latest version is #{@version}")
|
28
31
|
end
|
29
32
|
|
30
|
-
noteStoreUrl = @@user.getNoteStoreUrl(Evertils
|
33
|
+
noteStoreUrl = @@user.getNoteStoreUrl(Evertils.token)
|
31
34
|
|
32
35
|
noteStoreTransport = Thrift::HTTPClientTransport.new(noteStoreUrl)
|
33
36
|
noteStoreProtocol = Thrift::BinaryProtocol.new(noteStoreTransport)
|
@@ -53,14 +56,19 @@ module Evertils
|
|
53
56
|
end
|
54
57
|
|
55
58
|
def user
|
56
|
-
@@user.getUser(Evertils
|
59
|
+
@@user.getUser(Evertils.token)
|
57
60
|
end
|
58
61
|
|
59
62
|
def call(func, *args)
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
63
|
+
begin
|
64
|
+
if args.size > 0
|
65
|
+
@store.method(func.to_s).call(Evertils.token, *args)
|
66
|
+
else
|
67
|
+
@store.method(func.to_s).call(Evertils.token)
|
68
|
+
end
|
69
|
+
rescue Evernote::EDAM::Error::EDAMSystemException => e
|
70
|
+
Notify.warning e.inspect
|
71
|
+
nil
|
64
72
|
end
|
65
73
|
end
|
66
74
|
end
|
@@ -1,15 +1,16 @@
|
|
1
|
-
require 'evertils/common/authentication'
|
2
|
-
|
3
1
|
module Evertils
|
4
2
|
module Common
|
5
3
|
module Entity
|
6
4
|
class Base
|
7
5
|
|
6
|
+
attr_accessor :evernote
|
7
|
+
|
8
8
|
def initialize
|
9
|
-
@evernote = Authentication.
|
10
|
-
self
|
9
|
+
@evernote = Authentication.instance
|
11
10
|
end
|
12
11
|
|
12
|
+
#
|
13
|
+
# @since 0.2.0
|
13
14
|
def has_required_fields(hash, required)
|
14
15
|
hash.keys.each do |key|
|
15
16
|
required.include? key
|
@@ -26,7 +26,7 @@ module Evertils
|
|
26
26
|
|
27
27
|
#
|
28
28
|
# @since 0.2.0
|
29
|
-
def create(title, body,
|
29
|
+
def create(title, body, parent_notebook = nil, file = nil, share_note = false, created_on = nil)
|
30
30
|
@entity = nil
|
31
31
|
|
32
32
|
# final output
|
@@ -62,11 +62,11 @@ module Evertils
|
|
62
62
|
# setup note properties
|
63
63
|
our_note.title = title
|
64
64
|
our_note.content = n_body
|
65
|
-
our_note.created = created_on if !created_on.
|
65
|
+
our_note.created = created_on if !created_on.is_a?(DateTime)
|
66
66
|
|
67
|
-
if !
|
67
|
+
if !parent_notebook.is_a? Evertils::Common::Entity::Notebook
|
68
68
|
nb = Entity::Notebook.new
|
69
|
-
parent_notebook = nb.find(
|
69
|
+
parent_notebook = nb.find(parent_notebook)
|
70
70
|
parent_notebook = nb.default if parent_notebook.nil?
|
71
71
|
end
|
72
72
|
|
@@ -85,6 +85,8 @@ module Evertils
|
|
85
85
|
rescue ::Evernote::EDAM::Error::EDAMNotFoundException
|
86
86
|
## Parent Notebook GUID doesn't correspond to an actual notebook
|
87
87
|
Notify.error "EDAMNotFoundException: Invalid parent notebook GUID"
|
88
|
+
rescue ArgumentError => e
|
89
|
+
Notify.error e.backtrace
|
88
90
|
end
|
89
91
|
|
90
92
|
Notify.success("#{parent_notebook.prop(:stack)}/#{parent_notebook.prop(:name)}/#{our_note.title} created")
|
@@ -122,8 +124,10 @@ module Evertils
|
|
122
124
|
#
|
123
125
|
# @since 0.2.9
|
124
126
|
def move_to(notebook)
|
125
|
-
nb = Evertils::Common::
|
127
|
+
nb = Evertils::Common::Manager::Notebook.new
|
126
128
|
target = nb.find(notebook)
|
129
|
+
|
130
|
+
raise "Notebook not found: #{notebook}" if !target
|
127
131
|
|
128
132
|
@entity.notebookGuid = target.prop(:guid)
|
129
133
|
|
@@ -163,6 +167,19 @@ module Evertils
|
|
163
167
|
end
|
164
168
|
alias_method :find_by_name, :find
|
165
169
|
|
170
|
+
#
|
171
|
+
# @since 0.3.0
|
172
|
+
def tag(name)
|
173
|
+
@entity.tagNames = [name]
|
174
|
+
@evernote.call(:updateNote, @entity)
|
175
|
+
end
|
176
|
+
|
177
|
+
#
|
178
|
+
# @since 0.3.0
|
179
|
+
def entity
|
180
|
+
@entity
|
181
|
+
end
|
182
|
+
|
166
183
|
end
|
167
184
|
end
|
168
185
|
end
|
@@ -5,6 +5,8 @@ module Evertils
|
|
5
5
|
module Entity
|
6
6
|
class Notebook < Entity::Base
|
7
7
|
|
8
|
+
#
|
9
|
+
# @since 0.2.0
|
8
10
|
def find(name)
|
9
11
|
@entity = nil
|
10
12
|
notebooks = Notebooks.new.all
|
@@ -18,6 +20,8 @@ module Evertils
|
|
18
20
|
self if @entity
|
19
21
|
end
|
20
22
|
|
23
|
+
#
|
24
|
+
# @since 0.2.0
|
21
25
|
def create(name, stack = nil)
|
22
26
|
@entity = nil
|
23
27
|
|
@@ -34,30 +38,45 @@ module Evertils
|
|
34
38
|
self if @entity
|
35
39
|
end
|
36
40
|
|
41
|
+
#
|
42
|
+
# @since 0.2.0
|
37
43
|
def default
|
38
44
|
@entity = @evernote.call(:getDefaultNotebook)
|
39
45
|
|
40
46
|
self if @entity
|
41
47
|
end
|
42
48
|
|
49
|
+
#
|
50
|
+
# @since 0.2.9
|
43
51
|
def expunge!
|
44
52
|
@evernote.call(:expungeNotebook, @entity.guid)
|
45
53
|
end
|
46
54
|
|
55
|
+
#
|
56
|
+
# @since 0.2.0
|
57
|
+
# @deprecated 0.2.9
|
47
58
|
def expunge
|
48
59
|
deprecation_notice('0.2.9')
|
49
60
|
|
50
61
|
@evernote.call(:expungeNotebook, @entity.guid)
|
51
62
|
end
|
52
63
|
|
64
|
+
#
|
65
|
+
# @since 0.2.0
|
53
66
|
def notes
|
54
67
|
filter = ::Evernote::EDAM::NoteStore::NoteFilter.new
|
55
68
|
filter.notebookGuid = @entity.guid
|
56
69
|
|
57
|
-
notes = Notes.new
|
70
|
+
notes = Notes.new(@evernote)
|
58
71
|
notes.find(nil, @entity.guid)
|
59
72
|
end
|
60
73
|
|
74
|
+
#
|
75
|
+
# @since 0.3.0
|
76
|
+
def entity
|
77
|
+
@entity
|
78
|
+
end
|
79
|
+
|
61
80
|
end
|
62
81
|
end
|
63
82
|
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
require 'evertils/common/authentication'
|
2
|
+
|
3
|
+
module Evertils
|
4
|
+
module Common
|
5
|
+
module Manager
|
6
|
+
class Base
|
7
|
+
|
8
|
+
attr_accessor :api
|
9
|
+
|
10
|
+
#
|
11
|
+
# @since 0.3.0
|
12
|
+
def initialize
|
13
|
+
@api = Authentication.instance
|
14
|
+
|
15
|
+
self
|
16
|
+
end
|
17
|
+
|
18
|
+
#
|
19
|
+
# @since 0.3.0
|
20
|
+
def has_required_fields(hash, required)
|
21
|
+
hash.keys.each do |key|
|
22
|
+
required.include? key
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
#
|
27
|
+
# @since 0.3.0
|
28
|
+
def deprecation_notice(version)
|
29
|
+
puts "Deprecated as of #{version}"
|
30
|
+
end
|
31
|
+
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module Evertils
|
2
|
+
module Common
|
3
|
+
module Manager
|
4
|
+
class Note < Manager::Base
|
5
|
+
|
6
|
+
#
|
7
|
+
# @since 0.3.0
|
8
|
+
def create(config)
|
9
|
+
entity = Evertils::Common::Entity::Note.new
|
10
|
+
entity.create(config[:name], config[:body], config[:notebook], config[:files], config[:shared], config[:created_on])
|
11
|
+
end
|
12
|
+
|
13
|
+
#
|
14
|
+
# @since 0.3.0
|
15
|
+
def find(name)
|
16
|
+
entity = Evertils::Common::Entity::Note.new
|
17
|
+
entity.find(name)
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
module Evertils
|
2
|
+
module Common
|
3
|
+
module Manager
|
4
|
+
class Notebook < Manager::Base
|
5
|
+
|
6
|
+
#
|
7
|
+
# @since 0.3.0
|
8
|
+
def create(name, stack = nil)
|
9
|
+
entity = Evertils::Common::Entity::Notebook.new
|
10
|
+
entity.create(name, stack)
|
11
|
+
end
|
12
|
+
|
13
|
+
#
|
14
|
+
# @since 0.3.0
|
15
|
+
def find(name)
|
16
|
+
entity = Evertils::Common::Entity::Notebook.new
|
17
|
+
entity.find(name)
|
18
|
+
end
|
19
|
+
|
20
|
+
#
|
21
|
+
# @since 0.3.0
|
22
|
+
def find_or_create(name, stack = nil)
|
23
|
+
search_result = find(name)
|
24
|
+
|
25
|
+
if !search_result
|
26
|
+
note = create(name, stack)
|
27
|
+
else
|
28
|
+
note = search_result
|
29
|
+
end
|
30
|
+
|
31
|
+
note
|
32
|
+
end
|
33
|
+
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module Evertils
|
2
|
+
module Common
|
3
|
+
module Manager
|
4
|
+
class Tag < Manager::Base
|
5
|
+
|
6
|
+
#
|
7
|
+
# @since 0.3.0
|
8
|
+
def create(name)
|
9
|
+
entity = Evertils::Common::Entity::Tag.new
|
10
|
+
entity.create(name)
|
11
|
+
end
|
12
|
+
|
13
|
+
#
|
14
|
+
# @since 0.3.0
|
15
|
+
def find(name)
|
16
|
+
entity = Evertils::Common::Entity::Tag.new
|
17
|
+
entity.find(name)
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -1,11 +1,3 @@
|
|
1
|
-
require 'evertils/common/entity/notebook'
|
2
|
-
require 'evertils/common/entity/notebooks'
|
3
|
-
require 'evertils/common/entity/notes'
|
4
|
-
require 'evertils/common/entity/note'
|
5
|
-
require 'evertils/common/entity/tag'
|
6
|
-
require 'evertils/common/entity/tags'
|
7
|
-
require 'evertils/common/entity/sync'
|
8
|
-
|
9
1
|
module Evertils
|
10
2
|
module Common
|
11
3
|
module Query
|
@@ -15,9 +7,18 @@ module Evertils
|
|
15
7
|
# @since 0.2.8
|
16
8
|
def files(*files)
|
17
9
|
date = DateTime.now
|
10
|
+
backup_notebook_name = 'Backup'
|
18
11
|
nm = Entity::Note.new
|
12
|
+
|
13
|
+
# create the backup notebook if it does not exist
|
14
|
+
nb_entity = Entity::Notebook.new
|
15
|
+
nb = nb_entity.find(backup_notebook_name)
|
16
|
+
|
17
|
+
if nb_entity.find(backup_notebook_name).nil?
|
18
|
+
nb = nb_entity.create(backup_notebook_name)
|
19
|
+
end
|
19
20
|
|
20
|
-
@entity = nm.create("Backup: #{date}",
|
21
|
+
@entity = nm.create("Backup: #{date}", "", nb, files)
|
21
22
|
end
|
22
23
|
|
23
24
|
#
|
@@ -1,76 +1,101 @@
|
|
1
|
-
require 'evertils/common/entity/notebook'
|
2
|
-
require 'evertils/common/entity/notebooks'
|
3
|
-
require 'evertils/common/entity/notes'
|
4
|
-
require 'evertils/common/entity/note'
|
5
|
-
require 'evertils/common/entity/tag'
|
6
|
-
require 'evertils/common/entity/tags'
|
7
|
-
require 'evertils/common/entity/sync'
|
8
|
-
|
9
1
|
module Evertils
|
10
2
|
module Common
|
11
3
|
module Query
|
12
4
|
class Simple < Query::Base
|
13
5
|
|
6
|
+
#
|
7
|
+
# @since 0.2.0
|
14
8
|
def notebooks
|
15
9
|
Entity::Notebooks.new.all
|
16
10
|
end
|
17
11
|
|
12
|
+
#
|
13
|
+
# @since 0.2.0
|
18
14
|
def tags
|
19
15
|
Entity::Tags.new.all
|
20
16
|
end
|
21
17
|
|
18
|
+
#
|
19
|
+
# @since 0.2.0
|
22
20
|
def notebook_by_name(name)
|
23
|
-
|
24
|
-
nb.find(name)
|
21
|
+
entity = Entity::Notebook.new
|
22
|
+
nb = entity.find(name)
|
23
|
+
nb.entity
|
25
24
|
end
|
26
25
|
|
26
|
+
#
|
27
|
+
# @since 0.2.0
|
27
28
|
def notes_by_notebook(name)
|
28
|
-
|
29
|
-
nb.find(name)
|
29
|
+
entity = Entity::Notebook.new
|
30
|
+
nb = entity.find(name)
|
30
31
|
nb.notes
|
31
32
|
end
|
32
33
|
|
34
|
+
#
|
35
|
+
# @since 0.2.0
|
33
36
|
def create_stack_from(full_path)
|
34
37
|
stack = Entity::Stack.new
|
35
38
|
stack.create_from_yml(full_path)
|
36
39
|
end
|
37
40
|
|
41
|
+
#
|
42
|
+
# @since 0.2.0
|
38
43
|
def create_note_from(full_path)
|
39
|
-
|
40
|
-
note.create_from_yml(full_path)
|
44
|
+
entity = Entity::Note.new
|
45
|
+
note = entity.create_from_yml(full_path)
|
46
|
+
note.entity
|
41
47
|
end
|
42
48
|
|
49
|
+
#
|
50
|
+
# @since 0.2.0
|
43
51
|
def create_notebooks_from(full_path)
|
44
|
-
|
45
|
-
nb.create_from_yml(full_path)
|
52
|
+
entity = Entity::Notebooks.new
|
53
|
+
nb = entity.create_from_yml(full_path)
|
54
|
+
nb.entity
|
46
55
|
end
|
47
56
|
|
57
|
+
#
|
58
|
+
# @since 0.2.0
|
48
59
|
def create_notebook(name, stack = nil)
|
49
|
-
|
50
|
-
nb.create(name, stack)
|
60
|
+
entity = Entity::Notebook.new
|
61
|
+
nb = entity.create(name, stack)
|
62
|
+
nb.entity
|
51
63
|
end
|
52
64
|
|
65
|
+
#
|
66
|
+
# @since 0.2.0
|
53
67
|
def find_note(title_filter = nil, notebook_filter = nil)
|
54
|
-
|
55
|
-
note.find(title_filter, notebook_filter)
|
68
|
+
entity = Entity::Note.new
|
69
|
+
note = entity.find(title_filter, notebook_filter)
|
70
|
+
note.entity
|
56
71
|
end
|
57
72
|
|
73
|
+
#
|
74
|
+
# @since 0.2.0
|
58
75
|
def note_exists(name)
|
59
|
-
|
60
|
-
note.
|
76
|
+
entity = Entity::Note.new
|
77
|
+
note = entity.find(name)
|
78
|
+
note.exists?
|
61
79
|
end
|
62
80
|
|
81
|
+
#
|
82
|
+
# @since 0.2.0
|
63
83
|
def create_note(title, body, p_notebook_name = nil, file = nil, share_note = false, created_on = nil)
|
64
|
-
|
65
|
-
note.create(title, body, p_notebook_name, file, share_note, created_on)
|
84
|
+
entity = Entity::Note.new
|
85
|
+
note = nm.create(title, body, p_notebook_name, file, share_note, created_on)
|
86
|
+
note.entity
|
66
87
|
end
|
67
88
|
|
89
|
+
#
|
90
|
+
# @since 0.2.0
|
68
91
|
def destroy_note(name)
|
69
|
-
|
70
|
-
note.find(name)
|
71
|
-
note.expunge
|
92
|
+
entity = Entity::Note.new
|
93
|
+
note = entity.find(name)
|
94
|
+
note.expunge!
|
72
95
|
end
|
73
96
|
|
97
|
+
#
|
98
|
+
# @since 0.2.0
|
74
99
|
def poll
|
75
100
|
begin
|
76
101
|
sync = Entity::Sync.new
|
@@ -0,0 +1,29 @@
|
|
1
|
+
require 'evertils/common'
|
2
|
+
require 'evertils/test/base'
|
3
|
+
|
4
|
+
module Evertils
|
5
|
+
|
6
|
+
#
|
7
|
+
# @since 0.3.0
|
8
|
+
def self.token
|
9
|
+
ENV['EVERTILS_SB_TOKEN']
|
10
|
+
end
|
11
|
+
|
12
|
+
#
|
13
|
+
# @since 0.3.0
|
14
|
+
def self.host
|
15
|
+
'sandbox.evernote.com'
|
16
|
+
end
|
17
|
+
|
18
|
+
#
|
19
|
+
# @since 0.3.0
|
20
|
+
def self.is_test?
|
21
|
+
true
|
22
|
+
end
|
23
|
+
|
24
|
+
# define Test namespace
|
25
|
+
# @since 0.3.0
|
26
|
+
module Test
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
@@ -0,0 +1,116 @@
|
|
1
|
+
require 'minitest/autorun'
|
2
|
+
|
3
|
+
module Evertils
|
4
|
+
module Test
|
5
|
+
class Base < Minitest::Test
|
6
|
+
|
7
|
+
# Run before all tests (check the Rakefile for specifics)
|
8
|
+
# @since 0.3.0
|
9
|
+
def self.before
|
10
|
+
puts "Seeding test data"
|
11
|
+
inst = Base.new(nil)
|
12
|
+
inst.setup
|
13
|
+
inst.seed
|
14
|
+
end
|
15
|
+
|
16
|
+
# Run after all tests (check the Rakefile for specifics)
|
17
|
+
# @since 0.3.0
|
18
|
+
def self.after
|
19
|
+
puts "Deleting test data"
|
20
|
+
inst = Base.new(nil)
|
21
|
+
inst.setup
|
22
|
+
inst.clean
|
23
|
+
end
|
24
|
+
|
25
|
+
#
|
26
|
+
# @since 0.3.0
|
27
|
+
def setup
|
28
|
+
entity = Evertils::Common::Manager::Sync.new
|
29
|
+
|
30
|
+
@@test_time = Time.now.to_i
|
31
|
+
|
32
|
+
if !entity.state.is_a?(Evernote::EDAM::NoteStore::SyncState)
|
33
|
+
puts 'Could not determine connection to the Evernote API, exiting'
|
34
|
+
exit(1)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
#
|
39
|
+
# @since 0.3.0
|
40
|
+
def seed
|
41
|
+
full_path = File.join(File.dirname(__FILE__), 'seed/all.yml')
|
42
|
+
|
43
|
+
begin
|
44
|
+
if File.exist? full_path
|
45
|
+
conf = YAML::load(File.open(full_path))
|
46
|
+
|
47
|
+
nb = Evertils::Common::Entity::Notebook.new
|
48
|
+
note = Evertils::Common::Entity::Note.new
|
49
|
+
|
50
|
+
conf.each do |stack_name|
|
51
|
+
stack_name.last.each_pair do |key, arr|
|
52
|
+
puts "Creating: #{stack_name.first}/#{key}-#{@@test_time}..."
|
53
|
+
ch_nb = nb.create("#{key}-#{@@test_time}", stack_name.first)
|
54
|
+
|
55
|
+
arr.each do |child_note|
|
56
|
+
child_note.each_pair do |name, options|
|
57
|
+
puts "Creating: #{stack_name.first}/#{key}/#{name}.note..."
|
58
|
+
parsed = DateTime.parse(options['created_on'])
|
59
|
+
|
60
|
+
created_on = (parsed.to_time.to_i.to_s + "000").to_i
|
61
|
+
note.create(name, "Body for test note", ch_nb, nil, false, created_on)
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
puts "Sample data seeded"
|
68
|
+
else
|
69
|
+
raise ArgumentError, "File not found: #{full_path}"
|
70
|
+
end
|
71
|
+
rescue ArgumentError => e
|
72
|
+
puts e.message
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
# Remove all seeded data after all tests have run
|
77
|
+
# @since 0.3.0
|
78
|
+
def clean
|
79
|
+
full_path = File.join(File.dirname(__FILE__), 'seed/all.yml')
|
80
|
+
|
81
|
+
begin
|
82
|
+
if File.exist? full_path
|
83
|
+
conf = YAML::load(File.open(full_path))
|
84
|
+
|
85
|
+
nb = Evertils::Common::Entity::Notebooks.new
|
86
|
+
nbm = Evertils::Common::Manager::Notebook.new
|
87
|
+
auth = Evertils::Common::Authentication.instance
|
88
|
+
tm = Evertils::Common::Entity::Tags.new
|
89
|
+
|
90
|
+
puts "Deleting all tags..."
|
91
|
+
tags = tm.all
|
92
|
+
tags.each do |tag|
|
93
|
+
auth.call(:expungeTag, tag.guid)
|
94
|
+
end
|
95
|
+
|
96
|
+
puts "Deleting all notebooks..."
|
97
|
+
notebooks = nb.all
|
98
|
+
default = nbm.find_or_create('Default')
|
99
|
+
|
100
|
+
notebooks.each do |nb|
|
101
|
+
next if nb.guid == default.prop(:guid)
|
102
|
+
auth.call(:expungeNotebook, nb.guid)
|
103
|
+
end
|
104
|
+
|
105
|
+
puts "Sample data deleted"
|
106
|
+
else
|
107
|
+
raise ArgumentError, "File not found: #{full_path}"
|
108
|
+
end
|
109
|
+
rescue ArgumentError => e
|
110
|
+
puts e.message
|
111
|
+
end
|
112
|
+
end
|
113
|
+
|
114
|
+
end
|
115
|
+
end
|
116
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
Food:
|
2
|
+
Fruit:
|
3
|
+
- Oranges:
|
4
|
+
created_on: '2015-04-21'
|
5
|
+
- Apples:
|
6
|
+
created_on: '2015-05-02'
|
7
|
+
- Dragon fruit:
|
8
|
+
created_on: '2015-01-14'
|
9
|
+
Vegetable:
|
10
|
+
- Carrots:
|
11
|
+
created_on: '2015-10-11'
|
12
|
+
- Celery:
|
13
|
+
created_on: '2015-11-08'
|
14
|
+
- Onion:
|
15
|
+
created_on: '2015-12-22'
|
16
|
+
Cars:
|
17
|
+
Ford:
|
18
|
+
- Mustang:
|
19
|
+
created_on: '2015-10-11'
|
20
|
+
- Focus:
|
21
|
+
created_on: '2015-08-06'
|
22
|
+
Jaguar:
|
23
|
+
- XJ220:
|
24
|
+
created_on: '2015-06-01'
|
metadata
CHANGED
@@ -1,43 +1,43 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: evertils-common
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ryan Priebe
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-12-
|
11
|
+
date: 2015-12-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
-
name:
|
14
|
+
name: rake
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '
|
19
|
+
version: '10.0'
|
20
20
|
type: :development
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '
|
26
|
+
version: '10.0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
|
-
name:
|
28
|
+
name: minitest
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- - "
|
31
|
+
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '
|
33
|
+
version: '0'
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- - "
|
38
|
+
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: '
|
40
|
+
version: '0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: mime-types
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -90,6 +90,7 @@ extensions: []
|
|
90
90
|
extra_rdoc_files: []
|
91
91
|
files:
|
92
92
|
- ".gitignore"
|
93
|
+
- ".travis.yml"
|
93
94
|
- Gemfile
|
94
95
|
- LICENSE.txt
|
95
96
|
- README.md
|
@@ -111,11 +112,19 @@ files:
|
|
111
112
|
- lib/evertils/common/entity/sync.rb
|
112
113
|
- lib/evertils/common/entity/tag.rb
|
113
114
|
- lib/evertils/common/entity/tags.rb
|
115
|
+
- lib/evertils/common/manager.rb
|
116
|
+
- lib/evertils/common/manager/note.rb
|
117
|
+
- lib/evertils/common/manager/notebook.rb
|
118
|
+
- lib/evertils/common/manager/sync.rb
|
119
|
+
- lib/evertils/common/manager/tag.rb
|
114
120
|
- lib/evertils/common/query.rb
|
115
121
|
- lib/evertils/common/query/backup.rb
|
116
122
|
- lib/evertils/common/query/simple.rb
|
117
123
|
- lib/evertils/common/query/time.rb
|
118
124
|
- lib/evertils/common/version.rb
|
125
|
+
- lib/evertils/test.rb
|
126
|
+
- lib/evertils/test/base.rb
|
127
|
+
- lib/evertils/test/seed/all.yml
|
119
128
|
homepage: http://rubygems.org/gems/evertils-common
|
120
129
|
licenses:
|
121
130
|
- MIT
|