nimbu 0.4 → 0.5.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -6,6 +6,7 @@ require 'term/ansicolor'
6
6
  require "base64"
7
7
  require "sinatra/json"
8
8
  require 'json'
9
+ require 'rack/streaming_proxy'
9
10
 
10
11
  module Nimbu
11
12
  module Server
@@ -21,13 +22,18 @@ module Nimbu
21
22
  set :method_override, true
22
23
  set :static, true # set up static file routing
23
24
  set :public_folder, Dir.pwd # set up the static dir (with images/js/css inside)
24
-
25
+
25
26
  set :views, File.expand_path('../views', __FILE__) # set up the views dir
26
27
  set :haml, { :format => :html5 } # if you use haml
27
-
28
+
28
29
  # Your "actions" go here…
29
30
  #
30
31
 
32
+ get '/media/*' do
33
+ proxy = Rack::StreamingProxy::ProxyRequest.new(request,"http://#{nimbu.host}/media/#{params[:splat].first}")
34
+ return [proxy.status, proxy.headers, proxy]
35
+ end
36
+
31
37
  get '/__sinatra__/*' do
32
38
  return ""
33
39
  end
@@ -51,7 +57,7 @@ module Nimbu
51
57
  if request.get? then "get"
52
58
  elsif request.post? then "post"
53
59
  elsif request.put? then "put"
54
- elsif request.delete? then "delete"
60
+ elsif request.delete? then "delete"
55
61
  end
56
62
  )
57
63
  puts green("#{method.upcase} #{request.fullpath}")
@@ -89,7 +95,7 @@ module Nimbu
89
95
  # begin
90
96
  # result = json_decode(nimbu.get_template({:path => path, :extra => params, :method => "get", :extra => params, :client_session => session, :ajax => request.xhr? }))
91
97
  # puts result if Nimbu.debug
92
- # parse_session(result)
98
+ # parse_session(result)
93
99
  # rescue Exception => e
94
100
  # return e.http_body
95
101
  # end
@@ -103,12 +109,12 @@ module Nimbu
103
109
  params = ({} || params).merge({:simulator => {
104
110
  :host => request.host,
105
111
  :port => request.port,
106
- :path => path,
107
- :method => method,
108
- :session => session,
112
+ :path => path,
113
+ :method => method,
114
+ :session => session,
109
115
  :headers => request.env.to_json,
110
116
  }})
111
- result = json_decode(nimbu.get_template(params))
117
+ result = nimbu.simulator(:subdomain => Nimbu::Auth.site).recipe(params)
112
118
  puts result if Nimbu.debug
113
119
  rescue Exception => e
114
120
  if e.respond_to?(:http_body)
@@ -117,7 +123,7 @@ module Nimbu
117
123
  raise e
118
124
  end
119
125
  end
120
-
126
+
121
127
  if result["template"].nil?
122
128
  raise Sinatra::NotFound
123
129
  end
@@ -128,10 +134,15 @@ module Nimbu
128
134
  puts green(" => using template '#{template}'")
129
135
  # Read the template file
130
136
  template_file = File.join(Dir.pwd,'templates',template)
137
+ template_file_haml = File.join(Dir.pwd,'templates',"#{template}.haml")
138
+
131
139
  if File.exists?(template_file)
132
140
  template_code = IO.read(template_file)
141
+ elsif File.exists?(template_file_haml)
142
+ template_code = IO.read(template_file_haml)
143
+ template = "#{template}.haml"
133
144
  else
134
- puts red("Layout file '#{template_file}' is missing...")
145
+ puts red("Layout file '#{template_file}' is missing...")
135
146
  return render_missing(File.join('templates',template),'template')
136
147
  end
137
148
 
@@ -150,10 +161,15 @@ module Nimbu
150
161
 
151
162
  # Read the layout file
152
163
  layout_file = File.join(Dir.pwd,'layouts',layout)
164
+ layout_file_haml = File.join(Dir.pwd,'layouts',"#{layout}.haml")
165
+
153
166
  if File.exists?(layout_file)
154
167
  layout_code = IO.read(layout_file)
168
+ elsif File.exists?(layout_file_haml)
169
+ layout = "#{layout}.haml"
170
+ layout_code = IO.read(layout_file_haml)
155
171
  else
156
- puts red("Layout file '#{layout_file}' is missing...")
172
+ puts red("Layout file '#{layout_file}' is missing...")
157
173
  return render_missing(File.join('layouts',layout),'layout')
158
174
  end
159
175
 
@@ -164,7 +180,7 @@ module Nimbu
164
180
  snippets = parse_snippets(layout_code,snippets)
165
181
  rescue Exception => e
166
182
  # If there is a snippet missing, we raise an error
167
- puts red("Snippet file '#{e.message}' is missing...")
183
+ puts red("Snippet file '#{e.message}' is missing...")
168
184
  return render_missing(e.message,'snippet')
169
185
  end
170
186
 
@@ -179,28 +195,35 @@ module Nimbu
179
195
  # Send the templates to the browser
180
196
  begin
181
197
  params = ({} || params).merge({:simulator => {
182
- :path => path,
183
- :template => template_code,
184
- :host => request.host,
185
- :port => request.port,
186
- :layout => layout_code,
187
- :snippets => snippets,
188
- :method => method,
189
- :session => session,
190
- :headers => request.env.to_json,
198
+ :path => path,
199
+ :code => {
200
+ :template_name => template,
201
+ :template => template_code,
202
+ :layout_name => layout,
203
+ :layout => layout_code,
204
+ :snippets => snippets,
205
+ },
206
+ :request => {
207
+ :host => request.host,
208
+ :port => request.port,
209
+ :method => method,
210
+ :session => session,
211
+ :headers => request.env.to_json
212
+ }
191
213
  }})
192
- results = json_decode(nimbu.get_request(params))
214
+ results = nimbu.simulator(:subdomain => Nimbu::Auth.site).render(params)
193
215
  puts results["status"] if Nimbu.debug
194
216
  puts results["headers"] if Nimbu.debug
195
- puts results["body"].gsub(/\n/,'') if Nimbu.debug
217
+ puts Base64.decode64(results["body"]).gsub(/\n/,'') if Nimbu.debug
196
218
 
197
219
  status results["status"]
198
220
  headers results["headers"] unless results["headers"] == ""
199
- body results["body"]
200
- rescue RestClient::Exception => error
221
+ body Base64.decode64(results["body"])
222
+ rescue Exception => error
223
+ puts "Error!"
201
224
  puts "Error! #{error.http_body}"
202
225
  html = error.http_body
203
- end
226
+ end
204
227
  end
205
228
 
206
229
  error 404 do
@@ -256,25 +279,11 @@ module Nimbu
256
279
  rescue Nimbu::OkJson::ParserError
257
280
  nil
258
281
  end
259
-
282
+
260
283
  def nimbu
261
284
  Nimbu::Auth.client
262
285
  end
263
286
 
264
- # def parse_session(response)
265
- # if !response["session"].nil?
266
- # response["session"].each do |key,value|
267
- # session[key.to_sym] = value
268
- # #puts "Session: :#{key} => #{value}" if Nimbu.debug
269
- # end
270
- # session.each do |key,value|
271
- # if !response["session"].has_key?(key.to_s)
272
- # session.delete(key)
273
- # end
274
- # end
275
- # end
276
- # end
277
-
278
287
  def parse_snippets(code, snippets = {})
279
288
  # Parse template file for snippets
280
289
  search = Regexp.new("\{\% include (.*) \%\}")
@@ -288,10 +297,16 @@ module Nimbu
288
297
  end
289
298
  # Read the snippet file
290
299
  snippet_file = File.join(Dir.pwd,'snippets',snippet_name)
300
+ snippet_file_haml = File.join(Dir.pwd,'snippets',"#{snippet_name}.haml")
301
+
291
302
  if File.exists?(snippet_file)
292
303
  snippet_code = IO.read(snippet_file)
293
304
  snippets[snippet_name.to_sym] = snippet_code
294
305
  self.parse_snippets(snippet_code, snippets)
306
+ elsif File.exists?(snippet_file_haml)
307
+ snippet_code = IO.read(snippet_file_haml)
308
+ snippets["#{snippet_name}.haml".to_sym] = snippet_code
309
+ self.parse_snippets(snippet_code, snippets)
295
310
  else
296
311
  raise "#{snippet_file}"
297
312
  end
data/lib/nimbu/ssh.rb ADDED
@@ -0,0 +1,54 @@
1
+ require "yaml"
2
+ require "nimbu"
3
+ require "nimbu/helpers"
4
+
5
+ class Nimbu::Auth
6
+ class << self
7
+
8
+ include Nimbu::Helpers
9
+ def check_for_associated_ssh_key
10
+ return unless client.keys.empty?
11
+ associate_or_generate_ssh_key
12
+ end
13
+
14
+ def associate_or_generate_ssh_key
15
+ public_keys = Dir.glob("#{home_directory}/.ssh/*.pub").sort
16
+
17
+ case public_keys.length
18
+ when 0 then
19
+ display "Could not find an existing public key."
20
+ display "Would you like to generate one? [Yn] ", false
21
+ unless ask.strip.downcase == "n"
22
+ display "Generating new SSH public key."
23
+ generate_ssh_key("id_rsa")
24
+ associate_key("#{home_directory}/.ssh/id_rsa.pub")
25
+ end
26
+ when 1 then
27
+ display "Found existing public key: #{public_keys.first}"
28
+ associate_key(public_keys.first)
29
+ else
30
+ display "Found the following SSH public keys:"
31
+ public_keys.each_with_index do |key, index|
32
+ display "#{index+1}) #{File.basename(key)}"
33
+ end
34
+ display "Which would you like to use with your Nimbu account? ", false
35
+ chosen = public_keys[ask.to_i-1] rescue error("Invalid choice")
36
+ associate_key(chosen)
37
+ end
38
+ end
39
+
40
+ def generate_ssh_key(keyfile)
41
+ ssh_dir = File.join(home_directory, ".ssh")
42
+ unless File.exists?(ssh_dir)
43
+ FileUtils.mkdir_p ssh_dir
44
+ File.chmod(0700, ssh_dir)
45
+ end
46
+ `ssh-keygen -t rsa -N "" -f \"#{home_directory}/.ssh/#{keyfile}\" 2>&1`
47
+ end
48
+
49
+ def associate_key(key)
50
+ display "Uploading SSH public key #{key}"
51
+ client.add_key(File.read(key))
52
+ end
53
+ end
54
+ end
data/lib/nimbu/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Nimbu
2
- VERSION = "0.4"
2
+ VERSION = "0.5.1"
3
3
  end
metadata CHANGED
@@ -1,66 +1,73 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: nimbu
3
3
  version: !ruby/object:Gem::Version
4
- version: '0.4'
5
4
  prerelease:
5
+ version: 0.5.1
6
6
  platform: ruby
7
7
  authors:
8
8
  - Zenjoy BVBA
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-07-20 00:00:00.000000000 Z
12
+ date: 2013-04-02 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
- name: term-ansicolor
16
- requirement: !ruby/object:Gem::Requirement
15
+ version_requirements: !ruby/object:Gem::Requirement
17
16
  none: false
18
17
  requirements:
19
18
  - - ~>
20
19
  - !ruby/object:Gem::Version
21
20
  version: 1.0.5
22
- type: :runtime
21
+ name: term-ansicolor
23
22
  prerelease: false
24
- version_requirements: !ruby/object:Gem::Requirement
23
+ requirement: !ruby/object:Gem::Requirement
25
24
  none: false
26
25
  requirements:
27
26
  - - ~>
28
27
  - !ruby/object:Gem::Version
29
28
  version: 1.0.5
29
+ type: :runtime
30
30
  - !ruby/object:Gem::Dependency
31
- name: rest-client
31
+ version_requirements: !ruby/object:Gem::Requirement
32
+ none: false
33
+ requirements:
34
+ - - ! '>='
35
+ - !ruby/object:Gem::Version
36
+ version: '0'
37
+ name: nimbu-api
38
+ prerelease: false
32
39
  requirement: !ruby/object:Gem::Requirement
33
40
  none: false
34
41
  requirements:
35
- - - ~>
42
+ - - ! '>='
36
43
  - !ruby/object:Gem::Version
37
- version: 1.6.1
44
+ version: '0'
38
45
  type: :runtime
39
- prerelease: false
46
+ - !ruby/object:Gem::Dependency
40
47
  version_requirements: !ruby/object:Gem::Requirement
41
48
  none: false
42
49
  requirements:
43
- - - ~>
50
+ - - ! '>='
44
51
  - !ruby/object:Gem::Version
45
- version: 1.6.1
46
- - !ruby/object:Gem::Dependency
47
- name: launchy
52
+ version: '0'
53
+ name: rubyzip
54
+ prerelease: false
48
55
  requirement: !ruby/object:Gem::Requirement
49
56
  none: false
50
57
  requirements:
51
58
  - - ! '>='
52
59
  - !ruby/object:Gem::Version
53
- version: 0.3.2
60
+ version: '0'
54
61
  type: :runtime
55
- prerelease: false
62
+ - !ruby/object:Gem::Dependency
56
63
  version_requirements: !ruby/object:Gem::Requirement
57
64
  none: false
58
65
  requirements:
59
66
  - - ! '>='
60
67
  - !ruby/object:Gem::Version
61
- version: 0.3.2
62
- - !ruby/object:Gem::Dependency
63
- name: rubyzip
68
+ version: '0'
69
+ name: sinatra
70
+ prerelease: false
64
71
  requirement: !ruby/object:Gem::Requirement
65
72
  none: false
66
73
  requirements:
@@ -68,15 +75,15 @@ dependencies:
68
75
  - !ruby/object:Gem::Version
69
76
  version: '0'
70
77
  type: :runtime
71
- prerelease: false
78
+ - !ruby/object:Gem::Dependency
72
79
  version_requirements: !ruby/object:Gem::Requirement
73
80
  none: false
74
81
  requirements:
75
82
  - - ! '>='
76
83
  - !ruby/object:Gem::Version
77
84
  version: '0'
78
- - !ruby/object:Gem::Dependency
79
- name: sinatra
85
+ name: sinatra-contrib
86
+ prerelease: false
80
87
  requirement: !ruby/object:Gem::Requirement
81
88
  none: false
82
89
  requirements:
@@ -84,15 +91,15 @@ dependencies:
84
91
  - !ruby/object:Gem::Version
85
92
  version: '0'
86
93
  type: :runtime
87
- prerelease: false
94
+ - !ruby/object:Gem::Dependency
88
95
  version_requirements: !ruby/object:Gem::Requirement
89
96
  none: false
90
97
  requirements:
91
98
  - - ! '>='
92
99
  - !ruby/object:Gem::Version
93
100
  version: '0'
94
- - !ruby/object:Gem::Dependency
95
- name: sinatra-contrib
101
+ name: listen
102
+ prerelease: false
96
103
  requirement: !ruby/object:Gem::Requirement
97
104
  none: false
98
105
  requirements:
@@ -100,15 +107,15 @@ dependencies:
100
107
  - !ruby/object:Gem::Version
101
108
  version: '0'
102
109
  type: :runtime
103
- prerelease: false
110
+ - !ruby/object:Gem::Dependency
104
111
  version_requirements: !ruby/object:Gem::Requirement
105
112
  none: false
106
113
  requirements:
107
114
  - - ! '>='
108
115
  - !ruby/object:Gem::Version
109
116
  version: '0'
110
- - !ruby/object:Gem::Dependency
111
- name: compass
117
+ name: thin
118
+ prerelease: false
112
119
  requirement: !ruby/object:Gem::Requirement
113
120
  none: false
114
121
  requirements:
@@ -116,15 +123,15 @@ dependencies:
116
123
  - !ruby/object:Gem::Version
117
124
  version: '0'
118
125
  type: :runtime
119
- prerelease: false
126
+ - !ruby/object:Gem::Dependency
120
127
  version_requirements: !ruby/object:Gem::Requirement
121
128
  none: false
122
129
  requirements:
123
130
  - - ! '>='
124
131
  - !ruby/object:Gem::Version
125
132
  version: '0'
126
- - !ruby/object:Gem::Dependency
127
- name: haml
133
+ name: rack-streaming-proxy
134
+ prerelease: false
128
135
  requirement: !ruby/object:Gem::Requirement
129
136
  none: false
130
137
  requirements:
@@ -132,49 +139,122 @@ dependencies:
132
139
  - !ruby/object:Gem::Version
133
140
  version: '0'
134
141
  type: :runtime
142
+ - !ruby/object:Gem::Dependency
143
+ version_requirements: !ruby/object:Gem::Requirement
144
+ none: false
145
+ requirements:
146
+ - - ~>
147
+ - !ruby/object:Gem::Version
148
+ version: '1.3'
149
+ name: bundler
135
150
  prerelease: false
151
+ requirement: !ruby/object:Gem::Requirement
152
+ none: false
153
+ requirements:
154
+ - - ~>
155
+ - !ruby/object:Gem::Version
156
+ version: '1.3'
157
+ type: :development
158
+ - !ruby/object:Gem::Dependency
136
159
  version_requirements: !ruby/object:Gem::Requirement
137
160
  none: false
138
161
  requirements:
139
162
  - - ! '>='
140
163
  - !ruby/object:Gem::Version
141
164
  version: '0'
142
- - !ruby/object:Gem::Dependency
143
- name: fssm
165
+ name: rake
166
+ prerelease: false
144
167
  requirement: !ruby/object:Gem::Requirement
145
168
  none: false
146
169
  requirements:
147
170
  - - ! '>='
148
171
  - !ruby/object:Gem::Version
149
172
  version: '0'
150
- type: :runtime
173
+ type: :development
174
+ - !ruby/object:Gem::Dependency
175
+ version_requirements: !ruby/object:Gem::Requirement
176
+ none: false
177
+ requirements:
178
+ - - ! '>='
179
+ - !ruby/object:Gem::Version
180
+ version: '0'
181
+ name: awesome_print
151
182
  prerelease: false
183
+ requirement: !ruby/object:Gem::Requirement
184
+ none: false
185
+ requirements:
186
+ - - ! '>='
187
+ - !ruby/object:Gem::Version
188
+ version: '0'
189
+ type: :development
190
+ - !ruby/object:Gem::Dependency
152
191
  version_requirements: !ruby/object:Gem::Requirement
153
192
  none: false
154
193
  requirements:
155
194
  - - ! '>='
156
195
  - !ruby/object:Gem::Version
157
196
  version: '0'
197
+ name: pry
198
+ prerelease: false
199
+ requirement: !ruby/object:Gem::Requirement
200
+ none: false
201
+ requirements:
202
+ - - ! '>='
203
+ - !ruby/object:Gem::Version
204
+ version: '0'
205
+ type: :development
158
206
  - !ruby/object:Gem::Dependency
159
- name: thin
207
+ version_requirements: !ruby/object:Gem::Requirement
208
+ none: false
209
+ requirements:
210
+ - - ! '>='
211
+ - !ruby/object:Gem::Version
212
+ version: '0'
213
+ name: pry-remote
214
+ prerelease: false
160
215
  requirement: !ruby/object:Gem::Requirement
161
216
  none: false
162
217
  requirements:
163
218
  - - ! '>='
164
219
  - !ruby/object:Gem::Version
165
220
  version: '0'
166
- type: :runtime
221
+ type: :development
222
+ - !ruby/object:Gem::Dependency
223
+ version_requirements: !ruby/object:Gem::Requirement
224
+ none: false
225
+ requirements:
226
+ - - ! '>='
227
+ - !ruby/object:Gem::Version
228
+ version: '0'
229
+ name: pry-stack_explorer
167
230
  prerelease: false
231
+ requirement: !ruby/object:Gem::Requirement
232
+ none: false
233
+ requirements:
234
+ - - ! '>='
235
+ - !ruby/object:Gem::Version
236
+ version: '0'
237
+ type: :development
238
+ - !ruby/object:Gem::Dependency
168
239
  version_requirements: !ruby/object:Gem::Requirement
169
240
  none: false
170
241
  requirements:
171
242
  - - ! '>='
172
243
  - !ruby/object:Gem::Version
173
244
  version: '0'
245
+ name: pry-debugger
246
+ prerelease: false
247
+ requirement: !ruby/object:Gem::Requirement
248
+ none: false
249
+ requirements:
250
+ - - ! '>='
251
+ - !ruby/object:Gem::Version
252
+ version: '0'
253
+ type: :development
174
254
  description: Client library and command-line tool to design and manage websites on
175
255
  the Nimbu platform.
176
256
  email:
177
- - support@getnimbu.com
257
+ - support@nimbu.io
178
258
  executables:
179
259
  - nimbu
180
260
  extensions: []
@@ -184,22 +264,22 @@ files:
184
264
  - lib/nimbu.rb
185
265
  - lib/nimbu/auth.rb
186
266
  - lib/nimbu/cli.rb
187
- - lib/nimbu/client.rb
188
- - lib/nimbu/client/rendezvous.rb
189
267
  - lib/nimbu/command.rb
190
268
  - lib/nimbu/command/auth.rb
191
269
  - lib/nimbu/command/base.rb
270
+ - lib/nimbu/command/browse.rb
192
271
  - lib/nimbu/command/help.rb
193
272
  - lib/nimbu/command/helpers.rb
194
273
  - lib/nimbu/command/init.rb
195
274
  - lib/nimbu/command/server.rb
275
+ - lib/nimbu/command/sites.rb
196
276
  - lib/nimbu/command/themes.rb
197
277
  - lib/nimbu/helpers.rb
198
278
  - lib/nimbu/server/base.rb
199
- - lib/nimbu/server/views/index.haml
279
+ - lib/nimbu/ssh.rb
200
280
  - lib/nimbu/version.rb
201
281
  - lib/vendor/nimbu/okjson.rb
202
- homepage: http://www.getnimbu.com
282
+ homepage: https://www.nimbu.io
203
283
  licenses: []
204
284
  post_install_message:
205
285
  rdoc_options: []
@@ -210,16 +290,22 @@ required_ruby_version: !ruby/object:Gem::Requirement
210
290
  requirements:
211
291
  - - ! '>='
212
292
  - !ruby/object:Gem::Version
293
+ segments:
294
+ - 0
295
+ hash: 4171643488340786911
213
296
  version: '0'
214
297
  required_rubygems_version: !ruby/object:Gem::Requirement
215
298
  none: false
216
299
  requirements:
217
300
  - - ! '>='
218
301
  - !ruby/object:Gem::Version
302
+ segments:
303
+ - 0
304
+ hash: 4171643488340786911
219
305
  version: '0'
220
306
  requirements: []
221
307
  rubyforge_project:
222
- rubygems_version: 1.8.23
308
+ rubygems_version: 1.8.25
223
309
  signing_key:
224
310
  specification_version: 3
225
311
  summary: Client library and CLI to design websites on the Nimbu platform.