zettel 0.0.1 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. checksums.yaml +4 -4
  2. data/lib/zettel.rb +58 -5
  3. metadata +77 -6
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 117d2516a7a766a1b30821daed6275f1ba0595bdfb783622d1ea67a496d8f295
4
- data.tar.gz: ccf71b8a0ce3b4b5c79f5b307847a71f5a22f4e1dea49a4773f3723ddb142d99
3
+ metadata.gz: 9b846baeb6826639bd5b8de547f77191d98741e4887596c6c0e304df0439bf06
4
+ data.tar.gz: 481d21946c7eadccf17445eb250311b088dc4a0befd1861d4dc72a122291be57
5
5
  SHA512:
6
- metadata.gz: bb76035177cec40dcf834a97417b56f27362bfcd8653a05304a961fe9ab7ff04c6ee3f1e0cced27ff13bacd84cff5cbc6c4b7497769313ba8b730287834eb7f7
7
- data.tar.gz: 7c9f8182888c1b6ddbdaa9ab0eb62a9a74c88929c01942f22bd9b0686767fd775b54ce2069d8ef5b16a416cfc07afc0246bf7229a7bc1a919de12cb34356a81c
6
+ metadata.gz: 6d1bc7875599066347377e84b6d9ddd7a75873938f3fda54d105a91086663ac5c7afb810211814af0459442326dc503e7867d5952528972ab48e99f2de715b5d
7
+ data.tar.gz: 8c219b48d18e65c7e35aefcaa891d6f4282e6d55ca631f17c371ef7fa92f2a1f9b49e7401084f143e6020cff8903f01c0be4d5f36fcf00c6852a9cb1722e4f11
@@ -1,17 +1,70 @@
1
1
  require_relative 'zettel/version'
2
- require 'oga'
3
2
 
4
3
  module Zettel
5
4
  class Note
5
+ attr_reader :body, :frontmatter, :title, :time
6
6
  def initialize(note, filename = nil)
7
- body =
7
+ @raw_body = note
8
+
9
+ @frontmatter, body = extract_frontmatter(note)
10
+ title, @body = body.split("\n", 2).map(&:strip)
11
+ @title = title.gsub('#', '').strip
12
+ # @title = extract_title(body)
13
+
14
+ @filename = filename
15
+ if filename
16
+ @extension = File.extname(filename)
17
+ @identificator, @title = filename.gsub(/#{@extension}$/, '').split(" ", 2)
18
+ @title = @title&.unicode_normalize || ""
19
+ id_parts = @identificator.split('.')
20
+ raise "Strange id - has more than two parts: #{id_parts}" if id_parts.size > 2
21
+
22
+ @timestamp, @ordering = id_parts.reverse
23
+
24
+ @ordering =~ /(\d+)([a-z\d]+)?/
25
+ @leading_number = $1
26
+ @following_number = $2
27
+
28
+ @timestamp, @temporary_sign = @timestamp.split('_').reverse
29
+ @time = created_at(@timestamp)
30
+ end
8
31
  end
9
32
 
10
33
  private
11
34
 
12
- def extract_h1(html)
13
- document = Oga.parse_xml(html)
14
- document.at_xpath('/h1[1]/text()').text rescue nil
35
+ def created_at(timestamp)
36
+ begin
37
+ year = 2000 + timestamp[0..1].to_i
38
+ month = timestamp[2..3].to_i
39
+ day = timestamp[4..5].to_i
40
+ hour = timestamp[6..7].to_i
41
+ minutes = timestamp[8..9].to_i
42
+ seconds = timestamp[10..11]&.to_i
43
+
44
+ Time.new(year, month, day, hour, minutes, seconds)
45
+ rescue
46
+ nil
47
+ end
48
+ end
49
+
50
+ def extract_title(md)
51
+
52
+ end
53
+
54
+ def extract_frontmatter(content)
55
+ front_pattern = /\A(---\r?\n(.*?)\n?^---\s*$\n?)/m
56
+ rear_pattern = /(---\r?\n(.*?)\n?^---)\n*\s*\z/m
57
+
58
+ result = content =~ front_pattern || content =~ rear_pattern
59
+
60
+ return [{}, content] unless result
61
+
62
+ fm = YAML.load($2)
63
+ cn = content.sub($1, "")
64
+
65
+ return [{}, cn] unless fm
66
+
67
+ [fm, cn]
15
68
  end
16
69
  end
17
70
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: zettel
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ivan Nemytchenko
@@ -11,21 +11,92 @@ cert_chain: []
11
11
  date: 2020-09-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: oga
14
+ name: bundler
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '3.0'
20
- type: :runtime
19
+ version: '2.0'
20
+ type: :development
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: '3.0'
26
+ version: '2.0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: 12.3.3
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: 12.3.3
41
+ - !ruby/object:Gem::Dependency
42
+ name: minitest
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '5.0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '5.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: pry-byebug
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '3.9'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '3.9'
69
+ - !ruby/object:Gem::Dependency
70
+ name: minitest-power_assert
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '0.3'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '0.3'
83
+ - !ruby/object:Gem::Dependency
84
+ name: test_bench
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '1.2'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '1.2'
27
97
  description:
28
- email:
98
+ email:
99
+ - nemytchenko@gmail.com
29
100
  executables: []
30
101
  extensions: []
31
102
  extra_rdoc_files: []