evertils 0.2.3 → 0.2.5

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 90551e5fb6ed665c795d74a83e905ed51fc160df
4
- data.tar.gz: d0bfad5e98910ec11296ce41809f39797734d208
3
+ metadata.gz: 8b3bd67f9a1fb8a37c418070ef17e816de038f00
4
+ data.tar.gz: e543772add1f3d8defa64169bd9fd326d281aa2f
5
5
  SHA512:
6
- metadata.gz: 280f695c0dd067200a3526dfb35ec36bbc7c7429e24ccd7dfcaa15994cdfc9ad16ea9368999bca88e92bc6ca04e45fc6c5eca1cfb7746ec6f09fcb43505e2c2f
7
- data.tar.gz: 5f5307f0be2491f9eb8665ce9e19b87a88bc9ee699e1186e6569196145c84d3266cd445075c33f39c8e3c8d2244f34bacde56ef91331cc54fa573f60f584381d
6
+ metadata.gz: ee26651d4920cb4a166cac17c6d85b0bf1c999225a871231c29a649ff0b322f95dbfda533a7fc97425816dc5ef966c6d50055add87b9155d3b26980d6dbafd12
7
+ data.tar.gz: 6448e7f53604bd823d28a963e096d1bb1b4c58ceb47a70754f46d038e5606c4ee70103db723299646cdd6eff6cfb15c71cf0db52da9b273c763240066eb7fe1c
data/Gemfile CHANGED
@@ -1,7 +1,3 @@
1
1
  source 'https://rubygems.org'
2
2
 
3
- gem 'rubocop'
4
- gem 'notifaction'
5
- gem 'evernote-thrift'
6
- gem 'mime-types'
7
- gem 'rake'
3
+ gemspec
data/Rakefile ADDED
@@ -0,0 +1 @@
1
+ require "bundler/gem_tasks"
data/bin/evertils CHANGED
@@ -13,6 +13,7 @@ require "cgi"
13
13
  require "notifaction"
14
14
  require 'digest/md5'
15
15
  require 'mime/types'
16
+ require 'evertils/common'
16
17
 
17
18
  # include required files
18
19
  require_relative "../lib/kernel.rb"
@@ -29,7 +30,7 @@ require_relative "../lib/model_data.rb"
29
30
  require_relative "../lib/controller.rb"
30
31
  require_relative "../lib/router.rb"
31
32
  require_relative "../lib/model.rb"
32
- require_relative "../lib/helpers/evernote.rb"
33
+ require_relative "../lib/helpers/formatting.rb"
33
34
  require_relative "../lib/helpers/evernote-enml.rb"
34
35
  require_relative "../lib/helper.rb"
35
36
 
data/bin/setup ADDED
@@ -0,0 +1,7 @@
1
+ #!/bin/bash
2
+ set -euo pipefail
3
+ IFS=$'\n\t'
4
+
5
+ bundle install
6
+
7
+ # Do any other automated setup that you need to do here
data/evertils.gemspec CHANGED
@@ -1,15 +1,23 @@
1
- require "./lib/version"
1
+ require './lib/version'
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = 'evertils'
5
5
  s.version = Evertils::VERSION
6
6
  s.date = '2015-07-03'
7
- s.summary = "EN (heart) CLI"
8
- s.description = "Evernote utilities for your CLI workflow"
9
- s.authors = ["Ryan Priebe"]
7
+ s.summary = 'EN (heart) CLI'
8
+ s.description = 'Evernote utilities for your CLI workflow'
9
+ s.authors = ['Ryan Priebe']
10
10
  s.email = 'hello@ryanpriebe.com'
11
11
  s.files = `git ls-files`.split($\)
12
12
  s.homepage = 'http://rubygems.org/gems/evertils'
13
13
  s.license = 'MIT'
14
14
  s.executables = 'evertils'
15
+
16
+ s.add_runtime_dependency 'evernote-thrift'
17
+ s.add_runtime_dependency 'notifaction'
18
+ s.add_runtime_dependency 'mime-types'
19
+ s.add_runtime_dependency 'evertils-common'
20
+
21
+ s.add_development_dependency "bundler", "~> 1.10"
22
+ s.add_development_dependency "rake", "~> 10.0"
15
23
  end
data/lib/controller.rb CHANGED
@@ -7,17 +7,10 @@ module Evertils
7
7
 
8
8
  # Perform pre-run tasks
9
9
  def pre_exec
10
- begin
11
- # interface with the Evernote API so we can use it later
12
- @model = Evertils::Helper.load('evernote')
13
-
14
- # user = @model.user
15
- # Notify.success("Welcome, #{user.name} (#{user.username})")
16
- rescue ::Evernote::EDAM::Error::EDAMSystemException => e
17
- Notify.error("Evernote.authenticate error\n#{e.message} (#{e.errorCode})")
18
- rescue ::Evernote::EDAM::Error::EDAMUserException => e
19
- Notify.error("Evernote.authenticate error\n#{e.parameter} (#{e.errorCode})")
20
- end
10
+ # interface with the Evernote API so we can use it later
11
+ @model = Evertils::Common::Evernote.new
12
+
13
+ @format = Evertils::Helper.load('formatting')
21
14
 
22
15
  OptionParser.new do |opt|
23
16
  opt.banner = "#{Evertils::PACKAGE_NAME} controller command [...-flags]"
@@ -3,8 +3,14 @@ module Evertils
3
3
  class Generate < Controller::Base
4
4
  attr_accessor :force, :start
5
5
 
6
+ # required user-created notebooks
7
+ NOTEBOOK_DAILY = :Daily
8
+ NOTEBOOK_WEEKLY = :Weekly
9
+ NOTEBOOK_MONTHLY = :Monthly
10
+ NOTEBOOK_DEPLOYMENT = :Deployments
11
+
6
12
  def pre_exec
7
- @methods_require_internet.push(:daily, :weekly, :monthly, :deployment)
13
+ @methods_require_internet.push(:daily, :weekly, :monthly)
8
14
 
9
15
  OptionParser.new do |opt|
10
16
  opt.banner = "#{Evertils::PACKAGE_NAME} generate timeframe [...-flags]"
@@ -21,20 +27,6 @@ module Evertils
21
27
  super
22
28
  end
23
29
 
24
- def deployment
25
- if STDIN.tty?
26
- Notify.error("This command relies on piped data to generate note data")
27
- end
28
-
29
- if !@force
30
- if @model.note_exists(@start)
31
- Notify.error("There's already a log for today!")
32
- end
33
- end
34
-
35
- @model.create_deployment_note(@start)
36
- end
37
-
38
30
  # generate daily notes
39
31
  def daily
40
32
  if !@force
@@ -43,7 +35,11 @@ module Evertils
43
35
  end
44
36
  end
45
37
 
46
- @model.create_note
38
+ title = @format.date_templates[NOTEBOOK_DAILY]
39
+ body = @format.template_contents
40
+ parent_notebook = NOTEBOOK_DAILY
41
+
42
+ @model.create_note(title, body, parent_notebook)
47
43
  end
48
44
 
49
45
  # generate weekly notes
@@ -53,12 +49,15 @@ module Evertils
53
49
  Notify.error("There's already a log for this week!")
54
50
  end
55
51
 
56
-
57
52
  if !Date.today.monday?
58
53
  Notify.error("Sorry, you can only create new weekly logs on Mondays")
59
54
  end
60
55
  end
61
56
 
57
+ title = @format.date_templates[NOTEBOOK_WEEKLY]
58
+ body = @format.template_contents
59
+ parent_notebook = NOTEBOOK_WEEKLY
60
+
62
61
  @model.create_note
63
62
  end
64
63
 
@@ -70,6 +69,10 @@ module Evertils
70
69
  end
71
70
  end
72
71
 
72
+ title = @format.date_templates[NOTEBOOK_MONTHLY]
73
+ body = @format.template_contents
74
+ parent_notebook = NOTEBOOK_MONTHLY
75
+
73
76
  @model.create_note
74
77
  end
75
78
  end
@@ -0,0 +1,52 @@
1
+ module Evertils
2
+ module Helper
3
+ class Formatting
4
+ # Legacy notes will have single/double character denotations for day of
5
+ # week, this maps them.
6
+ def day_of_week(arg_date = Date.today.strftime('%a'))
7
+ case arg_date
8
+ when 'Mon'
9
+ :M
10
+ when 'Tue'
11
+ :Tu
12
+ when 'Wed'
13
+ :W
14
+ when 'Thu'
15
+ :Th
16
+ when 'Fri'
17
+ :F
18
+ when 'Sat'
19
+ :Sa
20
+ when 'Sun'
21
+ :Su
22
+ end
23
+ end
24
+
25
+ def template_contents
26
+ if Date.today.friday? && command == :Daily
27
+ # Friday uses a slightly different template
28
+ IO.readlines("#{Evertils::TEMPLATE_DIR}#{command}-friday.enml").join("").gsub!("\n", '')
29
+ else
30
+ IO.readlines("#{Evertils::TEMPLATE_DIR}#{command}.enml").join("").gsub!("\n", '')
31
+ end
32
+ end
33
+
34
+ def date_templates(arg_date = DateTime.now)
35
+ dow = day_of_week(arg_date.strftime('%a'))
36
+ end_of_week = arg_date + 4 # days
37
+
38
+ {
39
+ :Daily => "Daily Log [#{arg_date.strftime('%B %-d')} - #{dow}]",
40
+ :Weekly => "Weekly Log [#{arg_date.strftime('%B %-d')} - #{end_of_week.strftime('%B %-d')}]",
41
+ :Monthly => "Monthly Log [#{arg_date.strftime('%B %Y')}]",
42
+ :Deployments => "#{arg_date.strftime('%B %-d')} - #{dow}"
43
+ }
44
+ end
45
+
46
+ # format command as required by this model
47
+ def command
48
+ $request.command.capitalize
49
+ end
50
+ end
51
+ end
52
+ end
data/lib/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Evertils
2
- VERSION = '0.2.3'
2
+ VERSION = '0.2.5'
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: evertils
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.3
4
+ version: 0.2.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ryan Priebe
@@ -9,7 +9,91 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
  date: 2015-07-03 00:00:00.000000000 Z
12
- dependencies: []
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: evernote-thrift
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - '>='
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - '>='
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: notifaction
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - '>='
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - '>='
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: mime-types
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - '>='
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: evertils-common
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - '>='
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: bundler
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ~>
74
+ - !ruby/object:Gem::Version
75
+ version: '1.10'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ~>
81
+ - !ruby/object:Gem::Version
82
+ version: '1.10'
83
+ - !ruby/object:Gem::Dependency
84
+ name: rake
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ~>
88
+ - !ruby/object:Gem::Version
89
+ version: '10.0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ~>
95
+ - !ruby/object:Gem::Version
96
+ version: '10.0'
13
97
  description: Evernote utilities for your CLI workflow
14
98
  email: hello@ryanpriebe.com
15
99
  executables:
@@ -20,7 +104,9 @@ files:
20
104
  - .gitignore
21
105
  - Gemfile
22
106
  - README.md
107
+ - Rakefile
23
108
  - bin/evertils
109
+ - bin/setup
24
110
  - evertils.gemspec
25
111
  - lib/command.rb
26
112
  - lib/config.rb
@@ -37,7 +123,7 @@ files:
37
123
  - lib/helper.rb
38
124
  - lib/helpers/evernote-enml.rb
39
125
  - lib/helpers/evernote-markdown.rb
40
- - lib/helpers/evernote.rb
126
+ - lib/helpers/formatting.rb
41
127
  - lib/helpers/generate.rb
42
128
  - lib/helpers/results.rb
43
129
  - lib/helpers/time.rb
@@ -1,353 +0,0 @@
1
- module Evertils
2
- module Helper
3
- class Evernote
4
- @@developer_token = ENV["EVERTILS_TOKEN"]
5
-
6
- # required user-created notebooks
7
- NOTEBOOK_DAILY = :Daily
8
- NOTEBOOK_WEEKLY = :Weekly
9
- NOTEBOOK_MONTHLY = :Monthly
10
- NOTEBOOK_DEPLOYMENT = :Deployments
11
-
12
- def initialize
13
- authenticate
14
- end
15
-
16
- def authenticate
17
- if @@developer_token.nil?
18
- Notify.error("Evernote developer token is not configured properly!\n$EVERTILS_TOKEN == nil")
19
- end
20
-
21
- @evernoteHost = "www.evernote.com"
22
- userStoreUrl = "https://#{@evernoteHost}/edam/user"
23
-
24
- userStoreTransport = Thrift::HTTPClientTransport.new(userStoreUrl)
25
- userStoreProtocol = Thrift::BinaryProtocol.new(userStoreTransport)
26
- @@user = ::Evernote::EDAM::UserStore::UserStore::Client.new(userStoreProtocol)
27
- @@shardId = user.shardId
28
-
29
- versionOK = @@user.checkVersion("evernote-data",
30
- ::Evernote::EDAM::UserStore::EDAM_VERSION_MAJOR,
31
- ::Evernote::EDAM::UserStore::EDAM_VERSION_MINOR)
32
-
33
- @version = "#{::Evernote::EDAM::UserStore::EDAM_VERSION_MAJOR}.#{::Evernote::EDAM::UserStore::EDAM_VERSION_MINOR}"
34
-
35
- if !versionOK
36
- Notify.error("Evernote API requires an update. Latest version is #{@version}")
37
- end
38
-
39
- noteStoreUrl = @@user.getNoteStoreUrl(@@developer_token)
40
-
41
- noteStoreTransport = Thrift::HTTPClientTransport.new(noteStoreUrl)
42
- noteStoreProtocol = Thrift::BinaryProtocol.new(noteStoreTransport)
43
- @@store = ::Evernote::EDAM::NoteStore::NoteStore::Client.new(noteStoreProtocol)
44
- end
45
-
46
- def info
47
- {
48
- :user => "#{user.name} (#{user.username}) - ID##{user.id}",
49
- :shard => user.shardId,
50
- :api_version => @version,
51
- }
52
- end
53
-
54
- def notebooks
55
- @@store.listNotebooks(@@developer_token)
56
- end
57
-
58
- def tags
59
- @@store.listTags(@@developer_token)
60
- end
61
-
62
- def user
63
- @@user.getUser(@@developer_token)
64
- end
65
-
66
- def notebook_by_name(name = command)
67
- output = {}
68
- notebooks.each do |notebook|
69
- if notebook.name == name.to_s.capitalize
70
- output = notebook
71
- end
72
- end
73
-
74
- output
75
- end
76
-
77
- def notes_by_notebook(name)
78
- output = {}
79
- notebooks.each do |notebook|
80
- if notebook.name.to_s == name.capitalize.to_s
81
- filter = ::Evernote::EDAM::NoteStore::NoteFilter.new
82
- filter.notebookGuid = notebook.guid
83
-
84
- result = ::Evernote::EDAM::NoteStore::NotesMetadataResultSpec.new
85
- result.includeTitle = true
86
- result.includeUpdated = true
87
- result.includeTagGuids = true
88
-
89
- #output = @@store.findNotesMetadata(@@developer_token, filter, 0, 400, result)
90
- notes(nil, notebook.guid).notes.each do |note|
91
- output[note.guid] = @@store.getNoteContent(@@developer_token, note.guid)
92
- end
93
- end
94
- end
95
-
96
- output
97
- end
98
-
99
- def notebooks_by_stack(stack)
100
- output = {}
101
- notebooks.each do |notebook|
102
- if notebook.stack == stack
103
- #output[notebook.name] = []
104
-
105
- filter = ::Evernote::EDAM::NoteStore::NoteFilter.new
106
- filter.notebookGuid = notebook.guid
107
-
108
- result = ::Evernote::EDAM::NoteStore::NotesMetadataResultSpec.new
109
- result.includeTitle = true
110
- result.includeUpdated = true
111
- result.includeTagGuids = true
112
-
113
- notes = @@store.findNotesMetadata(@@developer_token, filter, 0, 400, result)
114
- output[notebook.name] = notes
115
- end
116
- end
117
-
118
- output
119
- end
120
-
121
- def find_note(title_filter = nil, notebook_filter = nil)
122
- filter = ::Evernote::EDAM::NoteStore::NoteFilter.new
123
- filter.words = "intitle:#{title_filter}" if title_filter
124
- filter.notebookGuid = notebook_filter if notebook_filter
125
-
126
- @@store.findNotes(@@developer_token, filter, nil, 1)
127
- end
128
-
129
- def notes(title_filter = nil, notebook_filter = nil)
130
- filter = ::Evernote::EDAM::NoteStore::NoteFilter.new
131
- filter.words = "intitle:#{title_filter}" if title_filter
132
- filter.notebookGuid = notebook_filter if notebook_filter
133
-
134
- @@store.findNotes(@@developer_token, filter, nil, 300)
135
- end
136
-
137
- def note_exists(requested_date = DateTime.now)
138
- results = Helper::Results.new
139
- tmpl = date_templates(requested_date)
140
- template = tmpl[command]
141
- note = find_note(template)
142
-
143
- # Evernote's search matches things like the following, so we have to get
144
- # more specific
145
- # Daily Log [July 3 - F] == Daily Log [July 10 - F]
146
- if note.totalNotes > 0
147
- note.notes.each do |n|
148
- results.add(n.title != template)
149
- end
150
- else
151
- results.add(true)
152
- end
153
-
154
- results.should_eval_to(false)
155
- end
156
-
157
- def create_note(title = command.capitalize, body = template_contents, p_notebook_name = nil, file = nil, share_note = false, created_on = nil)
158
- # final output
159
- output = {}
160
-
161
- tmpl = date_templates
162
- title = tmpl[title]
163
-
164
- # Create note object
165
- our_note = ::Evernote::EDAM::Type::Note.new
166
- our_note.resources = []
167
- our_note.tagNames = []
168
-
169
- # only join when required
170
- if body.is_a? Array
171
- body = body.join
172
- end
173
-
174
- # a file was requested, lets prepare it for storage
175
- if !file.nil?
176
- media_resource = EvernoteENML.new(file)
177
- body.concat(media_resource.embeddable_element)
178
- our_note.resources << media_resource.element
179
- end
180
-
181
- n_body = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
182
- n_body += "<!DOCTYPE en-note SYSTEM \"http://xml.evernote.com/pub/enml2.dtd\">"
183
- n_body += "<en-note>#{body}</en-note>"
184
-
185
- # setup note properties
186
- our_note.title = title
187
- our_note.content = n_body
188
- our_note.created = created_on if !created_on.nil?
189
-
190
- # properly tag logs
191
- case command
192
- when :Weekly
193
- our_note.tagNames << "week-#{::Time.now.strftime('%V').to_i}"
194
- when :Monthly
195
- our_note.tagNames << "month-#{::Time.now.strftime('%-m').to_i}"
196
- end
197
-
198
- if p_notebook_name.nil?
199
- parent_notebook = notebook_by_name
200
- else
201
- parent_notebook = notebook_by_name(p_notebook_name)
202
- end
203
-
204
- ## parent_notebook is optional; if omitted, default notebook is used
205
- if parent_notebook.is_a? ::Evernote::EDAM::Type::Notebook
206
- our_note.notebookGuid = parent_notebook.guid
207
- end
208
-
209
- ## Attempt to create note in Evernote account
210
- begin
211
- output[:note] = @@store.createNote(@@developer_token, our_note)
212
-
213
- if share_note
214
- shareKey = @@store.shareNote(@@developer_token, output[:note].guid)
215
- output[:share_url] = "https://#{@evernoteHost}/shard/#{@@shardId}/sh/#{output[:note].guid}/#{shareKey}"
216
- end
217
- rescue ::Evernote::EDAM::Error::EDAMUserException => edue
218
- ## Something was wrong with the note data
219
- ## See EDAMErrorCode enumeration for error code explanation
220
- ## http://dev.evernote.com/documentation/reference/Errors.html#Enum_EDAMErrorCode
221
- Notify.error "EDAMUserException: #{edue}\nCode #{edue.errorCode}: #{edue.parameter}"
222
- rescue ::Evernote::EDAM::Error::EDAMNotFoundException => ednfe
223
- ## Parent Notebook GUID doesn't correspond to an actual notebook
224
- Notify.error "EDAMNotFoundException: Invalid parent notebook GUID"
225
- end
226
-
227
- # A parent notebook object exists, otherwise it was saved to the default
228
- # notebook
229
- if parent_notebook.is_a? ::Evernote::EDAM::Type::Notebook
230
- Notify.success("#{parent_notebook.stack}/#{parent_notebook.name}/#{our_note.title} created")
231
- else
232
- Notify.success("DEFAULT_NOTEBOOK/#{our_note.title} created")
233
- end
234
-
235
- output
236
- end
237
-
238
- def create_deployment_note(requested_date)
239
- # final output
240
- output = {}
241
-
242
- requested_date = DateTime.now if requested_date.nil?
243
-
244
- # Create note object
245
- our_note = ::Evernote::EDAM::Type::Note.new
246
- our_note.resources = []
247
- our_note.tagNames = []
248
-
249
- # format output, expected format:
250
- # PR_DESCRIPTION (https://github.com/repo/repo/pull/PR_NUM)
251
- # - Created by GIT_USER
252
- # - Branch: GIT_BRANCH
253
- # - Merged by GIT_USER on 30/6/2015 @ 06:09:27pm
254
- # - Changes: https://github.com/repo/repo/pull/PR_NUM.diff
255
- # ============================================================
256
- # 1 PR(s) merged from 2015-06-30 18:00:00 to 2015-07-01 17:59:59
257
- # ============================================================
258
- body = JSON.parse(STDIN.gets).join
259
- body = body.gsub("\n", '<br />')
260
-
261
- n_body = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
262
- n_body += "<!DOCTYPE en-note SYSTEM \"http://xml.evernote.com/pub/enml2.dtd\">"
263
- n_body += "<en-note>#{body}</en-note>"
264
-
265
- # setup note properties
266
- tmpl = date_templates(requested_date)
267
- our_note.title = tmpl[NOTEBOOK_DEPLOYMENT]
268
- our_note.content = n_body
269
-
270
- parent_notebook = notebook_by_name(NOTEBOOK_DEPLOYMENT)
271
-
272
- # parent_notebook is optional; if omitted, default notebook is used
273
- if parent_notebook.is_a? ::Evernote::EDAM::Type::Notebook
274
- our_note.notebookGuid = parent_notebook.guid
275
- end
276
-
277
- # Attempt to create note in Evernote account
278
- begin
279
- output[:note] = @@store.createNote(@@developer_token, our_note)
280
- rescue ::Evernote::EDAM::Error::EDAMUserException => edue
281
- ##Something was wrong with the note data
282
- # See EDAMErrorCode enumeration for error code explanation
283
- # http://dev.evernote.com/documentation/reference/Errors.html#Enum_EDAMErrorCode
284
- Notify.error "EDAMUserException: #{edue}\nCode #{edue.errorCode}: #{edue.parameter}\nExtended:\n#{edue.inspect}"
285
- rescue ::Evernote::EDAM::Error::EDAMNotFoundException => ednfe
286
- # Parent Notebook GUID doesn't correspond to an actual notebook
287
- Notify.error "EDAMNotFoundException: Invalid parent notebook GUID"
288
- end
289
-
290
- # A parent notebook object exists, otherwise it was saved to the default
291
- # notebook
292
- Notify.success("#{parent_notebook.name}/#{our_note.title} created")
293
-
294
- output
295
- end
296
-
297
- def generate_stats
298
- {
299
- "Statistic description" => 9845.3894
300
- }
301
- end
302
-
303
- private
304
-
305
- # Legacy notes will have single/double character denotations for day of
306
- # week, this maps them.
307
- def day_of_week(arg_date = Date.today.strftime('%a'))
308
- case arg_date
309
- when 'Mon'
310
- :M
311
- when 'Tue'
312
- :Tu
313
- when 'Wed'
314
- :W
315
- when 'Thu'
316
- :Th
317
- when 'Fri'
318
- :F
319
- when 'Sat'
320
- :Sa
321
- when 'Sun'
322
- :Su
323
- end
324
- end
325
-
326
- def template_contents
327
- if Date.today.friday? && command == :Daily
328
- # Friday uses a slightly different template
329
- IO.readlines("#{Evertils::TEMPLATE_DIR}#{command}-friday.enml").join("").gsub!("\n", '')
330
- else
331
- IO.readlines("#{Evertils::TEMPLATE_DIR}#{command}.enml").join("").gsub!("\n", '')
332
- end
333
- end
334
-
335
- def date_templates(arg_date = DateTime.now)
336
- dow = day_of_week(arg_date.strftime('%a'))
337
- end_of_week = arg_date + 4 # days
338
-
339
- {
340
- :Daily => "Daily Log [#{arg_date.strftime('%B %-d')} - #{dow}]",
341
- :Weekly => "Weekly Log [#{arg_date.strftime('%B %-d')} - #{end_of_week.strftime('%B %-d')}]",
342
- :Monthly => "Monthly Log [#{arg_date.strftime('%B %Y')}]",
343
- :Deployments => "#{arg_date.strftime('%B %-d')} - #{dow}"
344
- }
345
- end
346
-
347
- # format command as required by this model
348
- def command
349
- $request.command.capitalize
350
- end
351
- end
352
- end
353
- end