simple_note_parser 0.1.2 → 2.0.0
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/.gitignore +3 -0
- data/.ruby-version +1 -0
- data/Gemfile +1 -0
- data/Gemfile.lock +3 -1
- data/README.md +50 -13
- data/lib/simple_note_parser.rb +2 -59
- data/lib/simple_note_parser/base.rb +31 -0
- data/lib/simple_note_parser/organizer.rb +43 -0
- data/lib/simple_note_parser/processor.rb +50 -0
- data/lib/simple_note_parser/version.rb +2 -2
- metadata +7 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 283d4e0a12561fbb3abd8be9f0ac7a8fe66881f323e1a1fd126e042493974410
|
4
|
+
data.tar.gz: f724c4b9a0acd1653df3404c9ca3733b53bbabf7f6dd36a64063173743077969
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f7195682e205da44e01328b0aa89bf94f46ef87084f086fe6eaf0bd0e53bd5157e132b3b6f50fdc54c2ebb106a86717bef74231de5d89adef6f0abe62cd13c08
|
7
|
+
data.tar.gz: 667254781049a78e6e7389822d7154b09f0bb0f7c4621be1f43c88355a839c0c7e579ae547aedfcb50a4d37c689b759beb63999cc0f1df457856b8e3f6906104
|
data/.gitignore
CHANGED
data/.ruby-version
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
2.7.1
|
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,11 +1,12 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
simple_note_parser (0.
|
4
|
+
simple_note_parser (2.0.0)
|
5
5
|
|
6
6
|
GEM
|
7
7
|
remote: https://rubygems.org/
|
8
8
|
specs:
|
9
|
+
byebug (11.1.3)
|
9
10
|
minitest (5.14.0)
|
10
11
|
rake (12.3.2)
|
11
12
|
|
@@ -13,6 +14,7 @@ PLATFORMS
|
|
13
14
|
ruby
|
14
15
|
|
15
16
|
DEPENDENCIES
|
17
|
+
byebug (~> 11.1, >= 11.1.3)
|
16
18
|
minitest (~> 5.0)
|
17
19
|
rake (~> 12.0)
|
18
20
|
simple_note_parser!
|
data/README.md
CHANGED
@@ -1,6 +1,9 @@
|
|
1
1
|
# SimpleNoteParser
|
2
2
|
|
3
|
-
Organizes exported [Simplenote](https://app.simplenote.com/) data
|
3
|
+
Organizes and parse exported [Simplenote](https://app.simplenote.com/) data.
|
4
|
+
|
5
|
+
- Organize notes into directories based on the note's tag.
|
6
|
+
- Merge notes into a `csv` file.
|
4
7
|
|
5
8
|
## Installation
|
6
9
|
|
@@ -23,27 +26,61 @@ Or install it yourself as:
|
|
23
26
|
1. Export data from [Simplenote](https://simplenote.com/help/#export).
|
24
27
|
1. Unzip the file.
|
25
28
|
1. Open a new terminal window and change directories by navigating into the unzipped directory.
|
26
|
-
1. Run `gem install simple_note_parser
|
27
|
-
1. Run `irb` to start a new Ruby session. Once the prompt starts, run
|
29
|
+
1. Run `gem install simple_note_parser`.
|
30
|
+
1. Run `irb` to start a new Ruby session. Once the prompt starts, run `require "simple_note_parser"`.
|
28
31
|
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
32
|
+
Once you complete these steps, you can use `SimpleNoteParser::Organizer` or organize notes, or `SimpleNoteParser::Processor` to create a `csv` from the notes.
|
33
|
+
|
34
|
+
### SimpleNoteParser::Organizer
|
35
|
+
|
36
|
+
Organizes notes into directories based on the note's tag.
|
37
|
+
|
38
|
+
```ruby
|
39
|
+
SimpleNoteParser::Organizer.new(file: "./source/notes.json", destination: "./dist/organized-by-tags")
|
36
40
|
```
|
37
41
|
|
42
|
+
- Requires a `file` value. This is the `JSON` file exported by SimpleNote.
|
43
|
+
- Defaults to `./source/notes.json`.
|
44
|
+
- Requires a `destination` value. This is where the directories will be created.
|
45
|
+
- Defaults to `./dist/organized-by-tags`.
|
46
|
+
|
47
|
+
#### Usage
|
48
|
+
|
38
49
|
This will create a directory called `organized-by-tag` in the current directory which will contain additional directories based on each note's tag.
|
39
50
|
|
40
|
-
|
51
|
+
```console
|
52
|
+
> @notes = SimpleNoteParser::Organizer.new
|
53
|
+
> @notes.organize_by_tag
|
54
|
+
```
|
55
|
+
|
56
|
+
Optionally run `@notes.clean` to recursively remove the `organized-by-tag` directory.
|
57
|
+
|
58
|
+
### SimpleNoteParser::Processor
|
59
|
+
|
60
|
+
Merge notes into a `csv` file.
|
61
|
+
|
62
|
+
```ruby
|
63
|
+
SimpleNoteParser::Processor.new(file: "./source/notes.json", destination: "./dist", headers: %w[title content tags])
|
64
|
+
```
|
65
|
+
|
66
|
+
- Requires a `file` value. This is the `JSON` file exported by SimpleNote.
|
67
|
+
- Defaults to `./source/notes.json`.
|
68
|
+
- Requires a `destination` value. This is where the `csv` will be created.
|
69
|
+
- Defaults to `./dist`.
|
70
|
+
- Requires a `headers` value. This will be used as the header row in the `csv`.
|
71
|
+
- Defaults to `["title", "content", "tags"]`.
|
72
|
+
|
73
|
+
#### Usage
|
74
|
+
|
75
|
+
This will create a `csv` of notes called `notes.csv` in the destination directory.
|
41
76
|
|
42
77
|
```console
|
43
|
-
> @notes.
|
44
|
-
|
78
|
+
> @notes = SimpleNoteParser::Processor.new
|
79
|
+
> @notes.save_as_csv
|
45
80
|
```
|
46
81
|
|
82
|
+
Optionally run `@notes.clean` to remove the destination directory and `csv`.
|
83
|
+
|
47
84
|
## Development
|
48
85
|
|
49
86
|
After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake test` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
|
data/lib/simple_note_parser.rb
CHANGED
@@ -1,60 +1,3 @@
|
|
1
1
|
require "simple_note_parser/version"
|
2
|
-
require "
|
3
|
-
require "
|
4
|
-
class SimpleNoteParser
|
5
|
-
attr_accessor :file, :destination
|
6
|
-
|
7
|
-
def initialize(file = "./source/notes.json", destination = "./organized-by-tag")
|
8
|
-
@file = file
|
9
|
-
@destination = destination
|
10
|
-
end
|
11
|
-
|
12
|
-
def clean
|
13
|
-
FileUtils.rm_rf(destination)
|
14
|
-
end
|
15
|
-
|
16
|
-
def import
|
17
|
-
json_data = load_json_data(file)
|
18
|
-
notes = parse_json_data(json_data)
|
19
|
-
process_notes(notes)
|
20
|
-
end
|
21
|
-
|
22
|
-
private
|
23
|
-
|
24
|
-
def load_json_data(path)
|
25
|
-
file = File.open path
|
26
|
-
json_data = JSON.load file
|
27
|
-
end
|
28
|
-
|
29
|
-
def parse_json_data(json_data)
|
30
|
-
notes = json_data["activeNotes"]
|
31
|
-
end
|
32
|
-
|
33
|
-
def process_notes(notes)
|
34
|
-
notes.each do |note|
|
35
|
-
tags = note["tags"]
|
36
|
-
if tags.nil? || tags.empty?
|
37
|
-
path = "#{destination}/no-tags"
|
38
|
-
create_directory(path)
|
39
|
-
create_file(path, note)
|
40
|
-
else
|
41
|
-
tags.each do |tag|
|
42
|
-
path = "#{destination}/#{tag.downcase}"
|
43
|
-
create_directory(path)
|
44
|
-
create_file(path, note)
|
45
|
-
end
|
46
|
-
end
|
47
|
-
end
|
48
|
-
end
|
49
|
-
|
50
|
-
def create_directory(path)
|
51
|
-
FileUtils.mkdir_p(path) unless Dir.exist?(path)
|
52
|
-
end
|
53
|
-
|
54
|
-
def create_file(path, note)
|
55
|
-
first_line = note["content"].split("\r").first
|
56
|
-
name = first_line.downcase.strip.tr(" ", "-").gsub(/[^\w-]/, "")
|
57
|
-
content = note["content"]
|
58
|
-
File.open("#{path}/#{name}.txt", "w") { |f| f.write content }
|
59
|
-
end
|
60
|
-
end
|
2
|
+
require "simple_note_parser/organizer"
|
3
|
+
require "simple_note_parser/processor"
|
@@ -0,0 +1,31 @@
|
|
1
|
+
require "json"
|
2
|
+
require "fileutils"
|
3
|
+
module SimpleNoteParser
|
4
|
+
class Base
|
5
|
+
attr_accessor :file, :destination
|
6
|
+
|
7
|
+
def initialize(file: "./source/notes.json", destination: "./dist")
|
8
|
+
@file = file
|
9
|
+
@destination = destination
|
10
|
+
end
|
11
|
+
|
12
|
+
def clean
|
13
|
+
FileUtils.rm_rf(destination)
|
14
|
+
end
|
15
|
+
|
16
|
+
private
|
17
|
+
|
18
|
+
def load_json_data(path)
|
19
|
+
file = File.open path
|
20
|
+
JSON.load file
|
21
|
+
end
|
22
|
+
|
23
|
+
def parse_json_data(json_data)
|
24
|
+
json_data["activeNotes"]
|
25
|
+
end
|
26
|
+
|
27
|
+
def create_directory(path)
|
28
|
+
FileUtils.mkdir_p(path) unless Dir.exist?(path)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
require "simple_note_parser/base"
|
2
|
+
module SimpleNoteParser
|
3
|
+
class Organizer < SimpleNoteParser::Base
|
4
|
+
attr_accessor :file, :destination
|
5
|
+
|
6
|
+
def initialize(file: "./source/notes.json", destination: "./dist/organized-by-tags")
|
7
|
+
@file = file
|
8
|
+
@destination = destination
|
9
|
+
end
|
10
|
+
|
11
|
+
def organize_by_tag
|
12
|
+
json_data = load_json_data(file)
|
13
|
+
notes = parse_json_data(json_data)
|
14
|
+
process_notes(notes)
|
15
|
+
end
|
16
|
+
|
17
|
+
private
|
18
|
+
|
19
|
+
def process_notes(notes)
|
20
|
+
notes.each do |note|
|
21
|
+
tags = note["tags"]
|
22
|
+
if tags.nil? || tags.empty?
|
23
|
+
path = "#{destination}/no-tags"
|
24
|
+
create_directory(path)
|
25
|
+
create_file(path, note)
|
26
|
+
else
|
27
|
+
tags.each do |tag|
|
28
|
+
path = "#{destination}/#{tag.downcase}"
|
29
|
+
create_directory(path)
|
30
|
+
create_file(path, note)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
def create_file(path, note)
|
37
|
+
first_line = note["content"].split("\r").first
|
38
|
+
name = first_line.downcase.strip.tr(" ", "-").gsub(/[^\w-]/, "")
|
39
|
+
content = note["content"]
|
40
|
+
File.open("#{path}/#{name}.txt", "w") { |f| f.write content }
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
require "simple_note_parser/base"
|
2
|
+
require "csv"
|
3
|
+
|
4
|
+
module SimpleNoteParser
|
5
|
+
class Processor < SimpleNoteParser::Base
|
6
|
+
attr_accessor :file, :destination, :headers
|
7
|
+
|
8
|
+
def initialize(file: "./source/notes.json", destination: "./dist", headers: %w[title content tags])
|
9
|
+
@file = file
|
10
|
+
@destination = destination
|
11
|
+
@headers = headers
|
12
|
+
end
|
13
|
+
|
14
|
+
def save_as_csv
|
15
|
+
json_data = load_json_data(file)
|
16
|
+
notes = parse_json_data(json_data)
|
17
|
+
create_directory(destination)
|
18
|
+
create_csv
|
19
|
+
process_notes(notes)
|
20
|
+
end
|
21
|
+
|
22
|
+
private
|
23
|
+
|
24
|
+
def csv_path
|
25
|
+
destination + "/notes.csv"
|
26
|
+
end
|
27
|
+
|
28
|
+
def process_notes(notes)
|
29
|
+
CSV.open(csv_path, "wb", headers: true) do |csv|
|
30
|
+
csv << headers
|
31
|
+
notes.each do |note|
|
32
|
+
add_row_to_csv(note, csv)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
def add_row_to_csv(note, csv)
|
38
|
+
title = note["content"].split("\r").first
|
39
|
+
content = note["content"]
|
40
|
+
tags = note["tags"]
|
41
|
+
formatted_tags = tags.join(", ") unless tags.nil?
|
42
|
+
csv << [title, content, formatted_tags]
|
43
|
+
end
|
44
|
+
|
45
|
+
def create_csv
|
46
|
+
CSV.new(csv_path, headers: true)
|
47
|
+
end
|
48
|
+
|
49
|
+
end
|
50
|
+
end
|
@@ -1,3 +1,3 @@
|
|
1
|
-
|
2
|
-
VERSION = "0.
|
1
|
+
module SimpleNoteParser
|
2
|
+
VERSION = "2.0.0"
|
3
3
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: simple_note_parser
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 2.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Steve Polito
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-05-
|
11
|
+
date: 2020-05-14 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: Organizes exported Simplenote data into directories based on the note's
|
14
14
|
tag.
|
@@ -19,6 +19,7 @@ extensions: []
|
|
19
19
|
extra_rdoc_files: []
|
20
20
|
files:
|
21
21
|
- ".gitignore"
|
22
|
+
- ".ruby-version"
|
22
23
|
- ".travis.yml"
|
23
24
|
- Gemfile
|
24
25
|
- Gemfile.lock
|
@@ -28,6 +29,9 @@ files:
|
|
28
29
|
- bin/console
|
29
30
|
- bin/setup
|
30
31
|
- lib/simple_note_parser.rb
|
32
|
+
- lib/simple_note_parser/base.rb
|
33
|
+
- lib/simple_note_parser/organizer.rb
|
34
|
+
- lib/simple_note_parser/processor.rb
|
31
35
|
- lib/simple_note_parser/version.rb
|
32
36
|
- simple_note_parser.gemspec
|
33
37
|
homepage: https://github.com/stevepolitodesign/simple_note_parser
|
@@ -52,7 +56,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
52
56
|
- !ruby/object:Gem::Version
|
53
57
|
version: '0'
|
54
58
|
requirements: []
|
55
|
-
rubygems_version: 3.
|
59
|
+
rubygems_version: 3.1.2
|
56
60
|
signing_key:
|
57
61
|
specification_version: 4
|
58
62
|
summary: Parse notes from Simplenote
|