evertils 2.2.1 → 2.2.2
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 -1
- data/lib/evertils/action_runner.rb +4 -3
- data/lib/evertils/actions/group.rb +77 -0
- data/lib/evertils/actions/search.rb +77 -0
- data/lib/evertils/controllers/log.rb +13 -74
- data/lib/evertils/helpers/formatting.rb +12 -0
- data/lib/evertils/version.rb +1 -1
- data/lib/evertils.rb +3 -1
- metadata +3 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 68a35d3e301fe99661e1de9a629f967c806aada550e5b56ad779edce73705086
|
4
|
+
data.tar.gz: c43e863a87f630189d7589906b0bbdb9f8e7bf2c0f7dc0d78da77678abbe866c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 700050701d54012695a4ecea2506a56fc16a4f52f07c93c14ef08e3aa873be813713a24496f9b3e2b05cb4df780e4e4e73bf8e2c3cb134fc250653ebd9997139
|
7
|
+
data.tar.gz: 6a196a2186d41d3525d8a3aaf13fe5517096772f38166f0522446444468b1835b56610a534914f5990ab2c82733a706760c7760e75ccb52b3f5eb6117c5c56a3
|
data/README.md
CHANGED
@@ -18,7 +18,7 @@ See [this document](https://github.com/aapis/evertils/wiki/Logging-Specification
|
|
18
18
|
|Command|Description|Usage|
|
19
19
|
|:--------------|:-----------|:-------------|
|
20
20
|
|generate|Create notes from templates|`evertils generate daily`, `evertils generate morning`, `evertils generate monthly`|
|
21
|
-
|log|
|
21
|
+
|log|Interact with a note's content|`evertils log message "I am a message"`, `evertils log grep 2223`, `evertils log group`|
|
22
22
|
|
23
23
|
## Automation
|
24
24
|
|
@@ -6,15 +6,16 @@ module Evertils
|
|
6
6
|
|
7
7
|
def execute
|
8
8
|
case params.action
|
9
|
-
when nil
|
10
|
-
Notify.info 'Action not provided, creating new note...'
|
11
|
-
Action::Create.new(params)
|
12
9
|
when 'create'
|
13
10
|
Action::Create.new(params)
|
14
11
|
when 'create_multiple'
|
15
12
|
Action::CreateMultiple.new(params.notes)
|
16
13
|
when 'duplicate_previous'
|
17
14
|
Action::DuplicatePrevious.new(params)
|
15
|
+
when 'search'
|
16
|
+
Action::Search.new(params)
|
17
|
+
when 'group'
|
18
|
+
Action::Group.new(params)
|
18
19
|
else
|
19
20
|
Action::Default.new(action: action)
|
20
21
|
end
|
@@ -0,0 +1,77 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Evertils
|
4
|
+
module Action
|
5
|
+
class Group < Action::Base
|
6
|
+
Formatting = Evertils::Helper::Formatting
|
7
|
+
|
8
|
+
#
|
9
|
+
# @since 2.2.2
|
10
|
+
def initialize(args)
|
11
|
+
@note_helper = Evertils::Helper::Note.instance
|
12
|
+
@args = args
|
13
|
+
@note = @note_helper.find_note_by_grammar(grammar.to_s)
|
14
|
+
@api_helper = Evertils::Helper::ApiEnmlHandler.new(@config)
|
15
|
+
|
16
|
+
execute
|
17
|
+
end
|
18
|
+
|
19
|
+
private
|
20
|
+
|
21
|
+
#
|
22
|
+
# @since 2.2.2
|
23
|
+
def execute
|
24
|
+
return Notify.error('Note not found') if @note.entity.nil?
|
25
|
+
|
26
|
+
group_by
|
27
|
+
end
|
28
|
+
|
29
|
+
#
|
30
|
+
# @since 2.2.2
|
31
|
+
def grammar
|
32
|
+
terms = Grammar.new
|
33
|
+
terms.tags = {
|
34
|
+
day: Date.today.yday,
|
35
|
+
week: Date.today.cweek
|
36
|
+
}
|
37
|
+
terms.notebook = @args.notebook
|
38
|
+
terms.created = Date.new(Date.today.year, 1, 1).strftime('%Y%m%d')
|
39
|
+
terms
|
40
|
+
end
|
41
|
+
|
42
|
+
#
|
43
|
+
# @since 2.2.2
|
44
|
+
def group_by
|
45
|
+
grouped_results.each_pair do |job_id, rows|
|
46
|
+
Notify.note("#{Formatting.clean(job_id)} - #{rows.size} occurrences") unless job_id.nil?
|
47
|
+
|
48
|
+
rows.each { |row| Notify.info(Formatting.clean(row)) }
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
#
|
53
|
+
# @since 2.2.2
|
54
|
+
def search_nodes
|
55
|
+
xml = @api_helper.from_str(@note.entity.content)
|
56
|
+
target = xml.search('en-note').first
|
57
|
+
nodes = []
|
58
|
+
|
59
|
+
target.children.each do |child|
|
60
|
+
node = child.children.first.to_s
|
61
|
+
nodes.push(Formatting.clean(node)) unless node.empty? || node == '<br/>'
|
62
|
+
end
|
63
|
+
|
64
|
+
nodes
|
65
|
+
end
|
66
|
+
|
67
|
+
#
|
68
|
+
# @since 2.2.2
|
69
|
+
def grouped_results
|
70
|
+
search_nodes.group_by do |node|
|
71
|
+
match = /- (.*)? -/.match(node)
|
72
|
+
match[1] unless match.nil?
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
@@ -0,0 +1,77 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Evertils
|
4
|
+
module Action
|
5
|
+
class Search < Action::Base
|
6
|
+
Formatting = Evertils::Helper::Formatting
|
7
|
+
|
8
|
+
#
|
9
|
+
# @since 2.2.2
|
10
|
+
def initialize(args)
|
11
|
+
@note_helper = Evertils::Helper::Note.instance
|
12
|
+
@args = args
|
13
|
+
@note = @note_helper.find_note_by_grammar(grammar.to_s)
|
14
|
+
@api_helper = Evertils::Helper::ApiEnmlHandler.new(@config)
|
15
|
+
|
16
|
+
execute
|
17
|
+
end
|
18
|
+
|
19
|
+
private
|
20
|
+
|
21
|
+
#
|
22
|
+
# @since 2.2.2
|
23
|
+
def execute
|
24
|
+
return Notify.error('Note not found') if @note.entity.nil?
|
25
|
+
|
26
|
+
search_for(@args.term)
|
27
|
+
end
|
28
|
+
|
29
|
+
#
|
30
|
+
# @since 2.2.2
|
31
|
+
def grammar
|
32
|
+
terms = Grammar.new
|
33
|
+
terms.tags = {
|
34
|
+
day: Date.today.yday,
|
35
|
+
week: Date.today.cweek
|
36
|
+
}
|
37
|
+
terms.notebook = @args.notebook
|
38
|
+
terms.created = Date.new(Date.today.year, 1, 1).strftime('%Y%m%d')
|
39
|
+
terms
|
40
|
+
end
|
41
|
+
|
42
|
+
#
|
43
|
+
# @since 2.2.2
|
44
|
+
def search_for(text)
|
45
|
+
results = grep_results_for(text)
|
46
|
+
|
47
|
+
return Notify.error("No rows matched search query {#{text}}") if results.empty?
|
48
|
+
|
49
|
+
Notify.success("#{results.size} rows matched query {#{text}}")
|
50
|
+
results.each { |res| Notify.info(Formatting.clean(res)) }
|
51
|
+
end
|
52
|
+
|
53
|
+
#
|
54
|
+
# @since 2.2.2
|
55
|
+
def search_nodes
|
56
|
+
xml = @api_helper.from_str(@note.entity.content)
|
57
|
+
target = xml.search('en-note').first
|
58
|
+
nodes = []
|
59
|
+
|
60
|
+
target.children.each do |child|
|
61
|
+
node = child.children.first.to_s
|
62
|
+
nodes.push(Formatting.clean(node)) unless node.empty? || node == '<br/>'
|
63
|
+
end
|
64
|
+
|
65
|
+
nodes
|
66
|
+
end
|
67
|
+
|
68
|
+
#
|
69
|
+
# @since 2.2.2
|
70
|
+
def grep_results_for(text)
|
71
|
+
return search_nodes.select { |line| line.scan(text) } if text.is_a? Regexp
|
72
|
+
|
73
|
+
search_nodes.select { |line| line.include? text }
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
@@ -1,5 +1,7 @@
|
|
1
1
|
module Evertils
|
2
2
|
module Controller
|
3
|
+
Formatting = Evertils::Helper::Formatting
|
4
|
+
|
3
5
|
class Log < Controller::Base
|
4
6
|
WORDS_PER_LINE = 20
|
5
7
|
|
@@ -28,23 +30,21 @@ module Evertils
|
|
28
30
|
#
|
29
31
|
# @since 2.2.0
|
30
32
|
def grep(text = nil)
|
31
|
-
|
32
|
-
|
33
|
-
@note = @note_helper.find_note_by_grammar(grammar.to_s)
|
33
|
+
params = OpenStruct.new(term: text, action: 'search', notebook: 'Daily')
|
34
34
|
|
35
|
-
|
36
|
-
|
37
|
-
|
35
|
+
runner = ActionRunner.new
|
36
|
+
runner.params = params
|
37
|
+
runner.execute
|
38
38
|
end
|
39
39
|
|
40
40
|
#
|
41
41
|
# @since 2.2.0
|
42
|
-
def group
|
43
|
-
|
42
|
+
def group
|
43
|
+
params = OpenStruct.new(action: 'group', notebook: 'Daily')
|
44
44
|
|
45
|
-
|
46
|
-
|
47
|
-
|
45
|
+
runner = ActionRunner.new
|
46
|
+
runner.params = params
|
47
|
+
runner.execute
|
48
48
|
end
|
49
49
|
|
50
50
|
private
|
@@ -71,7 +71,7 @@ module Evertils
|
|
71
71
|
|
72
72
|
@note.entity.content = xml.to_s
|
73
73
|
|
74
|
-
Notify.success("Item logged at #{current_time}") if @note.update
|
74
|
+
Notify.success("Item logged at #{Formatting.current_time}") if @note.update
|
75
75
|
end
|
76
76
|
|
77
77
|
#
|
@@ -81,72 +81,11 @@ module Evertils
|
|
81
81
|
target = xml.search('en-note').first
|
82
82
|
|
83
83
|
text.each do |line|
|
84
|
-
target.add_child("<div>* #{current_time} - #{clean(line)}</div>")
|
84
|
+
target.add_child("<div>* #{Formatting.current_time} - #{Formatting.clean(line)}</div>")
|
85
85
|
end
|
86
86
|
|
87
87
|
xml
|
88
88
|
end
|
89
|
-
|
90
|
-
#
|
91
|
-
# @since 2.2.0
|
92
|
-
def search_for(text)
|
93
|
-
results = grep_results_for(text)
|
94
|
-
|
95
|
-
return Notify.error("No rows matched search query {#{text}}") if results.empty?
|
96
|
-
|
97
|
-
Notify.success("#{results.size} rows matched query {#{text}}")
|
98
|
-
results.each { |res| Notify.info(clean(res)) }
|
99
|
-
end
|
100
|
-
|
101
|
-
#
|
102
|
-
# @since 2.2.0
|
103
|
-
def group_by
|
104
|
-
grouped_results.each_pair do |job_id, rows|
|
105
|
-
Notify.note("#{clean(job_id)} - #{rows.size} occurrences") unless job_id.nil?
|
106
|
-
|
107
|
-
rows.each { |row| Notify.info(clean(row)) }
|
108
|
-
end
|
109
|
-
end
|
110
|
-
|
111
|
-
#
|
112
|
-
# @since 2.2.0
|
113
|
-
def search_nodes
|
114
|
-
xml = @api_helper.from_str(@note.entity.content)
|
115
|
-
target = xml.search('en-note').first
|
116
|
-
nodes = []
|
117
|
-
|
118
|
-
target.children.each do |child|
|
119
|
-
node = child.children.first.to_s
|
120
|
-
nodes.push(clean(node)) unless node.empty? || node == '<br/>'
|
121
|
-
end
|
122
|
-
|
123
|
-
nodes
|
124
|
-
end
|
125
|
-
|
126
|
-
#
|
127
|
-
# @since 2.2.0
|
128
|
-
def grouped_results
|
129
|
-
search_nodes.group_by do |node|
|
130
|
-
match = /- (.*)? -/.match(node)
|
131
|
-
match[1] unless match.nil?
|
132
|
-
end
|
133
|
-
end
|
134
|
-
|
135
|
-
#
|
136
|
-
# @since 2.2.0
|
137
|
-
def grep_results_for(text)
|
138
|
-
search_nodes.select { |line| line.include? text }
|
139
|
-
end
|
140
|
-
|
141
|
-
#
|
142
|
-
# @since 2.2.0
|
143
|
-
def clean(text)
|
144
|
-
text.delete("\n").gsub(' ', ' ')
|
145
|
-
end
|
146
|
-
|
147
|
-
def current_time
|
148
|
-
Time.now.strftime('%I:%M')
|
149
|
-
end
|
150
89
|
end
|
151
90
|
end
|
152
91
|
end
|
@@ -33,6 +33,18 @@ module Evertils
|
|
33
33
|
result
|
34
34
|
}
|
35
35
|
end
|
36
|
+
|
37
|
+
#
|
38
|
+
# @since 2.2.0
|
39
|
+
def self.clean(text)
|
40
|
+
text.delete("\n").gsub(' ', ' ')
|
41
|
+
end
|
42
|
+
|
43
|
+
#
|
44
|
+
# @since 2.2.1
|
45
|
+
def self.current_time
|
46
|
+
Time.now.strftime('%I:%M')
|
47
|
+
end
|
36
48
|
end
|
37
49
|
end
|
38
50
|
end
|
data/lib/evertils/version.rb
CHANGED
data/lib/evertils.rb
CHANGED
@@ -21,10 +21,13 @@ require 'evertils/kernel'
|
|
21
21
|
require 'evertils/version'
|
22
22
|
require 'evertils/base'
|
23
23
|
require 'evertils/type'
|
24
|
+
require 'evertils/helpers/formatting'
|
24
25
|
require 'evertils/action'
|
25
26
|
require 'evertils/action_runner'
|
26
27
|
require 'evertils/actions/default'
|
27
28
|
require 'evertils/actions/create'
|
29
|
+
require 'evertils/actions/search'
|
30
|
+
require 'evertils/actions/group'
|
28
31
|
require 'evertils/actions/create_multiple'
|
29
32
|
require 'evertils/actions/duplicate_previous'
|
30
33
|
require 'evertils/helpers/results'
|
@@ -37,7 +40,6 @@ require 'evertils/request'
|
|
37
40
|
require 'evertils/controller'
|
38
41
|
require 'evertils/controllers/render'
|
39
42
|
require 'evertils/router'
|
40
|
-
require 'evertils/helpers/formatting'
|
41
43
|
require 'evertils/helpers/evernote-enml'
|
42
44
|
require 'evertils/helpers/note'
|
43
45
|
require 'evertils/helpers/xml'
|
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: 2.2.
|
4
|
+
version: 2.2.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ryan Priebe
|
@@ -116,6 +116,8 @@ files:
|
|
116
116
|
- lib/evertils/actions/create_multiple.rb
|
117
117
|
- lib/evertils/actions/default.rb
|
118
118
|
- lib/evertils/actions/duplicate_previous.rb
|
119
|
+
- lib/evertils/actions/group.rb
|
120
|
+
- lib/evertils/actions/search.rb
|
119
121
|
- lib/evertils/base.rb
|
120
122
|
- lib/evertils/config.rb
|
121
123
|
- lib/evertils/controller.rb
|