archival 0.0.4 → 0.0.5

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 71c5bb3b87870dd8146038f624251b7a9ef351a7d69f8da16c214c91ea740cfb
4
- data.tar.gz: 6978ae618a2e5312178e5c0d1eb7174c13f3ef0512d0ef31d83f5012e0bd9712
3
+ metadata.gz: 7c29406fcec39c52b6876b805dba5509d6f43da5805944a344b2c771214cd8ed
4
+ data.tar.gz: 7319f9d6dace6b20c57e318d4df1c4dc80c1bd67673cee1b37d9a17ba35f823b
5
5
  SHA512:
6
- metadata.gz: df27c765403ac93aa5bd762ca7693b589aa86a0a80e31a93226fce2a0a756f2167417036cd76e4c96fda55071f3af92884628ac56f2c42bac8995a799432c32d
7
- data.tar.gz: 4e785cf1c9bc97a152a737bbc03da981a65b8ea68e0b98fe6fc71196da82fbe928170c983f4dd11a857a9b51c4a1e854f268c42137c184ce15312e4dc9f5cc72
6
+ metadata.gz: e05e6573f3e580d3a364826b7fd604559f2513e609a5436ba4170d606112d913e91d3cc0ec5498f4e0c418212b85068d7d859829030ee8b113a8909b04020e64
7
+ data.tar.gz: 8c227320c6d961595b5ce545559df4cdddf42e1d27819c1e5013b1e8189932bb50b4047e47bc5f85c8af1b0109a9b582063e487fb926132248d766b19fc98498
data/archival.gemspec CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = 'archival'
5
- s.version = '0.0.4'
5
+ s.version = '0.0.5'
6
6
  s.summary = 'An incredibly simple CMS for durable websites'
7
7
  s.description = 'https://jesseditson.com/the-simplest-cms-part-1'
8
8
  s.authors = ['Jesse Ditson']
@@ -24,5 +24,6 @@ Gem::Specification.new do |s|
24
24
 
25
25
  s.add_dependency 'liquid', '~> 5.1.0'
26
26
  s.add_dependency 'listen', '~> 3.7.0'
27
+ s.add_dependency 'redcarpet', '~> 3.5.1'
27
28
  s.add_dependency 'tomlrb', '~> 2.0.1'
28
29
  end
data/bin/redcarpet ADDED
@@ -0,0 +1,29 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ #
5
+ # This file was generated by Bundler.
6
+ #
7
+ # The application 'redcarpet' is installed as part of a gem, and
8
+ # this file is here to facilitate running it.
9
+ #
10
+
11
+ require "pathname"
12
+ ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../../Gemfile",
13
+ Pathname.new(__FILE__).realpath)
14
+
15
+ bundle_binstub = File.expand_path("../bundle", __FILE__)
16
+
17
+ if File.file?(bundle_binstub)
18
+ if File.read(bundle_binstub, 300) =~ /This file was generated by Bundler/
19
+ load(bundle_binstub)
20
+ else
21
+ abort("Your `bin/bundle` was not generated by Bundler, so this binstub cannot run.
22
+ Replace `bin/bundle` by running `bundle binstubs bundler --force`, then run this command again.")
23
+ end
24
+ end
25
+
26
+ require "rubygems"
27
+ require "bundler/setup"
28
+
29
+ load Gem.bin_path("redcarpet", "redcarpet")
@@ -3,6 +3,7 @@
3
3
  require 'liquid'
4
4
  require 'tomlrb'
5
5
  require 'tags/layout'
6
+ require 'redcarpet'
6
7
 
7
8
  Liquid::Template.error_mode = :strict
8
9
  Liquid::Template.register_tag('layout', Layout)
@@ -13,23 +14,33 @@ module Archival
13
14
 
14
15
  def initialize(config, *_args)
15
16
  @config = config
17
+ @markdown = Redcarpet::Markdown.new(
18
+ Redcarpet::Render::HTML.new(prettify: true,
19
+ hard_wrap: true), no_intra_emphasis: true,
20
+ fenced_code_blocks: true,
21
+ autolink: true,
22
+ strikethrough: true,
23
+ underline: true
24
+ )
16
25
  refresh_config
17
26
  end
18
27
 
19
28
  def refresh_config
20
29
  @file_system = Liquid::LocalFileSystem.new(
21
- @config.root, '%s.liquid'
30
+ File.join(@config.root, @config.pages_dir), '%s.liquid'
22
31
  )
23
32
  @variables = {}
24
33
  @object_types = {}
25
34
  @page_templates = {}
26
35
 
27
- Liquid::Template.file_system = @file_system
36
+ Liquid::Template.file_system = Liquid::LocalFileSystem.new(
37
+ File.join(@config.root, @config.pages_dir), '_%s.liquid'
38
+ )
28
39
 
29
40
  objects_definition_file = File.join(@config.root,
30
41
  'objects.toml')
31
42
  if File.file? objects_definition_file
32
- @object_types = read_toml(objects_definition_file)
43
+ @object_types = Tomlrb.load_file(objects_definition_file)
33
44
  end
34
45
 
35
46
  update_pages
@@ -61,10 +72,7 @@ module Archival
61
72
  if entry.end_with?('.liquid') && !(entry.start_with? '_')
62
73
  page_name = File.basename(entry,
63
74
  '.liquid')
64
- template_file = File.join(
65
- @config.pages_dir,
66
- add_prefix.call(page_name)
67
- )
75
+ template_file = add_prefix.call(page_name)
68
76
  content = @file_system.read_template_file(template_file)
69
77
  content += dev_mode_content if @config.dev_mode
70
78
  @page_templates[add_prefix.call(page_name)] =
@@ -81,30 +89,48 @@ module Archival
81
89
 
82
90
  def do_update_objects(dir)
83
91
  objects = {}
84
- @object_types.each do |name, _definition|
85
- objects[name] = []
92
+ @object_types.each do |name, definition|
93
+ objects[name] = {}
86
94
  obj_dir = File.join(dir, name)
87
95
  if File.directory? obj_dir
88
96
  Dir.foreach(obj_dir) do |file|
89
97
  if file.end_with? '.toml'
90
- object = read_toml(File.join(
91
- obj_dir, file
92
- ))
98
+ object = Tomlrb.load_file(File.join(
99
+ obj_dir, file
100
+ ))
93
101
  object[:name] =
94
102
  File.basename(file, '.toml')
95
- objects[name].push object
103
+ objects[name][object[:name]] = parse_object(object, definition)
96
104
  end
97
105
  end
98
106
  end
99
- objects[name] = objects[name].sort do |a, b|
100
- (a['order'] || a[:name]).to_s <=> (b['order'] || b[:name]).to_s
101
- end
107
+ objects[name] = sort_objects(objects[name])
102
108
  end
103
109
  @variables['objects'] = objects
104
110
  end
105
111
 
106
- def read_toml(file_path)
107
- Tomlrb.load_file(file_path)
112
+ def sort_objects(objects)
113
+ # Since objects are hashes but we'd like them to be iterable based on
114
+ # arbitrary "order" keys, and in ruby hashes enumerate in insert order,
115
+ # we just need to re-insert in the correct order.
116
+ sorted_keys = objects.sort_by do |name, obj|
117
+ obj['order'].to_s || name
118
+ end
119
+ sorted_objects = {}
120
+ sorted_keys.each do |d|
121
+ sorted_objects[d[0]] = d[1]
122
+ end
123
+ sorted_objects
124
+ end
125
+
126
+ def parse_object(object, definition)
127
+ definition.each do |name, type|
128
+ case type
129
+ when 'markdown'
130
+ object[name] = @markdown.render(object[name]) if object[name]
131
+ end
132
+ end
133
+ object
108
134
  end
109
135
 
110
136
  def set_var(name, value)
@@ -129,7 +129,7 @@ module Archival
129
129
  end
130
130
  # warn "Unmasked the data: #{unmasked_data.inspect}"
131
131
 
132
- unmasked_data.to_s.pack('C*').force_encoding('utf-8')
132
+ unmasked_data.pack('C*').force_encoding('utf-8')
133
133
  end
134
134
 
135
135
  def ws_sendmessage(message)
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Archival
4
- VERSION = '0.0.4'
4
+ VERSION = '0.0.5'
5
5
  end
data/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "archival",
3
- "version": "0.0.4",
3
+ "version": "0.0.5",
4
4
  "description": "An incredibly simple CMS for durable websites",
5
5
  "bin": "build.rb",
6
6
  "directories": {
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: archival
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4
4
+ version: 0.0.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jesse Ditson
@@ -38,6 +38,20 @@ dependencies:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: 3.7.0
41
+ - !ruby/object:Gem::Dependency
42
+ name: redcarpet
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: 3.5.1
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: 3.5.1
41
55
  - !ruby/object:Gem::Dependency
42
56
  name: tomlrb
43
57
  requirement: !ruby/object:Gem::Requirement
@@ -76,6 +90,7 @@ files:
76
90
  - bin/ldiff
77
91
  - bin/listen
78
92
  - bin/rake
93
+ - bin/redcarpet
79
94
  - bin/rspec
80
95
  - bin/rubocop
81
96
  - bin/ruby-parse