evertils-common 0.2.8.2 → 0.2.9
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.
- 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
|
+
[](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