From 4f949558e20767fc88acd18e523c2e95a4173475 Mon Sep 17 00:00:00 2001 From: Adrian Short Date: Mon, 24 Sep 2018 20:56:47 +0100 Subject: [PATCH] First commit --- .gitignore | 9 +++++++ Gemfile | 4 +++ README.md | 35 ++++++++++++++++++++++++ Rakefile | 2 ++ bin/console | 14 ++++++++++ bin/setup | 8 ++++++ lib/petrify.rb | 60 ++++++++++++++++++++++++++++++++++++++++++ lib/petrify/version.rb | 3 +++ petrify.gemspec | 35 ++++++++++++++++++++++++ 9 files changed, 170 insertions(+) create mode 100644 .gitignore create mode 100644 Gemfile create mode 100644 README.md create mode 100644 Rakefile create mode 100755 bin/console create mode 100755 bin/setup create mode 100644 lib/petrify.rb create mode 100644 lib/petrify/version.rb create mode 100644 petrify.gemspec diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..0cb6eeb --- /dev/null +++ b/.gitignore @@ -0,0 +1,9 @@ +/.bundle/ +/.yardoc +/Gemfile.lock +/_yardoc/ +/coverage/ +/doc/ +/pkg/ +/spec/reports/ +/tmp/ diff --git a/Gemfile b/Gemfile new file mode 100644 index 0000000..ddf5485 --- /dev/null +++ b/Gemfile @@ -0,0 +1,4 @@ +source "https://rubygems.org" + +# Specify your gem's dependencies in petrify.gemspec +gemspec diff --git a/README.md b/README.md new file mode 100644 index 0000000..787f74c --- /dev/null +++ b/README.md @@ -0,0 +1,35 @@ +# Petrify + +Welcome to your new gem! In this directory, you'll find the files you need to be able to package up your Ruby library into a gem. Put your Ruby code in the file `lib/petrify`. To experiment with that code, run `bin/console` for an interactive prompt. + +TODO: Delete this and the text above, and describe your gem + +## Installation + +Add this line to your application's Gemfile: + +```ruby +gem 'petrify' +``` + +And then execute: + + $ bundle + +Or install it yourself as: + + $ gem install petrify + +## Usage + +TODO: Write usage instructions here + +## Development + +After checking out the repo, run `bin/setup` to install dependencies. You can also run `bin/console` for an interactive prompt that will allow you to experiment. + +To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org). + +## Contributing + +Bug reports and pull requests are welcome on GitHub at https://github.com/[USERNAME]/petrify. diff --git a/Rakefile b/Rakefile new file mode 100644 index 0000000..43022f7 --- /dev/null +++ b/Rakefile @@ -0,0 +1,2 @@ +require "bundler/gem_tasks" +task :default => :spec diff --git a/bin/console b/bin/console new file mode 100755 index 0000000..1068dbf --- /dev/null +++ b/bin/console @@ -0,0 +1,14 @@ +#!/usr/bin/env ruby + +require "bundler/setup" +require "petrify" + +# You can add fixtures and/or initialization code here to make experimenting +# with your gem easier. You can also use a different console, if you like. + +# (If you use this, don't forget to add pry to your Gemfile!) +# require "pry" +# Pry.start + +require "irb" +IRB.start(__FILE__) diff --git a/bin/setup b/bin/setup new file mode 100755 index 0000000..dce67d8 --- /dev/null +++ b/bin/setup @@ -0,0 +1,8 @@ +#!/usr/bin/env bash +set -euo pipefail +IFS=$'\n\t' +set -vx + +bundle install + +# Do any other automated setup that you need to do here diff --git a/lib/petrify.rb b/lib/petrify.rb new file mode 100644 index 0000000..86afcc0 --- /dev/null +++ b/lib/petrify.rb @@ -0,0 +1,60 @@ +require 'haml' +require 'csv' +require 'logger' +require "petrify/version" + +module Petrify + @@output_dir = '_site' + @@working_dir = File.join(Dir.pwd, @@output_dir) + @@views_dir = 'views' + @@layout_fn = File.join(@@views_dir, 'layout.haml') + + # https://stackoverflow.com/questions/917566/ruby-share-logger-instance-among-module-classes#6768164 + @@log = Logger.new($stdout) + @@log.level = Logger::INFO + + def self.page(path_items, template, locals = {}) + dir = create_path(path_items) + fn = File.join(dir, 'index.html') + + # https://stackoverflow.com/questions/6125265/using-layouts-in-haml-files-independently-of-rails + html = Haml::Engine.new(File.read(@@layout_fn)).render do + Haml::Engine.new(File.read(File.join(@@views_dir, "#{template}.haml"))).render(Object.new, locals) + end + + File.write(fn, html) + @@log.info fn + # TODO - add page to sitemap.xml or sitemap.txt + # https://support.google.com/webmasters/answer/183668?hl=en&ref_topic=4581190 + end + + def self.csv(path_items, filename, data) + dir = create_path(path_items) + fn = File.join(dir, filename + '.csv') + + csv_string = CSV.generate do |csv| + csv << data.first.keys # header row + data.each { |row| csv << row.values } + end + + File.write(fn, csv_string) + @@log.info fn + end + + def self.setup + # Recursively delete working directory to ensure no redundant files are left behind from previous builds. + # FileUtils.rm_rf(@working_dir) + Dir.mkdir(@@working_dir) unless File.directory?(@@working_dir) + # Dir.chdir(@working_dir) + + # Copy `public` dir to output dir + FileUtils.copy_entry('public', @@working_dir) + end + + def self.create_path(path_items) + dir = File.join(@@output_dir, path_items) + FileUtils.mkdir_p(dir) + @@log.debug dir + dir + end +end diff --git a/lib/petrify/version.rb b/lib/petrify/version.rb new file mode 100644 index 0000000..b0bb4c8 --- /dev/null +++ b/lib/petrify/version.rb @@ -0,0 +1,3 @@ +module Petrify + VERSION = "0.1.0" +end diff --git a/petrify.gemspec b/petrify.gemspec new file mode 100644 index 0000000..5a6b693 --- /dev/null +++ b/petrify.gemspec @@ -0,0 +1,35 @@ +# coding: utf-8 +lib = File.expand_path("../lib", __FILE__) +$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib) +require "petrify/version" + +Gem::Specification.new do |spec| + spec.name = "petrify" + spec.version = Petrify::VERSION + spec.authors = ["Adrian Short"] + spec.email = [] + + spec.summary = %q{A data(base)-driven static site generator with Haml templates.} + #spec.description = %q{TODO: Write a longer description or delete this line.} + spec.homepage = "https://github.com/adrianshort/petrify/" + + # Prevent pushing this gem to RubyGems.org. To allow pushes either set the 'allowed_push_host' + # to allow pushing to a single host or delete this section to allow pushing to any host. + if spec.respond_to?(:metadata) + spec.metadata["allowed_push_host"] = "TODO: Set to 'http://mygemserver.com'" + else + raise "RubyGems 2.0 or newer is required to protect against " \ + "public gem pushes." + end + + spec.files = `git ls-files -z`.split("\x0").reject do |f| + f.match(%r{^(test|spec|features)/}) + end + spec.bindir = "exe" + spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) } + spec.require_paths = ["lib"] + + spec.add_development_dependency "bundler", "~> 1.15" + spec.add_development_dependency "rake", "~> 10.0" + spec.add_runtime_dependency "haml" +end