nimbu 0.2.14 → 0.3
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/nimbu/client.rb +4 -0
- data/lib/nimbu/command/themes.rb +14 -0
- data/lib/nimbu/server/base.rb +78 -11
- data/lib/nimbu/version.rb +1 -1
- metadata +22 -22
data/lib/nimbu/client.rb
CHANGED
@@ -105,6 +105,10 @@ class Nimbu::Client
|
|
105
105
|
post("/themes/#{theme}/templates", {:name => name, :content => content})
|
106
106
|
end
|
107
107
|
|
108
|
+
def upload_snippet(theme,name,content)
|
109
|
+
post("/themes/#{theme}/snippets", {:name => name, :content => content})
|
110
|
+
end
|
111
|
+
|
108
112
|
def upload_asset(theme,name,file)
|
109
113
|
post("/themes/#{theme}/assets", {:name => name, :file => file})
|
110
114
|
end
|
data/lib/nimbu/command/themes.rb
CHANGED
@@ -41,6 +41,9 @@ class Nimbu::Command::Themes < Nimbu::Command::Base
|
|
41
41
|
contents["templates"].each do |t|
|
42
42
|
display " - templates/#{t["name"]}"
|
43
43
|
end unless contents["templates"].nil?
|
44
|
+
contents["snippets"].each do |s|
|
45
|
+
display " - snippets/#{s["name"]}"
|
46
|
+
end unless contents["templates"].nil?
|
44
47
|
contents["assets"].each do |a|
|
45
48
|
display " - #{a["folder"]}/#{a["name"]}"
|
46
49
|
end unless contents["assets"].nil?
|
@@ -105,6 +108,8 @@ class Nimbu::Command::Themes < Nimbu::Command::Base
|
|
105
108
|
layouts_files = layouts_glob.map {|dir| dir.gsub("#{Dir.pwd}/layouts/","")}
|
106
109
|
templates_glob = Dir.glob("#{Dir.pwd}/templates/**/*.liquid")
|
107
110
|
templates_files = templates_glob.map {|dir| dir.gsub("#{Dir.pwd}/templates/","")}
|
111
|
+
snippets_glob = Dir.glob("#{Dir.pwd}/snippets/**/*.liquid")
|
112
|
+
snippets_files = snippets_glob.map {|dir| dir.gsub("#{Dir.pwd}/snippets/","")}
|
108
113
|
|
109
114
|
if !(css_only || js_only)
|
110
115
|
print "\nLayouts:\n"
|
@@ -124,6 +129,15 @@ class Nimbu::Command::Themes < Nimbu::Command::Base
|
|
124
129
|
nimbu.upload_template(theme, template, IO.read(file))
|
125
130
|
print " (ok)\n"
|
126
131
|
end
|
132
|
+
|
133
|
+
print "\nSnippets:\n"
|
134
|
+
snippets_files.each do |snippet|
|
135
|
+
file = "#{Dir.pwd}/snippets/#{snippet}"
|
136
|
+
next if File.directory?(file)
|
137
|
+
print " - snippets/#{snippet}"
|
138
|
+
nimbu.upload_snippet(theme, snippet, IO.read(file))
|
139
|
+
print " (ok)\n"
|
140
|
+
end
|
127
141
|
end
|
128
142
|
|
129
143
|
if !liquid_only
|
data/lib/nimbu/server/base.rb
CHANGED
@@ -4,10 +4,13 @@ require "sinatra/multi_route"
|
|
4
4
|
require "vendor/nimbu/okjson"
|
5
5
|
require 'term/ansicolor'
|
6
6
|
require "base64"
|
7
|
+
require "sinatra/json"
|
8
|
+
require 'json'
|
7
9
|
|
8
10
|
module Nimbu
|
9
11
|
module Server
|
10
12
|
class Base < Sinatra::Base
|
13
|
+
helpers Sinatra::JSON
|
11
14
|
include Term::ANSIColor
|
12
15
|
register Sinatra::MultiRoute
|
13
16
|
|
@@ -55,12 +58,12 @@ module Nimbu
|
|
55
58
|
puts green("#{method.upcase} #{request.fullpath}")
|
56
59
|
|
57
60
|
if request.post? || request.put? || request.delete?
|
61
|
+
##### POST / PUT / DELET #####
|
58
62
|
path = request.path == "/" ? request.path : request.path.gsub(/\/$/,'')
|
59
63
|
begin
|
60
|
-
response = nimbu.post_request({:path => path, :extra => params, :method => method, :client_session => session })
|
64
|
+
response = nimbu.post_request({:path => path, :extra => params, :method => method, :client_session => session, :ajax => request.xhr? })
|
61
65
|
puts "RESPONSE: #{response}" if Nimbu.debug
|
62
66
|
result = json_decode(response)
|
63
|
-
puts result if Nimbu.debug
|
64
67
|
parse_session(result)
|
65
68
|
rescue Exception => e
|
66
69
|
if e.respond_to?(:http_body)
|
@@ -71,12 +74,21 @@ module Nimbu
|
|
71
74
|
end
|
72
75
|
|
73
76
|
session[:flash] = result["flash"] if result["flash"]
|
74
|
-
|
77
|
+
if request.xhr?
|
78
|
+
if !result["json"].nil?
|
79
|
+
puts "JSON: #{result["json"]["data"]}" if Nimbu.debug
|
80
|
+
status result["json"]["status"].to_i
|
81
|
+
return json(result["json"]["data"], :encoder => :to_json, :content_type => :js)
|
82
|
+
end
|
83
|
+
else
|
84
|
+
redirect result["redirect_to"] and return if result["redirect_to"]
|
85
|
+
end
|
75
86
|
else
|
76
87
|
# First get the template name and necessary subtemplates
|
88
|
+
##### GET #####
|
77
89
|
path = request.path == "/" ? request.path : request.path.gsub(/\/$/,'')
|
78
90
|
begin
|
79
|
-
result = json_decode(nimbu.get_template({:path => path, :extra => params, :method => "get", :extra => params, :client_session => session }))
|
91
|
+
result = json_decode(nimbu.get_template({:path => path, :extra => params, :method => "get", :extra => params, :client_session => session, :ajax => request.xhr? }))
|
80
92
|
puts result if Nimbu.debug
|
81
93
|
parse_session(result)
|
82
94
|
rescue Exception => e
|
@@ -89,6 +101,7 @@ module Nimbu
|
|
89
101
|
if result["template"].nil?
|
90
102
|
raise Sinatra::NotFound
|
91
103
|
end
|
104
|
+
|
92
105
|
template = result["template"].gsub(/buddha$/,'liquid')
|
93
106
|
# Then render everything
|
94
107
|
puts green(" => using template '#{template}'")
|
@@ -97,7 +110,8 @@ module Nimbu
|
|
97
110
|
if File.exists?(template_file)
|
98
111
|
template_code = IO.read(template_file)
|
99
112
|
else
|
100
|
-
|
113
|
+
puts red("Layout file '#{template_file}' is missing...")
|
114
|
+
return render_missing(File.join('templates',template),'template')
|
101
115
|
end
|
102
116
|
|
103
117
|
if template_code=~ /You have an Error in your HAML code/
|
@@ -119,18 +133,39 @@ module Nimbu
|
|
119
133
|
layout_code = IO.read(layout_file)
|
120
134
|
else
|
121
135
|
puts red("Layout file '#{layout_file}' is missing...")
|
122
|
-
return
|
136
|
+
return render_missing(File.join('layouts',layout),'layout')
|
137
|
+
end
|
138
|
+
|
139
|
+
puts green(" using layout '#{layout}'")
|
140
|
+
|
141
|
+
begin
|
142
|
+
snippets = parse_snippets(template_code)
|
143
|
+
snippets = parse_snippets(layout_code,snippets)
|
144
|
+
rescue Exception => e
|
145
|
+
# If there is a snippet missing, we raise an error
|
146
|
+
puts red("Snippet file '#{e.message}' is missing...")
|
147
|
+
return render_missing(e.message,'snippet')
|
148
|
+
end
|
149
|
+
|
150
|
+
if snippets.any?
|
151
|
+
puts green(" using snippets '#{snippets.keys.join('\', \'')}'")
|
123
152
|
end
|
124
153
|
|
125
154
|
# Send the templates to the browser
|
126
155
|
begin
|
127
|
-
results = json_decode(nimbu.get_request({:path => path, :template => template_code, :layout => layout_code, :extra => params, :method => method, :client_session => session }))
|
156
|
+
results = json_decode(nimbu.get_request({:path => path, :template => template_code, :layout => layout_code, :snippets => snippets, :extra => params, :method => method, :client_session => session, :ajax => request.xhr? }))
|
128
157
|
puts result if Nimbu.debug
|
129
158
|
parse_session(results)
|
130
|
-
|
159
|
+
html = results["result"]
|
131
160
|
rescue RestClient::Exception => error
|
132
|
-
|
133
|
-
end
|
161
|
+
html = error.http_body
|
162
|
+
end
|
163
|
+
|
164
|
+
if request.xhr?
|
165
|
+
return results["json"]
|
166
|
+
else
|
167
|
+
return "#{html}"
|
168
|
+
end
|
134
169
|
end
|
135
170
|
|
136
171
|
error 404 do
|
@@ -146,6 +181,13 @@ module Nimbu
|
|
146
181
|
return render_error(@messag)
|
147
182
|
end
|
148
183
|
|
184
|
+
def render_missing(file, type)
|
185
|
+
@messag = ""
|
186
|
+
@messag += "<h1>A #{type} file is missing!</h1>"
|
187
|
+
@messag += "<p>Expected #{type} location: <strong>#{file}</strong></p>"
|
188
|
+
return render_error(@messag)
|
189
|
+
end
|
190
|
+
|
149
191
|
def render_404(path)
|
150
192
|
@messag = ""
|
151
193
|
@messag += "<h1>This page does not exist!</h1>"
|
@@ -188,7 +230,7 @@ module Nimbu
|
|
188
230
|
if !response["client_session"].nil?
|
189
231
|
response["client_session"].each do |key,value|
|
190
232
|
session[key.to_sym] = value
|
191
|
-
puts "Session: :#{key} => #{value}" if Nimbu.debug
|
233
|
+
#puts "Session: :#{key} => #{value}" if Nimbu.debug
|
192
234
|
end
|
193
235
|
session.each do |key,value|
|
194
236
|
if !response["client_session"].has_key?(key.to_s)
|
@@ -198,6 +240,31 @@ module Nimbu
|
|
198
240
|
end
|
199
241
|
end
|
200
242
|
|
243
|
+
def parse_snippets(code, snippets = {})
|
244
|
+
# Parse template file for snippets
|
245
|
+
search = Regexp.new("\{\% include (.*) \%\}")
|
246
|
+
matches = code.scan(search)
|
247
|
+
if !matches.empty?
|
248
|
+
matches.each do |snippet|
|
249
|
+
# There seems to be a special layout?
|
250
|
+
snippet_name = snippet[0].gsub(/,$/, '').gsub(/^'/, '').gsub(/'$/, '').gsub(/^"/, '').gsub(/"$/, '')
|
251
|
+
if !(snippet_name =~ /\.liquid$/)
|
252
|
+
snippet_name = "#{snippet_name}.liquid"
|
253
|
+
end
|
254
|
+
# Read the snippet file
|
255
|
+
snippet_file = File.join(Dir.pwd,'snippets',snippet_name)
|
256
|
+
if File.exists?(snippet_file)
|
257
|
+
snippet_code = IO.read(snippet_file)
|
258
|
+
snippets[snippet_name.to_sym] = snippet_code
|
259
|
+
self.parse_snippets(snippet_code, snippets)
|
260
|
+
else
|
261
|
+
raise "#{snippet_file}"
|
262
|
+
end
|
263
|
+
end
|
264
|
+
end
|
265
|
+
return snippets
|
266
|
+
end
|
267
|
+
|
201
268
|
end
|
202
269
|
end
|
203
270
|
end
|
data/lib/nimbu/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: nimbu
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: '0.3'
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-05-
|
12
|
+
date: 2012-05-20 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: term-ansicolor
|
16
|
-
requirement: &
|
16
|
+
requirement: &70218127116440 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ~>
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: 1.0.5
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *70218127116440
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: rest-client
|
27
|
-
requirement: &
|
27
|
+
requirement: &70218127130520 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ~>
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: 1.6.1
|
33
33
|
type: :runtime
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *70218127130520
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: launchy
|
38
|
-
requirement: &
|
38
|
+
requirement: &70218127128180 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ! '>='
|
@@ -43,10 +43,10 @@ dependencies:
|
|
43
43
|
version: 0.3.2
|
44
44
|
type: :runtime
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *70218127128180
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: rubyzip
|
49
|
-
requirement: &
|
49
|
+
requirement: &70218127126060 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - ! '>='
|
@@ -54,10 +54,10 @@ dependencies:
|
|
54
54
|
version: '0'
|
55
55
|
type: :runtime
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *70218127126060
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: sinatra
|
60
|
-
requirement: &
|
60
|
+
requirement: &70218127123980 !ruby/object:Gem::Requirement
|
61
61
|
none: false
|
62
62
|
requirements:
|
63
63
|
- - ! '>='
|
@@ -65,10 +65,10 @@ dependencies:
|
|
65
65
|
version: '0'
|
66
66
|
type: :runtime
|
67
67
|
prerelease: false
|
68
|
-
version_requirements: *
|
68
|
+
version_requirements: *70218127123980
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: sinatra-contrib
|
71
|
-
requirement: &
|
71
|
+
requirement: &70218127137420 !ruby/object:Gem::Requirement
|
72
72
|
none: false
|
73
73
|
requirements:
|
74
74
|
- - ! '>='
|
@@ -76,10 +76,10 @@ dependencies:
|
|
76
76
|
version: '0'
|
77
77
|
type: :runtime
|
78
78
|
prerelease: false
|
79
|
-
version_requirements: *
|
79
|
+
version_requirements: *70218127137420
|
80
80
|
- !ruby/object:Gem::Dependency
|
81
81
|
name: compass
|
82
|
-
requirement: &
|
82
|
+
requirement: &70218127148300 !ruby/object:Gem::Requirement
|
83
83
|
none: false
|
84
84
|
requirements:
|
85
85
|
- - ! '>='
|
@@ -87,10 +87,10 @@ dependencies:
|
|
87
87
|
version: '0'
|
88
88
|
type: :runtime
|
89
89
|
prerelease: false
|
90
|
-
version_requirements: *
|
90
|
+
version_requirements: *70218127148300
|
91
91
|
- !ruby/object:Gem::Dependency
|
92
92
|
name: haml
|
93
|
-
requirement: &
|
93
|
+
requirement: &70218127147000 !ruby/object:Gem::Requirement
|
94
94
|
none: false
|
95
95
|
requirements:
|
96
96
|
- - ! '>='
|
@@ -98,10 +98,10 @@ dependencies:
|
|
98
98
|
version: '0'
|
99
99
|
type: :runtime
|
100
100
|
prerelease: false
|
101
|
-
version_requirements: *
|
101
|
+
version_requirements: *70218127147000
|
102
102
|
- !ruby/object:Gem::Dependency
|
103
103
|
name: fssm
|
104
|
-
requirement: &
|
104
|
+
requirement: &70218127146340 !ruby/object:Gem::Requirement
|
105
105
|
none: false
|
106
106
|
requirements:
|
107
107
|
- - ! '>='
|
@@ -109,10 +109,10 @@ dependencies:
|
|
109
109
|
version: '0'
|
110
110
|
type: :runtime
|
111
111
|
prerelease: false
|
112
|
-
version_requirements: *
|
112
|
+
version_requirements: *70218127146340
|
113
113
|
- !ruby/object:Gem::Dependency
|
114
114
|
name: thin
|
115
|
-
requirement: &
|
115
|
+
requirement: &70218127145540 !ruby/object:Gem::Requirement
|
116
116
|
none: false
|
117
117
|
requirements:
|
118
118
|
- - ! '>='
|
@@ -120,7 +120,7 @@ dependencies:
|
|
120
120
|
version: '0'
|
121
121
|
type: :runtime
|
122
122
|
prerelease: false
|
123
|
-
version_requirements: *
|
123
|
+
version_requirements: *70218127145540
|
124
124
|
description: Client library and command-line tool to design and manage websites on
|
125
125
|
the Nimbu platform.
|
126
126
|
email:
|