grat 0.2.4 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
data/Rakefile CHANGED
@@ -13,7 +13,7 @@ begin
13
13
  gem.add_development_dependency "yard", ">= 0"
14
14
  gem.add_runtime_dependency 'sinatra'
15
15
  gem.add_runtime_dependency 'haml'
16
- gem.add_runtime_dependency 'mongoid', "0.9.11"
16
+ gem.add_runtime_dependency 'mongo_mapper', "0.6.8"
17
17
  gem.add_runtime_dependency 'json'
18
18
  # gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
19
19
  end
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.2.4
1
+ 0.3.0
data/config.ru CHANGED
@@ -2,6 +2,7 @@
2
2
  require 'rubygems'
3
3
  require 'rack'
4
4
  require 'lib/grat'
5
+ require 'ruby-debug'
5
6
 
6
7
  Grat.database_conf # uses defaults
7
8
  # to override:
data/grat.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{grat}
8
- s.version = "0.2.4"
8
+ s.version = "0.3.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Sam Schenkman-Moore"]
12
- s.date = %q{2009-12-21}
12
+ s.date = %q{2009-12-29}
13
13
  s.description = %q{Basic interface for making webpages with Haml and Erb. Supports nested templates.}
14
14
  s.email = %q{samsm@samsm.com}
15
15
  s.extra_rdoc_files = [
@@ -97,20 +97,20 @@ Gem::Specification.new do |s|
97
97
  s.add_development_dependency(%q<yard>, [">= 0"])
98
98
  s.add_runtime_dependency(%q<sinatra>, [">= 0"])
99
99
  s.add_runtime_dependency(%q<haml>, [">= 0"])
100
- s.add_runtime_dependency(%q<mongoid>, ["= 0.9.11"])
100
+ s.add_runtime_dependency(%q<mongo_mapper>, ["= 0.6.8"])
101
101
  s.add_runtime_dependency(%q<json>, [">= 0"])
102
102
  else
103
103
  s.add_dependency(%q<yard>, [">= 0"])
104
104
  s.add_dependency(%q<sinatra>, [">= 0"])
105
105
  s.add_dependency(%q<haml>, [">= 0"])
106
- s.add_dependency(%q<mongoid>, ["= 0.9.11"])
106
+ s.add_dependency(%q<mongo_mapper>, ["= 0.6.8"])
107
107
  s.add_dependency(%q<json>, [">= 0"])
108
108
  end
109
109
  else
110
110
  s.add_dependency(%q<yard>, [">= 0"])
111
111
  s.add_dependency(%q<sinatra>, [">= 0"])
112
112
  s.add_dependency(%q<haml>, [">= 0"])
113
- s.add_dependency(%q<mongoid>, ["= 0.9.11"])
113
+ s.add_dependency(%q<mongo_mapper>, ["= 0.6.8"])
114
114
  s.add_dependency(%q<json>, [">= 0"])
115
115
  end
116
116
  end
data/lib/environment.rb CHANGED
@@ -7,40 +7,38 @@ module Grat
7
7
  def self.root_path
8
8
  File.dirname(File.dirname(__FILE__))
9
9
  end
10
-
10
+
11
11
  def self.lib_path
12
12
  root_path + '/lib'
13
13
  end
14
-
14
+
15
15
  def self.view_path
16
16
  root_path + '/views'
17
17
  end
18
-
18
+
19
19
  def self.database_conf(options = {})
20
20
  @@database_conf = options
21
21
  end
22
-
22
+
23
23
  def self.database_load
24
- require 'mongoid'
25
- @@connection = if @@database_conf[:host]
26
- Mongo::Connection.new(@@database_conf[:host])
27
- else
28
- Mongo::Connection.new
24
+ require 'mongo_mapper'
25
+ if @@database_conf[:host]
26
+ MongoMapper.connection = Mongo::Connection.new(@@database_conf[:host])
29
27
  end
30
-
31
- database = @@connection.db(@@database_conf[:database] || 'grat_development')
28
+
29
+ MongoMapper.database = @@database_conf[:database] || 'grat_development'
30
+
32
31
  if @@database_conf[:username] && @@database_conf[:password]
33
- database.authenticate(@@database_conf[:username], @@database_conf[:password])
32
+ MongoMapper.database.authenticate(@@database_conf[:username], @@database_conf[:password])
34
33
  end
35
-
36
- Mongoid.database = database
37
-
34
+
38
35
  require Grat.lib_path + '/grat/content'
39
-
36
+
40
37
  end
41
-
38
+
39
+
42
40
  def self.database
43
- Mongoid.database
41
+ MongoMapper.database
44
42
  end
45
43
  end
46
44
 
data/lib/grat.rb CHANGED
@@ -1,12 +1,12 @@
1
1
  require File.dirname(__FILE__) + '/environment.rb'
2
2
 
3
3
  class Grat::Application < Sinatra::Base
4
-
4
+
5
5
  include Grat::System
6
-
6
+
7
7
  set :views, Grat.view_path
8
8
  set :methodoverride, true
9
-
9
+
10
10
  # serve some static assets directly from gem
11
11
  get '/gratfiles/:filename' do
12
12
  file_data = IO.read(Grat.root_path + '/public/gratfiles/' + params[:filename])
@@ -18,30 +18,30 @@ class Grat::Application < Sinatra::Base
18
18
  end
19
19
  file_data
20
20
  end
21
-
21
+
22
22
  get '/__admin/all' do
23
23
  @pages = model.all
24
24
  @templates = templates
25
25
  haml :list
26
26
  end
27
-
27
+
28
28
  get '/__admin/export' do
29
29
  content_type('text/json')
30
30
  # Content-disposition: attachment; filename=fname.ext
31
31
  response['Content-disposition'] = "attachment; filename=grat-#{request.host}-export-at-#{Time.now.strftime('%Y-%m-%d-%H-%M-%S')}.json"
32
32
  model.all.to_json
33
33
  end
34
-
34
+
35
35
  get '/__admin/import' do
36
36
  haml :import_form
37
37
  end
38
-
38
+
39
39
  post '/__admin/import' do
40
40
  json_text = file_import_text || params[:import][:text]
41
41
  @import_results = import(json_text, params[:import][:strategy])
42
42
  redirect '/__admin/all'
43
43
  end
44
-
44
+
45
45
  # Rather inefficient at present.
46
46
  def import(json_text, strategy)
47
47
  json_to_import = JSON.parse json_text
@@ -59,7 +59,7 @@ class Grat::Application < Sinatra::Base
59
59
  end
60
60
  end
61
61
  end
62
-
62
+
63
63
  def import_record(hash, options = {:replace => false, :check => true})
64
64
  record = model.find_by_url(hash['url']) if options[:check]
65
65
  if record && options[:replace]
@@ -69,21 +69,21 @@ class Grat::Application < Sinatra::Base
69
69
  model.create hash
70
70
  end
71
71
  end
72
-
72
+
73
73
  def file_import_text
74
74
  if params[:import] && params[:import][:file] && params[:import][:file][:tempfile]
75
75
  params[:import][:file][:tempfile].read
76
76
  end
77
77
  end
78
-
78
+
79
79
  get '/__admin/edit/*' do
80
80
  haml :content_form
81
81
  end
82
-
82
+
83
83
  get '/__admin/delete/*' do
84
84
  haml :delete
85
85
  end
86
-
86
+
87
87
  get '/__admin/new' do
88
88
  url = params[:url]
89
89
  if url.to_s[/./]
@@ -101,18 +101,19 @@ class Grat::Application < Sinatra::Base
101
101
  end
102
102
  end
103
103
  end
104
-
104
+
105
105
  put '/*' do
106
106
  content.update_attributes(focus_params)
107
107
  redirect edit_path(content.url)
108
108
  end
109
-
109
+
110
110
  delete '/*' do
111
111
  content.destroy
112
112
  redirect edit_path(content.url)
113
113
  end
114
-
114
+
115
115
  post '/*' do
116
+ # debugger
116
117
  content.update_attributes(focus_params)
117
118
  if params[:content][:submit].include? 'make'
118
119
  redirect edit_path(next_content_url)
@@ -120,7 +121,7 @@ class Grat::Application < Sinatra::Base
120
121
  redirect edit_path(content.url)
121
122
  end
122
123
  end
123
-
124
+
124
125
  def next_content_url
125
126
  current_content = content
126
127
  new_url = '/broken'
@@ -137,10 +138,10 @@ class Grat::Application < Sinatra::Base
137
138
  new_url
138
139
  end
139
140
  end
140
-
141
+
141
142
  get '/*' do
142
143
  pass if content.new_record?
143
-
144
+
144
145
  case request_type
145
146
  when 'html'
146
147
  locals = {}
@@ -155,36 +156,36 @@ class Grat::Application < Sinatra::Base
155
156
  content.to_json
156
157
  end
157
158
  end
158
-
159
+
159
160
  not_found do
160
161
  haml :missing
161
162
  end
162
-
163
+
163
164
  def edit_path(url)
164
165
  "/__admin/edit#{url}"
165
166
  end
166
-
167
+
167
168
  def delete_path(url)
168
169
  "/__admin/delete#{url}"
169
170
  end
170
-
171
+
171
172
  def combine_docs(text,template,vars)
172
173
  template.content_with(vars,text)
173
174
  end
174
-
175
+
175
176
  def haml(*args)
176
177
  require 'haml'
177
178
  super(*args)
178
179
  end
179
-
180
+
180
181
  def templates
181
182
  model.find_all_by_tag('template')
182
183
  end
183
-
184
+
184
185
  helpers do
185
186
  def form_nest(name)
186
187
  "content[#{name}]"
187
188
  end
188
189
  end
189
-
190
+
190
191
  end
data/lib/grat/content.rb CHANGED
@@ -1,75 +1,75 @@
1
- class Grat::Content < Mongoid::Document
2
- include Mongoid::Timestamps
1
+ class Grat::Content
2
+ include MongoMapper::Document
3
3
  attr_accessor :suggested_fields
4
-
5
- field :url
4
+
5
+ key :url
6
6
  validates_uniqueness_of :url
7
- field :content
8
- field :tags, :type => Array
9
- field :template_url
10
-
7
+ key :content
8
+ key :tags, Array
9
+ key :template_url
10
+
11
11
  before_save :detect_default_content_vars
12
- field :default_content_vars, :type => Hash
13
-
12
+ key :default_content_vars, Hash
13
+
14
14
  def attributes_for_variables
15
15
  attributes.reject {|k,v| k == '_id' }
16
16
  end
17
-
17
+
18
18
  def editable_fields
19
19
  attributes.reject {|k,v| uneditable_keys.include? k }
20
20
  end
21
-
21
+
22
22
  def uneditable_keys
23
23
  # url is in here so it can maually be placed at the top of edit form.
24
24
  # Same deal with template_url
25
25
  ["updated_at", "_id", "url", "created_at","content","tags",'template_url','template',
26
26
  'default_content_vars','variables_needed','render_engine_name']
27
27
  end
28
-
28
+
29
29
  def tags=(val)
30
- @attributes[:tags] = (val.kind_of?(Array) ? val : val.split(' '))
30
+ super(val.kind_of?(Array) ? val : val.split(' '))
31
31
  end
32
-
32
+
33
33
  def tags
34
- @attributes[:tags] or []
34
+ super or []
35
35
  end
36
-
36
+
37
37
  def self.find_all_by_tag(tag_name)
38
38
  all(:conditions => {'tags' => [tag_name]})
39
39
  end
40
-
40
+
41
41
  def type
42
42
  self.class.to_s.sub(/.+::/, '')
43
43
  end
44
-
44
+
45
45
  def default_content_vars
46
- @attributes[:default_content_vars] or {}
46
+ super or {}
47
47
  end
48
-
48
+
49
49
  def default_content_vars=(val)
50
- @attributes[:default_content_vars] = val.kind_of?(String) ? JSON.parse(val) : val
50
+ super val.kind_of?(String) ? JSON.parse(val) : val
51
51
  end
52
-
52
+
53
53
  def template
54
54
  @template ||= Grat::Content.find_by_url(template_url) if template_url
55
55
  end
56
-
56
+
57
57
  def template=(var)
58
58
  raise 'This is probably a mistake.'
59
59
  end
60
-
60
+
61
61
  def template_url=(var)
62
- @attributes[:template_url] = var unless var.nil? || var.empty?
62
+ super(var) unless var.nil? || var.empty?
63
63
  end
64
-
64
+
65
65
  def demo_string
66
66
  'String needed'
67
67
  end
68
-
68
+
69
69
  def demo_array
70
70
  %w(an array is needed)
71
71
  end
72
-
72
+
73
73
  def render_engine
74
74
  if content.match(/\A[!%#.=-]/)
75
75
  :haml
@@ -77,7 +77,7 @@ class Grat::Content < Mongoid::Document
77
77
  :erb
78
78
  end
79
79
  end
80
-
80
+
81
81
  def detect_default_content_vars
82
82
  counter = 0
83
83
  while problem_var = detect_problem_var
@@ -90,18 +90,18 @@ class Grat::Content < Mongoid::Document
90
90
  raise "Don't know how to reconcile."
91
91
  end
92
92
  end
93
-
93
+
94
94
  def haml_render(text, template, vars)
95
95
  require 'haml'
96
96
  haml_template = Haml::Engine.new(template)
97
97
  haml_template.render(haml_template, vars) { text }
98
98
  end
99
-
99
+
100
100
  def erb_render(text, template, vars)
101
101
  require 'erb'
102
102
  ERB.new(template,0).result(Grat::HashBinding.new(vars).get_binding { text })
103
103
  end
104
-
104
+
105
105
  def detect_problem_var(resolution = {})
106
106
  begin
107
107
  rendered = content_with(default_content_vars.merge(resolution), problem_var = nil)
@@ -110,11 +110,11 @@ class Grat::Content < Mongoid::Document
110
110
  $!.to_s.sub(/.+`/,'').sub(/'.+/,'')
111
111
  end
112
112
  end
113
-
113
+
114
114
  def content_with(locals = {},y = '')
115
115
  send "#{render_engine}_render", y, content, locals
116
116
  end
117
-
117
+
118
118
  def suggested_fields
119
119
  @suggested_fields or []
120
120
  end
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.2.4
4
+ version: 0.3.0
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-12-21 00:00:00 -05:00
12
+ date: 2009-12-29 00:00:00 -05:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -43,14 +43,14 @@ dependencies:
43
43
  version: "0"
44
44
  version:
45
45
  - !ruby/object:Gem::Dependency
46
- name: mongoid
46
+ name: mongo_mapper
47
47
  type: :runtime
48
48
  version_requirement:
49
49
  version_requirements: !ruby/object:Gem::Requirement
50
50
  requirements:
51
51
  - - "="
52
52
  - !ruby/object:Gem::Version
53
- version: 0.9.11
53
+ version: 0.6.8
54
54
  version:
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: json