nimbu 0.3 → 0.4
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/nimbu/auth.rb +6 -2
- data/lib/nimbu/client.rb +1 -1
- data/lib/nimbu/command/base.rb +4 -0
- data/lib/nimbu/command/server.rb +3 -2
- data/lib/nimbu/server/base.rb +137 -102
- data/lib/nimbu/version.rb +1 -1
- data/lib/nimbu.rb +16 -0
- metadata +73 -23
data/lib/nimbu/auth.rb
CHANGED
@@ -45,11 +45,15 @@ class Nimbu::Auth
|
|
45
45
|
end
|
46
46
|
|
47
47
|
def get_nimbu_host
|
48
|
-
|
48
|
+
if Nimbu.development
|
49
|
+
get_configuration[:development]
|
50
|
+
else
|
51
|
+
get_configuration[:hostname]
|
52
|
+
end
|
49
53
|
end
|
50
54
|
|
51
55
|
def get_nimbu_theme
|
52
|
-
get_configuration[:theme]
|
56
|
+
get_configuration[:theme] || "default-theme"
|
53
57
|
end
|
54
58
|
|
55
59
|
def get_configuration # :nodoc:
|
data/lib/nimbu/client.rb
CHANGED
@@ -233,7 +233,7 @@ class Nimbu::Client
|
|
233
233
|
uri = URI.parse(given)
|
234
234
|
uri.host ||= host.host
|
235
235
|
uri.scheme ||= host.scheme || "http"
|
236
|
-
uri.path = "/api/
|
236
|
+
uri.path = "/api/v2" + ((uri.path[0..0] == "/") ? uri.path : "/#{uri.path}")
|
237
237
|
uri.port = host.port if full_host =~ /\:\d+/
|
238
238
|
uri.to_s
|
239
239
|
end
|
data/lib/nimbu/command/base.rb
CHANGED
@@ -16,6 +16,10 @@ class Nimbu::Command::Base
|
|
16
16
|
def initialize(args=[], options={})
|
17
17
|
@args = args
|
18
18
|
@options = options
|
19
|
+
|
20
|
+
Nimbu.debug = args.include?("--debug")
|
21
|
+
Nimbu.development = args.include?("--development") || args.include?("--dev")
|
22
|
+
Nimbu.v2 = args.include?("--v2")
|
19
23
|
end
|
20
24
|
|
21
25
|
def app
|
data/lib/nimbu/command/server.rb
CHANGED
@@ -20,7 +20,6 @@ class Nimbu::Command::Server < Nimbu::Command::Base
|
|
20
20
|
else
|
21
21
|
no_haml = args.include?("--no-haml")
|
22
22
|
no_compass = args.include?("--no-compass")
|
23
|
-
Nimbu.debug = args.include?("--debug")
|
24
23
|
|
25
24
|
if !(File.exists?(File.join(Dir.pwd,'haml')) && File.directory?(File.join(Dir.pwd,'haml')))
|
26
25
|
no_haml = true
|
@@ -29,12 +28,14 @@ class Nimbu::Command::Server < Nimbu::Command::Base
|
|
29
28
|
|
30
29
|
puts white("\nStarting up Nimbu Server" + (no_compass ? "" : " + Compass Watcher") + (no_haml ? "" : " + HAML Compiler") + "...")
|
31
30
|
puts green(
|
32
|
-
" _ ___ __ \n" +
|
31
|
+
"\n _ ___ __ \n" +
|
33
32
|
" / | / (_)____ ___ / /_ __ __\n" +
|
34
33
|
" / |/ / // __ `__ \\/ __ \\/ / / /\n" +
|
35
34
|
" / /| / // / / / / / /_/ / /_/ / \n" +
|
36
35
|
" /_/ |_/_//_/ /_/ /_/_.___/\\__,_/ \n")
|
37
36
|
|
37
|
+
puts green("\nConnnected to '#{Nimbu::Auth.host}', using '#{Nimbu::Auth.theme}' theme.\n")
|
38
|
+
|
38
39
|
rd1, wr1 = IO::pipe
|
39
40
|
rd2, wr2 = IO::pipe
|
40
41
|
rd3, wr3 = IO::pipe
|
data/lib/nimbu/server/base.rb
CHANGED
@@ -14,12 +14,11 @@ module Nimbu
|
|
14
14
|
include Term::ANSIColor
|
15
15
|
register Sinatra::MultiRoute
|
16
16
|
|
17
|
-
enable :sessions
|
18
|
-
|
19
17
|
configure :development do
|
20
18
|
register Sinatra::Reloader
|
21
19
|
end
|
22
20
|
|
21
|
+
set :method_override, true
|
23
22
|
set :static, true # set up static file routing
|
24
23
|
set :public_folder, Dir.pwd # set up the static dir (with images/js/css inside)
|
25
24
|
|
@@ -57,14 +56,60 @@ module Nimbu
|
|
57
56
|
)
|
58
57
|
puts green("#{method.upcase} #{request.fullpath}")
|
59
58
|
|
60
|
-
if request.post? || request.put? || request.delete?
|
61
|
-
|
62
|
-
|
59
|
+
# if request.post? || request.put? || request.delete?
|
60
|
+
# ##### POST / PUT / DELET #####
|
61
|
+
# path = request.path == "/" ? request.path : request.path.gsub(/\/$/,'')
|
62
|
+
# begin
|
63
|
+
# response = nimbu.post_request({:path => path, :extra => params, :method => method, :client_session => session, :ajax => request.xhr? })
|
64
|
+
# puts "RESPONSE: #{response}" if Nimbu.debug
|
65
|
+
# result = json_decode(response)
|
66
|
+
# parse_session(result)
|
67
|
+
# rescue Exception => e
|
68
|
+
# if e.respond_to?(:http_body)
|
69
|
+
# return e.http_body
|
70
|
+
# else
|
71
|
+
# raise e
|
72
|
+
# end
|
73
|
+
# end
|
74
|
+
|
75
|
+
# session[:flash] = result["flash"] if result["flash"]
|
76
|
+
# if request.xhr?
|
77
|
+
# if !result["json"].nil?
|
78
|
+
# puts "JSON: #{result["json"]["data"]}" if Nimbu.debug
|
79
|
+
# status result["json"]["status"].to_i
|
80
|
+
# return json(result["json"]["data"], :encoder => :to_json, :content_type => :js)
|
81
|
+
# end
|
82
|
+
# else
|
83
|
+
# redirect result["redirect_to"] and return if result["redirect_to"]
|
84
|
+
# end
|
85
|
+
# else
|
86
|
+
# # First get the template name and necessary subtemplates
|
87
|
+
# ##### GET #####
|
88
|
+
# path = request.path == "/" ? request.path : request.path.gsub(/\/$/,'')
|
89
|
+
# begin
|
90
|
+
# result = json_decode(nimbu.get_template({:path => path, :extra => params, :method => "get", :extra => params, :client_session => session, :ajax => request.xhr? }))
|
91
|
+
# puts result if Nimbu.debug
|
92
|
+
# parse_session(result)
|
93
|
+
# rescue Exception => e
|
94
|
+
# return e.http_body
|
95
|
+
# end
|
96
|
+
|
97
|
+
# redirect result["redirect_to"] and return if result["redirect_to"]
|
98
|
+
# end
|
99
|
+
### GET THE TEMPLATES ###
|
100
|
+
path = request.path == "/" ? request.path : request.path.gsub(/\/$/,'')
|
101
|
+
if !request.xhr?
|
63
102
|
begin
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
103
|
+
params = ({} || params).merge({:simulator => {
|
104
|
+
:host => request.host,
|
105
|
+
:port => request.port,
|
106
|
+
:path => path,
|
107
|
+
:method => method,
|
108
|
+
:session => session,
|
109
|
+
:headers => request.env.to_json,
|
110
|
+
}})
|
111
|
+
result = json_decode(nimbu.get_template(params))
|
112
|
+
puts result if Nimbu.debug
|
68
113
|
rescue Exception => e
|
69
114
|
if e.respond_to?(:http_body)
|
70
115
|
return e.http_body
|
@@ -72,100 +117,90 @@ module Nimbu
|
|
72
117
|
raise e
|
73
118
|
end
|
74
119
|
end
|
75
|
-
|
76
|
-
|
77
|
-
|
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
|
86
|
-
else
|
87
|
-
# First get the template name and necessary subtemplates
|
88
|
-
##### GET #####
|
89
|
-
path = request.path == "/" ? request.path : request.path.gsub(/\/$/,'')
|
90
|
-
begin
|
91
|
-
result = json_decode(nimbu.get_template({:path => path, :extra => params, :method => "get", :extra => params, :client_session => session, :ajax => request.xhr? }))
|
92
|
-
puts result if Nimbu.debug
|
93
|
-
parse_session(result)
|
94
|
-
rescue Exception => e
|
95
|
-
return e.http_body
|
120
|
+
|
121
|
+
if result["template"].nil?
|
122
|
+
raise Sinatra::NotFound
|
96
123
|
end
|
97
124
|
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
if File.exists?(template_file)
|
111
|
-
template_code = IO.read(template_file)
|
112
|
-
else
|
113
|
-
puts red("Layout file '#{template_file}' is missing...")
|
114
|
-
return render_missing(File.join('templates',template),'template')
|
115
|
-
end
|
125
|
+
unless result["template"] == "<<<< REDIRECT >>>>"
|
126
|
+
template = result["template"].gsub(/buddha$/,'liquid')
|
127
|
+
# Then render everything
|
128
|
+
puts green(" => using template '#{template}'")
|
129
|
+
# Read the template file
|
130
|
+
template_file = File.join(Dir.pwd,'templates',template)
|
131
|
+
if File.exists?(template_file)
|
132
|
+
template_code = IO.read(template_file)
|
133
|
+
else
|
134
|
+
puts red("Layout file '#{template_file}' is missing...")
|
135
|
+
return render_missing(File.join('templates',template),'template')
|
136
|
+
end
|
116
137
|
|
117
|
-
|
118
|
-
|
119
|
-
|
138
|
+
if template_code=~ /You have an Error in your HAML code/
|
139
|
+
return template_code
|
140
|
+
end
|
120
141
|
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
142
|
+
# Parse template file for a special layout
|
143
|
+
search = Regexp.new("\{\% layout \'(.*)\' \%\}")
|
144
|
+
if search =~ template_code
|
145
|
+
# There seems to be a special layout?
|
146
|
+
layout = $1
|
147
|
+
else
|
148
|
+
layout = 'default.liquid'
|
149
|
+
end
|
129
150
|
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
151
|
+
# Read the layout file
|
152
|
+
layout_file = File.join(Dir.pwd,'layouts',layout)
|
153
|
+
if File.exists?(layout_file)
|
154
|
+
layout_code = IO.read(layout_file)
|
155
|
+
else
|
156
|
+
puts red("Layout file '#{layout_file}' is missing...")
|
157
|
+
return render_missing(File.join('layouts',layout),'layout')
|
158
|
+
end
|
138
159
|
|
139
|
-
|
160
|
+
puts green(" using layout '#{layout}'")
|
140
161
|
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
162
|
+
begin
|
163
|
+
snippets = parse_snippets(template_code)
|
164
|
+
snippets = parse_snippets(layout_code,snippets)
|
165
|
+
rescue Exception => e
|
166
|
+
# If there is a snippet missing, we raise an error
|
167
|
+
puts red("Snippet file '#{e.message}' is missing...")
|
168
|
+
return render_missing(e.message,'snippet')
|
169
|
+
end
|
149
170
|
|
150
|
-
|
151
|
-
|
171
|
+
if snippets.any?
|
172
|
+
puts green(" using snippets '#{snippets.keys.join('\', \'')}'")
|
173
|
+
end
|
174
|
+
end
|
175
|
+
else
|
176
|
+
template_file = ""
|
152
177
|
end
|
153
178
|
|
154
179
|
# Send the templates to the browser
|
155
180
|
begin
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
181
|
+
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,
|
191
|
+
}})
|
192
|
+
results = json_decode(nimbu.get_request(params))
|
193
|
+
puts results["status"] if Nimbu.debug
|
194
|
+
puts results["headers"] if Nimbu.debug
|
195
|
+
puts results["body"].gsub(/\n/,'') if Nimbu.debug
|
196
|
+
|
197
|
+
status results["status"]
|
198
|
+
headers results["headers"] unless results["headers"] == ""
|
199
|
+
body results["body"]
|
160
200
|
rescue RestClient::Exception => error
|
201
|
+
puts "Error! #{error.http_body}"
|
161
202
|
html = error.http_body
|
162
|
-
end
|
163
|
-
|
164
|
-
if request.xhr?
|
165
|
-
return results["json"]
|
166
|
-
else
|
167
|
-
return "#{html}"
|
168
|
-
end
|
203
|
+
end
|
169
204
|
end
|
170
205
|
|
171
206
|
error 404 do
|
@@ -226,19 +261,19 @@ module Nimbu
|
|
226
261
|
Nimbu::Auth.client
|
227
262
|
end
|
228
263
|
|
229
|
-
def parse_session(response)
|
230
|
-
|
231
|
-
|
232
|
-
|
233
|
-
|
234
|
-
|
235
|
-
|
236
|
-
|
237
|
-
|
238
|
-
|
239
|
-
|
240
|
-
|
241
|
-
end
|
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
|
242
277
|
|
243
278
|
def parse_snippets(code, snippets = {})
|
244
279
|
# Parse template file for snippets
|
data/lib/nimbu/version.rb
CHANGED
data/lib/nimbu.rb
CHANGED
@@ -9,4 +9,20 @@ module Nimbu
|
|
9
9
|
def self.debug
|
10
10
|
@@debug
|
11
11
|
end
|
12
|
+
|
13
|
+
def self.development=(value)
|
14
|
+
@@development = value
|
15
|
+
end
|
16
|
+
|
17
|
+
def self.development
|
18
|
+
@@development
|
19
|
+
end
|
20
|
+
|
21
|
+
def self.v2=(value)
|
22
|
+
@@v2 = value
|
23
|
+
end
|
24
|
+
|
25
|
+
def self.v2
|
26
|
+
@@v2
|
27
|
+
end
|
12
28
|
end
|
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.4'
|
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-
|
12
|
+
date: 2012-07-20 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: term-ansicolor
|
16
|
-
requirement:
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ~>
|
@@ -21,10 +21,15 @@ dependencies:
|
|
21
21
|
version: 1.0.5
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements:
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ~>
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: 1.0.5
|
25
30
|
- !ruby/object:Gem::Dependency
|
26
31
|
name: rest-client
|
27
|
-
requirement:
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
28
33
|
none: false
|
29
34
|
requirements:
|
30
35
|
- - ~>
|
@@ -32,10 +37,15 @@ dependencies:
|
|
32
37
|
version: 1.6.1
|
33
38
|
type: :runtime
|
34
39
|
prerelease: false
|
35
|
-
version_requirements:
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ~>
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: 1.6.1
|
36
46
|
- !ruby/object:Gem::Dependency
|
37
47
|
name: launchy
|
38
|
-
requirement:
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
39
49
|
none: false
|
40
50
|
requirements:
|
41
51
|
- - ! '>='
|
@@ -43,10 +53,15 @@ dependencies:
|
|
43
53
|
version: 0.3.2
|
44
54
|
type: :runtime
|
45
55
|
prerelease: false
|
46
|
-
version_requirements:
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ! '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: 0.3.2
|
47
62
|
- !ruby/object:Gem::Dependency
|
48
63
|
name: rubyzip
|
49
|
-
requirement:
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
50
65
|
none: false
|
51
66
|
requirements:
|
52
67
|
- - ! '>='
|
@@ -54,10 +69,15 @@ dependencies:
|
|
54
69
|
version: '0'
|
55
70
|
type: :runtime
|
56
71
|
prerelease: false
|
57
|
-
version_requirements:
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - ! '>='
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: '0'
|
58
78
|
- !ruby/object:Gem::Dependency
|
59
79
|
name: sinatra
|
60
|
-
requirement:
|
80
|
+
requirement: !ruby/object:Gem::Requirement
|
61
81
|
none: false
|
62
82
|
requirements:
|
63
83
|
- - ! '>='
|
@@ -65,10 +85,15 @@ dependencies:
|
|
65
85
|
version: '0'
|
66
86
|
type: :runtime
|
67
87
|
prerelease: false
|
68
|
-
version_requirements:
|
88
|
+
version_requirements: !ruby/object:Gem::Requirement
|
89
|
+
none: false
|
90
|
+
requirements:
|
91
|
+
- - ! '>='
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
version: '0'
|
69
94
|
- !ruby/object:Gem::Dependency
|
70
95
|
name: sinatra-contrib
|
71
|
-
requirement:
|
96
|
+
requirement: !ruby/object:Gem::Requirement
|
72
97
|
none: false
|
73
98
|
requirements:
|
74
99
|
- - ! '>='
|
@@ -76,10 +101,15 @@ dependencies:
|
|
76
101
|
version: '0'
|
77
102
|
type: :runtime
|
78
103
|
prerelease: false
|
79
|
-
version_requirements:
|
104
|
+
version_requirements: !ruby/object:Gem::Requirement
|
105
|
+
none: false
|
106
|
+
requirements:
|
107
|
+
- - ! '>='
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: '0'
|
80
110
|
- !ruby/object:Gem::Dependency
|
81
111
|
name: compass
|
82
|
-
requirement:
|
112
|
+
requirement: !ruby/object:Gem::Requirement
|
83
113
|
none: false
|
84
114
|
requirements:
|
85
115
|
- - ! '>='
|
@@ -87,10 +117,15 @@ dependencies:
|
|
87
117
|
version: '0'
|
88
118
|
type: :runtime
|
89
119
|
prerelease: false
|
90
|
-
version_requirements:
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
none: false
|
122
|
+
requirements:
|
123
|
+
- - ! '>='
|
124
|
+
- !ruby/object:Gem::Version
|
125
|
+
version: '0'
|
91
126
|
- !ruby/object:Gem::Dependency
|
92
127
|
name: haml
|
93
|
-
requirement:
|
128
|
+
requirement: !ruby/object:Gem::Requirement
|
94
129
|
none: false
|
95
130
|
requirements:
|
96
131
|
- - ! '>='
|
@@ -98,10 +133,15 @@ dependencies:
|
|
98
133
|
version: '0'
|
99
134
|
type: :runtime
|
100
135
|
prerelease: false
|
101
|
-
version_requirements:
|
136
|
+
version_requirements: !ruby/object:Gem::Requirement
|
137
|
+
none: false
|
138
|
+
requirements:
|
139
|
+
- - ! '>='
|
140
|
+
- !ruby/object:Gem::Version
|
141
|
+
version: '0'
|
102
142
|
- !ruby/object:Gem::Dependency
|
103
143
|
name: fssm
|
104
|
-
requirement:
|
144
|
+
requirement: !ruby/object:Gem::Requirement
|
105
145
|
none: false
|
106
146
|
requirements:
|
107
147
|
- - ! '>='
|
@@ -109,10 +149,15 @@ dependencies:
|
|
109
149
|
version: '0'
|
110
150
|
type: :runtime
|
111
151
|
prerelease: false
|
112
|
-
version_requirements:
|
152
|
+
version_requirements: !ruby/object:Gem::Requirement
|
153
|
+
none: false
|
154
|
+
requirements:
|
155
|
+
- - ! '>='
|
156
|
+
- !ruby/object:Gem::Version
|
157
|
+
version: '0'
|
113
158
|
- !ruby/object:Gem::Dependency
|
114
159
|
name: thin
|
115
|
-
requirement:
|
160
|
+
requirement: !ruby/object:Gem::Requirement
|
116
161
|
none: false
|
117
162
|
requirements:
|
118
163
|
- - ! '>='
|
@@ -120,7 +165,12 @@ dependencies:
|
|
120
165
|
version: '0'
|
121
166
|
type: :runtime
|
122
167
|
prerelease: false
|
123
|
-
version_requirements:
|
168
|
+
version_requirements: !ruby/object:Gem::Requirement
|
169
|
+
none: false
|
170
|
+
requirements:
|
171
|
+
- - ! '>='
|
172
|
+
- !ruby/object:Gem::Version
|
173
|
+
version: '0'
|
124
174
|
description: Client library and command-line tool to design and manage websites on
|
125
175
|
the Nimbu platform.
|
126
176
|
email:
|
@@ -169,7 +219,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
169
219
|
version: '0'
|
170
220
|
requirements: []
|
171
221
|
rubyforge_project:
|
172
|
-
rubygems_version: 1.8.
|
222
|
+
rubygems_version: 1.8.23
|
173
223
|
signing_key:
|
174
224
|
specification_version: 3
|
175
225
|
summary: Client library and CLI to design websites on the Nimbu platform.
|