striker 0.0.8.pre

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 564fb4720de771314258930e6d16fa5287d5e907
4
+ data.tar.gz: fb0676c796a47c0c5e1e9c14f9b33570db364ca7
5
+ SHA512:
6
+ metadata.gz: 738aa7c261a4e5ab560948fd4e2f74b72c5d8e0528b5ea61e27f086e4d0a3b662eb9bed21a0fceabd27da77360fc7ae3c9693c8f4292b3e7ba3edef418f8a7aa
7
+ data.tar.gz: 6376d19dd265eaf98eefb2c8352a79d249f403ccd94cea86658c9f6d67357712ea166875feb312f8c012931d90d440b77e36a361ffa04eb2805c62a3bc03399c
data/.gitignore ADDED
@@ -0,0 +1,17 @@
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
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in striker.gemspec
4
+ gemspec
data/LICENSE.txt ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2013 Swaroop SM
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,179 @@
1
+ # Striker
2
+
3
+ [![Code Climate](https://codeclimate.com/github/swaroopsm/striker.png)](https://codeclimate.com/github/swaroopsm/striker)
4
+
5
+ A Simple & Fast Static Site Generator. Striker has been released as a pre version as of now, to get reviews and bug reports.
6
+
7
+ ## Installation
8
+
9
+ <!--
10
+ Add this line to your application's Gemfile:
11
+
12
+ gem 'striker'
13
+
14
+ And then execute:
15
+
16
+ $ bundle
17
+
18
+ Or install it yourself as:
19
+ -->
20
+
21
+ $ gem install striker --pre
22
+
23
+ ## Usage
24
+
25
+ #### Create New Site
26
+ $ striker new my-awesome-site
27
+ $ cd my-awesome-site
28
+
29
+ ##### This creates the following directory structure:
30
+ my-awesome-site/
31
+ css/
32
+ js/
33
+ media/
34
+ images/
35
+ sounds/
36
+ videos/
37
+ pages/
38
+ templates/
39
+ config.yml
40
+
41
+
42
+ #### Create New Page
43
+ $ striker page --new home --title "Home Page" [--no-media | --no-image | --no-sound | --no-video]
44
+ Use the appropriate option if you need images or videos or sound.
45
+
46
+ This creates a page named `home.md` in `pages/`. The content is written in [markdown](http://daringfireball.net/projects/markdown/).
47
+ #####The front matter of this page looks like the following
48
+ ---
49
+ title: Home Page
50
+ author: Swaroop SM
51
+ date: 2013-10-19
52
+ template: page
53
+ ---
54
+
55
+ ### Home Page
56
+
57
+ You can include any front-matter, but `title`, `date` and `template` are mandatory fields
58
+
59
+ The value that you specified for the `template` field, tells the gem to look for a file named `page.html` in the `templates/` directory. Here you can specify the markup of your page.
60
+
61
+ ##### Templating
62
+ Striker uses [Liquid Templating](http://liquidmarkup.org).
63
+ To define a new template add a file called `my_template.html` in `templates/` and you can specify this template in your `markdown` pages.
64
+
65
+ #### Dealing with Images
66
+ Make sure you have [ImageMagick](http://www.imagemagick.org/script/index.php) installed.
67
+
68
+ ##### Add thumbnail to a page.
69
+ If you would like to make an image appear on one of your pages, simply add an image named as `thumbnail.(jpg|png|gif)` to the images directory of your page.
70
+ Eg.: If you would like to add a thumbnail to your home page, place a `thumbnail.jpg` in `images/home/thumbnail.jpg`
71
+
72
+ Then in your `home.md` you can use the custom liquid tag helper to output the image by doing:
73
+ ######
74
+ {% thumbnail 250w 250h #[image-id] .[image-class] %}
75
+
76
+ Explanation:
77
+ #####
78
+ thumbnail - the tag name
79
+ 250w, 250h - The desired width and height that you would like to resize the image
80
+ #[image-id] - Specify id the the image tag
81
+ .[image-class] - Specify class to the image tag
82
+
83
+ You can specify the size of the image using width/height. or you can also scale the image. For Eg.: If you would like to reduce the size of the image to 50% of the original size, you can do the following:
84
+ #####
85
+ {% thumbnail 0.5s #[image-id] .[image-class] %}
86
+
87
+ To display non-thumbnail images, drop images into the appropriate page's `images/` directory.
88
+ Then to display images in your template use the following:
89
+ #####
90
+ {% for image in page.images %}
91
+ <img src="{{ image.url }}" />
92
+ {% endfor %}
93
+
94
+ ##### Start the Server
95
+ $ striker strike
96
+ This starts the server at `localhost` and port `1619`
97
+
98
+ ### Some Goodies:
99
+ ##### Adding tags to pages
100
+ In your `config.yml`
101
+ #
102
+ tagged:
103
+ style: tagged
104
+ This specifies the page that you want to serve for tags. For Eg.: if you want something like `http://yoursite.com/tags` change it to the following:
105
+ #
106
+ tagged:
107
+ style: tags
108
+
109
+ To create markup for your templates `striker` provides two files:
110
+
111
+ To provide markup for the main tags page. Eg.: `http://yoursite.com/tagged` add markup in the following template.
112
+
113
+ * `templates/tags/index.html`
114
+
115
+ To provide markup for a specific tag page. Eg.: `http://yoursite.com/tagged/ruby` add markup in the following template
116
+
117
+ * `templates/tags/tag.html`
118
+
119
+ ##### Site Archive
120
+ Archive of posts is quite commin in blogs. If you would like to add an archive to your site, follow the below steps:
121
+
122
+ In your `config.yml` add the following if it does not exist:
123
+ #
124
+ archive:
125
+ style: archive
126
+ period: :month
127
+
128
+ The `style` parameter specifies the path name; the above would create `http://yoursite.com/archive/2013/10`
129
+
130
+ You can provide two values to the `period` parameter - `:year` or `:month`
131
+
132
+ The `:year` value would create a path like: `http://yoursite.com/archive/2013`
133
+
134
+ The `:month` value would create a path like: `http://yoursite.com/archive/2013/10`
135
+
136
+ *Note:*
137
+
138
+ For the archive to be fully functional and work as expected you need to provide the `date` in the front-matter of all your pages without which can lead to incorrect results.
139
+
140
+ The templates for specifying the markup are in `templates/archive/index.html`.
141
+
142
+ To access all site archives you can use `site.archives` in your templates
143
+
144
+ To access a specific archive in your archive templates use the following:
145
+ #
146
+ {% for page in archive.pages %}
147
+ <a href="{{ page.url }}">{{ page.title }}</a>
148
+ {% endfor %}
149
+
150
+ ##### Helper Tags Available:
151
+ *Embed YouTube Video*
152
+ #####
153
+ {% youtube bNAyPK2O4fk 650w 400h %}
154
+
155
+ *Embed Vimeo Video*
156
+ #####
157
+ {% vimeo 29897413 650w 400h %}
158
+
159
+ *Embed SoundCloud Track*
160
+ #####
161
+ {% soundcloud 3058346 400w 200h %}
162
+
163
+ #### Build Website
164
+ $ striker build
165
+ Generate the final website by creating a `public/` directory
166
+
167
+ <!--
168
+ ## Contributing
169
+
170
+ 1. Fork it
171
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
172
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
173
+ 4. Push to the branch (`git push origin my-new-feature`)
174
+ 5. Create new Pull Request
175
+ -->
176
+
177
+
178
+ [![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/swaroopsm/striker/trend.png)](https://bitdeli.com/free "Bitdeli Badge")
179
+
data/Rakefile ADDED
@@ -0,0 +1 @@
1
+ require "bundler/gem_tasks"
data/bin/striker ADDED
@@ -0,0 +1,58 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'rubygems'
4
+ require 'commander/import'
5
+ require_relative '../lib/striker'
6
+
7
+ program :name, 'striker'
8
+ program :version, Striker::VERSION
9
+ program :description, 'Simple & Lite Static Site Generator'
10
+
11
+ command :new do |c|
12
+ c.syntax = 'striker new SITE_NAME'
13
+ c.description = 'Generates a new static site with a specified directory structure'
14
+
15
+ c.action do |args, options|
16
+ Striker::Command::New.process(args, options)
17
+ end
18
+ end
19
+
20
+ command :page do |c|
21
+ c.syntax = 'striker page'
22
+ c.description = 'Creates a new page'
23
+
24
+ c.option '--new [name]', String, 'Create a page with a name'
25
+ c.option '--title ["title"]', String, 'Give title to the page'
26
+ c.option '--no-media', String, 'Do not create any media files the page'
27
+ c.option '--no-image', String, 'Do not create any image files the page'
28
+ c.option '--no-sound', String, 'Do not create any sound files the page'
29
+ c.option '--no-video', String, 'Do not create any video files for the page'
30
+
31
+ c.action do |args, options|
32
+ options.default :no_sound => true, :no_video => true
33
+
34
+ options = options.__hash__
35
+ Striker::Command::Page.process(args, options)
36
+ end
37
+ end
38
+
39
+ command :build do |c|
40
+ c.syntax = 'striker build'
41
+ c.description = 'Build your website'
42
+
43
+ c.action do |args, options|
44
+
45
+ Striker::Command::Build.process
46
+ end
47
+ end
48
+
49
+ command :strike do |c|
50
+ c.syntax = 'striker serve'
51
+ c.description = 'Build & Preview website in the browser'
52
+
53
+ c.action do |args, options|
54
+
55
+ Striker::Command::Build.process
56
+ Striker::Command::Strike.run(args, options)
57
+ end
58
+ end
@@ -0,0 +1,17 @@
1
+ name: Your Website Name
2
+ port: 1619
3
+ basename: /
4
+ assets: assets
5
+ public_dir: public
6
+ permalink:
7
+ style: :name
8
+ pretty: true
9
+ tagged:
10
+ style: tagged
11
+ archive:
12
+ style: archive
13
+ period: :month
14
+ homepage: index
15
+ include_assets:
16
+ - css
17
+ - js
@@ -0,0 +1 @@
1
+ /* Write your css code here... */
@@ -0,0 +1 @@
1
+ // Write your js code here...
@@ -0,0 +1 @@
1
+ {{ archive.pages }}
@@ -0,0 +1,10 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <title>{{ site.title }}</title>
6
+ </head>
7
+ <body>
8
+ {{ content }}
9
+ </body>
10
+ </html>
@@ -0,0 +1,10 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <title>{{ page.title }}</title>
6
+ </head>
7
+ <body>
8
+ {{ content }}
9
+ </body>
10
+ </html>
@@ -0,0 +1 @@
1
+ {{ site.tags }}
@@ -0,0 +1,2 @@
1
+ <!-- Template for a single tag page -->
2
+ {{ pages }}
data/lib/striker.rb ADDED
@@ -0,0 +1,28 @@
1
+ require 'fileutils'
2
+ require 'yaml'
3
+ require 'mime-types'
4
+ require 'redcarpet'
5
+ require 'liquid'
6
+ require 'date'
7
+
8
+ require_relative 'striker/version'
9
+ require_relative 'striker/command/new'
10
+ require_relative 'striker/command/page'
11
+ require_relative 'striker/command/build'
12
+ require_relative 'striker/command/strike'
13
+ require_relative 'striker/settings'
14
+ require_relative 'striker/site'
15
+ require_relative 'striker/page'
16
+ require_relative 'striker/template'
17
+ require_relative 'striker/tag'
18
+ require_relative 'striker/archive'
19
+ require_relative 'striker/media/image'
20
+ require_relative 'striker/tags/thumbnail'
21
+ require_relative 'striker/tags/youtube'
22
+ require_relative 'striker/tags/vimeo'
23
+ require_relative 'striker/tags/soundcloud'
24
+ require_relative 'striker/tags/tweet'
25
+
26
+ module Striker
27
+
28
+ end
@@ -0,0 +1,72 @@
1
+ module Striker
2
+ class Archive
3
+
4
+ if File.exists? File.join(Settings::SOURCE_DIR, "config.yml")
5
+ @@dir = Settings::CONFIG['archive']['style']
6
+ @@period = Settings::CONFIG['archive']['period']
7
+ end
8
+
9
+ def self.process(site_meta)
10
+ @@site_meta = site_meta
11
+ FileUtils.mkdir_p(File.join(Settings::PUBLIC_DIR, @@dir))
12
+ process_archive_dir
13
+ process_files
14
+ end
15
+
16
+ def self.list_full
17
+ grouped_pages = []
18
+ pages = []
19
+ Dir.chdir(Settings::PAGES_DIR)
20
+ Dir.glob("*[.md|.markdown]").each do |page|
21
+ grouped_pages << Page.new(page).page_data
22
+ end
23
+ if @@period == :year
24
+ grouped_pages = grouped_pages.group_by{ |page| page['date'].strftime("%Y") }
25
+ else
26
+ grouped_pages = grouped_pages.group_by{ |page| [page['date'].strftime("%Y"), page['date'].strftime("%B")] }
27
+ end
28
+ grouped_pages.each do |p|
29
+ if p[0].class == Array
30
+ date = Date.new(p[0][0].to_i, Date::MONTHNAMES.index(p[0][1]), 1)
31
+ url = File.join(Settings::CONFIG['basename'], @@dir, date.year.to_s, date.month.to_s)
32
+ else
33
+ date = p[0]
34
+ url = File.join(Settings::CONFIG['basename'], @@dir, date)
35
+ end
36
+
37
+ pages << { 'date' => date, 'pages' => p[1], 'url' => url }
38
+ end
39
+ pages
40
+ end
41
+
42
+ def self.process_archive_dir
43
+ list_full.each do |archive|
44
+ Dir.chdir(File.join(Settings::PUBLIC_DIR, @@dir))
45
+ if archive['date'].class == Date
46
+ FileUtils.mkdir_p(File.join(archive['date'].year.to_s, archive['date'].month.to_s))
47
+ else
48
+ FileUtils.mkdir_p(archive['date'].to_s)
49
+ end
50
+ end
51
+ end
52
+
53
+ def self.process_files
54
+ @@site_meta['archive'].each do |archive|
55
+ process_main_template(archive)
56
+ end
57
+ end
58
+
59
+ def self.process_main_template(archive)
60
+ Dir.chdir(Settings::TEMPLATES_DIR)
61
+ template = File.read(File.join("archive", "index.html"))
62
+ parsed_data = Liquid::Template.parse(template).render('site' => @@site_meta, 'archive' => archive)
63
+ Dir.chdir(Settings::PUBLIC_DIR)
64
+ File.open(File.join(Settings::PUBLIC_DIR, archive['url'], "index.html"), "w") do |file|
65
+ file.write(parsed_data)
66
+ end
67
+ end
68
+
69
+ private_class_method :process_archive_dir, :process_files, :process_main_template
70
+
71
+ end
72
+ end