kissgen 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
data/LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2008 Lance Carlson
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README ADDED
@@ -0,0 +1,15 @@
1
+ RC Generator
2
+ ============
3
+
4
+ A simple code generator.
5
+
6
+ = API Usage
7
+
8
+ require 'rcgen'
9
+ KISSGen::Generator.new "/path/to/generator", "/path/where/files/are/generated"
10
+ KISSGen::Generator.generate(:pretend => true)
11
+ KISSGen::Generator.generate
12
+
13
+ = Console Usage (TODO)
14
+
15
+ rake generator:build <generator_name>
@@ -0,0 +1,87 @@
1
+ require "rake"
2
+ require "rake/clean"
3
+ require "rake/gempackagetask"
4
+ require "rake/rdoctask"
5
+ require "spec/rake/spectask"
6
+
7
+ require "lib/kissgen/version"
8
+
9
+ NAME = "kissgen"
10
+
11
+ spec = Gem::Specification.new do |s|
12
+ s.name = NAME
13
+ s.version = KISSGen::VERSION
14
+ s.platform = Gem::Platform::RUBY
15
+ s.author = "Lance Carlson"
16
+ s.email = "lancecarlson@gmail.com"
17
+ s.homepage = "http://rcgen.rubyforge.org"
18
+ s.summary = "A Simple Code Generator"
19
+ s.bindir = "bin"
20
+ s.description = s.summary
21
+ s.executables = %w( kissgen )
22
+ s.require_path = "lib"
23
+ s.files = %w( LICENSE README Rakefile ) + Dir["{bin,spec,lib}/**/*"]
24
+ s.has_rdoc = true
25
+ s.extra_rdoc_files = %w( README LICENSE )
26
+ s.required_ruby_version = ">= 1.8.4"
27
+ end
28
+
29
+ Rake::GemPackageTask.new(spec) do |package|
30
+ package.gem_spec = spec
31
+ end
32
+
33
+ ##############################################################################
34
+ # installation & removal
35
+ ##############################################################################
36
+ desc "Run :package and install the resulting .gem"
37
+ task :install do
38
+ sh %{rake package}
39
+ sh %{sudo gem install pkg/#{NAME}-#{VERS}}
40
+ end
41
+
42
+ desc "Run :clean and uninstall the .gem"
43
+ task :uninstall => [:clean] do
44
+ sh %{sudo gem uninstall #{NAME}}
45
+ end
46
+
47
+ ##############################################################################
48
+ # specs
49
+ ##############################################################################
50
+ desc "Run specs"
51
+ Spec::Rake::SpecTask.new("specs") do |t|
52
+ t.spec_files = FileList["spec/**/*_spec.rb"]
53
+ t.spec_opts = File.read("spec/spec.opts").split("\n")
54
+ end
55
+
56
+ desc "Run specs with coverage"
57
+ Spec::Rake::SpecTask.new("rcov") do |t|
58
+ t.spec_files = FileList["spec/**/*_spec.rb"]
59
+ t.spec_opts = File.read("spec/spec.opts").split("\n")
60
+ t.rcov = true
61
+ t.rcov_opts = ['--exclude', 'gems', '--exclude', 'spec']
62
+ end
63
+
64
+ ##############################################################################
65
+ # documentation
66
+ ##############################################################################
67
+ Rake::RDocTask.new do |rdoc|
68
+ rdoc.rdoc_dir = 'doc'
69
+ rdoc.title = 'KISSGen'
70
+ rdoc.options << '--line-numbers' << '--inline-source' << '-A cattr_accessor=object'
71
+ rdoc.options << '--charset' << 'utf-8'
72
+ rdoc.rdoc_files.include("README", "LICENSE")
73
+ rdoc.rdoc_files.include("lib/**/*.rb")
74
+ end
75
+
76
+ desc 'send rdoc to rubyforge'
77
+ task :rf_doc do
78
+ sh %{sudo chmod -R 755 doc}
79
+ sh %{/usr/bin/scp -r -p doc/* lancelot@rubyforge.org:/var/www/gforge-projects/anvil}
80
+ end
81
+
82
+ ##############################################################################
83
+ # misc
84
+ ##############################################################################
85
+ task :release => :package do
86
+ sh %{rubyforge add_release #{NAME} #{NAME} "#{KISSGen::VERSION}" pkg/#{NAME}-#{KISSGen::VERSION}.gem}
87
+ end
@@ -0,0 +1,10 @@
1
+ #! /usr/bin/env ruby
2
+ #
3
+
4
+ unless ARGV.size == 2
5
+ puts "Usage: kissgen /path/to/generator /path/to/generate/files"
6
+ exit
7
+ end
8
+
9
+ require "kissgen"
10
+ @generator = KISSGen::Generator.new ARGV.shift, ARGV.shift
@@ -0,0 +1,9 @@
1
+ require 'erb'
2
+ require 'fileutils'
3
+ require 'pathname'
4
+
5
+ files = %w[
6
+ generator template version
7
+ ]
8
+ dir = File.join(File.dirname(__FILE__), "kissgen")
9
+ files.each {|f| require(File.join(dir, f))}
@@ -0,0 +1,75 @@
1
+ module KISSGen
2
+ # The generator class is where you configure path and import files
3
+ #
4
+ # require 'rcgen'
5
+ # KISSGen::Generator.new "/path/to/generator", "/path/where/files/are/generated"
6
+ # KISSGen::Generator.generate(:pretend => true)
7
+ # KISSGen::Generator.generate
8
+ class Generator
9
+ class SetupFailure < StandardError; end
10
+
11
+ attr_reader :path, :copy_path, :files
12
+ attr_accessor :explain_pretend, :explain_created, :explain_footer
13
+ attr_accessor :setup_file_path
14
+
15
+ def initialize(path, copy_path)
16
+ @path = path
17
+ @copy_path = copy_path
18
+ @files = []
19
+ @explain_pretend = "== PRETEND MODE: Would have created the following files: =="
20
+ @explain_generate = "== Generated the following files: =="
21
+ @explain_footer = "====== Generator Finished ======"
22
+
23
+ import_setup
24
+ end
25
+
26
+ def setup_file_path
27
+ @path + "/setup.rb"
28
+ end
29
+
30
+ # Import setup file which is located in /path/to/generator/setup.rb
31
+ def import_setup
32
+ raise SetupFailure, "Setup file does not exist in #{File.expand_path(setup_file_path)}" unless File.exists?(setup_file_path)
33
+ instance_eval(File.new(setup_file_path).read)
34
+ end
35
+
36
+ def generate(options = {})
37
+ puts(options[:pretend] ? @explain_pretend : @explain_generate)
38
+
39
+ @files.each do |file|
40
+ puts(options[:pretend] ? "#{file.copy_path}" : file.create)
41
+ end
42
+
43
+ puts @explain_footer
44
+ end
45
+
46
+ # Adds a file to the list of files to generate
47
+ #
48
+ # This will generate the template README file relative to the copy path
49
+ #
50
+ # file "README"
51
+ #
52
+ # or
53
+ #
54
+ # file "README", "README_PLEASE"
55
+ def file(relative_file_path, relative_copy_path = relative_file_path, options = {})
56
+ template = Template.new(self, relative_file_path, relative_copy_path)
57
+ @files << template
58
+ template
59
+ end
60
+
61
+ # Recursively adds a directory to the list of files to generate
62
+ #
63
+ # directory "app"
64
+ def directory(directory_path, relative_copy_path = directory_path, options = {})
65
+ Dir["#{File.join(@path, directory_path)}/**/*"].each do |file_path|
66
+ unless FileTest.directory?(file_path)
67
+ # Take the template file path and give relative paths
68
+ relative_path = Pathname.new(file_path).relative_path_from(Pathname.new(File.join(@path, directory_path)))
69
+ new_path = File.join(relative_copy_path, relative_path)
70
+ @files << Template.new(self, File.join(directory_path, relative_path), new_path)
71
+ end
72
+ end
73
+ end
74
+ end
75
+ end
@@ -0,0 +1,47 @@
1
+ module KISSGen
2
+ class Template
3
+ class SourceFileNotFoundError < StandardError; end
4
+ attr_reader :generator, :path, :copy_path
5
+
6
+ def initialize(generator, path, copy_path)
7
+ @generator = generator
8
+ @path = path
9
+ @copy_path = copy_path
10
+
11
+ source_path_check
12
+ end
13
+
14
+ def source_path_check
15
+ raise SourceFileNotFoundError, "Template source file could not be found at #{full_source_path}" unless File.exists?(full_source_path)
16
+ end
17
+
18
+ def full_source_path
19
+ File.join @generator.path, @path
20
+ end
21
+
22
+ def full_copy_path
23
+ File.join @generator.copy_path, @copy_path
24
+ end
25
+
26
+ # This will create the file with parsed data in the destination directory
27
+ def create
28
+ puts copy_path
29
+ FileUtils.mkdir_p(File.dirname(full_copy_path))
30
+ @file = File.new full_copy_path, "w"
31
+ @file.print output # Taylor OWNZ
32
+ @file.close
33
+ end
34
+
35
+ # Parsed ERB output
36
+ def output
37
+ ERB.new(IO.read(full_source_path)).result
38
+ end
39
+
40
+ # Will remove the file if it exists
41
+ def delete
42
+ raise "Need to create the file first. File: #{@file.inspect}" unless @file
43
+ File.delete(full_copy_path)
44
+ end
45
+
46
+ end
47
+ end
@@ -0,0 +1,3 @@
1
+ module KISSGen
2
+ VERSION = "0.0.1"
3
+ end
@@ -0,0 +1,40 @@
1
+ require(File.join(File.dirname(__FILE__), "/../spec_helper"))
2
+
3
+ describe KISSGen::Generator do
4
+ describe "new" do
5
+ before(:each) do
6
+ @path = File.dirname(__FILE__) + "/generators/merb_app"
7
+ @copy_path = File.expand_path(File.dirname(__FILE__) + "/generators/empty")
8
+ @bad_path = File.dirname(__FILE__) + "/doesnotexist"
9
+ @empty = File.dirname(__FILE__) + "/generators/empty"
10
+ @generator = KISSGen::Generator.new(@path, @copy_path)
11
+ end
12
+
13
+ it "should fail if the setup file cannot be found" do
14
+ lambda {
15
+ KISSGen::Generator.new(@empty, @copy_path)
16
+ }.should raise_error("Setup file does not exist in #{File.expand_path(@empty) + "/setup.rb"}")
17
+ end
18
+
19
+ it "should import template files for a new generator" do
20
+ @generator.files.length.should == 12
21
+ @generator.files[0].copy_path.should == "README"
22
+ @generator.files[1].copy_path.should == "Rakefile"
23
+ @generator.files[2].copy_path.should == "app/controllers/application.rb"
24
+ @generator.files[3].copy_path.should == "app/controllers/exceptions.rb"
25
+ @generator.files[4].copy_path.should == "app/controllers/posts.rb"
26
+ @generator.files[5].copy_path.should == "app/helpers/global_helpers.rb"
27
+ @generator.files[6].copy_path.should == "app/models/article.rb"
28
+ end
29
+
30
+ it "should allow you to pretend to generate the files and output the results" do
31
+ @generator.generate(:pretend => true)
32
+ end
33
+
34
+ it "should generate new template files when no options are not set" do
35
+ #@generator.generate
36
+ #puts @copy_path
37
+ #File.exists?(@copy_path + "/README").should be_true
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,3 @@
1
+ This is some test readme
2
+
3
+ woohoo!
@@ -0,0 +1,2 @@
1
+ class Application < Merb::Controller
2
+ end
@@ -0,0 +1,13 @@
1
+ class Exceptions < Application
2
+
3
+ # handle NotFound exceptions (404)
4
+ def not_found
5
+ render :format => :html
6
+ end
7
+
8
+ # handle NotAcceptable exceptions (406)
9
+ def not_acceptable
10
+ render :format => :html
11
+ end
12
+
13
+ end
@@ -0,0 +1,5 @@
1
+ module Merb
2
+ module GlobalHelper
3
+ # helpers defined here available to all views.
4
+ end
5
+ end
@@ -0,0 +1,216 @@
1
+ <html>
2
+ <head>
3
+ <meta http-equiv="Content-type" content="text/html; charset=utf-8">
4
+ <title><%%= @exception_name %></title>
5
+ <style type="text/css" media="screen">
6
+ body {
7
+ font-family:arial;
8
+ font-size:11px;
9
+ }
10
+ h1 {
11
+ font-size:48px;
12
+ letter-spacing:-4px;
13
+ margin:0;
14
+ line-height:36px;
15
+ color:#333;
16
+ }
17
+ h1 sup {
18
+ font-size: 0.5em;
19
+ }
20
+ h1 sup.error_500, h1 sup.error_400 {
21
+ color:#990E05;
22
+ }
23
+ h1 sup.error_100, h1 sup.error_200 {
24
+ color:#00BF10;
25
+ }
26
+ h1 sup.error_300 {
27
+ /* pretty sure you cant 'see' status 300
28
+ errors but if you could I think they
29
+ would be blue */
30
+ color:#1B2099;
31
+ }
32
+ h2 {
33
+ font-size:36px;
34
+ letter-spacing:-3px;
35
+ margin:0;
36
+ line-height:28px;
37
+ color:#444;
38
+ }
39
+ a, a:visited {
40
+ color:#00BF10;
41
+ }
42
+ .internalError {
43
+ width:800px;
44
+ margin:50px auto;
45
+ }
46
+ .header {
47
+ border-bottom:10px solid #333;
48
+ margin-bottom:1px;
49
+ background-image: url("data:image/gif;base64,R0lGODlhAwADAIAAAP///8zMzCH5BAAAAAAALAAAAAADAAMAAAIEBHIJBQA7");
50
+ padding:20px;
51
+ }
52
+ table.trace {
53
+ width:100%;
54
+ font-family:courier, monospace;
55
+ letter-spacing:-1px;
56
+ border-collapse: collapse;
57
+ border-spacing:0;
58
+ }
59
+ table.trace tr td{
60
+ padding:0;
61
+ height:26px;
62
+ font-size:13px;
63
+ vertical-align:middle;
64
+ }
65
+ table.trace tr.file{
66
+ border-top:2px solid #fff;
67
+ background-color:#F3F3F3;
68
+ }
69
+ table.trace tr.source {
70
+ background-color:#F8F8F8;
71
+ display:none;
72
+ }
73
+ table.trace .open tr.source {
74
+ display:table-row;
75
+ }
76
+ table.trace tr.file td.expand {
77
+ width:23px;
78
+ background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABcAAAAXCAIAAABvSEP3AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAdVJREFUeNqMVL+TwUAYxaRIOlEhlZHGDAUzzOQ61+AqXMV1lJSU7q/QRqm8KFUcJTNn5qJkaPyoKKVz7y4mF8na5Kt29tt9+/Z97/u81+vVQ4r9frdarS6Xi7ETDIZisRjxMGPfmk4niNPpZE+xLAugbPaZ53nzvtfMBe/3+/3dbuehBrAKhZdUKkVAWa9Xsiybv0CPZDJZLr/qa5/BwgwRjYqOKIvFYjQa/aNommZh0Ww2K5UqzwfoQOPxaLPZ3FAmk0+7lplMpt1u53J5OpBOR0eZEE9wHJfP5zud93g88QhluwWbjW+5VOmKBgKBer3eaDTDYeGBQF8+x7rqIYoiPgixWJazpA6HA+MSxRArkUgMh0M409g8Ho8+9wYxxCqVSq1W26EDHGM2m4HOHQrEc38f/Yn7cLmlIRhBENzcx8cVRZnPZ/YUep2BWkjTIfA+PKVpZAXR5QxsjiqCKvGEqqp443w+0dvy17swqD0HB3S73V5PpkNg1qBqt8kwGCjmPkinM0QJbIoEa7U6UG6ToVgs4V9G2g0ESoP5Aoi7KYX5oCgf8IKbkvn9/mr1LRQKESamzgJy0g0tSZIuB3nuGqRU9Vv9C4sKkUhEkp4soxvxI8AAhWrrtXa3X8EAAAAASUVORK5CYII=);
79
+ background-position:top left;
80
+ background-repeat:no-repeat;
81
+ }
82
+ table.trace .open tr.file td.expand {
83
+ width:19px;
84
+ background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABcAAAB1CAIAAAAqdO2mAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAXZJREFUeNrslK1ywkAUhcMOBomEOiSdqLxEBJX0NaijOsjyHGGmCGyQQYaiiiw4gktkcOmZbpsuuzQ/M5XnqJ2d3S/n3nM3rTzPLUP7/Tt0+pLcGQwG3W53OLyHzPMtjYL7q9UqSRLrD4E1Gj1orCvKYuFHUWTVkOM44/HjDcp8/lL4r6NerzeZPMm1KFw0QkDn83m5fP2lHA4fNQvRtNvtjsfDd0WzmSfb2e/fdTqdOvdh/HLJZLOn0+d2HJ+KRGzbdl23EpFlmed5cp2maRzHQq1lvQ5KMi6EUZBGfup6E1pTfd+vrGW7jbQ2C9hTt9BpqNyIWaAwAy6xg2eBz5iRC/NomiZhGN5sqmnkauo0BUGgVQoBjQ80oCACgNQdZHfTYBkF2mxCtWWAqunWpahxIDUt3QYUxIFQpJHyIWpXjinabKbbwItMHT+NyjchrP8QKaSQQgoppJBCCimkkEIKKaSQQgoppJBCCimkkEIKKaSo+hRgAEFD17X08O2NAAAAAElFTkSuQmCC);
85
+ background-position:top left;
86
+ background-repeat:no-repeat;
87
+ }
88
+ table.trace tr.source td.collapse {
89
+ width:19px;
90
+ background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABcAAAB1CAIAAAAqdO2mAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAVxJREFUeNrs0zFygkAUBmBlUkgJHdABlQwVkVJKKUxBYWbkALTxMJwhltyDFkss03IF8pudIcwaDaDl/6pd2P327b7d+eHwMXs4lNkzggoVKlSoUKFChQoVKlSoUKFChQoVKlSoUKFChQqVEYqm6ft9+qiSJEkYho7jTlcw2fd9NOI4nq4gEdFwXXe1Cqco63VkWVbXRTqLhTpOwQRpF7quR1E0TgGhqvLKUFCyoQqG/rks3O6kZKW/eRFpevOCoGTXVTcMQ5EyxyDEkML1c5RzuZOICIyXqn7JBVez6282MWrx731HOv2qB8Hri2lamNk0DfpVVdV1Peodappmmua8bdvzuc7zfNprzrLMth1FnGh/X8MjCAIQv/cFz/+65PcDh7rbvYv2ZUfdj+PxsyzLgVl0hKwgTqeqKApx2LeOc7t98zyv/1FWOgvx9RPii23bmL9cetJ8Ed8CDAC6aFW8bCzFhwAAAABJRU5ErkJggg==);
91
+ background-position:bottom left;
92
+ background-repeat:no-repeat;
93
+ background-color:#6F706F;
94
+ }
95
+ table.trace tr td.path {
96
+ padding-left:10px;
97
+ }
98
+ table.trace tr td.code {
99
+ padding-left:35px;
100
+ white-space: pre;
101
+ line-height:9px;
102
+ padding-bottom:10px;
103
+ }
104
+ table.trace tr td.code em {
105
+ font-weight:bold;
106
+ color:#00BF10;
107
+ }
108
+ table.trace tr td.code a {
109
+ width: 20px;
110
+ float: left;
111
+ }
112
+ table.trace tr td.code .more {
113
+ color:#666;
114
+ }
115
+ table.trace tr td.line {
116
+ width:30px;
117
+ text-align:right;
118
+ padding-right:4px;
119
+ }
120
+ .footer {
121
+ margin-top:5px;
122
+ font-size:11px;
123
+ color:#444;
124
+ text-align:right;
125
+ }
126
+ </style>
127
+ </head>
128
+ <body>
129
+ <div class="internalError">
130
+
131
+ <div class="header">
132
+ <h1><%%= @exception_name %> <sup class="error_<%%= @exception.class::STATUS %>"><%%= @exception.class::STATUS %></sup></h1>
133
+ <%% if show_details = ::Merb::Config[:exception_details] -%>
134
+ <h2><%%= @exception.message %></h2>
135
+ <%% else -%>
136
+ <h2>Sorry about that...</h2>
137
+ <%% end -%>
138
+ <h3>Parameters</h3>
139
+ <ul>
140
+ <%% params[:original_params].each do |param, value| %>
141
+ <li><strong><%%= param %>:</strong> <%%= value.inspect %></li>
142
+ <%% end %>
143
+ <%%= "<li>None</li>" if params[:original_params].empty? %>
144
+ </ul>
145
+
146
+ <h3>Session</h3>
147
+ <ul>
148
+ <%% params[:original_session].each do |param, value| %>
149
+ <li><strong><%%= param %>:</strong> <%%= value.inspect %></li>
150
+ <%% end %>
151
+ <%%= "<li>None</li>" if params[:original_session].empty? %>
152
+ </ul>
153
+
154
+ <h3>Cookies</h3>
155
+ <ul>
156
+ <%% params[:original_cookies].each do |param, value| %>
157
+ <li><strong><%%= param %>:</strong> <%%= value.inspect %></li>
158
+ <%% end %>
159
+ <%%= "<li>None</li>" if params[:original_cookies].empty? %>
160
+ </ul>
161
+ </div>
162
+
163
+ <%% if show_details %>
164
+ <table class="trace">
165
+ <%% @exception.backtrace.each_with_index do |line, index| %>
166
+ <tbody class="close">
167
+ <tr class="file">
168
+ <td class="expand">
169
+ </td>
170
+ <td class="path">
171
+ <%%= (line.match(/^([^:]+)/)[1] rescue 'unknown').sub(/\/((opt|usr)\/local\/lib\/(ruby\/)?(gems\/)?(1.8\/)?(gems\/)?|.+\/app\/)/, '') %>
172
+ <%% unless line.match(/\.erb:/) %>
173
+ in "<strong><%%= line.match(/:in `(.+)'$/)[1] rescue '?' %></strong>"
174
+ <%% else %>
175
+ (<strong>ERB Template</strong>)
176
+ <%% end %>
177
+ </td>
178
+ <td class="line">
179
+ <a href="txmt://open?url=file://<%%=file = (line.match(/^([^:]+)/)[1] rescue 'unknown')%>&amp;line=<%%= lineno = line.match(/:([0-9]+):/)[1] rescue '?' %>"><%%=lineno%></a>&nbsp;
180
+ </td>
181
+ </tr>
182
+ <tr class="source">
183
+ <td class="collapse">
184
+ </td>
185
+ <td class="code" colspan="2"><%% (__caller_lines__(file, lineno, 5) rescue []).each do |llineno, lcode, lcurrent| %>
186
+ <a href="txmt://open?url=file://<%%=file%>&amp;line=<%%=llineno%>"><%%= llineno %></a><%%='<em>' if llineno==lineno.to_i %><%%= lcode.size > 90 ? CGI.escapeHTML(lcode[0..90])+'<span class="more">......</span>' : CGI.escapeHTML(lcode) %><%%='</em>' if llineno==lineno.to_i %>
187
+ <%% end %>
188
+
189
+ </td>
190
+ </tr>
191
+ </tbody>
192
+ <%% end %>
193
+ </table>
194
+ <script type="text/javascript" charset="utf-8">
195
+ // swop the open & closed classes
196
+ els = document.getElementsByTagName('td');
197
+ for(i=0; i<els.length; i++){
198
+ if(els[i].className=='expand' || els[i].className=='collapse'){
199
+ els[i].onclick = function(e){
200
+ tbody = this.parentNode.parentNode;
201
+ if(tbody.className=='open'){
202
+ tbody.className='closed';
203
+ }else{
204
+ tbody.className='open';
205
+ }
206
+ }
207
+ }
208
+ }
209
+ </script>
210
+ <%% end %>
211
+ <div class="footer">
212
+ lots of love, from <a href="#">merb</a>
213
+ </div>
214
+ </div>
215
+ </body>
216
+ </html>
@@ -0,0 +1,38 @@
1
+ <div id="container">
2
+ <div id="header-container">
3
+ <img src="/images/merb.jpg">
4
+ <!-- <h1>Mongrel + Erb</h1> -->
5
+ <h2>pocket rocket web framework</h2>
6
+ <hr />
7
+ </div>
8
+
9
+ <div id="left-container">
10
+ <h3>Exception:</h3>
11
+ <p><%%= params[:exception] %></p>
12
+ </div>
13
+
14
+ <div id="main-container">
15
+ <h3>Why am I seeing this page?</h3>
16
+ <p>Merb couldn't find an appropriate content_type to return,
17
+ based on what you said was available via provides() and
18
+ what the client requested. For more information, visit
19
+ http://merbivore.com/fixing_406_issues
20
+ </p>
21
+
22
+ <h3>Where can I find help?</h3>
23
+ <p>If you have any questions or if you can't figure something out, please take a
24
+ look at our <a href="http://merb.devjavu.com/"> project development page</a> or,
25
+ feel free to come chat at irc.freenode.net, channel #merb.</p>
26
+
27
+ <h3>How do I edit this page?</h3>
28
+ <p>You can change what people see when this happens byy editing <tt>app/views/exceptions/not_found.html.erb</tt>.</p>
29
+
30
+ </div>
31
+
32
+ <div id="footer-container">
33
+ <hr />
34
+ <div class="left"></div>
35
+ <div class="right">&copy; 2007 the merb dev team</div>
36
+ <p>&nbsp;</p>
37
+ </div>
38
+ </div>
@@ -0,0 +1,40 @@
1
+ <div id="container">
2
+ <div id="header-container">
3
+ <img src="/images/merb.jpg">
4
+ <!-- <h1>Mongrel + Erb</h1> -->
5
+ <h2>pocket rocket web framework</h2>
6
+ <hr />
7
+ </div>
8
+
9
+ <div id="left-container">
10
+ <h3>Exception:</h3>
11
+ <p><%%= params[:exception] %></p>
12
+ </div>
13
+
14
+ <div id="main-container">
15
+ <h3>Welcome to Merb!</h3>
16
+ <p>Merb is a light-weight MVC framework written in Ruby. We hope you enjoy it.</p>
17
+
18
+ <h3>Where can I find help?</h3>
19
+ <p>If you have any questions or if you can't figure something out, please take a
20
+ look at our <a href="http://merb.devjavu.com/"> project development page</a> or,
21
+ feel free to come chat at irc.freenode.net, channel #merb.</p>
22
+
23
+ <h3>How do I edit this page?</h3>
24
+ <p>You're seeing this page because you need to edit the following files:
25
+ <ul>
26
+ <li>config/merb.yml <strong><em>(optional)</em></strong></li>
27
+ <li>config/router.rb <strong><em>(recommended)</em></strong></li>
28
+ <li>app/views/exceptions/not_found.html.erb <strong><em>(recommended)</em></strong></li>
29
+ <li>app/views/layout/application.html.erb <strong><em>(change this layout)</em></strong></li>
30
+ </ul>
31
+ </p>
32
+ </div>
33
+
34
+ <div id="footer-container">
35
+ <hr />
36
+ <div class="left"></div>
37
+ <div class="right">&copy; 2007 the merb dev team</div>
38
+ <p>&nbsp;</p>
39
+ </div>
40
+ </div>
@@ -0,0 +1,11 @@
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
2
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-us" lang="en-us">
3
+ <head>
4
+ <title>Fresh Merb App</title>
5
+ <meta http-equiv="content-type" content="text/html; charset=utf-8" />
6
+ <link rel="stylesheet" href="/stylesheets/master.css" type="text/css" media="screen" charset="utf-8">
7
+ </head>
8
+ <body>
9
+ <%%= catch_content :for_layout %>
10
+ </body>
11
+ </html>
@@ -0,0 +1,3 @@
1
+ file "README"
2
+ file "Rakefile"
3
+ directory "app"
@@ -0,0 +1,41 @@
1
+ require(File.join(File.dirname(__FILE__), "/../spec_helper"))
2
+
3
+ describe KISSGen::Generator do
4
+ describe "new" do
5
+ before(:each) do
6
+ @copy_from = File.dirname(__FILE__) + "/generators/merb_app/app"
7
+ @copy_to = File.dirname(__FILE__) + "/generators/empty/app"
8
+ @path = "views/layout/application.html.erb"
9
+ @generator = mock(KISSGen::Generator)
10
+ @generator.stub!(:path).and_return(@copy_from)
11
+ @generator.stub!(:copy_path).and_return(@copy_to)
12
+ @template = KISSGen::Template.new(@generator, @path, @path)
13
+ end
14
+
15
+ def application_erb_output
16
+ %Q(<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
17
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-us" lang="en-us">
18
+ <head>
19
+ <title>Fresh Merb App</title>
20
+ <meta http-equiv="content-type" content="text/html; charset=utf-8" />
21
+ <link rel="stylesheet" href="/stylesheets/master.css" type="text/css" media="screen" charset="utf-8">
22
+ </head>
23
+ <body>
24
+ <%= catch_content :for_layout %>
25
+ </body>
26
+ </html>)
27
+ end
28
+
29
+ it "should have an erb parsed output" do
30
+ @template.output.should == application_erb_output
31
+ end
32
+
33
+ it "should create the file in the copy directory and feed it the erb output" do
34
+ @template.create
35
+ IO.read(@template.full_copy_path).should == application_erb_output
36
+ @template.delete
37
+ FileUtils.remove_dir(@copy_to)
38
+ end
39
+
40
+ end
41
+ end
@@ -0,0 +1,3 @@
1
+ --color
2
+ #--exclude gems
3
+ #--exclude spec
@@ -0,0 +1,7 @@
1
+ require "rubygems"
2
+ require "spec"
3
+ require File.dirname(__FILE__) + "/../lib/kissgen"
4
+
5
+ Spec::Runner.configure do |config|
6
+ # Config here
7
+ end
metadata ADDED
@@ -0,0 +1,97 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: kissgen
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Lance Carlson
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2008-03-08 23:00:00 -05:00
13
+ default_executable:
14
+ dependencies: []
15
+
16
+ description: A Simple Code Generator
17
+ email: lancecarlson@gmail.com
18
+ executables:
19
+ - kissgen
20
+ extensions: []
21
+
22
+ extra_rdoc_files:
23
+ - README
24
+ - LICENSE
25
+ files:
26
+ - LICENSE
27
+ - README
28
+ - Rakefile
29
+ - bin/kissgen
30
+ - spec/public
31
+ - spec/public/app
32
+ - spec/public/app/views
33
+ - spec/public/app/views/layout
34
+ - spec/public/generator_spec.rb
35
+ - spec/public/generators
36
+ - spec/public/generators/empty
37
+ - spec/public/generators/merb_app
38
+ - spec/public/generators/merb_app/app
39
+ - spec/public/generators/merb_app/app/controllers
40
+ - spec/public/generators/merb_app/app/controllers/application.rb
41
+ - spec/public/generators/merb_app/app/controllers/exceptions.rb
42
+ - spec/public/generators/merb_app/app/controllers/posts.rb
43
+ - spec/public/generators/merb_app/app/helpers
44
+ - spec/public/generators/merb_app/app/helpers/global_helpers.rb
45
+ - spec/public/generators/merb_app/app/models
46
+ - spec/public/generators/merb_app/app/models/article.rb
47
+ - spec/public/generators/merb_app/app/views
48
+ - spec/public/generators/merb_app/app/views/exceptions
49
+ - spec/public/generators/merb_app/app/views/exceptions/internal_server_error.html.erb
50
+ - spec/public/generators/merb_app/app/views/exceptions/not_acceptable.html.erb
51
+ - spec/public/generators/merb_app/app/views/exceptions/not_found.html.erb
52
+ - spec/public/generators/merb_app/app/views/layout
53
+ - spec/public/generators/merb_app/app/views/layout/application.html.erb
54
+ - spec/public/generators/merb_app/app/views/posts
55
+ - spec/public/generators/merb_app/app/views/posts/index.html.erb
56
+ - spec/public/generators/merb_app/Rakefile
57
+ - spec/public/generators/merb_app/README
58
+ - spec/public/generators/merb_app/setup.rb
59
+ - spec/public/template_spec.rb
60
+ - spec/publicapp
61
+ - spec/publicapp/views
62
+ - spec/publicapp/views/layout
63
+ - spec/spec.opts
64
+ - spec/spec_helper.rb
65
+ - lib/kissgen
66
+ - lib/kissgen/generator.rb
67
+ - lib/kissgen/template.rb
68
+ - lib/kissgen/version.rb
69
+ - lib/kissgen.rb
70
+ has_rdoc: true
71
+ homepage: http://rcgen.rubyforge.org
72
+ post_install_message:
73
+ rdoc_options: []
74
+
75
+ require_paths:
76
+ - lib
77
+ required_ruby_version: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - ">="
80
+ - !ruby/object:Gem::Version
81
+ version: 1.8.4
82
+ version:
83
+ required_rubygems_version: !ruby/object:Gem::Requirement
84
+ requirements:
85
+ - - ">="
86
+ - !ruby/object:Gem::Version
87
+ version: "0"
88
+ version:
89
+ requirements: []
90
+
91
+ rubyforge_project:
92
+ rubygems_version: 1.0.1
93
+ signing_key:
94
+ specification_version: 2
95
+ summary: A Simple Code Generator
96
+ test_files: []
97
+