toto-bongo 1.0.1

Sign up to get free protection for your applications and to get access to all the features.
data/.document ADDED
@@ -0,0 +1,5 @@
1
+ README.rdoc
2
+ lib/**/*.rb
3
+ bin/*
4
+ features/**/*.feature
5
+ LICENSE
data/LICENSE ADDED
@@ -0,0 +1,23 @@
1
+ Copyright (c) 2011 Daniel Palacio
2
+
3
+
4
+ Copyright (c) 2009 cloudhead
5
+
6
+ Permission is hereby granted, free of charge, to any person obtaining
7
+ a copy of this software and associated documentation files (the
8
+ "Software"), to deal in the Software without restriction, including
9
+ without limitation the rights to use, copy, modify, merge, publish,
10
+ distribute, sublicense, and/or sell copies of the Software, and to
11
+ permit persons to whom the Software is furnished to do so, subject to
12
+ the following conditions:
13
+
14
+ The above copyright notice and this permission notice shall be
15
+ included in all copies or substantial portions of the Software.
16
+
17
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
18
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
19
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
20
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
21
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
22
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
23
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,186 @@
1
+ toto bongo
2
+ ====
3
+
4
+ Minimal blog forked from toto to use for your existing app's.
5
+ This is very useful for SEO optimization
6
+
7
+
8
+ introduction
9
+ ------------
10
+
11
+ toto-bongo is a git-powered, minimalist blog engine forked from toto.
12
+ There is no toto client, and there probably will never be, everything goes through git.
13
+ From the security stand point, this makes toto-bongo very secure. By
14
+ reducing the attack surface( we don't handle any user input) we've made
15
+ a blog you can trust.
16
+ Other blogs have administration panels, sessions, cookies etc, that lead
17
+ to security vulnerabilities, toto-bongo has non of that.
18
+
19
+ blog in your app in 10 seconds
20
+ ------------------
21
+
22
+ Toto-bongo was designed to be used with a reverse-proxy cache, such as [Varnish](http://varnish-cache.org).
23
+ This makes it an ideal candidate for **[heroku](http://heroku.com)**.
24
+
25
+ This is how to deploy in your existing app:
26
+
27
+ 1. git clone git@github.com:danpal/toto-bongo-blog.git
28
+ 2. Look at toto-bongo-blog Gemfile, add the following gems to your
29
+ Gemfile.
30
+
31
+ gem 'toto-bongo'
32
+ gem 'builder'
33
+ gem 'RedCloth'
34
+ gem 'haml'
35
+
36
+ 3. Toto-bongo runs on rack, you need to modify your existing config.ru
37
+ we provide you with an already existing config.ru, take a look at
38
+ toto-bongo-blog config.ru
39
+ (note this file might be outdated here, look at the one in the
40
+ toto-bongo-blog)
41
+ <pre><code>
42
+ # This file is used by Rack-based servers to start the application.
43
+ require 'toto-bongo'
44
+ require ::File.expand_path('../config/environment', __FILE__)
45
+
46
+ #point to your rails apps /public directory
47
+ use Rack::Static, :urls => ['/stylesheets', '/javascripts', '/images', '/favicon.ico'], :root => 'public'
48
+
49
+ use Rack::ShowExceptions
50
+ use Rack::CommonLogger
51
+
52
+ #run the toto application
53
+ toto_bongo = TotoBongo::Server.new do
54
+
55
+ #override the default location for the toto directories
56
+ TotoBongo::Paths = {
57
+ :templates => "blog/templates",
58
+ :pages => "blog/templates/pages",
59
+ :articles => "blog/articles"
60
+ }
61
+
62
+ # set your config variables here
63
+ set :title, 'toto-bongo blog'
64
+ set :date, lambda {|now| now.strftime("%B #{now.day.ordinal} %Y") }
65
+ set :summary, :max => 500
66
+ set :root, 'index'
67
+ set :prefix, 'blog'
68
+
69
+ if RAILS_ENV != 'production'
70
+ set :url, "http://localhost:3000/blog/"
71
+ else
72
+ set :url, "http://toto-bongo.heroku.com/blog/" #EDIT THIS TO ADD YOUR OWN URL
73
+ end
74
+ end
75
+
76
+ #create a rack app
77
+ app = Rack::Builder.new do
78
+ use Rack::CommonLogger
79
+
80
+ #map requests to /blog to toto
81
+ map '/blog' do
82
+ run toto_bongo
83
+ end
84
+
85
+ #map all the other requests to rails
86
+ map '/' do
87
+ if Rails.version.to_f >= 3.0
88
+ ActionDispatch::Static
89
+ #run [ApplicationName]::Application
90
+ run TotoBongoBlog::Application #change for your application name
91
+ else # Rails 2
92
+ use Rails::Rack::Static
93
+ run ActionController::Dispatcher.new
94
+ end
95
+ end
96
+ end.to_app
97
+
98
+ </code></pre>
99
+
100
+ Then make the following changes
101
+ 1. Change :title
102
+ 2. Run TotoBongoBlog::Application #change for your application name
103
+
104
+
105
+
106
+
107
+
108
+
109
+ how it works
110
+ ------------
111
+
112
+ - content is entirely managed through **git**; you get full fledged version control for free.
113
+ - articles are stored as _.txt_ files, with embeded metadata (in yaml format).
114
+ - articles are processed through a textile converter(RedCloth) by default.
115
+ - templating is done through **HAML**.
116
+ - toto is built right on top of **Rack**.
117
+ - toto was built to take advantage of _HTTP caching_.
118
+ - toto was built with heroku in mind.
119
+ - comments are handled by [disqus](http://disqus.com)
120
+ - individual articles can be accessed through urls such as _/2009/11/21/blogging-with-toto_
121
+ - the archives can be accessed by year, month or day, wih the same format as above.
122
+ - arbitrary metadata can be included in articles files, and accessed from the templates.
123
+ - summaries are generated intelligently by toto, following the `:max` setting you give it.
124
+ - you can also define how long your summary is, by adding `~` at the end of it (`:delim`).
125
+
126
+ toto-blog
127
+ -------
128
+
129
+ ### deployment
130
+
131
+ Toto is built on top of **Rack**, and hence has a **rackup** file: _config.ru_.
132
+
133
+ #### on your own server
134
+
135
+ Once you have created the remote git repo, and pushed your changes to it, you can run toto with any Rack compliant web server,
136
+ such as **thin**, **mongrel** or **unicorn**.
137
+
138
+ With thin, you would do something like:
139
+
140
+ $ thin start -R config.ru
141
+
142
+ With unicorn, you can just do:
143
+
144
+ $ unicorn
145
+
146
+ ### configuration
147
+
148
+ You can configure toto, by modifying the _config.ru_ file. For example, if you want to set the blog author to 'John Galt',
149
+ you could add `set :author, 'John Galt'` inside the `Toto::Server.new` block. Here are the defaults, to get you started:
150
+
151
+ set :author, ENV['USER'] # blog author
152
+ set :title, Dir.pwd.split('/').last # site title
153
+ set :url, 'http://example.com' # site root URL
154
+ set :prefix, 'blog' # common path prefix for all pages
155
+ set :root, "index" # page to load on /
156
+ set :date, lambda {|now| now.strftime("%d/%m/%Y") } # date format for articles
157
+ set :disqus, false # disqus id, or false
158
+ set :summary, :max => 150, :delim => /~\n/ # length of article summary and delimiter
159
+ set :ext, 'txt' # file extension for articles
160
+ set :cache, 28800 # cache site for 8 hours
161
+
162
+ set :to_html do |path, page, ctx| # returns an html, from a path & context
163
+ ERB.new(File.read("#{path}/#{page}.rhtml")).result(ctx)
164
+ end
165
+
166
+ set :error do |code| # The HTML for your error page
167
+ "<font style='font-size:300%'>toto-bongo, error (#{code})</font>"
168
+ end
169
+
170
+ ### Development
171
+
172
+ rake gemspec: To generate the gemspec
173
+ gem build toto-bongo.gemspec to build
174
+
175
+ If you are developing use the following enviromental variable to get
176
+ some debugging output
177
+ export TOTODEBUG=true
178
+
179
+
180
+
181
+ thanks
182
+ ------
183
+
184
+ To toto team, as they are the real developers behind toto.
185
+
186
+
data/Rakefile ADDED
@@ -0,0 +1,31 @@
1
+ require 'rubygems'
2
+ require 'rake'
3
+
4
+ begin
5
+ require 'jeweler'
6
+ Jeweler::Tasks.new do |gem|
7
+ gem.name = "toto-bongo"
8
+ gem.summary = %Q{Tiny blog for your existing app}
9
+ gem.description = %Q{Minimal blog to use with your existing app}
10
+ gem.homepage = "https://github.com/danpal/toto-bongo"
11
+ gem.authors = ["Daniel Palacio"]
12
+ gem.add_development_dependency "riot"
13
+ gem.add_dependency "builder"
14
+ gem.add_dependency "rack"
15
+ gem.add_dependency "RedCloth"
16
+ end
17
+ Jeweler::GemcutterTasks.new
18
+ rescue LoadError
19
+ puts "Jeweler (or a dependency) not available. Install it with: sudo gem install jeweler"
20
+ end
21
+
22
+ require 'rake/testtask'
23
+ Rake::TestTask.new(:test) do |test|
24
+ test.libs << 'lib' << 'test'
25
+ test.pattern = 'test/**/*_test.rb'
26
+ test.verbose = true
27
+ end
28
+
29
+ task :test => :check_dependencies
30
+ task :default => :test
31
+
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 1.0.1
data/lib/ext/ext.rb ADDED
@@ -0,0 +1,46 @@
1
+ class Object
2
+ def meta_def name, &blk
3
+ (class << self; self; end).instance_eval do
4
+ define_method(name, &blk)
5
+ end
6
+ end
7
+ end
8
+
9
+ class String
10
+ def slugize
11
+ self.downcase.gsub(/&/, 'and').gsub(/\s+/, '-').gsub(/[^a-z0-9-]/, '')
12
+ end
13
+
14
+ def humanize
15
+ self.capitalize.gsub(/[-_]+/, ' ')
16
+ end
17
+ end
18
+
19
+ class Fixnum
20
+ def ordinal
21
+ # 1 => 1st
22
+ # 2 => 2nd
23
+ # 3 => 3rd
24
+ # ...
25
+ case self % 100
26
+ when 11..13; "#{self}th"
27
+ else
28
+ case self % 10
29
+ when 1; "#{self}st"
30
+ when 2; "#{self}nd"
31
+ when 3; "#{self}rd"
32
+ else "#{self}th"
33
+ end
34
+ end
35
+ end
36
+ end
37
+
38
+ class Date
39
+ # This check is for people running Toto Bongo with ActiveSupport, avoid a collision
40
+ unless respond_to? :iso8601
41
+ # Return the date as a String formatted according to ISO 8601.
42
+ def iso8601
43
+ ::Time.utc(year, month, day, 0, 0, 0, 0).iso8601
44
+ end
45
+ end
46
+ end