kk 0.0.1
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 +7 -0
- data/.ruby-gemset +1 -0
- data/.ruby-version +1 -0
- data/Gemfile +1 -0
- data/Gemfile.lock +66 -0
- data/README.md +110 -0
- data/bin/kk +20 -0
- data/db/schema.rb +12 -0
- data/kk.gemspec +23 -0
- data/lib/kk.rb +8 -0
- data/lib/kk/entry.rb +18 -0
- metadata +125 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: f31a081bfd513dbb1e3c76f1b85c38e25797d1eb
|
4
|
+
data.tar.gz: 45b6f5b530d9cba626ee3ab0e0619da39203c04d
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 4d05a0dc8046d24165b5b643892cb6adf61b064a786e74fbd148b5abe927562668839148344196936fbedeb4ef1597b7a3ea003fed99f36879ba6e8c52e34691
|
7
|
+
data.tar.gz: 14dd1d5b266f2d8f954eceaa2736fa4a52a0c988fb829220bfd90c03417fd2dac2d0bd653e7bc5fbe8b9db1c0d82d100f2934ccf1711850d5cdfb43b54ff596a
|
data/.ruby-gemset
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
kk
|
data/.ruby-version
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
ruby-2.1.4
|
data/Gemfile
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
gemspec
|
data/Gemfile.lock
ADDED
@@ -0,0 +1,66 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
kk (0.0.1)
|
5
|
+
sequel (~> 4.16.0)
|
6
|
+
sqlite3 (~> 1.3.10)
|
7
|
+
|
8
|
+
GEM
|
9
|
+
remote: https://rubygems.org/
|
10
|
+
specs:
|
11
|
+
celluloid (0.16.0)
|
12
|
+
timers (~> 4.0.0)
|
13
|
+
coderay (1.1.0)
|
14
|
+
diff-lcs (1.2.5)
|
15
|
+
ffi (1.9.6)
|
16
|
+
formatador (0.2.5)
|
17
|
+
guard (2.8.0)
|
18
|
+
formatador (>= 0.2.4)
|
19
|
+
listen (~> 2.7)
|
20
|
+
lumberjack (~> 1.0)
|
21
|
+
pry (>= 0.9.12)
|
22
|
+
thor (>= 0.18.1)
|
23
|
+
guard-rspec (4.3.1)
|
24
|
+
guard (~> 2.1)
|
25
|
+
rspec (>= 2.14, < 4.0)
|
26
|
+
hitimes (1.2.2)
|
27
|
+
listen (2.7.11)
|
28
|
+
celluloid (>= 0.15.2)
|
29
|
+
rb-fsevent (>= 0.9.3)
|
30
|
+
rb-inotify (>= 0.9)
|
31
|
+
lumberjack (1.0.9)
|
32
|
+
method_source (0.8.2)
|
33
|
+
pry (0.10.1)
|
34
|
+
coderay (~> 1.1.0)
|
35
|
+
method_source (~> 0.8.1)
|
36
|
+
slop (~> 3.4)
|
37
|
+
rb-fsevent (0.9.4)
|
38
|
+
rb-inotify (0.9.5)
|
39
|
+
ffi (>= 0.5.0)
|
40
|
+
rspec (3.1.0)
|
41
|
+
rspec-core (~> 3.1.0)
|
42
|
+
rspec-expectations (~> 3.1.0)
|
43
|
+
rspec-mocks (~> 3.1.0)
|
44
|
+
rspec-core (3.1.7)
|
45
|
+
rspec-support (~> 3.1.0)
|
46
|
+
rspec-expectations (3.1.2)
|
47
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
48
|
+
rspec-support (~> 3.1.0)
|
49
|
+
rspec-mocks (3.1.3)
|
50
|
+
rspec-support (~> 3.1.0)
|
51
|
+
rspec-support (3.1.2)
|
52
|
+
sequel (4.16.0)
|
53
|
+
slop (3.6.0)
|
54
|
+
sqlite3 (1.3.10)
|
55
|
+
thor (0.19.1)
|
56
|
+
timers (4.0.1)
|
57
|
+
hitimes
|
58
|
+
|
59
|
+
PLATFORMS
|
60
|
+
ruby
|
61
|
+
|
62
|
+
DEPENDENCIES
|
63
|
+
guard (~> 2.8.0)
|
64
|
+
guard-rspec (~> 4.3.1)
|
65
|
+
kk!
|
66
|
+
rspec (~> 3.1.0)
|
data/README.md
ADDED
@@ -0,0 +1,110 @@
|
|
1
|
+
# kk - Personal diary/journaling/logging tool
|
2
|
+
|
3
|
+
kk is an ultra-lightweight tool for journaling, logging and
|
4
|
+
diarykeeping. It stores the journal in a sqlite3 database, ensuring
|
5
|
+
fast updates and searches even when the logging gets fairly
|
6
|
+
involved. kk is inspired by the awesome
|
7
|
+
[jrnl app](http://maebert.github.io/jrnl/), and my intention is to
|
8
|
+
make kk "scratch my own itch" for specialty needs like templates,
|
9
|
+
reporting and logging.
|
10
|
+
|
11
|
+
If all you need is a command-line journal app with tagging and simple
|
12
|
+
searching, you probably want to use jrnl.
|
13
|
+
|
14
|
+
# Feature Comparison with jrnl
|
15
|
+
|
16
|
+
This is a list of the key features of kk and jrnl so that I can
|
17
|
+
implement them using this document as a sort of "README-driven
|
18
|
+
development" guide.
|
19
|
+
|
20
|
+
| Feature | kk | jrnl |
|
21
|
+
|------------------------------------------+-----+------|
|
22
|
+
| Exists at all, in any way, shape or form | YES | yes |
|
23
|
+
| Add entries from the command line | YES | yes |
|
24
|
+
| Add journal entry with title and date | NO | yes |
|
25
|
+
| Show all journal entries | NO | yes |
|
26
|
+
| Convenient dates and times | NO | yes |
|
27
|
+
| Export to json | NO | yes |
|
28
|
+
| Search by date or date range | NO | yes |
|
29
|
+
| List tags | NO | yes |
|
30
|
+
| Add tags with @ from CLI | NO | yes |
|
31
|
+
| Search by tag | NO | yes |
|
32
|
+
| 256-bit AES Encryption | NO | yes |
|
33
|
+
| Portable by saving file to dropbox | NO | yes |
|
34
|
+
| Init config, db on startup if no db | NO | yes |
|
35
|
+
| Web server | NO | NO |
|
36
|
+
| CLI->browser capture for longer entries | NO | NO |
|
37
|
+
| Template support | NO | NO |
|
38
|
+
| Extra document data | NO | NO |
|
39
|
+
| Search by document data | NO | NO |
|
40
|
+
|
41
|
+
|
42
|
+
# Simple Usage Examples
|
43
|
+
|
44
|
+
|
45
|
+
kk Lunch. Went to favorite place.
|
46
|
+
# title: "Lunch", body: "Went to favorite place.", date: today, time: now
|
47
|
+
|
48
|
+
kk 3pm: Late lunch
|
49
|
+
# title: "Late lunch", body: nil, date: today, time: 3pm
|
50
|
+
|
51
|
+
kk yesterday: Tracked time for @work.
|
52
|
+
# title: "Tracked time for @work", body: nil, time: none, date: yesterday
|
53
|
+
|
54
|
+
|
55
|
+
# Template Support
|
56
|
+
|
57
|
+
I'm not sure yet how I want to tackle this, even to demonstrate how
|
58
|
+
I'd use it (a la "design by wishful thinking"), but in short I want to
|
59
|
+
create templates that let me quickly add new entries later. **These
|
60
|
+
examples will likely change!**
|
61
|
+
|
62
|
+
kk --templates
|
63
|
+
# -> list templates
|
64
|
+
|
65
|
+
kk %fbg title: "Fasting Blood Glucose", body: %1, glucose:i: %1, fasting:b: true
|
66
|
+
# -> Creates/updates template "fbg" so that it takes one value
|
67
|
+
# from the command-line and writes it as the body of the journal
|
68
|
+
# entry. It sets the title to "Fasting Blood Glucose", and then
|
69
|
+
# adds extra data fields "glucose" (integer, set to .to_i of %1)
|
70
|
+
# and "fasting" (bool, set to true). TOTALLY UNSURE if I even want
|
71
|
+
# to support special types here or if everything should just be
|
72
|
+
# strings. On one hand I could see it all going into a json blob
|
73
|
+
# in the database anyway; on the other hand if create objects that
|
74
|
+
# the database can understand I can sift and sort by those types
|
75
|
+
# rather than by strings, so 10 would come after 9 instead of
|
76
|
+
# between 1 and 2, etc.
|
77
|
+
|
78
|
+
kk %fbg 86
|
79
|
+
# -> Records a glucose entry of 86.
|
80
|
+
|
81
|
+
# Extra Document Data
|
82
|
+
|
83
|
+
An extension of the extra fields idea raised by the templating
|
84
|
+
thought. Ideally I want to all some kind of NoSQL-like data storage
|
85
|
+
and searching, like "Show me all the glucose logs that are fasting:
|
86
|
+
false" or "Show me the highest glucose entry in this date range". For
|
87
|
+
now I'm thinking of either a JSON blob field, or if I move to postgres
|
88
|
+
I can consider using an hstore column.
|
89
|
+
|
90
|
+
TODO: Give some serious thought to rolling the whole thing with PStore
|
91
|
+
or, even better, YAML::Store instead of sqlite. This would essentially
|
92
|
+
make the whole store a NoSQL-style database. It essentially returns a
|
93
|
+
giant hash so its use as a Key/Value store would be obvious. Expanding
|
94
|
+
it to a "proper" document database might require more tooling than
|
95
|
+
it's worth, dunno. Definitely have to store off my own indices, but I
|
96
|
+
might be able to aggregate the values into document objects if the
|
97
|
+
YAML store has a clean marshaling mechanism.
|
98
|
+
|
99
|
+
Do I want to go to the trouble of separating the data access from the
|
100
|
+
application? That means rolling a lot of the data access myself, sigh,
|
101
|
+
but would it be worth it to be able to switch from sqlite to
|
102
|
+
yaml/store?
|
103
|
+
|
104
|
+
(Another consideration is speed: I know sqlite3 is pretty fast, but
|
105
|
+
yaml store could end up implicitly creating objects for the entire
|
106
|
+
file every time I loaded it. The result would be a huge performance
|
107
|
+
hit once the journal got large. Food for thought. One option would be
|
108
|
+
to roll my own store somehow, but right now I think perhaps the best
|
109
|
+
option might be to use sqlite3 and roll as much of a key/value store
|
110
|
+
on top of it as I need, but only as I need it.)
|
data/bin/kk
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
# Load kk libs and connect to DB
|
4
|
+
require_relative '../lib/kk'
|
5
|
+
|
6
|
+
# Parse args and execute
|
7
|
+
entry = ARGV * ' '
|
8
|
+
time, msg = entry.split(/:/, 2)
|
9
|
+
|
10
|
+
now = DateTime.now
|
11
|
+
|
12
|
+
if msg.nil?
|
13
|
+
msg = time
|
14
|
+
time = now
|
15
|
+
end
|
16
|
+
|
17
|
+
title, body = msg.split(/\./, 2)
|
18
|
+
body ||= ""
|
19
|
+
|
20
|
+
Kk::Entry.create(title: title, body: body, entered_at: time, created_at: now, updated_at: now)
|
data/db/schema.rb
ADDED
@@ -0,0 +1,12 @@
|
|
1
|
+
# before running this, ensure that DB refers to the database we wanna modify...
|
2
|
+
|
3
|
+
DB.create_table :entries do
|
4
|
+
primary_key :id
|
5
|
+
String :title
|
6
|
+
String :body, text: true
|
7
|
+
DateTime :entered_at
|
8
|
+
DateTime :created_at
|
9
|
+
DateTime :updated_at
|
10
|
+
|
11
|
+
index :entered_at
|
12
|
+
end
|
data/kk.gemspec
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
Gem::Specification.new do |gem|
|
2
|
+
gem.name = 'kk'
|
3
|
+
gem.version = '0.0.1'
|
4
|
+
gem.date = '2014-11-05'
|
5
|
+
gem.summary = "Personal CLI/web diary/journaling tool"
|
6
|
+
gem.description = "Personal CLI/web diary/journaling tool with tagging, templates, and customizable data fields"
|
7
|
+
gem.authors = ["David Brady"]
|
8
|
+
gem.email = 'dbrady@shinybit.com'
|
9
|
+
gem.files = `git ls-files`.split($/)
|
10
|
+
gem.executables = gem.files.grep(%r{^bin/}).map {|f| File.basename(f) }
|
11
|
+
gem.test_files = gem.files.grep(%r{^(spec|test|features)/})
|
12
|
+
gem.require_paths = ["lib"]
|
13
|
+
gem.homepage = 'https://github.com/dbrady/kk'
|
14
|
+
gem.license = 'MIT'
|
15
|
+
|
16
|
+
gem.add_dependency "sqlite3", "~> 1.3"
|
17
|
+
gem.add_dependency "sequel", "~> 4.16"
|
18
|
+
|
19
|
+
gem.add_development_dependency "rspec", "~> 3.1"
|
20
|
+
gem.add_development_dependency "guard", "~> 2.8"
|
21
|
+
gem.add_development_dependency "guard-rspec", "~> 4.3"
|
22
|
+
|
23
|
+
end
|
data/lib/kk.rb
ADDED
data/lib/kk/entry.rb
ADDED
metadata
ADDED
@@ -0,0 +1,125 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: kk
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- David Brady
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2014-11-05 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: sqlite3
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1.3'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1.3'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: sequel
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '4.16'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '4.16'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rspec
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '3.1'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '3.1'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: guard
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '2.8'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '2.8'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: guard-rspec
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '4.3'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '4.3'
|
83
|
+
description: Personal CLI/web diary/journaling tool with tagging, templates, and customizable
|
84
|
+
data fields
|
85
|
+
email: dbrady@shinybit.com
|
86
|
+
executables:
|
87
|
+
- kk
|
88
|
+
extensions: []
|
89
|
+
extra_rdoc_files: []
|
90
|
+
files:
|
91
|
+
- ".ruby-gemset"
|
92
|
+
- ".ruby-version"
|
93
|
+
- Gemfile
|
94
|
+
- Gemfile.lock
|
95
|
+
- README.md
|
96
|
+
- bin/kk
|
97
|
+
- db/schema.rb
|
98
|
+
- kk.gemspec
|
99
|
+
- lib/kk.rb
|
100
|
+
- lib/kk/entry.rb
|
101
|
+
homepage: https://github.com/dbrady/kk
|
102
|
+
licenses:
|
103
|
+
- MIT
|
104
|
+
metadata: {}
|
105
|
+
post_install_message:
|
106
|
+
rdoc_options: []
|
107
|
+
require_paths:
|
108
|
+
- lib
|
109
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
110
|
+
requirements:
|
111
|
+
- - ">="
|
112
|
+
- !ruby/object:Gem::Version
|
113
|
+
version: '0'
|
114
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
115
|
+
requirements:
|
116
|
+
- - ">="
|
117
|
+
- !ruby/object:Gem::Version
|
118
|
+
version: '0'
|
119
|
+
requirements: []
|
120
|
+
rubyforge_project:
|
121
|
+
rubygems_version: 2.4.2
|
122
|
+
signing_key:
|
123
|
+
specification_version: 4
|
124
|
+
summary: Personal CLI/web diary/journaling tool
|
125
|
+
test_files: []
|