sew 0.0.0 → 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.
Files changed (5) hide show
  1. checksums.yaml +4 -4
  2. data/bin/sew +42 -0
  3. data/lib/sew.rb +86 -1
  4. data/sew.gemspec +3 -0
  5. metadata +22 -5
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: ddd1e43d6ef08da79374dd52db678d7681eaa66a
4
- data.tar.gz: 96ad0273524644eeb7b57ab23be05af4aba8bef8
3
+ metadata.gz: bbd38e4fef9c18d3d7887846e2bb9b4416ca8b04
4
+ data.tar.gz: '08565ff4fc5003f45b38bfdc9ded55d09b092d0a'
5
5
  SHA512:
6
- metadata.gz: 5a5a56cee9ce2c5c1f29562b7e1397adc714d25a8af8ab08972923d2192b468a4b7980fde2003f4d6d2154a7e0e6cd00d7a28014e834b99963bbd9a19c1ac280
7
- data.tar.gz: e9aeb88fec9d6ea18dd89efdec10cf1d0dc5fca0b70499bb41cf562057a918b8290d87cb4a425b83166996664915861c725e21e2829aa0467f202b8ab004f8a2
6
+ metadata.gz: c4a358f2be9afac9d2b1129990b1d30f92272606f21a1ee402928cee4918f80c315ab36d619b21052b95c202fac96bedb1a45bbb64e5ad020286897cc6e1bd63
7
+ data.tar.gz: 0b545a11def3fb7aae3933c1374b111e1741fb66ba31a461a0c667b5a586d59c8a388fce782cfdf89bd3524294a4d13c72784e4057dd7cb6bc3e95929d580e1b
data/bin/sew ADDED
@@ -0,0 +1,42 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ help = <<-EOS
4
+ SEW(1)
5
+
6
+ NAME
7
+ sew -- Static, Elegant Websites
8
+
9
+ SYNOPSIS
10
+ sew COMMAND
11
+
12
+ DESCRIPTION
13
+ Use this command line tool to build static websites. The
14
+ following commands are available:
15
+
16
+ build
17
+ build the site, placing in the './build' directory.
18
+
19
+ clean
20
+ remove the './build' directory.
21
+
22
+ serve
23
+ serve the './build' directory after a fresh build.
24
+
25
+ AUTHOR
26
+ Philip Poots
27
+
28
+ SEE ALSO
29
+ https://github.com/pootsbook/sew
30
+ EOS
31
+
32
+ require "sew"
33
+
34
+ COMMANDS = %w(build clean serve)
35
+ command = ARGV.shift
36
+
37
+ unless COMMANDS.include?(arg)
38
+ puts help
39
+ exit
40
+ end
41
+
42
+ Sew.send(arg)
data/lib/sew.rb CHANGED
@@ -1,3 +1,88 @@
1
+ require "fileutils"
2
+ require "ostruct"
3
+ require "webrick"
4
+ require "json"
5
+ require "mote"
6
+ require "yaml"
7
+
1
8
  class Sew
2
- VERSION = "0.0.0"
9
+ VERSION = "0.0.1"
10
+ BUILD_DIR = "build"
11
+ FILE_REGEX = /\A---\n(.+?)\n---\n(.*)/m
12
+
13
+ def self.version
14
+ puts VERSION
15
+ end
16
+
17
+ def self.build
18
+ clean
19
+ pages = Dir["[^_]*.mote"].map do |template|
20
+ Hash.new.tap do |page|
21
+ page[:id], page[:locale] = File.basename(template, ".mote").split(".")
22
+ frontmatter, page[:body] = File.read(template).match(FILE_REGEX)[1..2]
23
+ page.merge!(YAML.load(frontmatter))
24
+ page[:path] = "%s.html" % (page["path"]&.tr(".", "/") || page[:id])
25
+ page[:destination] = "./%s/%s/%s" % [BUILD_DIR, page[:locale], page[:path]]
26
+ page[:destination_dir] = page[:destination].split("/")[0..-2].join("/") # build this up gradually using existing info
27
+ end
28
+ end
29
+ data = Hash.new.tap do |dat|
30
+ Dir["*.yml"].map do |file|
31
+ dat[File.basename(file, ".yml")] = YAML.load_file(file)
32
+ end
33
+ end
34
+ site = OpenStruct.new(JSON.parse({ pages: pages, data: data }.to_json, object_class: OpenStruct))
35
+ context = Context.new(site)
36
+ site.pages.map(&:destination_dir).uniq.each(&FileUtils.method(:mkpath))
37
+ site.pages.each do |page|
38
+ File.open(page.destination, "w") do |file|
39
+ file.write context.render(page)
40
+ end
41
+ end
42
+ end
43
+
44
+ def self.clean
45
+ FileUtils.rm_rf(BUILD_DIR)
46
+ end
47
+
48
+ def self.serve
49
+ build
50
+ root = File.expand_path(BUILD_DIR)
51
+ server = WEBrick::HTTPServer.new(:Port => 4567, :DocumentRoot => root)
52
+ trap('INT') { server.shutdown }
53
+ server.start
54
+ end
55
+
56
+ class Context
57
+ attr_reader :site
58
+
59
+ def initialize(site)
60
+ if File.exist?(file = File.join(Dir.pwd, 'helper.rb'))
61
+ require file
62
+ extend Sew::Helper
63
+ end
64
+
65
+ @site= site
66
+ end
67
+
68
+ def render(page)
69
+ @site.page = page
70
+ @site.content = mote(page.body)
71
+
72
+ partial("_layout")
73
+ end
74
+
75
+ def mote(content)
76
+ Mote.parse(content, self, site.each_pair.map(&:first))[site]
77
+ end
78
+
79
+ def partial(template)
80
+ localized = sprintf("%s.%s.mote", template, site.page.locale)
81
+ if File.exist?(localized)
82
+ mote(File.read(localized))
83
+ else
84
+ mote(File.read(sprintf("%s.mote", template)))
85
+ end
86
+ end
87
+ end
3
88
  end
data/sew.gemspec CHANGED
@@ -8,9 +8,12 @@ Gem::Specification.new do |s|
8
8
  s.authors = ["Philip Poots"]
9
9
  s.email = ["philip.poots@gmail.com"]
10
10
  s.homepage = "http://github.com/pootsbook/sew"
11
+ s.license = "MIT"
11
12
  s.files = Dir[
12
13
  "LICENSE",
13
14
  "lib/**/*.rb",
14
15
  "*.gemspec"
15
16
  ]
17
+ s.executables.push("sew")
18
+ s.add_dependency "mote", "1.2.0"
16
19
  end
metadata CHANGED
@@ -1,27 +1,44 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sew
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.0
4
+ version: 0.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Philip Poots
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-06-27 00:00:00.000000000 Z
12
- dependencies: []
11
+ date: 2017-07-29 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: mote
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - '='
18
+ - !ruby/object:Gem::Version
19
+ version: 1.2.0
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - '='
25
+ - !ruby/object:Gem::Version
26
+ version: 1.2.0
13
27
  description: Sew stitches together static sites
14
28
  email:
15
29
  - philip.poots@gmail.com
16
- executables: []
30
+ executables:
31
+ - sew
17
32
  extensions: []
18
33
  extra_rdoc_files: []
19
34
  files:
20
35
  - LICENSE
36
+ - bin/sew
21
37
  - lib/sew.rb
22
38
  - sew.gemspec
23
39
  homepage: http://github.com/pootsbook/sew
24
- licenses: []
40
+ licenses:
41
+ - MIT
25
42
  metadata: {}
26
43
  post_install_message:
27
44
  rdoc_options: []