nimbu 0.4 → 0.5.1

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.
@@ -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.