fir 0.0.1 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
data/README.markdown CHANGED
@@ -96,6 +96,10 @@ Most of us will be perfectly happy managing content by editing the files in the
96
96
 
97
97
  Fir isn't a CMS. Instead, it exposes a minimal, RESTful API for managing content. The idea is that content should be managed with specially-designed Fir clients, rather than through Fir itself. You can see how this works by downloading the [example app](http://github.com/jarrett/fir-example), booting it, and visiting `/manage-content.html` in your browser. The source of that page is available [on GitHub](http://github.com/jarrett/fir-example/blob/master/public/manage-content.html).
98
98
 
99
+ Fir's API uses HTTP basic authentication. The users list is stored in `users.yml`. To create a user or change an existing user's password, run:
100
+
101
+ rake users:add user=username pass=password
102
+
99
103
  Webserver Support
100
104
  =================
101
105
 
@@ -0,0 +1,34 @@
1
+ #!/usr/bin/ruby
2
+
3
+ # This script is called when running Fir as a CGI, which isn't recommended.
4
+ # Still, here it is, in case you want to try.
5
+ #
6
+ # This script will not be operational unless the webserver is configured properly.
7
+ # In Apache, you need to enable mod_rewrite in .htaccess files for this directory.
8
+ # That usually means setting AllowOverride to All. (http://httpd.apache.org/docs/1.3/mod/core.html#allowoverride)
9
+ # Apache must also be told that CGI is allowed in this directory. This is done with the ExecCGI option
10
+ # (http://httpd.apache.org/docs/1.3/mod/core.html#options).
11
+ #
12
+ # Learn more about CGI under Apache: http://httpd.apache.org/docs/1.3/howto/cgi.html
13
+ #
14
+ # You must also set up rewrite rules so the requests get sent to this script.
15
+ # See how it's done in .htaccess in this directory.
16
+ #
17
+ # Besides the performance issues, CGI has another disadvantage. Apache (and perhaps others) unescapes
18
+ # URLs before sending them to your CGI script. Passenger does not. Fir, being designed for Passenger,
19
+ # unescapes URLs. So, when running Fir as a CGI, all URLs will be escaped twice. This breaks certain URLs.
20
+ # For example:
21
+ #
22
+ # http://example.com/the%2Bsign
23
+ #
24
+ # ...will break. Apache will unescape the path to "the+sign." Fir will then unescape it again to "the sign."
25
+
26
+ require 'rubygems'
27
+ require 'fir'
28
+
29
+ FIR_ROOT = File.expand_path(File.join(File.dirname(__FILE__), '..'))
30
+ require File.expand_path(File.join(FIR_ROOT, 'config.rb'))
31
+
32
+ builder = Rack::Builder.new(&Fir.boot_proc)
33
+
34
+ Rack::Handler::CGI.run builder
data/lib/fir/boot.rb CHANGED
@@ -2,6 +2,10 @@ module Fir
2
2
  def self.boot_proc
3
3
  # This get called in config.ru. Thus, Passenger can eval the contents of config.ru the way it wants to
4
4
  lambda do
5
+ # Depending on the location of the script that invoked Fir, all the relative paths may be messed up.
6
+ # This happens, for example, when running dispatch.cgi from the public directory. Changing the working
7
+ # directory fixes that.
8
+ Dir.chdir(FIR_ROOT)
5
9
  ::Fir.validate_config
6
10
  #use ::Rack::Reloader # Only when developing the Fir gem
7
11
  use ::Rack::ContentLength
data/lib/fir/pages.rb CHANGED
@@ -34,12 +34,12 @@ module Fir
34
34
  include TemplateLoading
35
35
 
36
36
  def initialize
37
- @page_config = yaml_or_empty('pages.yml')
37
+ @page_config = yaml_or_empty(File.join(FIR_ROOT, 'pages.yml'))
38
38
  @path_mappings = @page_config.inject({}) do |mappings, (page, configs)|
39
39
  mappings[configs['path']] = page if configs['path']
40
40
  mappings
41
41
  end
42
- @menus = yaml_or_empty('menus.yml')
42
+ @menus = yaml_or_empty(File.join(FIR_ROOT, 'menus.yml'))
43
43
  end
44
44
 
45
45
  def call(env)
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
+ - 3
9
+ version: 0.0.3
10
10
  platform: ruby
11
11
  authors:
12
12
  - jarrett
@@ -98,6 +98,7 @@ files:
98
98
  - example/pages/products/dynamite.html.erb
99
99
  - example/pages/products/index.markdown
100
100
  - example/pages/products/mouse-trap.html.erb
101
+ - example/public/dispatch.cgi
101
102
  - example/public/manage-content.html
102
103
  - example/public/static.txt
103
104
  - example/public/stylesheets/style.css