evertils 2.2.4 → 2.3.4
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 +1 -0
- data/evertils.gemspec +5 -4
- data/lib/evertils.rb +1 -0
- data/lib/evertils/actions/duplicate_previous.rb +9 -1
- data/lib/evertils/controller.rb +0 -2
- data/lib/evertils/controllers/change.rb +2 -0
- data/lib/evertils/controllers/config.rb +103 -0
- data/lib/evertils/controllers/log.rb +18 -8
- data/lib/evertils/router.rb +4 -4
- data/lib/evertils/version.rb +1 -1
- metadata +28 -13
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 0524e47cfd8ebc7a6a23a96aedc8a51db105d5c8069861e5d0b93210d422436b
|
|
4
|
+
data.tar.gz: b7e5b4f6ae11ffc9927a6aa8400296bcd7526e33050cb6f15b01ca28d4e681e3
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 55b1e6260cae3ac702a597ffd3525baef12025ad4a9ae9eaef1931480aa93124cf85f684fd25cf491a400d07674d42d84cdd95bbce9402f9d0aee20fabcf4a8d
|
|
7
|
+
data.tar.gz: f456baacfcf127453673234a562adc42f413502100723c5d2697a27cedd9ebca46dddb862e9e3af1c0d068087f51bed30b7a48d52a1f18265b1db2ed26ba1664
|
data/README.md
CHANGED
|
@@ -20,6 +20,7 @@ See [this document](https://github.com/aapis/evertils/wiki/Logging-Specification
|
|
|
20
20
|
|generate|Create notes from templates|`evertils generate daily`, `evertils generate morning`, `evertils generate monthly`|
|
|
21
21
|
|log|Interact with a note's content|`evertils log message "I am a message"`, `evertils log grep 2223`, `evertils log group`|
|
|
22
22
|
|change|Change the configured Evernote API token `evertils` is using|`evertils change token`|
|
|
23
|
+
|config|Send your configuration to a secret gist, great for portability|`evertils config push`, `evertils config pull`|
|
|
23
24
|
|
|
24
25
|
## Automation
|
|
25
26
|
|
data/evertils.gemspec
CHANGED
|
@@ -17,11 +17,12 @@ Gem::Specification.new do |s|
|
|
|
17
17
|
s.executables = 'evertils'
|
|
18
18
|
s.required_ruby_version = '>= 2.4.0'
|
|
19
19
|
|
|
20
|
-
s.add_runtime_dependency '
|
|
21
|
-
s.add_runtime_dependency 'mime-types', '~> 3.3.1'
|
|
20
|
+
s.add_runtime_dependency 'evertils-gist', '~> 5.1.2'
|
|
22
21
|
s.add_runtime_dependency 'evertils-common', '~> 0.3.7'
|
|
22
|
+
s.add_runtime_dependency 'mime-types', '~> 3.3.1'
|
|
23
23
|
s.add_runtime_dependency 'nokogiri', '~> 1.10.9'
|
|
24
|
+
s.add_runtime_dependency 'notifaction', '~> 0.4.4'
|
|
24
25
|
|
|
25
|
-
s.add_development_dependency
|
|
26
|
-
s.add_development_dependency
|
|
26
|
+
s.add_development_dependency 'bundler', '~> 1.10'
|
|
27
|
+
s.add_development_dependency 'rake', '~> 12.3.3'
|
|
27
28
|
end
|
data/lib/evertils.rb
CHANGED
|
@@ -26,11 +26,19 @@ module Evertils
|
|
|
26
26
|
terms.notebook = @args[:notebook]
|
|
27
27
|
terms.tags = {
|
|
28
28
|
day: (Date.today.yday - 1),
|
|
29
|
-
week:
|
|
29
|
+
week: week
|
|
30
30
|
}
|
|
31
31
|
terms.created = Date.new(Date.today.year, 1, 1).strftime('%Y%m%d')
|
|
32
32
|
terms
|
|
33
33
|
end
|
|
34
|
+
|
|
35
|
+
def week
|
|
36
|
+
this_week = Date.today.cweek
|
|
37
|
+
|
|
38
|
+
return this_week - 1 if Date.today.monday?
|
|
39
|
+
|
|
40
|
+
this_week
|
|
41
|
+
end
|
|
34
42
|
end
|
|
35
43
|
end
|
|
36
44
|
end
|
data/lib/evertils/controller.rb
CHANGED
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'yaml/store'
|
|
4
|
+
require 'fileutils'
|
|
5
|
+
|
|
6
|
+
module Evertils
|
|
7
|
+
module Controller
|
|
8
|
+
class Config < Controller::Base
|
|
9
|
+
def pre_exec
|
|
10
|
+
conf = contents_of('~/.evertils/config.yml')
|
|
11
|
+
@token = conf['gist_token'] unless conf['gist_token'].nil?
|
|
12
|
+
@updating = Gist.gist_exists?(@token)
|
|
13
|
+
# if the requested gist doesn't exist, ignore it and generate a new one
|
|
14
|
+
@token = nil unless @updating
|
|
15
|
+
|
|
16
|
+
Gist.login! unless has_auth_already?
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def push
|
|
20
|
+
options = {
|
|
21
|
+
public: false
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
options.merge!(update: @token) unless @token.nil?
|
|
25
|
+
|
|
26
|
+
resp = Gist.multi_gist(payload, options)
|
|
27
|
+
@token = resp['id'] if resp.key?('id')
|
|
28
|
+
|
|
29
|
+
Notify.success(message(resp['html_url'])) if store_token?
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def pull
|
|
33
|
+
# TODO: refactor this crap
|
|
34
|
+
files = Gist.download(@token)
|
|
35
|
+
|
|
36
|
+
FileUtils.mv(File.expand_path('~/.evertils'), File.expand_path('~/.evertils.old'))
|
|
37
|
+
FileUtils.mkdir_p(File.expand_path('~/.evertils/templates/type'))
|
|
38
|
+
|
|
39
|
+
dir = {}
|
|
40
|
+
t_pfx = '~/.evertils/templates/type'
|
|
41
|
+
c_pfx = '~/.evertils'
|
|
42
|
+
root_files = ['config.yml']
|
|
43
|
+
|
|
44
|
+
files.each_pair do |_, file|
|
|
45
|
+
dir["#{t_pfx}/#{file['filename']}"] = file['content'] unless file['filename'] == 'config.yml'
|
|
46
|
+
dir["#{c_pfx}/#{file['filename']}"] = file['content'] if root_files.include?(file['filename'])
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
dir.each_pair do |path, contents|
|
|
50
|
+
File.open(File.expand_path(path), 'w') { |f| f.write(contents) }
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
private
|
|
55
|
+
|
|
56
|
+
def message(url)
|
|
57
|
+
return "Gist updated - #{url}" if @updating
|
|
58
|
+
|
|
59
|
+
"Gist created - #{url}"
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
def payload
|
|
63
|
+
{
|
|
64
|
+
'config.yml' => contents_of('~/.evertils/config.yml').to_yaml,
|
|
65
|
+
}.merge(types)
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
def contents_of(file)
|
|
69
|
+
YAML.load_file(File.expand_path(file))
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
def types
|
|
73
|
+
types = {}
|
|
74
|
+
|
|
75
|
+
Dir[File.expand_path('~/.evertils/templates/type/*.yml')].each do |dir|
|
|
76
|
+
types["templates/type/#{dir.split('/').last}"] = contents_of(dir).to_yaml
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
types
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
def gist_authenticate
|
|
83
|
+
Gist.login!
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
def has_auth_already?
|
|
87
|
+
File.exist?(File.expand_path('~/.gist'))
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
def store_token?
|
|
91
|
+
store = YAML::Store.new(File.expand_path('~/.evertils/config.yml'))
|
|
92
|
+
yaml = contents_of('~/.evertils/config.yml')
|
|
93
|
+
|
|
94
|
+
store.transaction do
|
|
95
|
+
yaml.each_pair { |key, value| store[key] = value }
|
|
96
|
+
store['gist_token'] = @token
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
true
|
|
100
|
+
end
|
|
101
|
+
end
|
|
102
|
+
end
|
|
103
|
+
end
|
|
@@ -1,6 +1,13 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
module Evertils
|
|
2
4
|
module Controller
|
|
5
|
+
# Used to format output
|
|
3
6
|
Formatting = Evertils::Helper::Formatting
|
|
7
|
+
# Data structure for grep action options
|
|
8
|
+
GrepParams = Struct.new(:term, :action, :notebook)
|
|
9
|
+
# Data structure for group action options
|
|
10
|
+
GroupParams = Struct.new(:action, :notebook)
|
|
4
11
|
|
|
5
12
|
class Log < Controller::Base
|
|
6
13
|
WORDS_PER_LINE = 20
|
|
@@ -22,7 +29,7 @@ module Evertils
|
|
|
22
29
|
w.join(' ')
|
|
23
30
|
end
|
|
24
31
|
|
|
25
|
-
return Notify.error(
|
|
32
|
+
return Notify.error("Note not found for grammar '#{grammar}'") if @note.entity.nil?
|
|
26
33
|
|
|
27
34
|
modify_with(text_groups)
|
|
28
35
|
end
|
|
@@ -30,20 +37,16 @@ module Evertils
|
|
|
30
37
|
#
|
|
31
38
|
# @since 2.2.0
|
|
32
39
|
def grep(text = nil)
|
|
33
|
-
params = OpenStruct.new(term: text, action: 'search', notebook: 'Daily')
|
|
34
|
-
|
|
35
40
|
runner = ActionRunner.new
|
|
36
|
-
runner.params =
|
|
41
|
+
runner.params = GrepParams.new(text, 'search', 'Daily')
|
|
37
42
|
runner.execute
|
|
38
43
|
end
|
|
39
44
|
|
|
40
45
|
#
|
|
41
46
|
# @since 2.2.0
|
|
42
47
|
def group
|
|
43
|
-
params = OpenStruct.new(action: 'group', notebook: 'Daily')
|
|
44
|
-
|
|
45
48
|
runner = ActionRunner.new
|
|
46
|
-
runner.params =
|
|
49
|
+
runner.params = GroupParams.new('group', 'Daily')
|
|
47
50
|
runner.execute
|
|
48
51
|
end
|
|
49
52
|
|
|
@@ -79,9 +82,16 @@ module Evertils
|
|
|
79
82
|
def update_note_content_with(text)
|
|
80
83
|
xml = @api_helper.from_str(@note.entity.content)
|
|
81
84
|
target = xml.search('en-note').first
|
|
85
|
+
job_id = 0
|
|
86
|
+
job_id = text.first.split(' -').first.to_i unless text.first.scan('-').empty?
|
|
87
|
+
|
|
88
|
+
text.map! { |l| l.gsub("#{job_id} - ", '')}
|
|
82
89
|
|
|
83
90
|
text.each do |line|
|
|
84
|
-
|
|
91
|
+
child = "<div>* #{Formatting.current_time} -".dup
|
|
92
|
+
child.concat " #{job_id} -" unless job_id.zero?
|
|
93
|
+
child.concat " #{Formatting.clean(line)}</div>"
|
|
94
|
+
target.add_child(child)
|
|
85
95
|
end
|
|
86
96
|
|
|
87
97
|
xml
|
data/lib/evertils/router.rb
CHANGED
|
@@ -82,18 +82,18 @@ module Evertils
|
|
|
82
82
|
end
|
|
83
83
|
|
|
84
84
|
# checks output of gpg --list-keys for the presence of a specific GPG key
|
|
85
|
-
def
|
|
85
|
+
def verify_gpg_key
|
|
86
86
|
# TODO: replace with Open3
|
|
87
|
-
res = system("gpg --list-keys #{@config.get(:required, :
|
|
87
|
+
res = system("gpg --list-keys #{@config.get(:required, :gpg_key)} 2>/dev/null >/dev/null")
|
|
88
88
|
|
|
89
89
|
raise GpgException unless res
|
|
90
90
|
res
|
|
91
91
|
end
|
|
92
92
|
|
|
93
93
|
# checks output of ykman list to determine if the correct key is inserted
|
|
94
|
-
def
|
|
94
|
+
def verify_yubikey_serial
|
|
95
95
|
# TODO: replace with Open3
|
|
96
|
-
res = system("ykman list | grep #{@config.get(:required, :
|
|
96
|
+
res = system("ykman list | grep #{@config.get(:required, :yubikey_serial)} 2>/dev/null >/dev/null")
|
|
97
97
|
|
|
98
98
|
raise YubikeyException unless res
|
|
99
99
|
res
|
data/lib/evertils/version.rb
CHANGED
metadata
CHANGED
|
@@ -1,57 +1,57 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: evertils
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 2.
|
|
4
|
+
version: 2.3.4
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Ryan Priebe
|
|
8
|
-
autorequire:
|
|
8
|
+
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
11
|
date: 2017-10-10 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
|
-
name:
|
|
14
|
+
name: evertils-gist
|
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
|
16
16
|
requirements:
|
|
17
17
|
- - "~>"
|
|
18
18
|
- !ruby/object:Gem::Version
|
|
19
|
-
version:
|
|
19
|
+
version: 5.1.2
|
|
20
20
|
type: :runtime
|
|
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: 5.1.2
|
|
27
27
|
- !ruby/object:Gem::Dependency
|
|
28
|
-
name:
|
|
28
|
+
name: evertils-common
|
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
|
30
30
|
requirements:
|
|
31
31
|
- - "~>"
|
|
32
32
|
- !ruby/object:Gem::Version
|
|
33
|
-
version:
|
|
33
|
+
version: 0.3.7
|
|
34
34
|
type: :runtime
|
|
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.3.7
|
|
41
41
|
- !ruby/object:Gem::Dependency
|
|
42
|
-
name:
|
|
42
|
+
name: mime-types
|
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
|
44
44
|
requirements:
|
|
45
45
|
- - "~>"
|
|
46
46
|
- !ruby/object:Gem::Version
|
|
47
|
-
version:
|
|
47
|
+
version: 3.3.1
|
|
48
48
|
type: :runtime
|
|
49
49
|
prerelease: false
|
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
|
51
51
|
requirements:
|
|
52
52
|
- - "~>"
|
|
53
53
|
- !ruby/object:Gem::Version
|
|
54
|
-
version:
|
|
54
|
+
version: 3.3.1
|
|
55
55
|
- !ruby/object:Gem::Dependency
|
|
56
56
|
name: nokogiri
|
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -66,6 +66,20 @@ dependencies:
|
|
|
66
66
|
- - "~>"
|
|
67
67
|
- !ruby/object:Gem::Version
|
|
68
68
|
version: 1.10.9
|
|
69
|
+
- !ruby/object:Gem::Dependency
|
|
70
|
+
name: notifaction
|
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
|
72
|
+
requirements:
|
|
73
|
+
- - "~>"
|
|
74
|
+
- !ruby/object:Gem::Version
|
|
75
|
+
version: 0.4.4
|
|
76
|
+
type: :runtime
|
|
77
|
+
prerelease: false
|
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
79
|
+
requirements:
|
|
80
|
+
- - "~>"
|
|
81
|
+
- !ruby/object:Gem::Version
|
|
82
|
+
version: 0.4.4
|
|
69
83
|
- !ruby/object:Gem::Dependency
|
|
70
84
|
name: bundler
|
|
71
85
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -122,6 +136,7 @@ files:
|
|
|
122
136
|
- lib/evertils/config.rb
|
|
123
137
|
- lib/evertils/controller.rb
|
|
124
138
|
- lib/evertils/controllers/change.rb
|
|
139
|
+
- lib/evertils/controllers/config.rb
|
|
125
140
|
- lib/evertils/controllers/log.rb
|
|
126
141
|
- lib/evertils/controllers/render.rb
|
|
127
142
|
- lib/evertils/exceptions/gpg_exception.rb
|
|
@@ -145,7 +160,7 @@ homepage: http://rubygems.org/gems/evertils
|
|
|
145
160
|
licenses:
|
|
146
161
|
- MIT
|
|
147
162
|
metadata: {}
|
|
148
|
-
post_install_message:
|
|
163
|
+
post_install_message:
|
|
149
164
|
rdoc_options: []
|
|
150
165
|
require_paths:
|
|
151
166
|
- lib
|
|
@@ -161,7 +176,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
161
176
|
version: '0'
|
|
162
177
|
requirements: []
|
|
163
178
|
rubygems_version: 3.0.8
|
|
164
|
-
signing_key:
|
|
179
|
+
signing_key:
|
|
165
180
|
specification_version: 4
|
|
166
181
|
summary: EN (heart) CLI
|
|
167
182
|
test_files: []
|