Adrian Short 6 лет назад
Сommit
4f949558e2
9 измененных файлов: 170 добавлений и 0 удалений
  1. +9
    -0
      .gitignore
  2. +4
    -0
      Gemfile
  3. +35
    -0
      README.md
  4. +2
    -0
      Rakefile
  5. +14
    -0
      bin/console
  6. +8
    -0
      bin/setup
  7. +60
    -0
      lib/petrify.rb
  8. +3
    -0
      lib/petrify/version.rb
  9. +35
    -0
      petrify.gemspec

+ 9
- 0
.gitignore Просмотреть файл

@@ -0,0 +1,9 @@
/.bundle/
/.yardoc
/Gemfile.lock
/_yardoc/
/coverage/
/doc/
/pkg/
/spec/reports/
/tmp/

+ 4
- 0
Gemfile Просмотреть файл

@@ -0,0 +1,4 @@
source "https://rubygems.org"

# Specify your gem's dependencies in petrify.gemspec
gemspec

+ 35
- 0
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.

+ 2
- 0
Rakefile Просмотреть файл

@@ -0,0 +1,2 @@
require "bundler/gem_tasks"
task :default => :spec

+ 14
- 0
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__)

+ 8
- 0
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

+ 60
- 0
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

+ 3
- 0
lib/petrify/version.rb Просмотреть файл

@@ -0,0 +1,3 @@
module Petrify
VERSION = "0.1.0"
end

+ 35
- 0
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

Загрузка…
Отмена
Сохранить