glog 0.0.1 → 0.0.2

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.
data/lib/glog.rb ADDED
@@ -0,0 +1,20 @@
1
+ require 'rubygems'
2
+ require 'rack'
3
+ require 'jadof'
4
+ require 'haml'
5
+ require 'glog/page'
6
+ require 'glog/server'
7
+
8
+ module Glog
9
+
10
+ @@config = nil
11
+
12
+ def self.config
13
+ @@config ||= YAML.load_file('glog.yaml')
14
+ end
15
+
16
+ def self.config=(config)
17
+ @@config = config
18
+ end
19
+
20
+ end
data/lib/glog/page.rb ADDED
@@ -0,0 +1,41 @@
1
+ module Glog
2
+ class Page < JADOF::Page
3
+ def self.root
4
+ get(Glog.config['root'])
5
+ end
6
+
7
+ def render
8
+ self.template == false ? super : wrap_with_template(super)
9
+ end
10
+
11
+ def template_path
12
+ if self.template
13
+ "templates/#{self.template}.haml"
14
+ else self.parent.size > 0
15
+ detect_template_from_parent
16
+ end
17
+ end
18
+
19
+ def detect_template_from_parent
20
+ first_match = false
21
+ segments = self.parent.split(File::SEPARATOR)
22
+ segments.size.times do |i|
23
+ template_path = (['templates'] + segments[0..-(i-1)] + ['default.haml']).join(File::SEPARATOR)
24
+ if File.exists?(template_path)
25
+ first_match = template_path
26
+ break
27
+ end
28
+ segments.pop
29
+ end
30
+ first_match || 'templates/default.haml'
31
+ end
32
+
33
+ private
34
+
35
+ def wrap_with_template(content)
36
+ locals = { :page => self, :config => Glog.config, :pages => self.class }
37
+ Haml::Engine.new(File.read(template_path)).to_html(nil, locals)
38
+ end
39
+
40
+ end
41
+ end
@@ -0,0 +1,40 @@
1
+ module Glog
2
+ class Server
3
+
4
+ def call(env)
5
+ env['PATH_INFO'] == '/' ? send_root_page : send_path(env['PATH_INFO'])
6
+ end
7
+
8
+ private
9
+
10
+ def send_path(path)
11
+ path = path[1..-1] # /my/page => my/page
12
+ # First trying to load page
13
+ if page = Page.get(path)
14
+ send_page(page)
15
+ # Then trying to load directory index if any
16
+ elsif page = try_dir_index(path)
17
+ send_page(page)
18
+ else
19
+ send_not_found
20
+ end
21
+ end
22
+
23
+ def try_dir_index(path)
24
+ File.directory?(File.join('pages', path))
25
+ Page.get(File.join(path, 'index'))
26
+ end
27
+
28
+ def send_page(page)
29
+ [200, { 'Content-Type' => 'text/html' }, page.render]
30
+ end
31
+
32
+ def send_not_found
33
+ [404, { 'Content-Type' => 'text/html'}, '404 Not Found']
34
+ end
35
+
36
+ def send_root_page
37
+ Page.root ? send_page(Page.root) : send_not_found
38
+ end
39
+ end # Server
40
+ end # Glog
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 0
8
- - 1
9
- version: 0.0.1
8
+ - 2
9
+ version: 0.0.2
10
10
  platform: ruby
11
11
  authors:
12
12
  - Antono Vasiljev
@@ -18,9 +18,23 @@ date: 2010-03-28 00:00:00 +02:00
18
18
  default_executable:
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
21
- name: jadof
21
+ name: rack
22
22
  prerelease: false
23
23
  requirement: &id001 !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - ">="
26
+ - !ruby/object:Gem::Version
27
+ segments:
28
+ - 1
29
+ - 1
30
+ - 0
31
+ version: 1.1.0
32
+ type: :runtime
33
+ version_requirements: *id001
34
+ - !ruby/object:Gem::Dependency
35
+ name: jadof
36
+ prerelease: false
37
+ requirement: &id002 !ruby/object:Gem::Requirement
24
38
  requirements:
25
39
  - - ">="
26
40
  - !ruby/object:Gem::Version
@@ -30,11 +44,11 @@ dependencies:
30
44
  - 6
31
45
  version: 0.1.6
32
46
  type: :runtime
33
- version_requirements: *id001
47
+ version_requirements: *id002
34
48
  - !ruby/object:Gem::Dependency
35
49
  name: haml
36
50
  prerelease: false
37
- requirement: &id002 !ruby/object:Gem::Requirement
51
+ requirement: &id003 !ruby/object:Gem::Requirement
38
52
  requirements:
39
53
  - - ">="
40
54
  - !ruby/object:Gem::Version
@@ -44,11 +58,25 @@ dependencies:
44
58
  - 0
45
59
  version: 2.2.0
46
60
  type: :runtime
47
- version_requirements: *id002
61
+ version_requirements: *id003
62
+ - !ruby/object:Gem::Dependency
63
+ name: maruku
64
+ prerelease: false
65
+ requirement: &id004 !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - ">="
68
+ - !ruby/object:Gem::Version
69
+ segments:
70
+ - 0
71
+ - 6
72
+ - 0
73
+ version: 0.6.0
74
+ type: :runtime
75
+ version_requirements: *id004
48
76
  - !ruby/object:Gem::Dependency
49
77
  name: rspec
50
78
  prerelease: false
51
- requirement: &id003 !ruby/object:Gem::Requirement
79
+ requirement: &id005 !ruby/object:Gem::Requirement
52
80
  requirements:
53
81
  - - ">="
54
82
  - !ruby/object:Gem::Version
@@ -58,11 +86,11 @@ dependencies:
58
86
  - 0
59
87
  version: 1.3.0
60
88
  type: :development
61
- version_requirements: *id003
89
+ version_requirements: *id005
62
90
  - !ruby/object:Gem::Dependency
63
91
  name: rack-test
64
92
  prerelease: false
65
- requirement: &id004 !ruby/object:Gem::Requirement
93
+ requirement: &id006 !ruby/object:Gem::Requirement
66
94
  requirements:
67
95
  - - ">="
68
96
  - !ruby/object:Gem::Version
@@ -72,19 +100,19 @@ dependencies:
72
100
  - 3
73
101
  version: 0.5.3
74
102
  type: :development
75
- version_requirements: *id004
76
- description: Blog your git repository
103
+ version_requirements: *id006
104
+ description:
77
105
  email: antono.vasiljev@gmail.com
78
106
  executables: []
79
107
 
80
108
  extensions: []
81
109
 
82
- extra_rdoc_files:
83
- - LICENSE
84
- - README.markdown
110
+ extra_rdoc_files: []
111
+
85
112
  files:
86
- - LICENSE
87
- - README.markdown
113
+ - lib/glog.rb
114
+ - lib/glog/page.rb
115
+ - lib/glog/server.rb
88
116
  has_rdoc: true
89
117
  homepage: http://github.com/antono/glog
90
118
  licenses: []
@@ -114,11 +142,6 @@ rubyforge_project:
114
142
  rubygems_version: 1.3.6
115
143
  signing_key:
116
144
  specification_version: 3
117
- summary: Git powered bogging engine
118
- test_files:
119
- - spec/fixtures/example/plugins/google_analytics.rb
120
- - spec/fixtures/example/plugins/chrome_frame.rb
121
- - spec/fixtures/example/plugins/canonical_host.rb
122
- - spec/fixtures/example/plugins/no_ie.rb
123
- - spec/glog_spec.rb
124
- - spec/spec_helper.rb
145
+ summary: Git powered bogging/cms engine
146
+ test_files: []
147
+
data/LICENSE DELETED
@@ -1,20 +0,0 @@
1
- Copyright (c) 2009 Antono Vasiljev
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.markdown DELETED
@@ -1,42 +0,0 @@
1
- Glog - simplier than toto
2
- =========================
3
-
4
- Glog is Rack Middleware to serve directory of files as blog or site.
5
-
6
- Glog inspired by [toto](http://github.com/cloudhead/toto) and based on
7
- [JADOF](http://github.com/remi/jadof).
8
-
9
- Glog makes less assumptions about your urls.
10
- **J**ust **a** **D**irectory **o**f **F**iles.
11
-
12
-
13
- TODO
14
-
15
-
16
- Plugins
17
- -------
18
-
19
- Use rack middleware as plugins:
20
-
21
- require 'rack/noie'
22
- use Rack::NoIE, :redirect => '/noie.html'
23
-
24
- require 'rack/google\_analytics'
25
- use Rack::GoogleAnalytics, 'UA-1234567-0'
26
-
27
-
28
- Note on Patches/Pull Requests
29
- -----------------------------
30
-
31
- - Fork the project.
32
- - Make your feature addition or bug fix.
33
- - Add tests for it. This is important so I don't break it in a
34
- future version unintentionally.
35
- - Commit, do not mess with rakefile, version, or history.
36
- (if you want to have your own version, that is fine but bump version in a commit by itself I can ignore when I pull)
37
- - Send me a pull request. Bonus points for topic branches.
38
-
39
- Copyright
40
- ---------
41
-
42
- Copyright (c) 2010 Antono Vasiljev. See LICENSE for details.
@@ -1,25 +0,0 @@
1
- # http://gist.github.com/206213
2
- module Rack
3
- class CanonicalHost
4
- def initialize(app, host=nil, &block)
5
- @app = app
6
- @host = (block_given? && block.call) || host
7
- end
8
-
9
- def call(env)
10
- if url = url(env)
11
- [301, { 'Location' => url }, ['Redirecting...']]
12
- else
13
- @app.call(env)
14
- end
15
- end
16
-
17
- def url(env)
18
- if @host && env['SERVER_NAME'] != @host
19
- url = Rack::Request.new(env).url
20
- url.sub(%r{\A(https?://)(.*?)(:\d+)?(/|$)}, "\\1#{@host}\\3/")
21
- end
22
- end
23
- private :url
24
- end
25
- end
@@ -1,50 +0,0 @@
1
- # http://gist.github.com/206201
2
- # http://coderack.org/users/luigi/entries/4-rackchromeframe
3
- module Rack
4
- class ChromeFrame
5
-
6
- def initialize(app, options={})
7
- @app = app
8
- end
9
-
10
- def call(env)
11
- status, headers, response = @app.call(env)
12
- if env['HTTP_USER_AGENT'] =~ /MSIE/ && response.content_type == 'text/html'
13
- new_body = insert_goods(build_response_body(response))
14
- new_headers = recalculate_body_length(headers, new_body)
15
- [status, new_headers, new_body]
16
- else
17
- [status, headers, response]
18
- end
19
- end
20
-
21
- def build_response_body(response)
22
- response_body = ""
23
- response.each { |part| response_body += part }
24
- response_body
25
- end
26
-
27
- def recalculate_body_length(headers, body)
28
- new_headers = headers
29
- new_headers["Content-Length"] = body.length.to_s
30
- new_headers
31
- end
32
-
33
- def insert_goods(body)
34
- head = <<-HEAD
35
- <meta http-equiv="X-UA-Compatible" content="chrome=1">
36
- HEAD
37
-
38
- bod = <<-BOD
39
- <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/chrome-frame/1/CFInstall.min.js"></script>
40
- <div id="cf-placeholder"></div>
41
- <script>CFInstall.check({node: "cf-placeholder"});</script>
42
- BOD
43
-
44
- body.gsub!(/<\/head>/, head + "\n</head>")
45
- body.gsub!(/<\/body>/, bod + "\n</body>")
46
- body
47
- end
48
-
49
- end
50
- end
@@ -1,45 +0,0 @@
1
- # http://gist.github.com/207948
2
- # http://coderack.org/users/sam/entries/21-rackgoogleanalytics
3
- module Rack
4
- class GoogleAnalytics
5
- TRACKING_CODE = <<-EOCODE
6
- <script type="text/javascript">
7
- var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
8
- document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
9
- </script>
10
- <script type="text/javascript">
11
- try {
12
- var pageTracker = _gat._getTracker("{{ID}}");
13
- pageTracker._trackPageview();
14
- } catch(err) {}</script>
15
- EOCODE
16
-
17
- def initialize(app, id)
18
- @app = app
19
- @id = id
20
- end
21
-
22
- def call(env)
23
- status, headers, body = @app.call(env)
24
-
25
- body.each do |part|
26
- if part =~ /<\/body>/
27
- part.sub!(/<\/body>/, "#{tracking_code}</body>")
28
-
29
- if headers['Content-Length']
30
- headers['Content-Length'] = (headers['Content-Length'].to_i + tracking_code.length).to_s
31
- end
32
-
33
- break
34
- end
35
- end
36
-
37
- [status, headers, body]
38
- end
39
-
40
- private
41
- def tracking_code
42
- TRACKING_CODE.sub(/\{\{ID\}\}/, @id)
43
- end
44
- end
45
- end
@@ -1,38 +0,0 @@
1
- # http://gist.github.com/207947
2
- # http://coderack.org/users/julioody/entries/20-racknoie
3
- module Rack
4
- class NoIE
5
- def initialize(app, options = {})
6
- @app = app
7
- @options = options
8
- @options[:redirect] ||= 'http://www.microsoft.com/windows/internet-explorer/default.aspx'
9
- @options[:minimum] ||= 7.0
10
- end
11
-
12
- def call(env)
13
- ie_found_in?(env) ? kick_it : @app.call(env)
14
- end
15
-
16
- private
17
- def ie_found_in?(env)
18
- if env['HTTP_USER_AGENT']
19
- is_ie?(env['HTTP_USER_AGENT']) and ie_version(env['HTTP_USER_AGENT']) < @options[:minimum] and @options[:redirect] != env['PATH_INFO']
20
- end
21
- end
22
-
23
- def is_ie?(ua_string)
24
- # We need at least one digit to be able to get the version, hence the \d
25
- ua_string.match(/MSIE \d/) ? true : false
26
- end
27
-
28
- def ie_version(ua_string)
29
- ua_string.match(/MSIE (\S+)/)[1].to_f
30
- end
31
-
32
- def kick_it
33
- [301, {'Location' => @options[:redirect]}, 'Fail browser is fail']
34
- end
35
- end
36
- end
37
-
38
- use Rack::NoIE, :redirect => Glog.config['plugins']['no_ie']
data/spec/glog_spec.rb DELETED
@@ -1,82 +0,0 @@
1
- require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
-
3
- describe "Glog" do
4
-
5
- let(:app) { create_from_fixture('example') }
6
-
7
- it "should have config accessor" do
8
- Glog.config = 'config'
9
- Glog.config.should == 'config'
10
- end
11
-
12
- describe "Glog::Page" do
13
- describe "Page.root" do
14
- it "should return root page defined in Glog.config" do
15
- Glog::Page.root.title.should == 'Hello All'
16
- end
17
- end
18
-
19
- describe "#template_path" do
20
- describe "when template defined in file" do
21
- it "should return templates/{Page#template}.haml" do
22
- page = Glog::Page.get('template_test/template1_test')
23
- page.should_not be_nil
24
- page.template_path.should == 'templates/template1.haml'
25
- end
26
- end
27
-
28
- describe "when Page#template is undefined" do
29
- it "should should use default.html from tepmlates/{Page#parent}" do
30
- page = Glog::Page.get("template_test/undefined_template")
31
- page.parent.should == 'template_test'
32
- page.template_path.should == "templates/#{page.parent}/default.haml"
33
- end
34
-
35
- describe "if there is no defaut.html in templats/{Page#parent}" do
36
- it "should inherit default.html template from parent dirs" do
37
- page = Glog::Page.get("template_test/deep/template")
38
- page.parent.should == 'template_test/deep'
39
- page.template_path.should == "templates/template_test/default.haml"
40
- # And very deep page...
41
- page = Glog::Page.get("deep/deep/deep/page/with/undefined/template/here")
42
- page.parent.should == 'deep/deep/deep/page/with/undefined/template'
43
- page.template_path.should == "templates/default.haml"
44
- end
45
- end
46
- end
47
- end
48
- end
49
-
50
- describe "Glog::Server" do
51
- include Rack::Test::Methods
52
-
53
- describe "GET /" do
54
- it "should be ok" do
55
- get '/'
56
- last_response.should be_ok
57
- end
58
-
59
- it "should render text from page defined as root in Glog.config" do
60
- get '/'
61
- last_response.body.should =~ /Hello All/
62
- end
63
- end
64
-
65
- describe "GET /some/dir" do
66
- it "should try to render /some/dir/index if index exists" do
67
- dir = 'spec/fixtures/example/pages/epo/2010'
68
- File.exists?(dir).should be_true
69
- File.directory?(dir).should be_true
70
- get '/epo/2010'
71
- last_response.should be_ok
72
- last_response.body.should match(/this is index/)
73
- end
74
-
75
- it "should return 404 if no index found" do
76
- get '/epo/2010'
77
- last_response.should be_ok
78
- last_response.body.should match(/this is index/)
79
- end
80
- end
81
- end # describe Server
82
- end # describe Glog
data/spec/spec_helper.rb DELETED
@@ -1,18 +0,0 @@
1
- $LOAD_PATH.unshift(File.dirname(__FILE__))
2
- $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
3
-
4
- require 'rubygems'
5
- require 'glog'
6
- require 'spec'
7
- require 'spec/autorun'
8
- require 'spec/interop/test'
9
- require 'rack/test'
10
-
11
- def create_from_fixture(name)
12
- Dir.chdir(File.join(File.dirname(__FILE__), "fixtures", name))
13
- Glog.config = YAML.load_file('glog.yaml')
14
- @app = Glog::Server.new
15
- end
16
-
17
- Spec::Runner.configure do |config|
18
- end