evertils 0.2.3 → 0.2.5

Sign up to get free protection for your applications and to get access to all the features.
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