grat 0.0.6.2 → 0.0.7

Sign up to get free protection for your applications and to get access to all the features.
data/Manifest CHANGED
@@ -49,6 +49,7 @@ views/css/_mod_debug.sass
49
49
  views/css/_mod_skins.sass
50
50
  views/css/_template.sass
51
51
  views/css/_template_debug.sass
52
+ views/delete.haml
52
53
  views/import_form.haml
53
54
  views/layout.haml
54
55
  views/list.haml
data/README CHANGED
@@ -20,8 +20,17 @@ Use it like so:
20
20
  run Grat::Application
21
21
  4. rackup (or passenger, if you know how)
22
22
 
23
- 5. http://localhost:9292/admin/ (or whatever host:port) to add content.
24
- 6. http://localhost:9292/admin/mypage edits a page that will be available at http://localhost:9292/mypage
25
- 7. http://localhost:9292/admin/__all for a list of all pages
26
- 8. http://localhost:9292/admin/__export to get a json dump of all pages
27
- 9. http://localhost:9292/admin/__import to import one of those dumps
23
+ 5. http://localhost:9292/__admin/edit/mypage edits a page that will be available at http://localhost:9292/mypage
24
+ 6. http://localhost:9292/__admin/all for a list of all pages
25
+ 7. http://localhost:9292/__admin/export to get a json dump of all pages
26
+ 8. http://localhost:9292/__admin/import to import one of those dumps
27
+
28
+ 9. Protect from writes by strangers with Rack::If
29
+ http://github.com/samsm/Rackif
30
+
31
+ use Rack::If, :method => /(POST)|(PUT)|(DELETE)/ do
32
+ use Rack::Auth::Basic, "Grat protected" do |username, password|
33
+ 'secret' == password
34
+ end
35
+ end
36
+
data/Rakefile CHANGED
@@ -3,7 +3,7 @@ require 'rubygems'
3
3
  require 'rake'
4
4
  require 'echoe'
5
5
 
6
- Echoe.new('grat', '0.0.6.2') do |p|
6
+ Echoe.new('grat', '0.0.7') do |p|
7
7
  p.summary = "Minimal CMS for Rack and MongoDB."
8
8
  p.description = "Basic interface for making webpages with Haml and Erb. Supports nested templates."
9
9
  p.url = "http://samsm.com/"
@@ -2,15 +2,15 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = %q{grat}
5
- s.version = "0.0.6.2"
5
+ s.version = "0.0.7"
6
6
 
7
7
  s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
8
8
  s.authors = ["Sam Schenkman-Moore"]
9
- s.date = %q{2009-11-09}
9
+ s.date = %q{2009-11-13}
10
10
  s.description = %q{Basic interface for making webpages with Haml and Erb. Supports nested templates.}
11
11
  s.email = %q{samsm@samsm.com}
12
12
  s.extra_rdoc_files = ["README", "lib/environment.rb", "lib/grat.rb", "lib/grat/content.rb", "lib/grat/hash_binding.rb", "lib/grat/mongomapper_patches.rb", "lib/grat/system.rb"]
13
- s.files = ["Manifest", "README", "Rakefile", "config.ru", "lib/environment.rb", "lib/grat.rb", "lib/grat/content.rb", "lib/grat/hash_binding.rb", "lib/grat/mongomapper_patches.rb", "lib/grat/system.rb", "public/gratfiles/application.js", "public/gratfiles/custom.css", "public/gratfiles/einars-js-beautify/HTML-Beautify.js", "public/gratfiles/einars-js-beautify/beautify-cl.js", "public/gratfiles/einars-js-beautify/beautify-tests.js", "public/gratfiles/einars-js-beautify/beautify.js", "public/gratfiles/einars-js-beautify/bin/beautify_js", "public/gratfiles/einars-js-beautify/index.html", "public/gratfiles/einars-js-beautify/javascriptobfuscator_unpacker.js", "public/gratfiles/einars-js-beautify/license.txt", "public/gratfiles/einars-js-beautify/sanitytest.js", "public/gratfiles/einars-js-beautify/unmaintained/bbedit/jsBeautify_BBED.scpt", "public/gratfiles/einars-js-beautify/unmaintained/c-sharp/JSBeautify.cs", "public/gratfiles/einars-js-beautify/unmaintained/opera-userscript/make_opera_userscript.sh", "public/gratfiles/einars-js-beautify/unmaintained/opera-userscript/opera_userscript.js", "public/gratfiles/favicon.ico", "public/gratfiles/jquery-combined.min.js", "public/gratfiles/js-beautifier.min.js", "public/gratfiles/oocss.min.css", "public/gratfiles/oocss/content.css", "public/gratfiles/oocss/grids.css", "public/gratfiles/oocss/grids_debug.css", "public/gratfiles/oocss/libraries.css", "public/gratfiles/oocss/mod.css", "public/gratfiles/oocss/mod_debug.css", "public/gratfiles/oocss/mod_skins.css", "public/gratfiles/oocss/talk.css", "public/gratfiles/oocss/talk_skins.css", "public/gratfiles/oocss/template.css", "public/gratfiles/oocss/template_debug.css", "views/content_form.haml", "views/css/_content.sass", "views/css/_custom.sass", "views/css/_grids.sass", "views/css/_grids_debug.sass", "views/css/_libraries.sass", "views/css/_mod.sass", "views/css/_mod_debug.sass", "views/css/_mod_skins.sass", "views/css/_template.sass", "views/css/_template_debug.sass", "views/import_form.haml", "views/layout.haml", "views/list.haml", "views/missing.haml", "grat.gemspec"]
13
+ s.files = ["Manifest", "README", "Rakefile", "config.ru", "lib/environment.rb", "lib/grat.rb", "lib/grat/content.rb", "lib/grat/hash_binding.rb", "lib/grat/mongomapper_patches.rb", "lib/grat/system.rb", "public/gratfiles/application.js", "public/gratfiles/custom.css", "public/gratfiles/einars-js-beautify/HTML-Beautify.js", "public/gratfiles/einars-js-beautify/beautify-cl.js", "public/gratfiles/einars-js-beautify/beautify-tests.js", "public/gratfiles/einars-js-beautify/beautify.js", "public/gratfiles/einars-js-beautify/bin/beautify_js", "public/gratfiles/einars-js-beautify/index.html", "public/gratfiles/einars-js-beautify/javascriptobfuscator_unpacker.js", "public/gratfiles/einars-js-beautify/license.txt", "public/gratfiles/einars-js-beautify/sanitytest.js", "public/gratfiles/einars-js-beautify/unmaintained/bbedit/jsBeautify_BBED.scpt", "public/gratfiles/einars-js-beautify/unmaintained/c-sharp/JSBeautify.cs", "public/gratfiles/einars-js-beautify/unmaintained/opera-userscript/make_opera_userscript.sh", "public/gratfiles/einars-js-beautify/unmaintained/opera-userscript/opera_userscript.js", "public/gratfiles/favicon.ico", "public/gratfiles/jquery-combined.min.js", "public/gratfiles/js-beautifier.min.js", "public/gratfiles/oocss.min.css", "public/gratfiles/oocss/content.css", "public/gratfiles/oocss/grids.css", "public/gratfiles/oocss/grids_debug.css", "public/gratfiles/oocss/libraries.css", "public/gratfiles/oocss/mod.css", "public/gratfiles/oocss/mod_debug.css", "public/gratfiles/oocss/mod_skins.css", "public/gratfiles/oocss/talk.css", "public/gratfiles/oocss/talk_skins.css", "public/gratfiles/oocss/template.css", "public/gratfiles/oocss/template_debug.css", "views/content_form.haml", "views/css/_content.sass", "views/css/_custom.sass", "views/css/_grids.sass", "views/css/_grids_debug.sass", "views/css/_libraries.sass", "views/css/_mod.sass", "views/css/_mod_debug.sass", "views/css/_mod_skins.sass", "views/css/_template.sass", "views/css/_template_debug.sass", "views/delete.haml", "views/import_form.haml", "views/layout.haml", "views/list.haml", "views/missing.haml", "grat.gemspec"]
14
14
  s.homepage = %q{http://samsm.com/}
15
15
  s.rdoc_options = ["--line-numbers", "--inline-source", "--title", "Grat", "--main", "README"]
16
16
  s.require_paths = ["lib"]
@@ -5,6 +5,7 @@ class Grat::Application < Sinatra::Base
5
5
  include Grat::System
6
6
 
7
7
  set :views, Grat.view_path
8
+ set :methodoverride, true
8
9
 
9
10
  # serve some static assets directly from gem
10
11
  get '/gratfiles/:filename' do
@@ -18,27 +19,27 @@ class Grat::Application < Sinatra::Base
18
19
  file_data
19
20
  end
20
21
 
21
- get '/admin/__all' do
22
+ get '/__admin/all' do
22
23
  @pages = model.all
23
24
  @templates = templates
24
25
  haml :list
25
26
  end
26
27
 
27
- get '/admin/__export' do
28
+ get '/__admin/export' do
28
29
  content_type('text/json')
29
30
  # Content-disposition: attachment; filename=fname.ext
30
31
  response['Content-disposition'] = "attachment; filename=grat-#{request.host}-export-at-#{Time.now.strftime('%Y-%m-%d-%H-%M-%S')}.json"
31
32
  model.all.to_json
32
33
  end
33
34
 
34
- get '/admin/__import' do
35
+ get '/__admin/import' do
35
36
  haml :import_form
36
37
  end
37
38
 
38
- post '/admin/__import' do
39
+ post '/__admin/import' do
39
40
  json_text = file_import_text || params[:import][:text]
40
41
  @import_results = import(json_text, params[:import][:strategy])
41
- redirect '/admin/__all'
42
+ redirect '/__admin/all'
42
43
  end
43
44
 
44
45
  # Rather inefficient at present.
@@ -75,13 +76,27 @@ class Grat::Application < Sinatra::Base
75
76
  end
76
77
  end
77
78
 
78
- get '/admin/*' do
79
+ get '/__admin/edit/*' do
79
80
  haml :content_form
80
81
  end
81
82
 
82
- post '/admin/*' do
83
+ get '/__admin/delete/*' do
84
+ haml :delete
85
+ end
86
+
87
+ put '/*' do
88
+ content.update_attributes(focus_params)
89
+ redirect edit_path(content.url)
90
+ end
91
+
92
+ delete '/*' do
93
+ content.destroy
94
+ redirect edit_path(content.url)
95
+ end
96
+
97
+ post '/*' do
83
98
  content.update_attributes(focus_params)
84
- redirect "/admin#{content.url}"
99
+ redirect edit_path(content.url)
85
100
  end
86
101
 
87
102
  get '/*' do
@@ -95,10 +110,22 @@ class Grat::Application < Sinatra::Base
95
110
  end
96
111
  end
97
112
 
113
+ not_found do
114
+ haml :missing
115
+ end
116
+
117
+ def edit_path(url)
118
+ "/__admin/edit#{url}"
119
+ end
120
+
121
+ def delete_path(url)
122
+ "/__admin/delete#{url}"
123
+ end
124
+
98
125
  def combine_docs(text,template,vars)
99
126
  template.content_with(vars,text)
100
127
  end
101
-
128
+
102
129
  def haml(*args)
103
130
  require 'haml'
104
131
  super(*args)
@@ -1,17 +1,17 @@
1
1
  .grat_greet
2
2
  - if content.new_record?
3
- %p
3
+ %p
4
4
  Let's make some
5
5
  %strong= url
6
6
  content!
7
7
  - else
8
8
  %p
9
- Editing
9
+ Editing
10
10
  %a{:href => url}
11
11
  %strong= url
12
12
  content.
13
13
 
14
- %form{:action => "/admin#{url}", :method => 'post'}
14
+ %form{:action => "#{content.url}", :method => 'post'}
15
15
  .template
16
16
  %label{:for => form_nest('template_url')} Template
17
17
  %select{:name => form_nest('template_url')}
@@ -0,0 +1,14 @@
1
+ .grat_greet
2
+ - if content.new_record?
3
+ %p
4
+ What? There's no record here to delete.
5
+ - else
6
+ %p
7
+ Sure you want to delete
8
+ %a{:href => url}
9
+ %strong= url
10
+ content.
11
+
12
+ %form{:action => "#{url}", :method => 'post'}
13
+ %input{:type => 'hidden', :name => '_method', :value => 'delete'}
14
+ %input{:type => 'submit', :name => 'submit', :value => "Delete"}
@@ -1,6 +1,6 @@
1
1
  .grat_greet
2
2
  %p Hey, import some json if you like.
3
- %form{:action => "/admin/__import", :method => 'post', :enctype=>'multipart/form-data' }
3
+ %form{:action => "/__admin/import", :method => 'post', :enctype=>'multipart/form-data' }
4
4
  .import_file
5
5
  %label{:for => 'import_file'} Upload a json file:
6
6
  %input{:id => 'import_file', :type => 'file', :name => 'import[file]'}
@@ -6,7 +6,7 @@
6
6
  %li
7
7
  %a{:href => page.url}= page.url
8
8
  (
9
- %a{:href => "/admin#{page.url}"} edit
9
+ %a{:href => edit_path(page.url)} edit
10
10
  )
11
11
  %h2 Templates
12
12
  %ol
@@ -14,5 +14,5 @@
14
14
  %li
15
15
  %a{:href => template.url}= template.url
16
16
  (
17
- %a{:href => "/admin#{template.url}"} edit
17
+ %a{:href => edit_path(template.url)} edit
18
18
  )
@@ -1,10 +1,10 @@
1
1
  %h1 Wut?
2
- %p
3
- Are you from the future? Yes?
2
+ %p
3
+ Are you from the future? Yes?
4
4
  Ok, well you
5
5
  %i should
6
6
  know this from your research of our time, but FYI: that page doesn't exist yet.
7
- %p
8
- Maybe you'd like to
9
- %a{:href=> "admin#{url}"} create it
7
+ %p
8
+ Maybe you'd like to
9
+ %a{:href=> edit_path(url)} create it
10
10
  \.
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: grat
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.6.2
4
+ version: 0.0.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sam Schenkman-Moore
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-11-09 00:00:00 -05:00
12
+ date: 2009-11-13 00:00:00 -05:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -118,6 +118,7 @@ files:
118
118
  - views/css/_mod_skins.sass
119
119
  - views/css/_template.sass
120
120
  - views/css/_template_debug.sass
121
+ - views/delete.haml
121
122
  - views/import_form.haml
122
123
  - views/layout.haml
123
124
  - views/list.haml