Static Gen¶
Info
A static site generator built with Ruby.
How to use:
- π Clone the repo at
https://github.com/twhite96/static-gen-ruby.git
or with GitHub CLIgh repo clone twhite96/static-gen-ruby
- π Run:
bundle
to install dependencies. - π Have fun with it.
Motivation for this app¶
I wanted to show that I could build something, even if it was small, on my own, with little guidance.
Ben Halpern started a thread about his generator on DEV and I took his scaffold and ran with it.
π₯ Stack¶
Ruby and ruby-handlebars
ππ½ Wins¶
Just getting the script running is a win for me, as I am not a Ruby dev at all.
π Difficulties¶
Ruby is a whole other animal compared to JavaScript and React. No semicolons, defining different methods (Ruby is class based, so there are more methods than functions in this instance), etc. I spent a whole month stuck on what this method did:
build_string = base_html
.gsub("{{ head }}", "#{page_partial}")
.gsub("{{ seo }}", seo_html)
.gsub("{{ main }}", main_css)
.gsub("{{ dev }}", dev_html)
I figured out it was just generating strings in the files I passed to the .gsub
method.
There were others, and I plan on writing a full blog post.
πΆββοΈNext steps¶
Not much. I wanted it to be a full on blog generator but will need to sit on that for a bit.
β‘ Refactor β‘¶
Maybe DRYing it up a bit, but I like what I have, especially for a v1.
π Further reading¶
You can read it here: Building a Static Site Generator with Ruby.
β TODOs¶
- Finish reading Mustache docs
- Figure out if you want to publish a gem
- Figure out if you want to let the user create posts as YAML using this example: mustache/projects.mustache at 9fefaabd2b1e68ef8186a210af1f0e18ef48bb55 Β· mustache/mustache Β· GitHub and mustache/projects.yml at 9fefaabd2b1e68ef8186a210af1f0e18ef48bb55 Β· mustache/mustache Β· GitHub
- Learn more about publishing gems
- Learn more about bundler
- Write tests and mocks to see if the class renders the Mustache html template
- Decide if more classes and templates are necessary
β‘ UPDATE β‘:¶
Further progress on the project on my blog.