kryo 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore CHANGED
@@ -15,3 +15,4 @@ spec/reports
15
15
  test/tmp
16
16
  test/version_tmp
17
17
  tmp
18
+ blog/
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --color
2
+ --format documentation
data/.rvmrc ADDED
@@ -0,0 +1 @@
1
+ rvm gemset use kryo --create
data/README.md CHANGED
@@ -1,17 +1,43 @@
1
1
  # Kryo
2
2
 
3
- A static site generator. It's nicely packaged so that you do not have to worry
4
- about merge conflicts happening when the core updates.
3
+ A static blog aware generator. It is a rack application, so it's not entirely
4
+ static, but it does serve the pages quickly.
5
5
 
6
- Note: this is not complete yet
6
+ ## Installation
7
+
8
+ ```
9
+ gem install kryo
10
+ ```
7
11
 
8
12
  ## Usage
9
13
 
14
+ This is the basic usage I am attempting to accomplish.
15
+
10
16
  ```sh
11
17
  kryo new blog
18
+ cd blog/
19
+ bundle install
20
+ kryo generate post some-title
12
21
  kryo run
13
22
  ```
14
23
 
24
+ Similar interface with the CLI like `rails` is.
25
+
26
+ ## File Structure
27
+
28
+ The file structure for this static blog generator is quite simple.
29
+
30
+ ```
31
+ ./source/assets # your css and images will go here
32
+ ./source/posts # your posts will go here
33
+ ./source/pages # any extra pages like a resume page or something will go here
34
+ ./source/template # your theme will reside here
35
+
36
+ ./lib # custom Ruby stuff will reside here
37
+
38
+ ./public # this is where your generated content will go
39
+ ```
40
+
15
41
  ## Contributing
16
42
 
17
43
  Make sure you commit to a branch that is not master. Send a pull request when
data/bin/kryo CHANGED
@@ -10,9 +10,32 @@ program :description, 'Kryo is a static blog generator'
10
10
  default_command :help
11
11
 
12
12
  command :new do |c|
13
- c.syntax = 'kryo new [options]'
13
+ c.syntax = 'kryo new <name>'
14
14
  c.description = 'Builds a new kryo application'
15
15
 
16
16
  c.action do |args, options|
17
+ raise ArgumentError.new("'name' is required") if args.empty?
18
+ name = args[0]
19
+ Kryo::Generators::SiteGenerator.invoke(name)
17
20
  end
18
21
  end
22
+
23
+ command :generate do |c|
24
+ c.syntax = "kryo generate [options]"
25
+ c.description = "Generates something"
26
+
27
+ c.action do |args, options|
28
+ raise ArgumentError.new("you need to specify a generator") if args.empty?
29
+
30
+ case args[0]
31
+ when 'post'
32
+ raise ArgumentError.new("you need to specify a title for the post") if args.count < 2
33
+ title = args[1..-1].join(' ')
34
+ Kryo::Generators::PostGenerator.invoke(title)
35
+ else
36
+ raise ArgumentError.new("#{args[0]} generator doesn't exist")
37
+ end
38
+
39
+ end
40
+ end
41
+ alias_command :g, :generate
data/kryo.gemspec CHANGED
@@ -26,6 +26,4 @@ Gem::Specification.new do |gem|
26
26
  gem.add_development_dependency('rspec')
27
27
  gem.add_development_dependency('rspec-core')
28
28
  gem.add_development_dependency('rspec-mocks')
29
- gem.add_development_dependency('rspec-expectations')
30
- gem.add_development_dependency('shoulda-matchers')
31
29
  end
data/lib/kryo.rb CHANGED
@@ -1,4 +1,3 @@
1
1
  require "kryo/version"
2
-
3
- module Kryo
4
- end
2
+ require "kryo/generators/site/site_generator"
3
+ require "kryo/generators/post/post_generator"
@@ -0,0 +1,37 @@
1
+ require 'erb'
2
+
3
+ module Kryo
4
+ module Generators
5
+
6
+ # The base class for all generators to inherit from.
7
+ #
8
+ # @author Matthew A. Johnston (warmwaffles)
9
+ class Base
10
+ # Creates a file based off of the template provided.
11
+ #
12
+ # @param [String] src the source of the template file
13
+ # @param [String] destination the destination of where the generated file will go
14
+ # @param [Hash] options
15
+ # @option options [String] :name The name of the template to be written as
16
+ # @return [Boolean]
17
+ def self.create src, destination, options={}, &block
18
+
19
+ paths = File.split(src)
20
+ template_name = paths.last
21
+ template_path = paths.first
22
+ path = File.join(File.dirname(__FILE__), template_path, "#{template_name}.erb")
23
+
24
+ yield if block
25
+
26
+ erb = ERB.new(File.read(path))
27
+ output = File.join(destination, options[:name] || template_name)
28
+
29
+ file = File.open(output, 'w+')
30
+ file.write(erb.result(binding))
31
+ file.close
32
+ true
33
+ end
34
+ end
35
+
36
+ end
37
+ end
@@ -0,0 +1,24 @@
1
+ require 'fileutils'
2
+ require 'kryo/generators/base'
3
+
4
+ module Kryo
5
+ module Generators
6
+
7
+ # Used to generate a basic post
8
+ # @author Matthew A. Johnston (warmwaffles)
9
+ class PostGenerator < Base
10
+ VALID_TYPES = %w{markdown}.freeze
11
+
12
+ def self.invoke title, type='markdown'
13
+ directory = File.join(FileUtils.pwd, 'source', 'posts')
14
+ date = DateTime.now
15
+ name = [date.strftime("%Y-%m-%d"),title.gsub(/\s+/,'-')].join('-')
16
+ name = [name, type].join('.').downcase
17
+ create "post/templates/post.#{type}", directory, name: name do
18
+ @title = title
19
+ end
20
+ end
21
+ end
22
+
23
+ end
24
+ end
@@ -0,0 +1 @@
1
+ # <%= @title %>
@@ -0,0 +1,39 @@
1
+ require 'fileutils'
2
+ require 'kryo/generators/base'
3
+
4
+ module Kryo
5
+ module Generators
6
+
7
+ # The standard site generator
8
+ # @author Matthew A. Johnston (warmwaffles)
9
+ class SiteGenerator < Base
10
+
11
+ # Invokes the generator
12
+ #
13
+ # @param [String] name the name of the site you want to create
14
+ # @param [String] directory the destination where the site will reside
15
+ # @return [void]
16
+ def self.invoke name, directory=FileUtils.pwd
17
+ path = File.join(directory, name)
18
+
19
+ %w{public lib}.each do |dir|
20
+ FileUtils.mkpath(File.join(path, dir))
21
+ end
22
+
23
+ FileUtils.touch(File.join(path, 'public', '.gitkeep'))
24
+
25
+ FileUtils.touch(File.join(path, 'lib', '.gitkeep'))
26
+
27
+ %w{assets pages posts template}.each do |dir|
28
+ FileUtils.mkpath(File.join(path, 'source', dir))
29
+ FileUtils.touch(File.join(path, 'source', dir, '.gitkeep'))
30
+ end
31
+
32
+ create 'site/templates/config.rb', path
33
+ create 'site/templates/Gemfile', path
34
+ end
35
+
36
+ end
37
+
38
+ end
39
+ end
@@ -0,0 +1,3 @@
1
+ source "http://rubygems.org"
2
+
3
+ gem 'kryo'
@@ -0,0 +1,16 @@
1
+ require 'bundler/setup'
2
+ require 'sinatra'
3
+
4
+ def send_kryo_file path
5
+ file = File.join(File.dirname(__FILE__), 'public', path)
6
+ file = File.join(file, 'index.html') unless file =~ /\.[a-z]+$/i
7
+ send_file(file)
8
+ end
9
+
10
+ get(/.+/) do
11
+ send_kryo_file(request.path)
12
+ end
13
+
14
+ not_found do
15
+ send_file('404.html')
16
+ end
data/lib/kryo/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Kryo
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
@@ -0,0 +1,5 @@
1
+ require 'spec_helper'
2
+
3
+ describe Kryo do
4
+ pending
5
+ end
@@ -0,0 +1,5 @@
1
+ require 'kryo'
2
+
3
+ RSpec.configure do |config|
4
+ config.mock_with :rspec
5
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kryo
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-03-14 00:00:00.000000000 Z
12
+ date: 2013-03-17 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: commander
@@ -139,38 +139,6 @@ dependencies:
139
139
  - - ! '>='
140
140
  - !ruby/object:Gem::Version
141
141
  version: '0'
142
- - !ruby/object:Gem::Dependency
143
- name: rspec-expectations
144
- requirement: !ruby/object:Gem::Requirement
145
- none: false
146
- requirements:
147
- - - ! '>='
148
- - !ruby/object:Gem::Version
149
- version: '0'
150
- type: :development
151
- prerelease: false
152
- version_requirements: !ruby/object:Gem::Requirement
153
- none: false
154
- requirements:
155
- - - ! '>='
156
- - !ruby/object:Gem::Version
157
- version: '0'
158
- - !ruby/object:Gem::Dependency
159
- name: shoulda-matchers
160
- requirement: !ruby/object:Gem::Requirement
161
- none: false
162
- requirements:
163
- - - ! '>='
164
- - !ruby/object:Gem::Version
165
- version: '0'
166
- type: :development
167
- prerelease: false
168
- version_requirements: !ruby/object:Gem::Requirement
169
- none: false
170
- requirements:
171
- - - ! '>='
172
- - !ruby/object:Gem::Version
173
- version: '0'
174
142
  description: A quick and easy way to generate static sites
175
143
  email:
176
144
  - warmwaffles@gmail.com
@@ -180,6 +148,8 @@ extensions: []
180
148
  extra_rdoc_files: []
181
149
  files:
182
150
  - .gitignore
151
+ - .rspec
152
+ - .rvmrc
183
153
  - Gemfile
184
154
  - LICENSE.txt
185
155
  - README.md
@@ -187,7 +157,15 @@ files:
187
157
  - bin/kryo
188
158
  - kryo.gemspec
189
159
  - lib/kryo.rb
160
+ - lib/kryo/generators/base.rb
161
+ - lib/kryo/generators/post/post_generator.rb
162
+ - lib/kryo/generators/post/templates/post.markdown.erb
163
+ - lib/kryo/generators/site/site_generator.rb
164
+ - lib/kryo/generators/site/templates/Gemfile.erb
165
+ - lib/kryo/generators/site/templates/config.rb.erb
190
166
  - lib/kryo/version.rb
167
+ - spec/kryo/kryo_spec.rb
168
+ - spec/spec_helper.rb
191
169
  homepage: https://github.com/warmwaffles/kryo
192
170
  licenses: []
193
171
  post_install_message:
@@ -202,7 +180,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
202
180
  version: '0'
203
181
  segments:
204
182
  - 0
205
- hash: -2502343900199548365
183
+ hash: 2733265200132088091
206
184
  required_rubygems_version: !ruby/object:Gem::Requirement
207
185
  none: false
208
186
  requirements:
@@ -211,11 +189,13 @@ required_rubygems_version: !ruby/object:Gem::Requirement
211
189
  version: '0'
212
190
  segments:
213
191
  - 0
214
- hash: -2502343900199548365
192
+ hash: 2733265200132088091
215
193
  requirements: []
216
194
  rubyforge_project:
217
195
  rubygems_version: 1.8.24
218
196
  signing_key:
219
197
  specification_version: 3
220
198
  summary: This is similar to how Jekyll and other various static blogs function.
221
- test_files: []
199
+ test_files:
200
+ - spec/kryo/kryo_spec.rb
201
+ - spec/spec_helper.rb