rest_in_peace 0.1.0
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/.gitignore +2 -0
- data/LICENSE +20 -0
- data/README.markdown +31 -0
- data/Rakefile +56 -0
- data/VERSION +1 -0
- data/bin/rip +4 -0
- data/lib/rest_in_peace/generator.rb +258 -0
- data/lib/rest_in_peace/migration.rb +19 -0
- data/lib/rest_in_peace/project_settings.rb +26 -0
- data/lib/rest_in_peace/rip_controller.rb +43 -0
- data/lib/rest_in_peace/server_manager.rb +18 -0
- data/lib/rest_in_peace/templates/controller.rb.erb +52 -0
- data/lib/rest_in_peace/templates/html/edit.html.erb +11 -0
- data/lib/rest_in_peace/templates/html/index.html.erb +19 -0
- data/lib/rest_in_peace/templates/html/layout.html.erb +16 -0
- data/lib/rest_in_peace/templates/html/new.html.erb +11 -0
- data/lib/rest_in_peace/templates/html/show.html.erb +9 -0
- data/lib/rest_in_peace/templates/image/favicon.ico +0 -0
- data/lib/rest_in_peace/templates/model.rb.erb +9 -0
- data/lib/rest_in_peace/templates/readme.txt.erb +1 -0
- data/lib/rest_in_peace/templates/script/define +5 -0
- data/lib/rest_in_peace/templates/script/migrate +5 -0
- data/lib/rest_in_peace/templates/script/server +5 -0
- data/lib/rest_in_peace/templates/stylesheet/main.css +178 -0
- data/lib/rest_in_peace.rb +9 -0
- data/rest_in_peace.gemspec +83 -0
- data/test/helper.rb +10 -0
- data/test/test_rested_db.rb +7 -0
- metadata +144 -0
data/.gitignore
ADDED
data/LICENSE
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
Copyright (c) 2009 Chinmay Garde
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
4
|
+
a copy of this software and associated documentation files (the
|
5
|
+
"Software"), to deal in the Software without restriction, including
|
6
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
7
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
8
|
+
permit persons to whom the Software is furnished to do so, subject to
|
9
|
+
the following conditions:
|
10
|
+
|
11
|
+
The above copyright notice and this permission notice shall be
|
12
|
+
included in all copies or substantial portions of the Software.
|
13
|
+
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
15
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
16
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
17
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
18
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
19
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.markdown
ADDED
@@ -0,0 +1,31 @@
|
|
1
|
+
ReST in Peace
|
2
|
+
=============
|
3
|
+
|
4
|
+
Minimal web framework with a focus on simplicity. Powered by Sinatra and DataMapper.
|
5
|
+
|
6
|
+
Setup
|
7
|
+
-----
|
8
|
+
|
9
|
+
Get the Gem
|
10
|
+
|
11
|
+
gem install rest_in_peace
|
12
|
+
|
13
|
+
Getting Started
|
14
|
+
---------------
|
15
|
+
|
16
|
+
1. Generate the project skeleton
|
17
|
+
rip blogger
|
18
|
+
|
19
|
+
2. Move into the project directory
|
20
|
+
cd blogger
|
21
|
+
|
22
|
+
3. Generate model and controller
|
23
|
+
script/define Post title:string body:string
|
24
|
+
|
25
|
+
4. Migrate database
|
26
|
+
script/migrate
|
27
|
+
|
28
|
+
5. Start server
|
29
|
+
script/server
|
30
|
+
|
31
|
+
6. Browse to http://localhost:4567/post
|
data/Rakefile
ADDED
@@ -0,0 +1,56 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'rake'
|
3
|
+
|
4
|
+
begin
|
5
|
+
require 'jeweler'
|
6
|
+
Jeweler::Tasks.new do |gem|
|
7
|
+
gem.name = "rest_in_peace"
|
8
|
+
gem.summary = %Q{ReST in Peace}
|
9
|
+
gem.description = %Q{Minimal web framework with a focus on simplicity. Powered by Sinatra and DataMapper}
|
10
|
+
gem.email = "chinmaygarde@gmail.com"
|
11
|
+
gem.homepage = "http://github.com/chinmaygarde/rest_in_peace"
|
12
|
+
gem.authors = ["Chinmay Garde"]
|
13
|
+
gem.add_development_dependency "thoughtbot-shoulda", ">= 0"
|
14
|
+
gem.add_development_dependency "datamapper", ">= 0.10.2"
|
15
|
+
gem.add_development_dependency "builder", ">= 2.2.2"
|
16
|
+
gem.add_development_dependency "sinatra", ">= 0.9.4"
|
17
|
+
# gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
|
18
|
+
end
|
19
|
+
Jeweler::GemcutterTasks.new
|
20
|
+
rescue LoadError
|
21
|
+
puts "Jeweler (or a dependency) not available. Install it with: gem install jeweler"
|
22
|
+
end
|
23
|
+
|
24
|
+
require 'rake/testtask'
|
25
|
+
Rake::TestTask.new(:test) do |test|
|
26
|
+
test.libs << 'lib' << 'test'
|
27
|
+
test.pattern = 'test/**/test_*.rb'
|
28
|
+
test.verbose = true
|
29
|
+
end
|
30
|
+
|
31
|
+
begin
|
32
|
+
require 'rcov/rcovtask'
|
33
|
+
Rcov::RcovTask.new do |test|
|
34
|
+
test.libs << 'test'
|
35
|
+
test.pattern = 'test/**/test_*.rb'
|
36
|
+
test.verbose = true
|
37
|
+
end
|
38
|
+
rescue LoadError
|
39
|
+
task :rcov do
|
40
|
+
abort "RCov is not available. In order to run rcov, you must: sudo gem install spicycode-rcov"
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
task :test => :check_dependencies
|
45
|
+
|
46
|
+
task :default => :test
|
47
|
+
|
48
|
+
require 'rake/rdoctask'
|
49
|
+
Rake::RDocTask.new do |rdoc|
|
50
|
+
version = File.exist?('VERSION') ? File.read('VERSION') : ""
|
51
|
+
|
52
|
+
rdoc.rdoc_dir = 'rdoc'
|
53
|
+
rdoc.title = "rest_in_peace #{version}"
|
54
|
+
rdoc.rdoc_files.include('README*')
|
55
|
+
rdoc.rdoc_files.include('lib/**/*.rb')
|
56
|
+
end
|
data/VERSION
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
0.1.0
|
data/bin/rip
ADDED
@@ -0,0 +1,258 @@
|
|
1
|
+
class Generator
|
2
|
+
|
3
|
+
attr_accessor :settings
|
4
|
+
|
5
|
+
def initialize(root_dir)
|
6
|
+
self.settings = ProjectSettings.new(root_dir)
|
7
|
+
end
|
8
|
+
|
9
|
+
def generate_project
|
10
|
+
|
11
|
+
if File.exists?(settings.project_root)
|
12
|
+
puts "A project with that name already exists. Move that project or change the name of the new one."
|
13
|
+
return
|
14
|
+
end
|
15
|
+
|
16
|
+
FileUtils.mkdir(settings.project_root)
|
17
|
+
FileUtils.mkdir(settings.app_directory)
|
18
|
+
FileUtils.mkdir(settings.controller_directory)
|
19
|
+
FileUtils.mkdir(settings.model_directory)
|
20
|
+
FileUtils.mkdir(settings.view_directory)
|
21
|
+
FileUtils.mkdir(settings.log_directory)
|
22
|
+
FileUtils.mkdir(settings.config_directory)
|
23
|
+
FileUtils.mkdir(settings.script_directory)
|
24
|
+
FileUtils.mkdir(settings.database_directory)
|
25
|
+
FileUtils.mkdir(settings.public_directory)
|
26
|
+
FileUtils.mkdir(File.join(settings.public_directory, "stylesheets"))
|
27
|
+
FileUtils.mkdir(File.join(settings.view_directory, "layouts"))
|
28
|
+
FileUtils.cp(File.join(settings.template_directory, "image", "favicon.ico"), settings.public_directory)
|
29
|
+
|
30
|
+
File.open(File.join(settings.project_root, "README"), "w") << File.open(File.join(settings.template_directory, "readme.txt.erb")).read
|
31
|
+
|
32
|
+
File.open(File.join(settings.view_directory, "layouts", "application.html.erb"), "w") << File.open(File.join(settings.template_directory, "html", "layout.html.erb")).read
|
33
|
+
|
34
|
+
File.open(File.join(settings.public_directory, "stylesheets", "main.css"), "w") << File.open(File.join(settings.template_directory, "stylesheet", "main.css")).read
|
35
|
+
|
36
|
+
define_file = File.open(File.join(settings.script_directory, "define"), "w")
|
37
|
+
define_file << File.open(File.join(settings.template_directory, "script", "define")).read
|
38
|
+
|
39
|
+
server_file = File.open(File.join(settings.script_directory, "server"), "w")
|
40
|
+
server_file << File.open(File.join(settings.template_directory, "script", "server")).read
|
41
|
+
|
42
|
+
migration_file = File.open(File.join(settings.script_directory, "migrate"), "w")
|
43
|
+
migration_file << File.open(File.join(settings.template_directory, "script", "migrate")).read
|
44
|
+
|
45
|
+
File.chmod(0755, define_file.path, server_file.path, migration_file.path)
|
46
|
+
|
47
|
+
puts "Your project is six feet under at #{settings.project_root}"
|
48
|
+
end
|
49
|
+
|
50
|
+
def generate_scaffold(*args)
|
51
|
+
generate_model(*args)
|
52
|
+
generate_controller(args[0])
|
53
|
+
generate_views(*args)
|
54
|
+
end
|
55
|
+
|
56
|
+
def generate_model(*args)
|
57
|
+
|
58
|
+
model_name = args[0]
|
59
|
+
columns = Hash.new
|
60
|
+
|
61
|
+
(1 .. (args.length - 1)).each do |i|
|
62
|
+
key_value = args[i].split(':')
|
63
|
+
columns[key_value[0]] = key_value[1]
|
64
|
+
end
|
65
|
+
|
66
|
+
b = ModelViewBinding.new
|
67
|
+
b.model_name = model_name
|
68
|
+
b.columns = columns
|
69
|
+
|
70
|
+
model_string = ERB.new(File.open( File.join(settings.template_directory, "model.rb.erb") ).read ).result(b.get_binding)
|
71
|
+
|
72
|
+
file_path = File.join(settings.model_directory, "#{model_name.capitalize}.rb")
|
73
|
+
|
74
|
+
if File.exists?(file_path)
|
75
|
+
puts "Model #{model_name.capitalize}.rb already exists. Migration Skipped."
|
76
|
+
else
|
77
|
+
puts "Model #{model_name.capitalize}.rb created."
|
78
|
+
outfile = File.open(file_path, "w")
|
79
|
+
outfile << model_string
|
80
|
+
outfile.close
|
81
|
+
end
|
82
|
+
|
83
|
+
end
|
84
|
+
|
85
|
+
def generate_controller(name)
|
86
|
+
|
87
|
+
b = ControllerViewBinding.new
|
88
|
+
b.controller_name = name
|
89
|
+
|
90
|
+
controller_string = ERB.new(File.open( File.join(settings.template_directory, "controller.rb.erb") ).read).result(b.get_binding)
|
91
|
+
file_path = File.join(settings.controller_directory, "#{name.capitalize}Controller.rb")
|
92
|
+
|
93
|
+
if(File.exists?(file_path))
|
94
|
+
puts "Controller #{name.capitalize}Controller.rb already exists. Migration Skipped."
|
95
|
+
else
|
96
|
+
puts "Controller #{name.capitalize}Controller.rb created."
|
97
|
+
outfile = File.open(file_path, "w")
|
98
|
+
outfile << controller_string
|
99
|
+
outfile.close
|
100
|
+
end
|
101
|
+
|
102
|
+
end
|
103
|
+
|
104
|
+
|
105
|
+
def generate_views(*args)
|
106
|
+
model_name = args[0].downcase
|
107
|
+
|
108
|
+
directory = File.join(settings.view_directory, model_name)
|
109
|
+
if File.exists?(directory)
|
110
|
+
puts "Views for this model already exist. Skipping generation"
|
111
|
+
else
|
112
|
+
|
113
|
+
v = ViewBinding.new
|
114
|
+
v.view_name = model_name
|
115
|
+
v.fields = Hash.new
|
116
|
+
(1 .. (args.length - 1)).each do |i|
|
117
|
+
key_value = args[i].split(':')
|
118
|
+
v.fields[key_value[0]] = key_value[1]
|
119
|
+
end
|
120
|
+
v.map_fields_to_html_tags
|
121
|
+
|
122
|
+
(1 .. (args.length - 1)).each do |i|
|
123
|
+
key_value = args[i].split(':')
|
124
|
+
v.fields[key_value[0]] = key_value[1]
|
125
|
+
end
|
126
|
+
|
127
|
+
FileUtils.mkdir(directory)
|
128
|
+
index_file = File.open(File.join(directory, "index.erb"), "w")
|
129
|
+
index_file << ERB.new(File.open(File.join(settings.template_directory, "html" ,"index.html.erb")).read).result(v.get_binding)
|
130
|
+
index_file.close
|
131
|
+
|
132
|
+
show_file = File.open(File.join(directory, "show.erb"), "w")
|
133
|
+
show_file << ERB.new(File.open(File.join(settings.template_directory, "html" ,"show.html.erb")).read).result(v.get_binding)
|
134
|
+
show_file.close
|
135
|
+
|
136
|
+
edit_file = File.open(File.join(directory, "edit.erb"), "w")
|
137
|
+
edit_file << ERB.new(File.open(File.join(settings.template_directory, "html" ,"edit.html.erb")).read).result(v.get_binding)
|
138
|
+
edit_file.close
|
139
|
+
|
140
|
+
new_file = File.open(File.join(directory, "new.erb"), "w")
|
141
|
+
new_file << ERB.new(File.open(File.join(settings.template_directory, "html" ,"new.html.erb")).read).result(v.get_binding)
|
142
|
+
new_file.close
|
143
|
+
|
144
|
+
puts "Views Created."
|
145
|
+
|
146
|
+
end
|
147
|
+
|
148
|
+
|
149
|
+
end
|
150
|
+
|
151
|
+
|
152
|
+
def generate_rackup_config
|
153
|
+
|
154
|
+
app_file = File.open(File.join(settings.config_directory, "config.ru"), "w")
|
155
|
+
|
156
|
+
app_file << line("require 'datamapper'")
|
157
|
+
app_file << line("require 'rest_in_peace'")
|
158
|
+
app_file << line("require 'sinatra/base'")
|
159
|
+
app_file << line("require 'builder'")
|
160
|
+
|
161
|
+
# Require all models
|
162
|
+
Dir.foreach(settings.model_directory) do |m|
|
163
|
+
file_path = File.join(settings.model_directory, m)
|
164
|
+
full_path = File.expand_path(file_path)
|
165
|
+
|
166
|
+
if File.extname(full_path) == ".rb"
|
167
|
+
app_file << line("require '#{full_path}'")
|
168
|
+
end
|
169
|
+
end
|
170
|
+
|
171
|
+
controller_names = []
|
172
|
+
# Load all controllers
|
173
|
+
Dir.foreach(settings.controller_directory) do |c|
|
174
|
+
file_path = File.join(settings.controller_directory, c)
|
175
|
+
full_path = File.expand_path(file_path)
|
176
|
+
if File.extname(full_path) == ".rb"
|
177
|
+
app_file << line("require '#{full_path}'")
|
178
|
+
controller_names << File.basename(full_path, File.extname(full_path)).capitalize
|
179
|
+
end
|
180
|
+
end
|
181
|
+
|
182
|
+
app_file << line("Sinatra::Base.set :public, File.join(File.dirname(File.dirname(__FILE__)), 'public')")
|
183
|
+
|
184
|
+
controller_names.each do |controller|
|
185
|
+
app_file << line("map \"/#{controller.downcase.gsub("controller", "")}\" do")
|
186
|
+
#app_file << line("Sinatra::Base.set :public, File.expand_path(File.join(File.dirname(File.dirname(__FILE__)), 'public'))", 1)
|
187
|
+
#app_file << line("p File.expand_path(File.join(File.dirname(File.dirname(__FILE__)), 'public'))", 1)
|
188
|
+
app_file << line("DataMapper.setup(:default, \"sqlite3://#{settings.database_directory}/development.sqlite3\")" , 1)
|
189
|
+
app_file << line("controller = #{controller.gsub("controller", "Controller")}.new(File.dirname(File.dirname(__FILE__)))", 1)
|
190
|
+
app_file << line("run controller", 1)
|
191
|
+
app_file << line("end")
|
192
|
+
end
|
193
|
+
|
194
|
+
app_file << line("map \"/public\" do")
|
195
|
+
app_file << line("run RIPController.new(File.dirname(File.dirname(__FILE__)))", 1)
|
196
|
+
app_file << line("end")
|
197
|
+
|
198
|
+
app_file.close
|
199
|
+
|
200
|
+
end
|
201
|
+
|
202
|
+
private
|
203
|
+
|
204
|
+
def line(str, indent=0)
|
205
|
+
out_str = ""
|
206
|
+
indent.times do
|
207
|
+
out_str = out_str + "\t"
|
208
|
+
end
|
209
|
+
out_str = out_str + str + "\n"
|
210
|
+
end
|
211
|
+
|
212
|
+
end
|
213
|
+
|
214
|
+
class ModelViewBinding
|
215
|
+
|
216
|
+
attr_accessor :model_name, :columns
|
217
|
+
|
218
|
+
def get_binding
|
219
|
+
binding
|
220
|
+
end
|
221
|
+
|
222
|
+
end
|
223
|
+
|
224
|
+
class ControllerViewBinding
|
225
|
+
|
226
|
+
attr_accessor :controller_name
|
227
|
+
|
228
|
+
def get_binding
|
229
|
+
binding
|
230
|
+
end
|
231
|
+
|
232
|
+
end
|
233
|
+
|
234
|
+
class ViewBinding
|
235
|
+
|
236
|
+
attr_accessor :view_name, :fields, :html_tags
|
237
|
+
|
238
|
+
def get_binding
|
239
|
+
binding
|
240
|
+
end
|
241
|
+
|
242
|
+
def map_fields_to_html_tags
|
243
|
+
@html_tags = Hash.new
|
244
|
+
@fields.each do |key, value|
|
245
|
+
@html_tags[key] = tag_for_field_type(value)
|
246
|
+
end
|
247
|
+
end
|
248
|
+
|
249
|
+
def tag_for_field_type(type)
|
250
|
+
case type
|
251
|
+
when "string"
|
252
|
+
"text" #for now, only text inputs will work. Really need to think this through.
|
253
|
+
else
|
254
|
+
"text"
|
255
|
+
end
|
256
|
+
end
|
257
|
+
|
258
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
class Migration
|
2
|
+
|
3
|
+
def migrate(project_root)
|
4
|
+
settings = ProjectSettings.new(project_root)
|
5
|
+
count = 0
|
6
|
+
Dir.foreach(settings.model_directory) do |m|
|
7
|
+
file_path = File.join(settings.model_directory, m)
|
8
|
+
full_path = File.expand_path(file_path)
|
9
|
+
if File.extname(full_path) == ".rb"
|
10
|
+
require "#{full_path}"
|
11
|
+
count = count + 1
|
12
|
+
end
|
13
|
+
end
|
14
|
+
DataMapper.setup(:default, "sqlite3://#{settings.database_directory}/development.sqlite3")
|
15
|
+
DataMapper.auto_migrate!
|
16
|
+
puts "All #{count} Migrations Complete"
|
17
|
+
end
|
18
|
+
|
19
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
class ProjectSettings
|
2
|
+
|
3
|
+
attr_accessor :project_root, :app_directory, :controller_directory, :model_directory,
|
4
|
+
:view_directory, :log_directory, :config_directory, :template_directory,
|
5
|
+
:script_directory, :database_directory, :public_directory
|
6
|
+
|
7
|
+
def initialize(root_dir)
|
8
|
+
|
9
|
+
# Project Specific Paths
|
10
|
+
self.project_root = File.expand_path(root_dir)
|
11
|
+
self.public_directory = File.join(root_dir, "public")
|
12
|
+
self.app_directory = File.join(root_dir, "app")
|
13
|
+
self.controller_directory = File.join(app_directory, "controllers")
|
14
|
+
self.model_directory = File.join(app_directory, "models")
|
15
|
+
self.view_directory = File.join(app_directory, "views")
|
16
|
+
self.log_directory = File.join(project_root, "log")
|
17
|
+
self.config_directory = File.join(project_root, "config")
|
18
|
+
self.script_directory = File.join(project_root, "script")
|
19
|
+
self.database_directory = File.join(project_root, "db")
|
20
|
+
|
21
|
+
# Gem Specific Paths
|
22
|
+
self.template_directory = File.join("#{File.dirname(__FILE__)}", "templates")
|
23
|
+
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
class RIPController < Sinatra::Base
|
2
|
+
set :method_override, true
|
3
|
+
|
4
|
+
def initialize(project_root)
|
5
|
+
@settings = ProjectSettings.new(project_root)
|
6
|
+
end
|
7
|
+
|
8
|
+
# Converts an entity to its XML representation
|
9
|
+
def to_xml(entities)
|
10
|
+
content_type("text/xml")
|
11
|
+
xml = Builder::XmlMarkup.new
|
12
|
+
xml.instruct!
|
13
|
+
if entities.class.to_s == "DataMapper::Collection" # Bad idea!, problem to be solved another day :)
|
14
|
+
xml.results do
|
15
|
+
entities.each do |entity|
|
16
|
+
convert_entity(entity, xml)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
else
|
20
|
+
convert_entity(entities, xml)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def to_html(view, controller=self)
|
25
|
+
content_type("text/html")
|
26
|
+
Sinatra::Base.set(:views, File.join(@settings.view_directory, controller.class.to_s.downcase.gsub("controller", "")))
|
27
|
+
@yield = erb(view)
|
28
|
+
ERB.new(File.open(File.join(@settings.view_directory, "layouts", "application.html.erb")).read).result(binding)
|
29
|
+
end
|
30
|
+
|
31
|
+
private
|
32
|
+
|
33
|
+
def convert_entity(entity, xml)
|
34
|
+
xml.tag!(entity.class.to_s.downcase) do |b|
|
35
|
+
entity.instance_variables.each do |v|
|
36
|
+
unless v.match(/@_*/).to_s == "@_"
|
37
|
+
b.tag!(v.gsub("@", ""), entity.instance_variable_get(v))
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
class ServerManager
|
2
|
+
|
3
|
+
def start_server(project_root)
|
4
|
+
|
5
|
+
settings = ProjectSettings.new(project_root)
|
6
|
+
|
7
|
+
Generator.new(project_root).generate_rackup_config
|
8
|
+
|
9
|
+
puts "--------------------------------------------------------------------------------"
|
10
|
+
puts "--------------------------------------------------------------------------------"
|
11
|
+
puts "-------------------- Dead man walking at localhost:4567 ------------------------"
|
12
|
+
puts "--------------------------------------------------------------------------------"
|
13
|
+
puts "--------------------------------------------------------------------------------"
|
14
|
+
system "rackup #{File.join(settings.config_directory, "config.ru")} -p 4567 -s webrick"
|
15
|
+
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
class <%= @controller_name.capitalize %>Controller < RIPController
|
2
|
+
|
3
|
+
# HTTP GET
|
4
|
+
get "/?" do
|
5
|
+
@<%= @controller_name.downcase %>s = <%= @controller_name.capitalize %>.all
|
6
|
+
#to_xml(<%= @controller_name.downcase %>s)
|
7
|
+
to_html(:index)
|
8
|
+
end
|
9
|
+
|
10
|
+
get "/new" do
|
11
|
+
@<%= @controller_name.downcase %> = <%= @controller_name.capitalize %>.new
|
12
|
+
#to_xml(<%= @controller_name.downcase %>)
|
13
|
+
to_html(:new)
|
14
|
+
end
|
15
|
+
|
16
|
+
get "/:id" do
|
17
|
+
@<%= @controller_name.downcase %> = <%= @controller_name.capitalize %>.get(params[:id])
|
18
|
+
#to_xml(<%= @controller_name.downcase %>)
|
19
|
+
to_html(:show)
|
20
|
+
end
|
21
|
+
|
22
|
+
get "/:id/edit" do
|
23
|
+
@<%= @controller_name.downcase %> = <%= @controller_name.capitalize %>.get(params[:id])
|
24
|
+
#to_xml(<%= @controller_name.downcase %>)
|
25
|
+
to_html(:edit)
|
26
|
+
end
|
27
|
+
|
28
|
+
# HTTP POST
|
29
|
+
post "/?" do
|
30
|
+
@<%= @controller_name.downcase %> = <%= @controller_name.capitalize %>.new
|
31
|
+
@<%= @controller_name.downcase %>.attributes = params[:<%= @controller_name.downcase %>]
|
32
|
+
@<%= @controller_name.downcase %>.save
|
33
|
+
#to_xml(<%= @controller_name.downcase %>)
|
34
|
+
to_html(:show)
|
35
|
+
end
|
36
|
+
|
37
|
+
# HTTP PUT
|
38
|
+
put "/:id" do
|
39
|
+
@<%= @controller_name.downcase %> = <%= @controller_name.capitalize %>.get(params[:id])
|
40
|
+
@<%= @controller_name.downcase %>.update(params[:<%= @controller_name.downcase %>])
|
41
|
+
#to_xml(<%= @controller_name.downcase %>)
|
42
|
+
to_html(:show)
|
43
|
+
end
|
44
|
+
|
45
|
+
# HTTP DELETE
|
46
|
+
delete "/:id" do
|
47
|
+
@<%= @controller_name.downcase %> = <%= @controller_name.capitalize %>.get(params[:id])
|
48
|
+
@<%= @controller_name.downcase %>.destroy!
|
49
|
+
#to_xml(<%= @controller_name.downcase %>)
|
50
|
+
to_html(:index)
|
51
|
+
end
|
52
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
<h1>Editing <%= @view_name %></h1>
|
2
|
+
<form action="/<%= @view_name %>/<%%= params[:id] %>" method="post" accept-charset="utf-8">
|
3
|
+
<input type="hidden" id="_method" name="_method" value="put" />
|
4
|
+
<% @html_tags.each do |key, value| %>
|
5
|
+
<p>
|
6
|
+
<label for="<%= key %>"><%= key.capitalize %></label><br />
|
7
|
+
<input type="<%= value %>" name="<%= "#{@view_name}[#{key}]" %>" value="<%%= <%= "@#{@view_name}.#{key}" %> %>" id="<%= "#{@view_name}_#{key}" %>">
|
8
|
+
</p>
|
9
|
+
<% end %>
|
10
|
+
<p><input type="submit" value="Edit →"></p>
|
11
|
+
</form>
|
@@ -0,0 +1,19 @@
|
|
1
|
+
<h1>Index: <%= @view_name.capitalize %></h1>
|
2
|
+
<table border="0">
|
3
|
+
<tr>
|
4
|
+
<% @html_tags.each do |key, value| %>
|
5
|
+
<th><%= key.capitalize %></th>
|
6
|
+
<% end %>
|
7
|
+
|
8
|
+
</tr>
|
9
|
+
<%% <%= "@#{@view_name}s.each do |#{@view_name}|" %> %>
|
10
|
+
<tr>
|
11
|
+
<% @html_tags.each do |key, value| %>
|
12
|
+
<td><%%= <%= "#{@view_name}.#{key}" %> %></td>
|
13
|
+
<% end %>
|
14
|
+
</tr>
|
15
|
+
<%% end %>
|
16
|
+
</table>
|
17
|
+
<p>
|
18
|
+
<a href="/<%= @view_name %>/new">Add new <%= @view_name.capitalize %></a>
|
19
|
+
</p>
|
@@ -0,0 +1,16 @@
|
|
1
|
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
2
|
+
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
3
|
+
|
4
|
+
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
5
|
+
<head>
|
6
|
+
<meta http-equiv="content-type" content="text/html;charset=UTF-8" />
|
7
|
+
<link rel="shortcut icon" href="/public/favicon.ico" type="image/x-icon">
|
8
|
+
<title>ReST in Peace</title>
|
9
|
+
<link rel="stylesheet" href="/public/stylesheets/main.css" type="text/css" media="screen" charset="utf-8">
|
10
|
+
</head>
|
11
|
+
<body>
|
12
|
+
<div id="mainLayout">
|
13
|
+
<%= @yield %>
|
14
|
+
</div>
|
15
|
+
</body>
|
16
|
+
</html>
|
@@ -0,0 +1,11 @@
|
|
1
|
+
<h1>New <%= @view_name %></h1>
|
2
|
+
<form action="/<%= @view_name %>" method="post" accept-charset="utf-8">
|
3
|
+
<% @html_tags.each do |key, value| %>
|
4
|
+
<p>
|
5
|
+
<label for="<%= key %>"><%= key.capitalize %></label><br />
|
6
|
+
<input type="<%= value %>" name="<%= "#{@view_name}[#{key}]" %>" value="" id="<%= "#{@view_name}_#{key}" %>">
|
7
|
+
</p>
|
8
|
+
<% end %>
|
9
|
+
<p><input type="submit" value="Submit →"></p>
|
10
|
+
<a href="/<%= @view_name %>">Back</a>
|
11
|
+
</form>
|
@@ -0,0 +1,9 @@
|
|
1
|
+
<h1>Showing <%= @view_name.capitalize %></h1>
|
2
|
+
|
3
|
+
<% @html_tags.each do |key, value| %>
|
4
|
+
<p>
|
5
|
+
<%= key.capitalize %>: <%%= <%= "@#{@view_name}.#{key}" %> %>
|
6
|
+
</p>
|
7
|
+
<% end %>
|
8
|
+
<a href="/<%= @view_name %>">Back</a> |
|
9
|
+
<a href="/<%= @view_name %>/<%%= params[:id] %>/edit">Edit</a>
|
Binary file
|
@@ -0,0 +1 @@
|
|
1
|
+
This is a new ReST in Peace project.
|
@@ -0,0 +1,178 @@
|
|
1
|
+
body
|
2
|
+
{
|
3
|
+
background-color:#DDEEF6;
|
4
|
+
color: #DDEEF6;
|
5
|
+
}
|
6
|
+
|
7
|
+
body, p, ol, ul, td
|
8
|
+
{
|
9
|
+
font-family: verdana, arial, helvetica, sans-serif;
|
10
|
+
font-size: 14px;
|
11
|
+
line-height: 18px;
|
12
|
+
}
|
13
|
+
input
|
14
|
+
{
|
15
|
+
width:250px;
|
16
|
+
font-size:18px;
|
17
|
+
background-color:#FFF;
|
18
|
+
-moz-border-radius:5px;
|
19
|
+
-webkit-border-radius:5px;
|
20
|
+
padding:8px;
|
21
|
+
}
|
22
|
+
pre {
|
23
|
+
background-color: #eee;
|
24
|
+
padding: 10px;
|
25
|
+
font-size: 11px;
|
26
|
+
}
|
27
|
+
|
28
|
+
a { color: #AADDFF; text-decoration:none;}
|
29
|
+
a:visited { color: #AADDFF; text-decoration:none;}
|
30
|
+
a:hover { color: #AADDFF; text-decoration:none;}
|
31
|
+
|
32
|
+
table th
|
33
|
+
{
|
34
|
+
padding-left:8px;
|
35
|
+
text-align:left;
|
36
|
+
font-size:15px;
|
37
|
+
}
|
38
|
+
table td
|
39
|
+
{
|
40
|
+
font-size:14px;
|
41
|
+
padding:8px;
|
42
|
+
}
|
43
|
+
#loginLogout
|
44
|
+
{
|
45
|
+
float:right;
|
46
|
+
}
|
47
|
+
#mainLayout
|
48
|
+
{
|
49
|
+
-moz-border-radius:25px;
|
50
|
+
-webkit-border-radius:25px;
|
51
|
+
margin:0px auto;
|
52
|
+
padding:25px;
|
53
|
+
width:80%;
|
54
|
+
border:thin;
|
55
|
+
border-color:#FFF;
|
56
|
+
background-color:#002233;
|
57
|
+
}
|
58
|
+
#navBar
|
59
|
+
{
|
60
|
+
height: 50px;
|
61
|
+
margin:0px auto;
|
62
|
+
width:80%;
|
63
|
+
border:thin;
|
64
|
+
border-color:#FFF;
|
65
|
+
}
|
66
|
+
#navBar ul
|
67
|
+
{
|
68
|
+
padding:0px;
|
69
|
+
float:right;
|
70
|
+
}
|
71
|
+
#navBar li
|
72
|
+
{
|
73
|
+
-moz-border-radius:10px;
|
74
|
+
-webkit-border-radius:10px;
|
75
|
+
padding:10px;
|
76
|
+
display:inline;
|
77
|
+
background-color:#002233;
|
78
|
+
}
|
79
|
+
#navBar a
|
80
|
+
{
|
81
|
+
padding:10px;
|
82
|
+
}
|
83
|
+
#navBar li:hover
|
84
|
+
{
|
85
|
+
color:#002233;
|
86
|
+
background-color:#aaddff;
|
87
|
+
}
|
88
|
+
#navBar li a:hover
|
89
|
+
{
|
90
|
+
color:#002233;
|
91
|
+
}
|
92
|
+
#achievement #achievement_distance
|
93
|
+
{
|
94
|
+
float: right;
|
95
|
+
}
|
96
|
+
#checkpoint
|
97
|
+
{
|
98
|
+
padding: 10px 0px 10px 0px;
|
99
|
+
}
|
100
|
+
#user
|
101
|
+
{
|
102
|
+
padding: 10px 0px 10px 0px;
|
103
|
+
}
|
104
|
+
#user #avatar
|
105
|
+
{
|
106
|
+
float:left;
|
107
|
+
padding:20px;
|
108
|
+
}
|
109
|
+
#user #actions
|
110
|
+
{
|
111
|
+
float: right;
|
112
|
+
}
|
113
|
+
#friendship
|
114
|
+
{
|
115
|
+
padding: 10px 0px 10px 0px;
|
116
|
+
}
|
117
|
+
#friendship #actions
|
118
|
+
{
|
119
|
+
float: right;
|
120
|
+
}
|
121
|
+
#quest
|
122
|
+
{
|
123
|
+
padding: 10px 0px 10px 0px;
|
124
|
+
}
|
125
|
+
#quest #summary
|
126
|
+
{
|
127
|
+
float: right;
|
128
|
+
}
|
129
|
+
.pagination
|
130
|
+
{
|
131
|
+
padding:8px;
|
132
|
+
}
|
133
|
+
.pagination .current
|
134
|
+
{
|
135
|
+
font-size:18px;
|
136
|
+
}
|
137
|
+
#flash
|
138
|
+
{
|
139
|
+
font-size:14px;
|
140
|
+
color:#0F0;
|
141
|
+
}
|
142
|
+
.fieldWithErrors {
|
143
|
+
padding: 2px;
|
144
|
+
background-color: red;
|
145
|
+
display: table;
|
146
|
+
}
|
147
|
+
|
148
|
+
#errorExplanation {
|
149
|
+
width: 400px;
|
150
|
+
border: 2px solid red;
|
151
|
+
padding: 7px;
|
152
|
+
padding-bottom: 12px;
|
153
|
+
margin-bottom: 20px;
|
154
|
+
background-color: #f0f0f0;
|
155
|
+
color: #000;
|
156
|
+
}
|
157
|
+
|
158
|
+
#errorExplanation h2 {
|
159
|
+
text-align: left;
|
160
|
+
font-weight: bold;
|
161
|
+
padding: 5px 5px 5px 15px;
|
162
|
+
font-size: 12px;
|
163
|
+
margin: -7px;
|
164
|
+
background-color: #c00;
|
165
|
+
color: #fff;
|
166
|
+
}
|
167
|
+
|
168
|
+
#errorExplanation p {
|
169
|
+
color: #333;
|
170
|
+
margin-bottom: 0;
|
171
|
+
padding: 5px;
|
172
|
+
}
|
173
|
+
|
174
|
+
#errorExplanation ul li {
|
175
|
+
font-size: 12px;
|
176
|
+
list-style: square;
|
177
|
+
}
|
178
|
+
|
@@ -0,0 +1,9 @@
|
|
1
|
+
require 'datamapper'
|
2
|
+
require 'sinatra/base'
|
3
|
+
require 'rest_in_peace/rip_controller'
|
4
|
+
autoload :Generator, 'rest_in_peace/generator'
|
5
|
+
autoload :Builder, 'builder'
|
6
|
+
autoload :ProjectSettings, 'rest_in_peace/project_settings'
|
7
|
+
autoload :ERB, 'erb'
|
8
|
+
autoload :ServerManager, 'rest_in_peace/server_manager'
|
9
|
+
autoload :Migration, 'rest_in_peace/migration'
|
@@ -0,0 +1,83 @@
|
|
1
|
+
# Generated by jeweler
|
2
|
+
# DO NOT EDIT THIS FILE DIRECTLY
|
3
|
+
# Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
|
4
|
+
# -*- encoding: utf-8 -*-
|
5
|
+
|
6
|
+
Gem::Specification.new do |s|
|
7
|
+
s.name = %q{rest_in_peace}
|
8
|
+
s.version = "0.1.0"
|
9
|
+
|
10
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
|
+
s.authors = ["Chinmay Garde"]
|
12
|
+
s.date = %q{2010-03-16}
|
13
|
+
s.default_executable = %q{rip}
|
14
|
+
s.description = %q{Minimal web framework with a focus on simplicity. Powered by Sinatra and DataMapper}
|
15
|
+
s.email = %q{chinmaygarde@gmail.com}
|
16
|
+
s.executables = ["rip"]
|
17
|
+
s.extra_rdoc_files = [
|
18
|
+
"LICENSE",
|
19
|
+
"README.markdown"
|
20
|
+
]
|
21
|
+
s.files = [
|
22
|
+
".gitignore",
|
23
|
+
"LICENSE",
|
24
|
+
"README.markdown",
|
25
|
+
"Rakefile",
|
26
|
+
"VERSION",
|
27
|
+
"bin/rip",
|
28
|
+
"lib/rest_in_peace.rb",
|
29
|
+
"lib/rest_in_peace/generator.rb",
|
30
|
+
"lib/rest_in_peace/migration.rb",
|
31
|
+
"lib/rest_in_peace/project_settings.rb",
|
32
|
+
"lib/rest_in_peace/rip_controller.rb",
|
33
|
+
"lib/rest_in_peace/server_manager.rb",
|
34
|
+
"lib/rest_in_peace/templates/controller.rb.erb",
|
35
|
+
"lib/rest_in_peace/templates/html/edit.html.erb",
|
36
|
+
"lib/rest_in_peace/templates/html/index.html.erb",
|
37
|
+
"lib/rest_in_peace/templates/html/layout.html.erb",
|
38
|
+
"lib/rest_in_peace/templates/html/new.html.erb",
|
39
|
+
"lib/rest_in_peace/templates/html/show.html.erb",
|
40
|
+
"lib/rest_in_peace/templates/image/favicon.ico",
|
41
|
+
"lib/rest_in_peace/templates/model.rb.erb",
|
42
|
+
"lib/rest_in_peace/templates/readme.txt.erb",
|
43
|
+
"lib/rest_in_peace/templates/script/define",
|
44
|
+
"lib/rest_in_peace/templates/script/migrate",
|
45
|
+
"lib/rest_in_peace/templates/script/server",
|
46
|
+
"lib/rest_in_peace/templates/stylesheet/main.css",
|
47
|
+
"rest_in_peace.gemspec",
|
48
|
+
"test/helper.rb",
|
49
|
+
"test/test_rested_db.rb"
|
50
|
+
]
|
51
|
+
s.homepage = %q{http://github.com/chinmaygarde/rest_in_peace}
|
52
|
+
s.rdoc_options = ["--charset=UTF-8"]
|
53
|
+
s.require_paths = ["lib"]
|
54
|
+
s.rubygems_version = %q{1.3.6}
|
55
|
+
s.summary = %q{ReST in Peace}
|
56
|
+
s.test_files = [
|
57
|
+
"test/helper.rb",
|
58
|
+
"test/test_rested_db.rb"
|
59
|
+
]
|
60
|
+
|
61
|
+
if s.respond_to? :specification_version then
|
62
|
+
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
63
|
+
s.specification_version = 3
|
64
|
+
|
65
|
+
if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
|
66
|
+
s.add_development_dependency(%q<thoughtbot-shoulda>, [">= 0"])
|
67
|
+
s.add_development_dependency(%q<datamapper>, [">= 0.10.2"])
|
68
|
+
s.add_development_dependency(%q<builder>, [">= 2.2.2"])
|
69
|
+
s.add_development_dependency(%q<sinatra>, [">= 0.9.4"])
|
70
|
+
else
|
71
|
+
s.add_dependency(%q<thoughtbot-shoulda>, [">= 0"])
|
72
|
+
s.add_dependency(%q<datamapper>, [">= 0.10.2"])
|
73
|
+
s.add_dependency(%q<builder>, [">= 2.2.2"])
|
74
|
+
s.add_dependency(%q<sinatra>, [">= 0.9.4"])
|
75
|
+
end
|
76
|
+
else
|
77
|
+
s.add_dependency(%q<thoughtbot-shoulda>, [">= 0"])
|
78
|
+
s.add_dependency(%q<datamapper>, [">= 0.10.2"])
|
79
|
+
s.add_dependency(%q<builder>, [">= 2.2.2"])
|
80
|
+
s.add_dependency(%q<sinatra>, [">= 0.9.4"])
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
data/test/helper.rb
ADDED
metadata
ADDED
@@ -0,0 +1,144 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: rest_in_peace
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
prerelease: false
|
5
|
+
segments:
|
6
|
+
- 0
|
7
|
+
- 1
|
8
|
+
- 0
|
9
|
+
version: 0.1.0
|
10
|
+
platform: ruby
|
11
|
+
authors:
|
12
|
+
- Chinmay Garde
|
13
|
+
autorequire:
|
14
|
+
bindir: bin
|
15
|
+
cert_chain: []
|
16
|
+
|
17
|
+
date: 2010-03-16 00:00:00 +05:30
|
18
|
+
default_executable: rip
|
19
|
+
dependencies:
|
20
|
+
- !ruby/object:Gem::Dependency
|
21
|
+
name: thoughtbot-shoulda
|
22
|
+
prerelease: false
|
23
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
24
|
+
requirements:
|
25
|
+
- - ">="
|
26
|
+
- !ruby/object:Gem::Version
|
27
|
+
segments:
|
28
|
+
- 0
|
29
|
+
version: "0"
|
30
|
+
type: :development
|
31
|
+
version_requirements: *id001
|
32
|
+
- !ruby/object:Gem::Dependency
|
33
|
+
name: datamapper
|
34
|
+
prerelease: false
|
35
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
36
|
+
requirements:
|
37
|
+
- - ">="
|
38
|
+
- !ruby/object:Gem::Version
|
39
|
+
segments:
|
40
|
+
- 0
|
41
|
+
- 10
|
42
|
+
- 2
|
43
|
+
version: 0.10.2
|
44
|
+
type: :development
|
45
|
+
version_requirements: *id002
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: builder
|
48
|
+
prerelease: false
|
49
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
50
|
+
requirements:
|
51
|
+
- - ">="
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
segments:
|
54
|
+
- 2
|
55
|
+
- 2
|
56
|
+
- 2
|
57
|
+
version: 2.2.2
|
58
|
+
type: :development
|
59
|
+
version_requirements: *id003
|
60
|
+
- !ruby/object:Gem::Dependency
|
61
|
+
name: sinatra
|
62
|
+
prerelease: false
|
63
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
64
|
+
requirements:
|
65
|
+
- - ">="
|
66
|
+
- !ruby/object:Gem::Version
|
67
|
+
segments:
|
68
|
+
- 0
|
69
|
+
- 9
|
70
|
+
- 4
|
71
|
+
version: 0.9.4
|
72
|
+
type: :development
|
73
|
+
version_requirements: *id004
|
74
|
+
description: Minimal web framework with a focus on simplicity. Powered by Sinatra and DataMapper
|
75
|
+
email: chinmaygarde@gmail.com
|
76
|
+
executables:
|
77
|
+
- rip
|
78
|
+
extensions: []
|
79
|
+
|
80
|
+
extra_rdoc_files:
|
81
|
+
- LICENSE
|
82
|
+
- README.markdown
|
83
|
+
files:
|
84
|
+
- .gitignore
|
85
|
+
- LICENSE
|
86
|
+
- README.markdown
|
87
|
+
- Rakefile
|
88
|
+
- VERSION
|
89
|
+
- bin/rip
|
90
|
+
- lib/rest_in_peace.rb
|
91
|
+
- lib/rest_in_peace/generator.rb
|
92
|
+
- lib/rest_in_peace/migration.rb
|
93
|
+
- lib/rest_in_peace/project_settings.rb
|
94
|
+
- lib/rest_in_peace/rip_controller.rb
|
95
|
+
- lib/rest_in_peace/server_manager.rb
|
96
|
+
- lib/rest_in_peace/templates/controller.rb.erb
|
97
|
+
- lib/rest_in_peace/templates/html/edit.html.erb
|
98
|
+
- lib/rest_in_peace/templates/html/index.html.erb
|
99
|
+
- lib/rest_in_peace/templates/html/layout.html.erb
|
100
|
+
- lib/rest_in_peace/templates/html/new.html.erb
|
101
|
+
- lib/rest_in_peace/templates/html/show.html.erb
|
102
|
+
- lib/rest_in_peace/templates/image/favicon.ico
|
103
|
+
- lib/rest_in_peace/templates/model.rb.erb
|
104
|
+
- lib/rest_in_peace/templates/readme.txt.erb
|
105
|
+
- lib/rest_in_peace/templates/script/define
|
106
|
+
- lib/rest_in_peace/templates/script/migrate
|
107
|
+
- lib/rest_in_peace/templates/script/server
|
108
|
+
- lib/rest_in_peace/templates/stylesheet/main.css
|
109
|
+
- rest_in_peace.gemspec
|
110
|
+
- test/helper.rb
|
111
|
+
- test/test_rested_db.rb
|
112
|
+
has_rdoc: true
|
113
|
+
homepage: http://github.com/chinmaygarde/rest_in_peace
|
114
|
+
licenses: []
|
115
|
+
|
116
|
+
post_install_message:
|
117
|
+
rdoc_options:
|
118
|
+
- --charset=UTF-8
|
119
|
+
require_paths:
|
120
|
+
- lib
|
121
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
122
|
+
requirements:
|
123
|
+
- - ">="
|
124
|
+
- !ruby/object:Gem::Version
|
125
|
+
segments:
|
126
|
+
- 0
|
127
|
+
version: "0"
|
128
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
129
|
+
requirements:
|
130
|
+
- - ">="
|
131
|
+
- !ruby/object:Gem::Version
|
132
|
+
segments:
|
133
|
+
- 0
|
134
|
+
version: "0"
|
135
|
+
requirements: []
|
136
|
+
|
137
|
+
rubyforge_project:
|
138
|
+
rubygems_version: 1.3.6
|
139
|
+
signing_key:
|
140
|
+
specification_version: 3
|
141
|
+
summary: ReST in Peace
|
142
|
+
test_files:
|
143
|
+
- test/helper.rb
|
144
|
+
- test/test_rested_db.rb
|