evertils-common 0.2.8.2 → 0.2.9
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +2 -0
- data/lib/evertils/common/converter/yaml_to_enml.rb +42 -0
- data/lib/evertils/common/converter.rb +0 -6
- data/lib/evertils/common/enml.rb +10 -12
- data/lib/evertils/common/entity/note.rb +51 -83
- data/lib/evertils/common/entity/notebook.rb +24 -10
- data/lib/evertils/common/entity/notes.rb +76 -0
- data/lib/evertils/common/entity/stack.rb +1 -1
- data/lib/evertils/common/entity/tag.rb +11 -4
- data/lib/evertils/common/entity.rb +8 -6
- data/lib/evertils/common/query/backup.rb +8 -4
- data/lib/evertils/common/version.rb +1 -1
- data/lib/evertils/common.rb +1 -0
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 33ead3b9f1561bc3a2b5de59335fc9e7251c210b
|
4
|
+
data.tar.gz: 29a60ff3a7ed7446b9d5b92ec968144fe9d302fe
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0102d8cb3bc70c7d1ad2864451f0db431eab0f9d9b0e70ae12cf0a8a31879694b35f973bebd91148280773f94f2b1209cc3ce317b61a0062f9ecf8234f89bc05
|
7
|
+
data.tar.gz: cc23fd26183b67cbfdd00170b5726322eb6a104c30ffc6e1b649926be250b742c4d52c1f70b331c3d0d1e28b767c2563c963405335d66ef5adba14bacb03bfdb
|
data/README.md
CHANGED
@@ -1,5 +1,7 @@
|
|
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)
|
4
|
+
|
3
5
|
Evertils::Common is an abstraction library for interacting with the Evernote API.
|
4
6
|
|
5
7
|
## Installation
|
@@ -3,6 +3,48 @@ module Evertils
|
|
3
3
|
module Converter
|
4
4
|
class YamlToEnml < Converter::Base
|
5
5
|
|
6
|
+
#
|
7
|
+
# @since 0.2.9
|
8
|
+
def from_file(path)
|
9
|
+
contents = File.open(path, "rb") { |io| io.read }
|
10
|
+
obj = YAML::load(contents)
|
11
|
+
|
12
|
+
builder(obj)
|
13
|
+
end
|
14
|
+
|
15
|
+
#
|
16
|
+
# @since 0.2.9
|
17
|
+
def from_string(yaml)
|
18
|
+
obj = YAML::load(yaml)
|
19
|
+
|
20
|
+
builder(obj)
|
21
|
+
end
|
22
|
+
|
23
|
+
private
|
24
|
+
|
25
|
+
#
|
26
|
+
# @since 0.2.9
|
27
|
+
def builder(obj)
|
28
|
+
# hardcoding XML here because it's quick/easy
|
29
|
+
enml = '<?xml version="1.0" encoding="UTF-8"?>'
|
30
|
+
enml += '<!DOCTYPE "en-note" SYSTEM "http://xml.evernote.com/pub/enml2.dtd">'
|
31
|
+
enml += '<en-note>'
|
32
|
+
obj.each do |k, v|
|
33
|
+
if v.is_a? Array
|
34
|
+
enml += "<p>#{k}</p>"
|
35
|
+
enml += "<ul>"
|
36
|
+
v.each do |child|
|
37
|
+
enml += "<li>#{child}</li>"
|
38
|
+
end
|
39
|
+
enml += "</ul>"
|
40
|
+
else
|
41
|
+
enml += "<p>#{k}: #{v}</p>"
|
42
|
+
end
|
43
|
+
end
|
44
|
+
enml += '</en-note>'
|
45
|
+
enml
|
46
|
+
end
|
47
|
+
|
6
48
|
end
|
7
49
|
end
|
8
50
|
end
|
data/lib/evertils/common/enml.rb
CHANGED
@@ -16,19 +16,17 @@ module Evertils
|
|
16
16
|
private
|
17
17
|
|
18
18
|
def enml_element
|
19
|
-
|
20
|
-
read_file = File.open(@file, 'rb') { |io| io.read }
|
19
|
+
read_file = File.open(@file, 'rb') { |io| io.read }
|
21
20
|
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
end
|
21
|
+
el = ::Evernote::EDAM::Type::Resource.new()
|
22
|
+
el.mime = MIME::Types.type_for(@file)[0].content_type
|
23
|
+
el.data = ::Evernote::EDAM::Type::Data.new()
|
24
|
+
el.data.size = read_file.size
|
25
|
+
el.data.bodyHash = Digest::MD5.hexdigest(read_file)
|
26
|
+
el.data.body = read_file
|
27
|
+
el.attributes = ::Evernote::EDAM::Type::ResourceAttributes.new()
|
28
|
+
el.attributes.fileName = @file # temporary for now, the actual file name
|
29
|
+
el
|
32
30
|
end
|
33
31
|
end
|
34
32
|
end
|
@@ -3,9 +3,11 @@ module Evertils
|
|
3
3
|
module Entity
|
4
4
|
class Note < Entity::Base
|
5
5
|
|
6
|
+
#
|
7
|
+
# @since 0.2.0
|
6
8
|
def create_from_yml(full_path)
|
7
9
|
begin
|
8
|
-
if File.
|
10
|
+
if File.exist? full_path
|
9
11
|
conf = YAML::load(File.open(full_path))
|
10
12
|
required = %w(title body)
|
11
13
|
|
@@ -22,7 +24,11 @@ module Evertils
|
|
22
24
|
end
|
23
25
|
end
|
24
26
|
|
27
|
+
#
|
28
|
+
# @since 0.2.0
|
25
29
|
def create(title, body, p_notebook_name = nil, file = nil, share_note = false, created_on = nil)
|
30
|
+
@entity = nil
|
31
|
+
|
26
32
|
# final output
|
27
33
|
output = {}
|
28
34
|
|
@@ -61,71 +67,86 @@ module Evertils
|
|
61
67
|
if !p_notebook_name.is_a? ::Evernote::EDAM::Type::Notebook
|
62
68
|
nb = Entity::Notebook.new
|
63
69
|
parent_notebook = nb.find(p_notebook_name)
|
64
|
-
parent_notebook =
|
70
|
+
parent_notebook = nb.default if parent_notebook.nil?
|
65
71
|
end
|
66
72
|
|
67
73
|
# parent_notebook is optional; if omitted, default notebook is used
|
68
|
-
our_note.notebookGuid = parent_notebook.guid
|
74
|
+
our_note.notebookGuid = parent_notebook.prop(:guid)
|
69
75
|
|
70
76
|
# Attempt to create note in Evernote account
|
71
77
|
begin
|
72
|
-
|
73
|
-
|
74
|
-
if share_note
|
75
|
-
shareKey = @evernote.call(:shareNote, output[:note].guid)
|
76
|
-
output[:share_url] = "https://#{Evertils::Common::EVERNOTE_HOST}/shard/#{@model.shardId}/sh/#{output[:note].guid}/#{shareKey}"
|
77
|
-
end
|
78
|
+
@entity = @evernote.call(:createNote, our_note)
|
79
|
+
share if share_note
|
78
80
|
rescue ::Evernote::EDAM::Error::EDAMUserException => edue
|
79
81
|
## Something was wrong with the note data
|
80
82
|
## See EDAMErrorCode enumeration for error code explanation
|
81
83
|
## http://dev.evernote.com/documentation/reference/Errors.html#Enum_EDAMErrorCode
|
82
84
|
Notify.error "EDAMUserException: #{edue}\nCode #{edue.errorCode}: #{edue.parameter}"
|
83
|
-
rescue ::Evernote::EDAM::Error::EDAMNotFoundException
|
85
|
+
rescue ::Evernote::EDAM::Error::EDAMNotFoundException
|
84
86
|
## Parent Notebook GUID doesn't correspond to an actual notebook
|
85
87
|
Notify.error "EDAMNotFoundException: Invalid parent notebook GUID"
|
86
88
|
end
|
87
89
|
|
88
|
-
Notify.success("#{parent_notebook.stack}/#{parent_notebook.name}/#{our_note.title} created")
|
90
|
+
Notify.success("#{parent_notebook.prop(:stack)}/#{parent_notebook.prop(:name)}/#{our_note.title} created")
|
89
91
|
|
90
|
-
|
92
|
+
self if @entity
|
91
93
|
end
|
92
94
|
|
95
|
+
#
|
96
|
+
# @since 0.2.0
|
93
97
|
def exists?(name)
|
94
|
-
# notes = Notes.new
|
95
|
-
# notes.find_all(name).size > 0
|
96
98
|
return true if !find(name).nil?
|
97
99
|
false
|
98
100
|
end
|
99
101
|
|
100
|
-
|
101
|
-
|
102
|
+
#
|
103
|
+
# @since 0.2.0
|
104
|
+
def destroy
|
105
|
+
@evernote.call(:deleteNote, @entity.guid)
|
106
|
+
end
|
102
107
|
|
103
|
-
|
108
|
+
#
|
109
|
+
# @since 0.2.9
|
110
|
+
def expunge!
|
111
|
+
@evernote.call(:expungeNote, @entity.guid)
|
104
112
|
end
|
105
113
|
|
106
|
-
|
107
|
-
|
114
|
+
#
|
115
|
+
# @since 0.2.0
|
116
|
+
def expunge
|
117
|
+
deprecation_notice('0.2.9')
|
108
118
|
|
109
|
-
@evernote.call(:expungeNote,
|
119
|
+
@evernote.call(:expungeNote, @entity.guid)
|
110
120
|
end
|
111
121
|
|
112
122
|
#
|
113
|
-
# @since 0.2.
|
114
|
-
def
|
115
|
-
|
123
|
+
# @since 0.2.9
|
124
|
+
def move_to(notebook)
|
125
|
+
nb = Evertils::Common::Entity::Notebook.new
|
126
|
+
target = nb.find(notebook)
|
127
|
+
|
128
|
+
@entity.notebookGuid = target.prop(:guid)
|
116
129
|
|
117
|
-
@evernote.call(:
|
130
|
+
@evernote.call(:updateNote, @entity)
|
118
131
|
end
|
119
132
|
|
120
133
|
#
|
121
134
|
# @since 0.2.8
|
122
|
-
def
|
123
|
-
|
135
|
+
def share
|
136
|
+
@evernote.call(:shareNote, @entity.guid)
|
137
|
+
end
|
124
138
|
|
125
|
-
|
139
|
+
#
|
140
|
+
# @since 0.2.8
|
141
|
+
def unshare
|
142
|
+
@evernote.call(:stopSharingNote, @entity.guid)
|
126
143
|
end
|
127
144
|
|
145
|
+
#
|
146
|
+
# @since 0.2.0
|
128
147
|
def find(name)
|
148
|
+
@entity = nil
|
149
|
+
|
129
150
|
filter = ::Evernote::EDAM::NoteStore::NoteFilter.new
|
130
151
|
filter.words = name
|
131
152
|
|
@@ -135,65 +156,12 @@ module Evertils
|
|
135
156
|
result = @evernote.call(:findNotesMetadata, filter, 0, 1, spec)
|
136
157
|
|
137
158
|
if result.totalNotes > 0
|
138
|
-
|
159
|
+
@entity = result.notes[0]
|
139
160
|
end
|
140
|
-
end
|
141
|
-
alias_method :find_by_name, :find
|
142
|
-
|
143
|
-
def find_by_date_range(start, finish = DateTime.now, period = :created)
|
144
|
-
filter = ::Evernote::EDAM::NoteStore::NoteFilter.new
|
145
|
-
filter.words = "#{period}:year-#{year_diff(start.year)}"
|
146
|
-
filter.order = 1
|
147
|
-
|
148
|
-
spec = ::Evernote::EDAM::NoteStore::NotesMetadataResultSpec.new
|
149
|
-
spec.includeTitle = true
|
150
|
-
spec.includeUpdated = true
|
151
|
-
spec.includeCreated = true
|
152
161
|
|
153
|
-
|
154
|
-
notes_by_date = []
|
155
|
-
|
156
|
-
pool.notes.each do |note|
|
157
|
-
note_datetime = DateTime.strptime(note.send(period).to_s[0...-3], '%s')
|
158
|
-
|
159
|
-
notes_by_date << note if note_datetime.strftime('%m-%d-%Y') < finish.strftime('%m-%d-%Y') && note_datetime.strftime('%m-%d-%Y') > start.strftime('%m-%d-%Y')
|
160
|
-
end
|
161
|
-
|
162
|
-
notes_by_date
|
163
|
-
end
|
164
|
-
|
165
|
-
def find_by_date(date, period = :created)
|
166
|
-
filter = ::Evernote::EDAM::NoteStore::NoteFilter.new
|
167
|
-
filter.words = "#{period}:year-#{year_diff(date.year)}"
|
168
|
-
filter.order = 1
|
169
|
-
|
170
|
-
spec = ::Evernote::EDAM::NoteStore::NotesMetadataResultSpec.new
|
171
|
-
spec.includeTitle = true
|
172
|
-
spec.includeUpdated = true
|
173
|
-
spec.includeCreated = true
|
174
|
-
|
175
|
-
pool = @evernote.call(:findNotesMetadata, filter, 0, 300, spec)
|
176
|
-
notes_by_date = []
|
177
|
-
|
178
|
-
pool.notes.each do |note|
|
179
|
-
note_datetime = DateTime.strptime(note.send(period).to_s[0...-3], '%s')
|
180
|
-
|
181
|
-
notes_by_date << note if note_datetime.strftime('%m-%d-%Y') == date.strftime('%m-%d-%Y')
|
182
|
-
end
|
183
|
-
|
184
|
-
notes_by_date
|
185
|
-
end
|
186
|
-
|
187
|
-
private
|
188
|
-
|
189
|
-
def year_diff(start_year)
|
190
|
-
curr_year = DateTime.now.year
|
191
|
-
diff = curr_year - start_year
|
192
|
-
|
193
|
-
return 1 if diff == 0 || start_year > curr_year
|
194
|
-
|
195
|
-
diff
|
162
|
+
self if @entity
|
196
163
|
end
|
164
|
+
alias_method :find_by_name, :find
|
197
165
|
|
198
166
|
end
|
199
167
|
end
|
@@ -6,19 +6,21 @@ module Evertils
|
|
6
6
|
class Notebook < Entity::Base
|
7
7
|
|
8
8
|
def find(name)
|
9
|
-
@
|
9
|
+
@entity = nil
|
10
10
|
notebooks = Notebooks.new.all
|
11
11
|
|
12
12
|
notebooks.each do |notebook|
|
13
13
|
if notebook.name == name.to_s
|
14
|
-
@
|
14
|
+
@entity = notebook
|
15
15
|
end
|
16
16
|
end
|
17
17
|
|
18
|
-
@
|
18
|
+
self if @entity
|
19
19
|
end
|
20
20
|
|
21
21
|
def create(name, stack = nil)
|
22
|
+
@entity = nil
|
23
|
+
|
22
24
|
notebook = ::Evernote::EDAM::Type::Notebook.new
|
23
25
|
notebook.name = name
|
24
26
|
|
@@ -27,21 +29,33 @@ module Evertils
|
|
27
29
|
notebook.name = "#{stack}/#{name}"
|
28
30
|
end
|
29
31
|
|
30
|
-
@evernote.call(:createNotebook, notebook)
|
32
|
+
@entity = @evernote.call(:createNotebook, notebook)
|
33
|
+
|
34
|
+
self if @entity
|
35
|
+
end
|
36
|
+
|
37
|
+
def default
|
38
|
+
@entity = @evernote.call(:getDefaultNotebook)
|
39
|
+
|
40
|
+
self if @entity
|
41
|
+
end
|
42
|
+
|
43
|
+
def expunge!
|
44
|
+
@evernote.call(:expungeNotebook, @entity.guid)
|
31
45
|
end
|
32
46
|
|
33
|
-
def expunge
|
34
|
-
|
47
|
+
def expunge
|
48
|
+
deprecation_notice('0.2.9')
|
35
49
|
|
36
|
-
@evernote.call(:expungeNotebook,
|
50
|
+
@evernote.call(:expungeNotebook, @entity.guid)
|
37
51
|
end
|
38
52
|
|
39
|
-
def notes
|
53
|
+
def notes
|
40
54
|
filter = ::Evernote::EDAM::NoteStore::NoteFilter.new
|
41
|
-
filter.notebookGuid = @
|
55
|
+
filter.notebookGuid = @entity.guid
|
42
56
|
|
43
57
|
notes = Notes.new
|
44
|
-
notes.find(nil, @
|
58
|
+
notes.find(nil, @entity.guid)
|
45
59
|
end
|
46
60
|
|
47
61
|
end
|
@@ -27,6 +27,82 @@ module Evertils
|
|
27
27
|
response.notes
|
28
28
|
end
|
29
29
|
|
30
|
+
def find_by_tag(tag_name)
|
31
|
+
filter = ::Evernote::EDAM::NoteStore::NoteFilter.new
|
32
|
+
filter.words = "tag:#{tag_name}"
|
33
|
+
|
34
|
+
spec = ::Evernote::EDAM::NoteStore::NotesMetadataResultSpec.new
|
35
|
+
spec.includeTitle = true
|
36
|
+
|
37
|
+
response = @evernote.call(:findNotesMetadata, filter, nil, 300, spec)
|
38
|
+
response.notes
|
39
|
+
end
|
40
|
+
|
41
|
+
#
|
42
|
+
# @since 0.2.9
|
43
|
+
def find_by_date_range(start, finish = DateTime.now, period = :created)
|
44
|
+
filter = ::Evernote::EDAM::NoteStore::NoteFilter.new
|
45
|
+
filter.words = "#{period}:year-#{year_diff(start.year)}"
|
46
|
+
filter.order = 1
|
47
|
+
|
48
|
+
spec = ::Evernote::EDAM::NoteStore::NotesMetadataResultSpec.new
|
49
|
+
spec.includeTitle = true
|
50
|
+
spec.includeUpdated = true
|
51
|
+
spec.includeCreated = true
|
52
|
+
|
53
|
+
pool = @evernote.call(:findNotesMetadata, filter, 0, 300, spec)
|
54
|
+
notes_by_date = []
|
55
|
+
|
56
|
+
pool.notes.each do |note|
|
57
|
+
note_datetime = note_date(note, period)
|
58
|
+
|
59
|
+
notes_by_date << note if note_datetime.strftime('%m-%d-%Y') < finish.strftime('%m-%d-%Y') && note_datetime.strftime('%m-%d-%Y') > start.strftime('%m-%d-%Y')
|
60
|
+
end
|
61
|
+
|
62
|
+
notes_by_date
|
63
|
+
end
|
64
|
+
|
65
|
+
#
|
66
|
+
# @since 0.2.9
|
67
|
+
def find_by_date(date, period = :created)
|
68
|
+
filter = ::Evernote::EDAM::NoteStore::NoteFilter.new
|
69
|
+
filter.words = "#{period}:year-#{year_diff(date.year)}"
|
70
|
+
filter.order = 1
|
71
|
+
|
72
|
+
spec = ::Evernote::EDAM::NoteStore::NotesMetadataResultSpec.new
|
73
|
+
spec.includeTitle = true
|
74
|
+
spec.includeUpdated = true
|
75
|
+
spec.includeCreated = true
|
76
|
+
|
77
|
+
pool = @evernote.call(:findNotesMetadata, filter, 0, 300, spec)
|
78
|
+
notes_by_date = []
|
79
|
+
|
80
|
+
pool.notes.each do |note|
|
81
|
+
note_datetime = note_date(note, period)
|
82
|
+
|
83
|
+
notes_by_date << note if note_datetime.strftime('%m-%d-%Y') == date.strftime('%m-%d-%Y')
|
84
|
+
end
|
85
|
+
|
86
|
+
notes_by_date
|
87
|
+
end
|
88
|
+
|
89
|
+
private
|
90
|
+
|
91
|
+
#
|
92
|
+
# @since 0.2.9
|
93
|
+
def year_diff(start_year)
|
94
|
+
curr_year = DateTime.now.year
|
95
|
+
diff = curr_year - start_year
|
96
|
+
|
97
|
+
return 1 if diff == 0 || start_year > curr_year
|
98
|
+
|
99
|
+
diff
|
100
|
+
end
|
101
|
+
|
102
|
+
def note_date(note, period)
|
103
|
+
DateTime.strptime(note.send(period).to_s[0...-3], '%s')
|
104
|
+
end
|
105
|
+
|
30
106
|
end
|
31
107
|
end
|
32
108
|
end
|
@@ -4,26 +4,33 @@ module Evertils
|
|
4
4
|
class Tag < Entity::Base
|
5
5
|
|
6
6
|
def find(name)
|
7
|
-
@
|
7
|
+
@entity = nil
|
8
8
|
tags = Tags.new.all
|
9
9
|
|
10
10
|
tags.each do |tag|
|
11
11
|
if tag.name == name.to_s
|
12
|
-
@
|
12
|
+
@entity = tag
|
13
13
|
end
|
14
14
|
end
|
15
15
|
|
16
|
-
@
|
16
|
+
self if @entity
|
17
17
|
end
|
18
18
|
|
19
19
|
def create(name)
|
20
20
|
tag = ::Evernote::EDAM::Type::Tag.new
|
21
21
|
tag.name = name
|
22
22
|
|
23
|
-
@evernote.call(:createTag, tag)
|
23
|
+
@entity = @evernote.call(:createTag, tag)
|
24
|
+
|
25
|
+
self if @entity
|
26
|
+
end
|
27
|
+
|
28
|
+
def expunge!
|
29
|
+
@evernote.call(:expungeTag, @entity.guid)
|
24
30
|
end
|
25
31
|
|
26
32
|
def expunge(name)
|
33
|
+
deprecation_notice('0.2.9')
|
27
34
|
tag = find(name)
|
28
35
|
|
29
36
|
@evernote.call(:expungeTag, tag.guid)
|
@@ -24,20 +24,22 @@ module Evertils
|
|
24
24
|
|
25
25
|
#
|
26
26
|
# @since 0.2.8
|
27
|
-
def start_of_day(date =
|
28
|
-
date = ::Time.now unless date
|
29
|
-
|
27
|
+
def start_of_day(date = ::Time.now)
|
30
28
|
::Time.mktime(date.year, date.month, date.day, 12, 0, 0, 0, 0).to_datetime
|
31
29
|
end
|
32
30
|
|
33
31
|
#
|
34
32
|
# @since 0.2.8
|
35
|
-
def end_of_day(date =
|
36
|
-
date = ::Time.now unless date
|
37
|
-
|
33
|
+
def end_of_day(date = ::Time.now)
|
38
34
|
::Time.mktime(date.year, date.month, date.day, 23, 59, 59, 0).to_datetime
|
39
35
|
end
|
40
36
|
|
37
|
+
#
|
38
|
+
# @since 0.2.9
|
39
|
+
def prop(name)
|
40
|
+
@entity.send(name)
|
41
|
+
end
|
42
|
+
|
41
43
|
end
|
42
44
|
end
|
43
45
|
end
|
@@ -11,15 +11,19 @@ module Evertils
|
|
11
11
|
module Query
|
12
12
|
class Backup < Query::Base
|
13
13
|
|
14
|
-
attr_accessor :note
|
15
|
-
|
16
14
|
#
|
17
15
|
# @since 0.2.8
|
18
16
|
def files(*files)
|
19
17
|
date = DateTime.now
|
20
|
-
|
18
|
+
nm = Entity::Note.new
|
19
|
+
|
20
|
+
@entity = nm.create("Backup: #{date}", '', 'Backup', files)
|
21
|
+
end
|
21
22
|
|
22
|
-
|
23
|
+
#
|
24
|
+
# @since 0.2.9
|
25
|
+
def expunge!
|
26
|
+
@entity.expunge!
|
23
27
|
end
|
24
28
|
|
25
29
|
end
|
data/lib/evertils/common.rb
CHANGED