musako 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.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: b1e89edcaf30d27f7c24cabb5433aae5aea9fac8
4
+ data.tar.gz: 31f40c23fa7113b07bc565b2e209340de0e8ea8f
5
+ SHA512:
6
+ metadata.gz: d665cad8a4f331e0b6bb28224ca903b991e1e0baf1032ab4289d1f0fd8cbefaa954ee7dcf922f5fec4c0e2458b94398254e35d9bfb645fc3ed5efff27f13aa1a
7
+ data.tar.gz: 2f0ead83e68e98d014c37f4cd3d6e53be93dd26d2f6c9b8cf928d0a373fd8c867490137bab86a66e4040a6c71da724297322013ffed37b6e0d5fde5a6b2a0806
data/.gitignore ADDED
@@ -0,0 +1,18 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
18
+ vendor/bundle
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in musako.gemspec
4
+ gemspec
data/LICENSE.txt ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2013 yo_waka
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,44 @@
1
+ # musako
2
+
3
+ Simple generator of static site.
4
+
5
+ ## Installation
6
+
7
+ Add this line to your application's Gemfile:
8
+
9
+ gem 'musako'
10
+
11
+ And then execute:
12
+
13
+ $ bundle
14
+
15
+ Or install it yourself as:
16
+
17
+ $ gem install musako
18
+
19
+ ## Usage
20
+
21
+ First, please see help.
22
+
23
+ $ musako -h
24
+
25
+ Create directories from template (only once).
26
+
27
+ $ musako generate
28
+
29
+ Write your post, and build
30
+
31
+ $ touch posts/blurblur.md
32
+ $ musako build
33
+
34
+ Up local httpd.
35
+
36
+ $ musako server -P 3000
37
+
38
+ ## Contributing
39
+
40
+ 1. Fork it
41
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
42
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
43
+ 4. Push to the branch (`git push origin my-new-feature`)
44
+ 5. Create new Pull Request
data/Rakefile ADDED
@@ -0,0 +1 @@
1
+ require "bundler/gem_tasks"
data/bin/musako ADDED
@@ -0,0 +1,45 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'commander/import'
4
+ require 'musako'
5
+
6
+ program :name, 'musako'
7
+ program :version, Musako::VERSION
8
+ program :description, 'Musako is a static site generator'
9
+
10
+ default_command :help
11
+
12
+ command :generate do |c|
13
+ c.syntax = 'musako generate PATH'
14
+ c.description = 'Creates a new scaffold in PATH'
15
+
16
+ c.action do |args, options|
17
+ Musako::Cli::Generator.process(args)
18
+ end
19
+ end
20
+ alias_command :g, :generate
21
+
22
+ command :build do |c|
23
+ c.syntax = 'musako build'
24
+ c.description = 'Build your site'
25
+
26
+ c.action do |args, options|
27
+ options = Musako.configuration(options.__hash__)
28
+ Musako::Cli::Builder.process(options)
29
+ end
30
+ end
31
+ alias_command :b, :build
32
+
33
+ command :serve do |c|
34
+ c.syntax = 'musako server [options]'
35
+ c.description = 'Serve your site locally'
36
+
37
+ c.option '-D', '--detach', 'Run the server in the background (detach)'
38
+ c.option '-P', '--port [PORT]', 'Port to listen on'
39
+
40
+ c.action do |args, options|
41
+ options = Musako.configuration(options.__hash__)
42
+ Musako::Cli::Server.process(options)
43
+ end
44
+ end
45
+ alias_command :s, :serve
@@ -0,0 +1,60 @@
1
+ module Musako
2
+ module Cli
3
+ class Builder
4
+ def self.process(options)
5
+ initialize_target_dir
6
+ begin
7
+ build_static_files
8
+ build_page_files
9
+ rescue => e
10
+ delete_target_dir
11
+ raise e
12
+ end
13
+ end
14
+
15
+ def self.build_static_files
16
+ # scss to css
17
+ scss_files = File.join(Musako.assets_path, "scss", "**", "*.scss")
18
+ Dir.glob(scss_files).each do |file|
19
+ css = Musako::Renderers::Scss.new(file)
20
+ css.render
21
+ end
22
+
23
+ # copy all static files to target directory
24
+ FileUtils.cp_r Musako.assets_path, Musako.destination_path
25
+ end
26
+
27
+ def self.build_page_files
28
+ posts = []
29
+
30
+ # posts to html
31
+ post_files = File.join(Musako.source_path, "posts", "**", "*.md")
32
+ Dir.glob(post_files).each do |file|
33
+ post = Musako::Renderers::Post.new(file)
34
+ post.render
35
+
36
+ posts << post
37
+ end
38
+
39
+ views_dir = Musako.views_path
40
+
41
+ index_file = File.join(views_dir, "index.slim")
42
+ Musako::Renderers::Index.new(index_file, posts).render
43
+
44
+ feed_file = File.join(views_dir, "feed.builder")
45
+ Musako::Renderers::Feed.new(feed_file, posts).render
46
+ end
47
+
48
+ def self.initialize_target_dir
49
+ dest_dir = Musako.destination_path
50
+
51
+ FileUtils.remove_entry_secure dest_dir if File.exists? dest_dir
52
+ FileUtils.mkdir_p dest_dir
53
+ end
54
+
55
+ def self.delete_target_dir
56
+ FileUtils.remove_entry_secure Musako.destination_path
57
+ end
58
+ end
59
+ end
60
+ end
@@ -0,0 +1,30 @@
1
+ module Musako
2
+ module Cli
3
+ class Generator
4
+ def self.process(args)
5
+ if args.empty?
6
+ args = ["."]
7
+ end
8
+
9
+ path = File.expand_path(args[0], Dir.pwd)
10
+
11
+ if !Dir["#{path}/posts"].empty?
12
+ raise "Error: musako project exists and is not empty."
13
+ end
14
+
15
+ create_templates path
16
+ end
17
+
18
+ private
19
+
20
+ def self.create_templates(path)
21
+ t = template
22
+ FileUtils.cp_r t + '/.', path
23
+ end
24
+
25
+ def self.template
26
+ File.expand_path("../../templates", File.dirname(__FILE__))
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,76 @@
1
+ module Musako
2
+ module Cli
3
+ class Server
4
+ def self.process(options)
5
+ require 'webrick'
6
+ include WEBrick
7
+
8
+ unless File.exists?(options[:destination])
9
+ p "target dir is not found"
10
+ return
11
+ end
12
+
13
+ # recreate NondisclosureName under utf-8 circumstance
14
+ fh_option = WEBrick::Config::FileHandler
15
+ fh_option[:NondisclosureName] = ['.ht*','~*']
16
+
17
+ s = HTTPServer.new(webrick_options(options))
18
+ s.mount(
19
+ "/",
20
+ HTTPServlet::FileHandler,
21
+ options[:destination],
22
+ fh_option
23
+ )
24
+
25
+ p "Server address: http://#{s.config[:BindAddress]}:#{s.config[:Port]}"
26
+
27
+ if options[:detach]
28
+ # detach the server
29
+ pid = Process.fork { s.start }
30
+ Process.detach(pid)
31
+ p "Server detatched with pid '#{pid}'.", "Run `kill -9 #{pid}' to stop the server."
32
+ else
33
+ # create a new server thread, then join it with current terminal
34
+ t = Thread.new { s.start }
35
+ trap("INT") { s.shutdown }
36
+ t.join()
37
+ end
38
+ end
39
+
40
+ def self.webrick_options(config)
41
+ opts = {
42
+ :Port => config[:port],
43
+ :BindAddress => config[:host],
44
+ :MimeTypes => self.mime_types,
45
+ :DoNotReverseLookup => true,
46
+ :StartCallback => start_callback(config[:detach])
47
+ }
48
+
49
+ if !config[:verbose]
50
+ opts.merge!({
51
+ :AccessLog => [],
52
+ :Logger => Log::new([], Log::WARN)
53
+ })
54
+ end
55
+
56
+ opts
57
+ end
58
+
59
+ def self.start_callback(detached)
60
+ unless detached
61
+ Proc.new {
62
+ p "Server running..., press ctrl-c to stop."
63
+ }
64
+ end
65
+ end
66
+
67
+ def self.mime_types
68
+ mime_types_file = File.expand_path(
69
+ '../mime.types',
70
+ File.dirname(__FILE__)
71
+ )
72
+ WEBrick::HTTPUtils::load_mime_types(mime_types_file)
73
+ end
74
+ end
75
+ end
76
+ end
@@ -0,0 +1,47 @@
1
+ require 'yaml'
2
+
3
+ module Musako
4
+ class Configuration < Hash
5
+
6
+ # Default options.
7
+ DEFAULTS = {
8
+ source: Dir.pwd,
9
+ destination: File.join(Dir.pwd, 'target'),
10
+ views: 'views',
11
+ assets: 'assets',
12
+ posts: 'posts',
13
+
14
+ port: '3333',
15
+ host: '0.0.0.0',
16
+ verbose: true,
17
+ detach: false,
18
+
19
+ author: 'nobody',
20
+ title: 'my notes',
21
+ description: 'my tech notes',
22
+ timezone: 'UTC',
23
+ site_url: 'http://pages.github.com'
24
+ }
25
+
26
+ # load YAML file.
27
+ def read_config_file
28
+ c = clone
29
+
30
+ config = YAML.load_file(File.join(DEFAULTS[:source], "config.yml"))
31
+ unless config.is_a? Hash
32
+ raise ArgumentError.new("Configuration file: invalid #{file}")
33
+ end
34
+ c.merge(config)
35
+ rescue SystemCallError
36
+ raise LoadError, "Configuration file: not found #{file}"
37
+ end
38
+
39
+ def symbolize_keys
40
+ inject({}) do |options, (key, value)|
41
+ value = value.symbolize_keys if defined?(value.symbolize_keys)
42
+ options[(key.to_sym rescue key) || key] = value
43
+ options
44
+ end
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,85 @@
1
+ # These are the same MIME types that GitHub Pages uses as of 17 Mar 2013.
2
+
3
+ text/html html htm shtml
4
+ text/css css
5
+ text/xml xml rss xsl
6
+ image/gif gif
7
+ image/jpeg jpeg jpg
8
+ application/x-javascript js
9
+ application/atom+xml atom
10
+
11
+ text/mathml mml
12
+ text/plain txt
13
+ text/vnd.sun.j2me.app-descriptor jad
14
+ text/vnd.wap.wml wml
15
+ text/x-component htc
16
+ text/cache-manifest manifest appcache
17
+ text/coffeescript coffee
18
+ text/plain pde
19
+ text/plain md markdown
20
+
21
+ image/png png
22
+ image/svg+xml svg
23
+ image/tiff tif tiff
24
+ image/vnd.wap.wbmp wbmp
25
+ image/x-icon ico
26
+ image/x-jng jng
27
+ image/x-ms-bmp bmp
28
+
29
+ application/json json
30
+ application/java-archive jar ear
31
+ application/mac-binhex40 hqx
32
+ application/msword doc
33
+ application/pdf pdf
34
+ application/postscript ps eps ai
35
+ application/rdf+xml rdf
36
+ application/rtf rtf
37
+ text/vcard vcf vcard
38
+ application/vnd.apple.pkpass pkpass
39
+ application/vnd.ms-excel xls
40
+ application/vnd.ms-powerpoint ppt
41
+ application/vnd.wap.wmlc wmlc
42
+ application/xhtml+xml xhtml
43
+ application/x-chrome-extension crx
44
+ application/x-cocoa cco
45
+ application/x-font-ttf ttf
46
+ application/x-java-archive-diff jardiff
47
+ application/x-java-jnlp-file jnlp
48
+ application/x-makeself run
49
+ application/x-ns-proxy-autoconfig pac
50
+ application/x-perl pl pm
51
+ application/x-pilot prc pdb
52
+ application/x-rar-compressed rar
53
+ application/x-redhat-package-manager rpm
54
+ application/x-sea sea
55
+ application/x-shockwave-flash swf
56
+ application/x-stuffit sit
57
+ application/x-tcl tcl tk
58
+ application/x-web-app-manifest+json webapp
59
+ application/x-x509-ca-cert der pem crt
60
+ application/x-xpinstall xpi
61
+ application/x-zip war
62
+ application/zip zip
63
+
64
+ application/octet-stream bin exe dll
65
+ application/octet-stream deb
66
+ application/octet-stream dmg
67
+ application/octet-stream eot
68
+ application/octet-stream iso img
69
+ application/octet-stream msi msp msm
70
+
71
+ audio/midi mid midi kar
72
+ audio/mpeg mp3
73
+ audio/x-realaudio ra
74
+ audio/ogg ogg
75
+
76
+ video/3gpp 3gpp 3gp
77
+ video/mpeg mpeg mpg
78
+ video/quicktime mov
79
+ video/x-flv flv
80
+ video/x-mng mng
81
+ video/x-ms-asf asx asf
82
+ video/x-ms-wmv wmv
83
+ video/x-msvideo avi
84
+ video/ogg ogv
85
+ video/webm webm
@@ -0,0 +1,33 @@
1
+ module Musako
2
+ class Renderer
3
+ def initialize(file)
4
+ @original_file = file
5
+ end
6
+
7
+ # write file
8
+ def render
9
+ raise NoImplementationError
10
+ end
11
+
12
+ def file_name
13
+ File.basename(@original_file)
14
+ .gsub(File.extname(@original_file), self.file_extname)
15
+ end
16
+
17
+ def file_extname
18
+ @file_extname || ""
19
+ end
20
+
21
+ def file_updated_at
22
+ File.stat(@original_file).mtime
23
+ end
24
+
25
+ def file_path
26
+ File.new(@original_file).path
27
+ end
28
+
29
+ def original_file_source
30
+ File.open(@original_file, 'r').read
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,30 @@
1
+ require "tilt"
2
+ require "builder"
3
+
4
+ module Musako
5
+ module Renderers
6
+ class Feed < Renderer
7
+ attr_accessor :posts
8
+
9
+ def initialize(file, posts)
10
+ super file
11
+ @file_extname = ".xml"
12
+ @posts = posts
13
+ end
14
+
15
+ def render
16
+ contents = Tilt.new(
17
+ File.join(Musako.views_path, "feed.builder")
18
+ ).render(self, {posts: @posts, config: Musako.configuration})
19
+
20
+ File.open(self.output_path, "w") do |file|
21
+ file.write contents
22
+ end
23
+ end
24
+
25
+ def output_path
26
+ File.join(Musako.destination_path, self.file_name)
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,34 @@
1
+ require 'slim'
2
+
3
+ module Musako
4
+ module Renderers
5
+ class Index < Renderer
6
+ attr_accessor :posts
7
+
8
+ def initialize(file, posts)
9
+ super file
10
+
11
+ @file_extname = ".html"
12
+ @posts = posts
13
+ end
14
+
15
+ def render
16
+ contents = Slim::Template.new(
17
+ File.join(Musako.views_path, "index.slim")
18
+ ).render(self, {posts: @posts, config: Musako.configuration})
19
+
20
+ layout = Slim::Template.new(
21
+ File.join(Musako.views_path, "layouts", "application.slim")
22
+ ).render(self, {title: Musako.configuration[:title]}) { contents }
23
+
24
+ File.open(self.output_path, "w") do |file|
25
+ file.write layout
26
+ end
27
+ end
28
+
29
+ def output_path
30
+ File.join(Musako.destination_path, self.file_name)
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,64 @@
1
+ require 'slim'
2
+ require 'redcarpet'
3
+
4
+ module Musako
5
+ module Renderers
6
+ class Post < Renderer
7
+ attr_reader :html, :title, :date, :iso_date, :url, :path
8
+
9
+ def initialize(file)
10
+ super file
11
+ @file_extname = ".html"
12
+ end
13
+
14
+ def render
15
+ markdown = Redcarpet::Markdown.new(Redcarpet::Render::HTML,
16
+ :autolink => true,
17
+ :space_after_headers => true,
18
+ :fenced_code_blocks => true
19
+ )
20
+ @html = markdown.render(self.original_file_source)
21
+
22
+ # use first header tag as title
23
+ title = if @html =~ /<h1>(.*?)<\/h1>/
24
+ $1
25
+ else
26
+ "No title"
27
+ end
28
+ self.set_meta_data(title)
29
+
30
+ post = Slim::Template.new(
31
+ File.join(Musako.views_path, "post.slim")
32
+ ).render(self, {post: self, config: Musako.configuration})
33
+
34
+ layout = Slim::Template.new(
35
+ File.join(Musako.views_path, "layouts", "application.slim")
36
+ ).render(self, {title: Musako.configuration[:title]}) { post }
37
+
38
+ dir = File.dirname(self.output_path)
39
+ unless File.directory? dir
40
+ FileUtils.mkdir_p dir
41
+ end
42
+
43
+ File.open(self.output_path, "w") do |file|
44
+ file.write layout
45
+ end
46
+ end
47
+
48
+ # create directory from file's updated_at
49
+ def output_path
50
+ File.join(Musako.destination_path, @url)
51
+ end
52
+
53
+ def set_meta_data(title)
54
+ time = self.file_updated_at
55
+
56
+ @title = title
57
+ @date = time
58
+ @iso_date = time.strftime("%FT%T%z")
59
+ @url = File.join("#{time.year}/#{time.month}/#{time.day}", self.file_name)
60
+ @path = self.file_path
61
+ end
62
+ end
63
+ end
64
+ end
@@ -0,0 +1,24 @@
1
+ require 'sass'
2
+
3
+ module Musako
4
+ module Renderers
5
+ class Scss < Renderer
6
+ def initialize(file)
7
+ super file
8
+ @file_extname = ".css"
9
+ end
10
+
11
+ def render
12
+ compiled = Sass::Engine.new(self.original_file_source, syntax: :scss)
13
+ .render
14
+ File.open(self.output_path, "w") do |file|
15
+ file.write compiled
16
+ end
17
+ end
18
+
19
+ def output_path
20
+ File.join(Musako.assets_path, "stylesheets", self.file_name)
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,3 @@
1
+ module Musako
2
+ VERSION = "0.0.1"
3
+ end
data/lib/musako.rb ADDED
@@ -0,0 +1,61 @@
1
+ # Require all files in directory.
2
+ def require_all(path)
3
+ glob = File.join(File.dirname(__FILE__), path, '*.rb')
4
+ Dir[glob].each do |f|
5
+ require f
6
+ end
7
+ end
8
+
9
+ # rubygems
10
+ require 'rubygems'
11
+
12
+ # stdlib
13
+ require 'fileutils'
14
+
15
+ # internal
16
+ require "musako/version"
17
+ require "musako/configuration"
18
+ require "musako/renderer"
19
+
20
+ require_all "musako/cli"
21
+ require_all "musako/renderers"
22
+
23
+ # end point
24
+ module Musako
25
+ def self.configuration(options = {})
26
+ return @config if @config
27
+
28
+ config = Configuration[Configuration::DEFAULTS]
29
+ config = config.read_config_file
30
+ config = config.merge(options).symbolize_keys
31
+
32
+ ENV['TZ'] = config[:timezone]
33
+ @config = config
34
+ @config
35
+ end
36
+
37
+ def self.source_path
38
+ config = configuration
39
+ config[:source]
40
+ end
41
+
42
+ def self.destination_path
43
+ config = configuration
44
+ config[:destination]
45
+ end
46
+
47
+ def self.views_path
48
+ config = configuration
49
+ File.join(config[:source], config[:views])
50
+ end
51
+
52
+ def self.posts_path
53
+ config = configuration
54
+ File.join(config[:source], config[:posts])
55
+ end
56
+
57
+ def self.assets_path
58
+ config = configuration
59
+ File.join(config[:source], config[:assets])
60
+ end
61
+ end
@@ -0,0 +1,3 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gem 'musako'
File without changes
File without changes
File without changes
@@ -0,0 +1,20 @@
1
+ body {
2
+ margin: 0;
3
+ padding: 0;
4
+ }
5
+
6
+ .header {
7
+ }
8
+
9
+ .footer {
10
+ }
11
+
12
+ .contents {
13
+ }
14
+
15
+ .posts {
16
+ position: relative;
17
+ }
18
+
19
+ .post {
20
+ }
@@ -0,0 +1,5 @@
1
+ author: nobody
2
+ title: my notes
3
+ description: my tech notes
4
+ timezone: Asia/Tokyo
5
+ site_url: http://pages.github.com
@@ -0,0 +1,15 @@
1
+ # こんにちは
2
+
3
+ ## 世界
4
+
5
+ ぼくが生きる世界
6
+
7
+ * この
8
+ * すばらしい
9
+ * 世界
10
+
11
+ ```ruby
12
+ def hello
13
+ "world"
14
+ end
15
+ ```
@@ -0,0 +1,21 @@
1
+ xml.instruct!
2
+ xml.feed "xmlns" => "http://www.w3.org/2005/Atom" do
3
+ xml.title config[:title]
4
+ xml.subtitle config[:description]
5
+ xml.id config[:site_url]
6
+ xml.link "href" => config[:site_url]
7
+ xml.updated posts.first.iso_date unless posts.empty?
8
+ xml.author { xml.name config[:author] }
9
+
10
+ posts[0..5].each do |post|
11
+ xml.entry do
12
+ xml.title post.title
13
+ xml.link "rel" => "alternate", "href" => URI.join(config[:site_url], post.url)
14
+ xml.id URI.join(config[:site_url], post.url)
15
+ xml.published post.iso_date
16
+ xml.updated File.mtime(post.path)
17
+ xml.author { xml.name config[:author] }
18
+ xml.content post.html, "type" => "html"
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,11 @@
1
+ div class="posts"
2
+ - for post in posts
3
+ div class="post"
4
+ h2
5
+ a href="#{post.url}"
6
+ = post.title
7
+ p class="post-meta"
8
+ span
9
+ | 更新日時:
10
+ span
11
+ = post.date.strftime("%c")
@@ -0,0 +1,12 @@
1
+ doctype html
2
+ html
3
+ head
4
+ meta charset="utf-8"
5
+ meta http-equiv="X-UA-Compatible" content="IE=edge;chrome=1"
6
+ title = title
7
+ link rel="alternate" type="application/atom+xml" title="Atom Feed" href="/feed.xml"
8
+ link rel="stylesheet" type="text/css" href="/assets/stylesheets/main.css"
9
+ link rel="icon" type="image/png" href="/assets/images/favicon.png"
10
+ body
11
+ div class="container"
12
+ == yield
@@ -0,0 +1,2 @@
1
+ div class="post"
2
+ == post.html
data/musako.gemspec ADDED
@@ -0,0 +1,28 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'musako/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "musako"
8
+ spec.version = Musako::VERSION
9
+ spec.authors = ["yo_waka"]
10
+ spec.email = ["y.wakahara@gmail.com"]
11
+ spec.summary = %q{A simple static site generator}
12
+ spec.homepage = "https://github.com/waka/musako"
13
+ spec.license = "MIT"
14
+
15
+ spec.files = `git ls-files`.split($/)
16
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
17
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
18
+ spec.require_paths = ["lib"]
19
+
20
+ spec.add_runtime_dependency "slim"
21
+ spec.add_runtime_dependency "redcarpet"
22
+ spec.add_runtime_dependency "builder"
23
+ spec.add_runtime_dependency "sass"
24
+ spec.add_runtime_dependency "commander"
25
+
26
+ spec.add_development_dependency "bundler", "~> 1.3"
27
+ spec.add_development_dependency "rake"
28
+ end
metadata ADDED
@@ -0,0 +1,173 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: musako
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - yo_waka
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2013-12-21 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: slim
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - '>='
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - '>='
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: redcarpet
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - '>='
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - '>='
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: builder
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - '>='
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: sass
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - '>='
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: commander
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - '>='
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - '>='
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: bundler
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ~>
88
+ - !ruby/object:Gem::Version
89
+ version: '1.3'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ~>
95
+ - !ruby/object:Gem::Version
96
+ version: '1.3'
97
+ - !ruby/object:Gem::Dependency
98
+ name: rake
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - '>='
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - '>='
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ description:
112
+ email:
113
+ - y.wakahara@gmail.com
114
+ executables:
115
+ - musako
116
+ extensions: []
117
+ extra_rdoc_files: []
118
+ files:
119
+ - .gitignore
120
+ - Gemfile
121
+ - LICENSE.txt
122
+ - README.md
123
+ - Rakefile
124
+ - bin/musako
125
+ - lib/musako.rb
126
+ - lib/musako/cli/builder.rb
127
+ - lib/musako/cli/generator.rb
128
+ - lib/musako/cli/server.rb
129
+ - lib/musako/configuration.rb
130
+ - lib/musako/mime.types
131
+ - lib/musako/renderer.rb
132
+ - lib/musako/renderers/feed.rb
133
+ - lib/musako/renderers/index.rb
134
+ - lib/musako/renderers/post.rb
135
+ - lib/musako/renderers/scss.rb
136
+ - lib/musako/version.rb
137
+ - lib/templates/Gemfile
138
+ - lib/templates/assets/.scrawl
139
+ - lib/templates/assets/images/.keep
140
+ - lib/templates/assets/javascripts/main.js
141
+ - lib/templates/assets/scss/main.scss
142
+ - lib/templates/config.yml
143
+ - lib/templates/posts/hello.md
144
+ - lib/templates/views/feed.builder
145
+ - lib/templates/views/index.slim
146
+ - lib/templates/views/layouts/application.slim
147
+ - lib/templates/views/post.slim
148
+ - musako.gemspec
149
+ homepage: https://github.com/waka/musako
150
+ licenses:
151
+ - MIT
152
+ metadata: {}
153
+ post_install_message:
154
+ rdoc_options: []
155
+ require_paths:
156
+ - lib
157
+ required_ruby_version: !ruby/object:Gem::Requirement
158
+ requirements:
159
+ - - '>='
160
+ - !ruby/object:Gem::Version
161
+ version: '0'
162
+ required_rubygems_version: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - '>='
165
+ - !ruby/object:Gem::Version
166
+ version: '0'
167
+ requirements: []
168
+ rubyforge_project:
169
+ rubygems_version: 2.0.14
170
+ signing_key:
171
+ specification_version: 4
172
+ summary: A simple static site generator
173
+ test_files: []