vesper 1.0.1 → 1.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +1 -1
- data/bin/vesper +119 -126
- data/lib/vesper.rb +31 -20
- data/lib/vesper/framework/Gemfile +1 -1
- data/lib/vesper/framework/Rakefile +2 -1
- data/lib/vesper/framework/application/hello_world.rb +0 -17
- data/lib/vesper/framework/config.ru +1 -0
- data/lib/vesper/framework/plugins/{core-extensions → core-extensions.vpi}/Gemfile +0 -0
- data/lib/vesper/framework/plugins/{core-extensions → core-extensions.vpi}/Readme.md +0 -0
- data/lib/vesper/framework/plugins/{core-extensions → core-extensions.vpi}/application/date_time.rb +0 -0
- data/lib/vesper/framework/plugins/{core-extensions → core-extensions.vpi}/application/helpers.rb +0 -0
- data/lib/vesper/framework/plugins/{core-extensions → core-extensions.vpi}/application/number.rb +0 -0
- data/lib/vesper/framework/plugins/{core-extensions → core-extensions.vpi}/application/string.rb +0 -0
- data/lib/vesper/framework/tmp/plugins/{data-mapper → data-mapper.vpi}/Gemfile +0 -0
- data/lib/vesper/framework/tmp/plugins/{data-mapper → data-mapper.vpi}/Readme.md +0 -0
- data/lib/vesper/framework/tmp/plugins/{data-mapper → data-mapper.vpi}/assets/data/seeds.rb +0 -0
- data/lib/vesper/framework/tmp/plugins/{data-mapper → data-mapper.vpi}/assets/data/transmogrify.rb +0 -0
- data/lib/vesper/framework/tmp/plugins/{data-mapper → data-mapper.vpi}/config/datasources.rb +0 -0
- data/lib/vesper/framework/tmp/plugins/{data-mapper → data-mapper.vpi}/hooks/post-boot.rb +0 -0
- data/lib/vesper/framework/tmp/plugins/{data-mapper → data-mapper.vpi}/tasks/data-mapper.rb +0 -0
- data/lib/vesper/framework/tmp/plugins/{hot-reloader → hot-reloader.vpi}/Gemfile +0 -0
- data/lib/vesper/framework/tmp/plugins/{hot-reloader → hot-reloader.vpi}/Readme.md +0 -0
- data/lib/vesper/framework/tmp/plugins/{hot-reloader → hot-reloader.vpi}/config/hot-reloader.rb +0 -0
- data/lib/vesper/framework/tmp/plugins/mini-test.vpi/Readme.md +14 -0
- data/lib/vesper/framework/tmp/plugins/mini-test.vpi/assets/tests/hello_world.rb +5 -0
- data/lib/vesper/framework/tmp/plugins/mini-test.vpi/tasks/mini-test.rb +16 -0
- data/lib/vesper/framework/tmp/plugins/{pony-emailer → pony-emailer.vpi}/Gemfile +0 -0
- data/lib/vesper/framework/tmp/plugins/{pony-emailer → pony-emailer.vpi}/Readme.md +0 -0
- data/lib/vesper/framework/tmp/plugins/{pony-emailer → pony-emailer.vpi}/config/pony.rb +0 -0
- data/lib/vesper/framework/views/hello_world.html +230 -45
- data/lib/vesper/version.rb +1 -1
- data/vesper.gemspec +4 -5
- metadata +31 -46
- data/lib/vesper/framework/plugins/core-extensions/meta_data.rb +0 -7
- data/lib/vesper/framework/tests/hello_world.rb +0 -9
- data/lib/vesper/framework/tmp/plugins/data-mapper/meta_data.rb +0 -7
- data/lib/vesper/framework/tmp/plugins/hot-reloader/meta_data.rb +0 -7
- data/lib/vesper/framework/tmp/plugins/pony-emailer/meta_data.rb +0 -7
- data/lib/vesper/plugin/meta_data.rb +0 -7
- data/lib/vesper/rake.rb +0 -4
data/README.md
CHANGED
data/bin/vesper
CHANGED
@@ -1,168 +1,161 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
|
-
require 'fileutils.rb'
|
3
|
-
require 'grit'
|
4
2
|
|
5
3
|
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
puts ''
|
10
|
-
puts ' vesper create app'
|
11
|
-
puts ' Summary: Creates a new Vesper web app.'
|
12
|
-
puts ' Alias for vesper create application.'
|
13
|
-
puts ' Example: vesper create app HelloWorld'
|
14
|
-
puts ''
|
15
|
-
puts ' vesper install plugin'
|
16
|
-
puts ' Summary: Installs a plugin from a git repo.'
|
17
|
-
puts ' Should be run from inside an existing Vesper app.'
|
18
|
-
puts ' Example: vesper install plugin git@github.com:vesper/logger.git'
|
19
|
-
puts ''
|
20
|
-
puts ' vesper remove plugin'
|
21
|
-
puts ' Summary: Removes an existing plugin from a Vesper app.'
|
22
|
-
puts ' Example: vesper remove plugin logger'
|
23
|
-
puts ''
|
24
|
-
puts ' vesper create plugin'
|
25
|
-
puts ' Summary: Creates an empty plugin for development.'
|
26
|
-
puts ' Should be run from inside an existing Vesper app.'
|
27
|
-
puts ' Example: vesper create plugin my-plugin'
|
28
|
-
puts ''
|
29
|
-
puts ' vesper run test'
|
30
|
-
puts ' Summary: Runs a test using a file in /tests using MiniTest.'
|
31
|
-
puts ' Example: vesper run test hello_world'
|
32
|
-
puts ''
|
33
|
-
puts ' vesper run tests'
|
34
|
-
puts ' Summary: Runs tests on all the files in /tests using MiniTest'
|
35
|
-
puts ' Example: vesper run tests'
|
36
|
-
puts ''
|
37
|
-
puts 'Documentation can be found online at: http://vesperapps.com'
|
38
|
-
puts ''
|
39
|
-
puts 'Questions and comments should be send to: jarrod@vesperapps.com'
|
40
|
-
puts ''
|
41
|
-
end
|
4
|
+
ARGV[0] && ARGV[1] ? msg = "#{ARGV[0]} #{ARGV[1]}" : msg = false
|
5
|
+
ARGV[2] ? rec = ARGV[2] : rec = false
|
6
|
+
ARGV[3] ? opt = ARGV[3] : opt = false
|
42
7
|
|
43
8
|
|
44
|
-
|
45
|
-
|
9
|
+
if rec && (msg == 'create application' || msg == 'create app')
|
10
|
+
require 'fileutils.rb'
|
11
|
+
|
12
|
+
if Dir.exists? rec
|
46
13
|
puts 'That name is already taken.'
|
47
14
|
else
|
48
|
-
puts "Creating #{
|
49
|
-
FileUtils.cp_r File.dirname(__FILE__) + '/../lib/vesper/framework',
|
50
|
-
FileUtils.chmod_R 0777,
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
15
|
+
puts "Creating #{rec}..."
|
16
|
+
FileUtils.cp_r File.dirname(__FILE__) + '/../lib/vesper/framework', rec
|
17
|
+
FileUtils.chmod_R 0777, rec
|
18
|
+
|
19
|
+
unless opt == '-core' || opt == '-recipe'
|
20
|
+
puts 'Installing default plugins...'
|
21
|
+
Dir["#{rec}/tmp/plugins/**"].each {|plugin| FileUtils.cp_r plugin, "#{rec}/plugins"}
|
22
|
+
Dir["#{rec}/plugins/**"].each {|plugin| Dir["#{plugin}/assets/**"].each {|asset| FileUtils.cp_r asset, "#{rec}/"}}
|
23
|
+
end
|
24
|
+
|
25
|
+
if opt == '-recipe'
|
26
|
+
errors = false
|
27
|
+
errors = true if ARGV[4].nil?
|
28
|
+
errors = true unless File.exists?(ENV['HOME'] + '/.vesper.rb')
|
29
|
+
require ENV['HOME'] + '/.vesper' unless errors
|
30
|
+
errors = true unless @recipes && @recipes[ARGV[4].to_sym]
|
31
|
+
|
32
|
+
if errors
|
33
|
+
puts ''
|
34
|
+
puts 'I can\'t seem to find that recipe.'
|
35
|
+
puts ''
|
36
|
+
else
|
37
|
+
@recipes[ARGV[4].to_sym].each {|p| system "cd #{rec} && vesper install plugin #{p} -no-bundle"}
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
FileUtils.rm_rf "#{rec}/tmp/plugins"
|
55
42
|
puts "Bundling gems..."
|
56
|
-
system "cd #{
|
43
|
+
system "cd #{rec} && bundle > /dev/null"
|
57
44
|
puts ''
|
58
|
-
puts "#{
|
59
|
-
puts " cd #{
|
45
|
+
puts "#{rec} is ready. Next steps:"
|
46
|
+
puts " cd #{rec}"
|
60
47
|
puts " rackup"
|
61
48
|
puts ''
|
62
49
|
end
|
50
|
+
|
51
|
+
exit
|
63
52
|
end
|
64
53
|
|
65
54
|
|
66
|
-
|
67
|
-
|
68
|
-
|
55
|
+
if rec && msg == 'create plugin'
|
56
|
+
require 'fileutils.rb'
|
57
|
+
|
58
|
+
rec = rec.downcase
|
59
|
+
if Dir.exists? "plugins/#{rec}"
|
69
60
|
puts ''
|
70
|
-
puts "#{
|
61
|
+
puts "#{rec} is already installed in /plugins."
|
71
62
|
puts ''
|
72
63
|
else
|
73
64
|
puts 'Creating plugin...'
|
74
|
-
FileUtils.cp_r File.dirname(__FILE__) + '/../lib/vesper/plugin', "plugins/#{
|
75
|
-
FileUtils.chmod_R 0777, "plugins/#{
|
76
|
-
File.rename "plugins/#{
|
77
|
-
File.rename "plugins/#{
|
78
|
-
File.rename "plugins/#{
|
79
|
-
File.rename "plugins/#{
|
65
|
+
FileUtils.cp_r File.dirname(__FILE__) + '/../lib/vesper/plugin', "plugins/#{rec}"
|
66
|
+
FileUtils.chmod_R 0777, "plugins/#{rec}"
|
67
|
+
File.rename "plugins/#{rec}/application/plugin.rb", "plugins/#{rec}/application/#{rec}.rb"
|
68
|
+
File.rename "plugins/#{rec}/assets/plugin.rb", "plugins/#{rec}/assets/#{rec}.rb"
|
69
|
+
File.rename "plugins/#{rec}/config/plugin.rb", "plugins/#{rec}/config/#{rec}.rb"
|
70
|
+
File.rename "plugins/#{rec}/tasks/plugin.rb", "plugins/#{rec}/tasks/#{rec}.rb"
|
80
71
|
puts ''
|
81
|
-
puts "#{
|
72
|
+
puts "#{rec} has been created in /plugins."
|
82
73
|
puts 'For more information on Vesper plugin development, visit: http://vesperapps.com'
|
83
74
|
puts ''
|
84
75
|
end
|
76
|
+
|
77
|
+
exit
|
85
78
|
end
|
86
79
|
|
87
80
|
|
88
|
-
|
89
|
-
|
81
|
+
if rec && msg == 'install plugin'
|
82
|
+
require 'fileutils.rb'
|
83
|
+
|
84
|
+
plugin = rec.gsub(/(.)*\//, '').gsub(/.git/, '')
|
85
|
+
|
86
|
+
puts 'Installing plugin...'
|
87
|
+
system "cd plugins && git clone #{rec}"
|
88
|
+
FileUtils.rm_rf "plugins/#{plugin}/.git"
|
89
|
+
FileUtils.chmod_R 0777, "plugins/#{plugin}"
|
90
|
+
|
91
|
+
puts 'Copying assets...'
|
92
|
+
Dir["plugins/#{plugin}/assets/**"].each {|asset| FileUtils.cp_r asset, "./"}
|
93
|
+
|
94
|
+
unless opt == '-no-bundle'
|
95
|
+
puts 'Bundling gems...'
|
96
|
+
system "bundle > /dev/null"
|
97
|
+
end
|
98
|
+
|
99
|
+
puts ''
|
100
|
+
puts "#{plugin} is installed in /plugins."
|
101
|
+
puts ''
|
102
|
+
|
103
|
+
exit
|
104
|
+
end
|
105
|
+
|
106
|
+
|
107
|
+
if rec && msg == 'remove plugin'
|
108
|
+
require 'fileutils.rb'
|
109
|
+
|
110
|
+
if Dir.exists? "plugins/#{rec}"
|
90
111
|
assets = []
|
91
|
-
Dir["plugins/#{
|
112
|
+
Dir["plugins/#{rec}/assets/**/*"].each {|asset| assets << asset.gsub("plugins/#{rec}/assets/", "")}
|
92
113
|
template = []
|
93
114
|
Dir[File.dirname(__FILE__) + '/../lib/vesper/framework/**/*'].each {|i| template << i.gsub(/(.)*framework\//, '')}
|
94
115
|
assets.each {|asset| FileUtils.rm_rf asset if !template.include?(asset) && asset.include?('.')}
|
95
116
|
assets.each {|asset| FileUtils.rm_rf asset if !template.include?(asset) && Dir.exists?(asset) && Dir.entries(asset) == [".", ".."]}
|
96
|
-
FileUtils.rm_rf "plugins/#{
|
117
|
+
FileUtils.rm_rf "plugins/#{rec}"
|
97
118
|
system "bundle > /dev/null"
|
98
119
|
puts ''
|
99
|
-
puts "#{
|
120
|
+
puts "#{rec} plugin removed."
|
100
121
|
puts ''
|
101
122
|
else
|
102
123
|
puts ''
|
103
124
|
puts 'That plugin isn\'t installed'
|
104
125
|
puts ''
|
105
126
|
end
|
127
|
+
|
128
|
+
exit
|
106
129
|
end
|
107
130
|
|
108
131
|
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
def run_tests
|
141
|
-
require 'minitest/autorun'
|
142
|
-
require 'vesper'
|
143
|
-
Dir["./tests/**/*"].each {|file| require file}
|
144
|
-
end
|
145
|
-
|
146
|
-
|
147
|
-
ARGV[0] && ARGV[1] ? command = "#{ARGV[0]} #{ARGV[1]}" : command = false
|
148
|
-
ARGV[2] ? option = ARGV[2] : option = false
|
149
|
-
|
150
|
-
|
151
|
-
case command
|
152
|
-
when 'create application'
|
153
|
-
option ? create_app(option) : show_options
|
154
|
-
when 'create app'
|
155
|
-
option ? create_app(option) : show_options
|
156
|
-
when 'create plugin'
|
157
|
-
option ? create_plugin(option) : show_options
|
158
|
-
when 'install plugin'
|
159
|
-
option ? install_plugin(option) : show_options
|
160
|
-
when 'remove plugin'
|
161
|
-
option ? remove_plugin(option) : show_options
|
162
|
-
when 'run test'
|
163
|
-
option ? run_test(option) : show_options
|
164
|
-
when 'run tests'
|
165
|
-
run_tests
|
166
|
-
else
|
167
|
-
show_options
|
168
|
-
end
|
132
|
+
puts ''
|
133
|
+
puts 'Messages:'
|
134
|
+
puts ''
|
135
|
+
puts ' vesper create app'
|
136
|
+
puts ' -----------------'
|
137
|
+
puts ' Creates a new Vesper web app.'
|
138
|
+
puts ' ~: vesper create app HelloWorld'
|
139
|
+
puts ' Options:'
|
140
|
+
puts ' -core creates app without extra plugins'
|
141
|
+
puts ' -recipe my_recipe creates app with plugins listed in the recipe my_recipe'
|
142
|
+
puts ''
|
143
|
+
puts ' vesper install plugin'
|
144
|
+
puts ' ---------------------'
|
145
|
+
puts ' Installs a plugin from a git repo.'
|
146
|
+
puts ' ~/HelloWorld: vesper install plugin git@github.com:jarrodtaylor/mobile-request-router.vpi.git'
|
147
|
+
puts ''
|
148
|
+
puts ' vesper remove plugin'
|
149
|
+
puts ' --------------------'
|
150
|
+
puts ' Removes an existing plugin from a Vesper app.'
|
151
|
+
puts ' ~/HelloWorld: vesper remove plugin mobile-request-router.vpi'
|
152
|
+
puts ''
|
153
|
+
puts ' vesper create plugin'
|
154
|
+
puts ' --------------------'
|
155
|
+
puts ' Creates an empty plugin for development.'
|
156
|
+
puts ' ~/HelloWorld: vesper create plugin my-plugin'
|
157
|
+
puts ''
|
158
|
+
puts 'Documentation can be found online at: http://vesperapps.com'
|
159
|
+
puts ''
|
160
|
+
puts 'Questions and comments should be send to: jarrod@vesperapps.com'
|
161
|
+
puts ''
|
data/lib/vesper.rb
CHANGED
@@ -1,32 +1,43 @@
|
|
1
1
|
require "vesper/version"
|
2
2
|
|
3
3
|
module Vesper
|
4
|
+
|
5
|
+
def self.load_app
|
6
|
+
require 'bundler'
|
7
|
+
Bundler.require
|
4
8
|
|
5
|
-
|
6
|
-
|
9
|
+
set :environment, ENV['env'] if ENV['env']
|
10
|
+
set :environment, ENV['environment'] if ENV['environment']
|
11
|
+
set :environment, ENV['rack_env'] if ENV['rack_env']
|
7
12
|
|
8
|
-
|
13
|
+
Tilt.register Tilt::ERBTemplate, 'html'
|
9
14
|
|
10
|
-
|
11
|
-
|
15
|
+
set :views, './views'
|
16
|
+
set :public_folder, './public'
|
12
17
|
|
13
|
-
|
18
|
+
Dir["./plugins/**/pre-boot.rb"].each {|file| require file}
|
14
19
|
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
20
|
+
[
|
21
|
+
'config',
|
22
|
+
'plugins/**/config',
|
23
|
+
'plugins/**/application',
|
24
|
+
'application'
|
25
|
+
].each {|dir| Dir["./#{dir}/**/*.rb"].each {|file| require file}}
|
21
26
|
|
22
|
-
|
27
|
+
Dir["./plugins/**/post-boot.rb"].each {|file| require file}
|
23
28
|
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
29
|
+
error(400) { redirect '/400.html' }
|
30
|
+
error(401) { redirect '/401.html' }
|
31
|
+
error(403) { redirect '/403.html' }
|
32
|
+
error(404) { redirect '/404.html' }
|
33
|
+
error(408) { redirect '/408.html' }
|
34
|
+
error(500) { redirect '/500.html' }
|
35
|
+
error(502) { redirect '/502.html' }
|
36
|
+
end
|
37
|
+
|
38
|
+
def self.load_tasks
|
39
|
+
Dir["./plugins/**/tasks/*"].each {|file| require file}
|
40
|
+
Dir["./tasks/**/*"].each {|file| require file}
|
41
|
+
end
|
31
42
|
|
32
43
|
end
|
@@ -3,21 +3,4 @@
|
|
3
3
|
#
|
4
4
|
get '/?' do
|
5
5
|
erb :hello_world
|
6
|
-
end
|
7
|
-
|
8
|
-
class User
|
9
|
-
# DataMapper model class
|
10
|
-
# For more info: http://datamapper.org/
|
11
|
-
#
|
12
|
-
# include DataMapper::Resource
|
13
|
-
#
|
14
|
-
# property :id, Serial
|
15
|
-
# property :deleted_at, ParanoidDateTime
|
16
|
-
# timestamps :at
|
17
|
-
#
|
18
|
-
# property :email, String
|
19
|
-
|
20
|
-
def knock_knock
|
21
|
-
"Who's there?"
|
22
|
-
end
|
23
6
|
end
|
File without changes
|
File without changes
|
data/lib/vesper/framework/plugins/{core-extensions → core-extensions.vpi}/application/date_time.rb
RENAMED
File without changes
|
data/lib/vesper/framework/plugins/{core-extensions → core-extensions.vpi}/application/helpers.rb
RENAMED
File without changes
|
data/lib/vesper/framework/plugins/{core-extensions → core-extensions.vpi}/application/number.rb
RENAMED
File without changes
|
data/lib/vesper/framework/plugins/{core-extensions → core-extensions.vpi}/application/string.rb
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
data/lib/vesper/framework/tmp/plugins/{data-mapper → data-mapper.vpi}/assets/data/transmogrify.rb
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
data/lib/vesper/framework/tmp/plugins/{hot-reloader → hot-reloader.vpi}/config/hot-reloader.rb
RENAMED
File without changes
|
@@ -0,0 +1,14 @@
|
|
1
|
+
MiniTest Vesper Plugin
|
2
|
+
======================
|
3
|
+
> Automates running MiniTest tests in Vesper.
|
4
|
+
|
5
|
+
|
6
|
+
minitest(file)
|
7
|
+
--------------
|
8
|
+
> Runs MiniTest on all file in /test or single file passes in args.
|
9
|
+
|
10
|
+
>> rake minitest
|
11
|
+
=> runs all tests in /tests
|
12
|
+
|
13
|
+
>> rake minitest file=hello_world
|
14
|
+
=> runs test in tests/hello_world.rb
|
@@ -0,0 +1,16 @@
|
|
1
|
+
desc 'Runs MiniTest on /tests'
|
2
|
+
task :minitest do
|
3
|
+
require 'minitest/autorun'
|
4
|
+
require 'vesper'
|
5
|
+
unless ENV['file']
|
6
|
+
Dir["./tests/**/*.rb"].each {|file| require file}
|
7
|
+
else
|
8
|
+
if File.exists? "./tests/#{ENV['file']}.rb"
|
9
|
+
require "./tests/#{ENV['file']}.rb"
|
10
|
+
else
|
11
|
+
puts ''
|
12
|
+
puts 'I can\'t find that test. Maybe there\'s a typ0?'
|
13
|
+
puts ''
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
File without changes
|
File without changes
|
File without changes
|
@@ -1,51 +1,186 @@
|
|
1
1
|
<!-- From /lib/hello_world.rb -->
|
2
2
|
|
3
|
-
|
4
3
|
<style type="text/css" media="screen">
|
5
|
-
|
6
|
-
|
7
|
-
|
4
|
+
@import url(http://fonts.googleapis.com/css?family=Cabin+Condensed:400);
|
5
|
+
@import url(http://fonts.googleapis.com/css?family=Lato:300,700);
|
6
|
+
|
7
|
+
html {
|
8
|
+
background-attachment: fixed;
|
9
|
+
background-color: #f3f3f3;
|
10
|
+
background-image: url(http://vesperapps.com/img/stone.png);
|
11
|
+
border-top: 3px solid #121212;
|
12
|
+
margin: 0;
|
13
|
+
padding: 0;
|
14
|
+
}
|
15
|
+
|
8
16
|
body {
|
9
|
-
background-color: #ededed;
|
10
17
|
color: #121212;
|
11
|
-
font-family:
|
18
|
+
font-family: 'Lato', sans-serif;
|
12
19
|
font-size: 16px;
|
13
20
|
line-height: 1.5em;
|
14
|
-
|
15
|
-
|
21
|
+
margin: auto;
|
22
|
+
padding: 33px 0 0 0;
|
23
|
+
width: 616px;
|
24
|
+
-webkit-text-size-adjust: none;
|
16
25
|
}
|
26
|
+
|
17
27
|
a, a:visited {
|
18
|
-
color:
|
19
|
-
|
28
|
+
color: #27b1f5;
|
29
|
+
display: inline-block;
|
30
|
+
margin: 0 -3px;
|
31
|
+
padding: 0 3px;
|
32
|
+
text-decoration: underline;
|
33
|
+
-webkit-border-radius: 3px;
|
34
|
+
-moz-border-radius: 3px;
|
35
|
+
border-radius: 3px;
|
20
36
|
}
|
37
|
+
|
21
38
|
a:hover {
|
22
|
-
text-decoration:
|
23
|
-
text-shadow: 0 0 3px rgb(39, 177, 245);
|
39
|
+
text-decoration: none;
|
24
40
|
}
|
25
|
-
|
26
|
-
|
27
|
-
border:
|
28
|
-
|
41
|
+
|
42
|
+
a img {
|
43
|
+
border: none;
|
44
|
+
}
|
45
|
+
|
46
|
+
h1, h2, h3, h4, h5, h6 {
|
47
|
+
font-family: 'Cabin Condensed', sans-serif;
|
48
|
+
font-weight: normal;
|
49
|
+
}
|
50
|
+
|
51
|
+
h2.meta {
|
52
|
+
color: silver;
|
53
|
+
font-size: 16px;
|
54
|
+
text-align: center;
|
55
|
+
}
|
56
|
+
|
57
|
+
h2#version {
|
58
|
+
float: right;
|
59
|
+
}
|
60
|
+
|
61
|
+
div#logo {
|
62
|
+
display: block;
|
29
63
|
margin: auto;
|
30
|
-
|
31
|
-
|
64
|
+
position: relative;
|
65
|
+
width: 309px;
|
66
|
+
}
|
67
|
+
|
68
|
+
div#logo code {
|
69
|
+
left: 86px;
|
70
|
+
position: absolute;
|
71
|
+
text-shadow: 0 1px 0 silver;
|
72
|
+
top: 140px;
|
73
|
+
}
|
74
|
+
|
75
|
+
div#menu {
|
76
|
+
margin: 33px auto;
|
77
|
+
text-align: center;
|
78
|
+
width: 309px;
|
79
|
+
}
|
80
|
+
|
81
|
+
div#menu p a {
|
82
|
+
background-color: #121212;
|
83
|
+
box-shadow: 0 0 3px #777;
|
84
|
+
color: white;
|
85
|
+
display: block;
|
86
|
+
font-family: 'Cabin Condensed', sans-serif;
|
87
|
+
margin: 11px 33px;
|
88
|
+
padding: 7px 11px;
|
89
|
+
text-decoration: none;
|
90
|
+
}
|
91
|
+
|
92
|
+
div#menu p a:hover {
|
93
|
+
box-shadow: 0 0 7px #27B1F5;
|
94
|
+
color: #27B1F5\9; /* IE hack */
|
95
|
+
text-shadow: 0 0 7px #27B1F5;
|
96
|
+
}
|
97
|
+
|
98
|
+
div#readme {
|
99
|
+
background-color: white;
|
100
|
+
border: 1px solid silver\9; /* IE hack */
|
101
|
+
border-top: 3px solid #121212;
|
102
|
+
box-shadow: 0 0 3px #777;
|
103
|
+
padding: 11px 33px 33px 33px;
|
32
104
|
width: 550px;
|
33
|
-
-webkit-border-radius: 7px;
|
34
|
-
-moz-border-radius: 7px;
|
35
|
-
border-radius: 7px;
|
36
105
|
}
|
37
|
-
|
106
|
+
|
107
|
+
div#readme a:hover {
|
108
|
+
background-color: #121212;
|
109
|
+
color: white;
|
110
|
+
text-decoration: none;
|
111
|
+
text-shadow: 0 0 3px white;
|
112
|
+
}
|
113
|
+
|
114
|
+
div#readme h1 a:hover,
|
115
|
+
div#readme h2 a:hover,
|
116
|
+
div#readme h3 a:hover,
|
117
|
+
div#readme h4 a:hover,
|
118
|
+
div#readme h5 a:hover,
|
119
|
+
div#readme h6 a:hover {
|
120
|
+
text-shadow: none;
|
121
|
+
}
|
122
|
+
|
123
|
+
div#readme h1,
|
124
|
+
div#readme h2,
|
125
|
+
div#readme h3,
|
126
|
+
div#readme h4,
|
127
|
+
div#readme h5,
|
128
|
+
div#readme h6 {
|
129
|
+
color: #111;
|
130
|
+
text-shadow: 0 0 7px silver;
|
131
|
+
}
|
132
|
+
|
133
|
+
div#readme h1 {
|
134
|
+
background-color: lightyellow;
|
135
|
+
border: 1px solid silver\9; /* IE hack */
|
136
|
+
box-shadow: 0 0 3px #777;
|
137
|
+
color: #777;
|
138
|
+
display: inline-block;
|
139
|
+
font-size: 16px;
|
140
|
+
margin-bottom: 0.67em;
|
141
|
+
margin-left: -44px;
|
142
|
+
margin-top: 2.01em;
|
143
|
+
padding: 3px 33px;
|
144
|
+
padding-left: 44px;
|
145
|
+
width: 18%\9;
|
146
|
+
}
|
147
|
+
|
148
|
+
div#readme h2 {
|
149
|
+
font-size: 36px;
|
150
|
+
line-height: 100%;
|
151
|
+
}
|
152
|
+
|
153
|
+
div#readme h3 {
|
154
|
+
font-size: 24px;
|
155
|
+
}
|
156
|
+
|
157
|
+
div#readme h4 {
|
158
|
+
font-size: 16px;
|
159
|
+
margin-top: 27px;
|
160
|
+
text-align: center;
|
161
|
+
}
|
162
|
+
|
163
|
+
div#readme hr {
|
164
|
+
border: none;
|
165
|
+
border-top: 1px solid #ededed;
|
166
|
+
border-top-color: #fefefe\9; /* IE hack */
|
167
|
+
margin: 33px 0;
|
168
|
+
margin: 11px 0\9;
|
169
|
+
}
|
170
|
+
div#readme blockquote {
|
38
171
|
border-left: 3px solid #ededed;
|
39
172
|
color: #777;
|
40
173
|
font-size: 90%;
|
41
174
|
margin-left: 11px;
|
42
175
|
padding-left: 11px;
|
43
176
|
}
|
44
|
-
|
177
|
+
|
178
|
+
div#readme blockquote.output {
|
45
179
|
font-family: monospace;
|
46
180
|
font-size: 11px;
|
47
181
|
}
|
48
|
-
|
182
|
+
|
183
|
+
div#readme code {
|
49
184
|
background-color: #121212;
|
50
185
|
color: white;
|
51
186
|
display: block;
|
@@ -57,27 +192,71 @@
|
|
57
192
|
-moz-border-radius: 3px;
|
58
193
|
border-radius: 3px;
|
59
194
|
}
|
60
|
-
|
61
|
-
|
62
|
-
|
195
|
+
|
196
|
+
div#readme h5 {
|
197
|
+
background-color: #333;
|
198
|
+
color: white;
|
199
|
+
font-family: "Lato", sans-serif;
|
200
|
+
font-size: 11px;
|
201
|
+
margin: -11px -11px 11px -11px;
|
202
|
+
padding: 3px 11px;
|
203
|
+
text-shadow: none;
|
204
|
+
-webkit-border-top-left-radius: 3px;
|
205
|
+
-webkit-border-top-right-radius: 3px;
|
206
|
+
-moz-border-radius-topleft: 3px;
|
207
|
+
-moz-border-radius-topright: 3px;
|
208
|
+
border-top-left-radius: 3px;
|
209
|
+
border-top-right-radius: 3px;
|
210
|
+
}
|
211
|
+
|
212
|
+
div#readme code span { color: #777 }
|
213
|
+
|
214
|
+
div#readme dl dt { font-weight: bold; }
|
215
|
+
|
216
|
+
div#readme dl dd {
|
63
217
|
color: #777;
|
64
218
|
font-size: 90%;
|
65
219
|
line-height: 1.3em;
|
66
|
-
margin:
|
220
|
+
margin-bottom: 11px;
|
221
|
+
margin-left: 11px;
|
222
|
+
margin-top: 3px;
|
67
223
|
}
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
224
|
+
|
225
|
+
div#readme p#credits {
|
226
|
+
color: silver;
|
227
|
+
font-size: 80%;
|
228
|
+
text-align: center;
|
72
229
|
}
|
73
|
-
</style>
|
74
|
-
|
75
230
|
|
76
|
-
|
231
|
+
div#readme p#credits a {
|
232
|
+
margin: 0 11px;
|
233
|
+
}
|
234
|
+
|
235
|
+
|
236
|
+
</style>
|
77
237
|
|
78
|
-
<
|
79
|
-
|
80
|
-
|
238
|
+
<h2 class="meta" id="version">v1.1.0</h2>
|
239
|
+
|
240
|
+
<div id="logo">
|
241
|
+
<img src="img/vesper.png" />
|
242
|
+
<code>gem install vesper</code>
|
243
|
+
</div>
|
244
|
+
|
245
|
+
<div id="menu">
|
246
|
+
<p>
|
247
|
+
<a href="http://vesperapps.com">Documentation</a>
|
248
|
+
<a href="https://github.com/vesper/framework-gem">Source Code</a>
|
249
|
+
</p>
|
250
|
+
</div>
|
251
|
+
|
252
|
+
<h2 class="meta">Welcome to Vesper</h2>
|
253
|
+
|
254
|
+
<div id="readme">
|
255
|
+
|
256
|
+
<h4>Send any questions or comments to: <a href="mailto:jarrod@vesperapps.com">jarrod@vesperapps.com</a></h4>
|
257
|
+
|
258
|
+
<hr />
|
259
|
+
|
81
260
|
<dl>
|
82
261
|
<dt>.gitignore</dt>
|
83
262
|
<dd>Tell git which files to ignore. Learn more from <a href="http://book.git-scm.com/4_ignoring_files.html">The Git Community Book</a>.</dd>
|
@@ -121,8 +300,8 @@
|
|
121
300
|
|
122
301
|
<dt>tests/</dt>
|
123
302
|
<dd>
|
124
|
-
|
125
|
-
<code><span>~/HelloWorld:</span>
|
303
|
+
Created by the MiniTest plugin, write your tests here and they'll be automatically loaded, along with your app, when you run the MiniTest command.
|
304
|
+
<code><span>~/HelloWorld:</span> rake minitest</code>
|
126
305
|
</dd>
|
127
306
|
|
128
307
|
<dt>tmp/</dt>
|
@@ -137,8 +316,14 @@
|
|
137
316
|
<blockquote><strong>Pro Tip:</strong> Check out the Mobile Request Router plugin for easy mobile designs.</blockquote>
|
138
317
|
</dd>
|
139
318
|
</dl>
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
<p
|
144
|
-
|
319
|
+
|
320
|
+
<hr />
|
321
|
+
|
322
|
+
<p id="credits">
|
323
|
+
Vesper was created by:
|
324
|
+
<br />
|
325
|
+
<a href="https://twitter.com/#!/jarrodtaylor">Jarrod Taylor</a>
|
326
|
+
<a href="https://twitter.com/#!/TheKarmakazie">Richard Rissanen</a>
|
327
|
+
</p>
|
328
|
+
|
329
|
+
</div>
|
data/lib/vesper/version.rb
CHANGED
data/vesper.gemspec
CHANGED
@@ -15,11 +15,10 @@ Gem::Specification.new do |s|
|
|
15
15
|
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
16
16
|
s.require_paths = ["lib"]
|
17
17
|
|
18
|
-
s.required_ruby_version = ">= 1.9.
|
18
|
+
s.required_ruby_version = ">= 1.9.3"
|
19
19
|
|
20
|
-
s.post_install_message = "\nTo see what vesper can do:\n vesper
|
20
|
+
s.post_install_message = "\nTo see what vesper can do:\n vesper messages\n\nSend any questions or comments to jarrod@vesperapps.com\n\n"
|
21
21
|
|
22
22
|
s.add_runtime_dependency "bundler", "~> 1.0.21"
|
23
|
-
s.add_runtime_dependency "
|
24
|
-
|
25
|
-
end
|
23
|
+
s.add_runtime_dependency "sinatra", "~> 1.3.2"
|
24
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: vesper
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0
|
4
|
+
version: 1.1.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -10,11 +10,11 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2012-01-
|
13
|
+
date: 2012-01-15 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: bundler
|
17
|
-
requirement: &
|
17
|
+
requirement: &70256438215020 !ruby/object:Gem::Requirement
|
18
18
|
none: false
|
19
19
|
requirements:
|
20
20
|
- - ~>
|
@@ -22,29 +22,18 @@ dependencies:
|
|
22
22
|
version: 1.0.21
|
23
23
|
type: :runtime
|
24
24
|
prerelease: false
|
25
|
-
version_requirements: *
|
26
|
-
- !ruby/object:Gem::Dependency
|
27
|
-
name: grit
|
28
|
-
requirement: &70345138772340 !ruby/object:Gem::Requirement
|
29
|
-
none: false
|
30
|
-
requirements:
|
31
|
-
- - ~>
|
32
|
-
- !ruby/object:Gem::Version
|
33
|
-
version: 2.4.1
|
34
|
-
type: :runtime
|
35
|
-
prerelease: false
|
36
|
-
version_requirements: *70345138772340
|
25
|
+
version_requirements: *70256438215020
|
37
26
|
- !ruby/object:Gem::Dependency
|
38
27
|
name: sinatra
|
39
|
-
requirement: &
|
28
|
+
requirement: &70256438213820 !ruby/object:Gem::Requirement
|
40
29
|
none: false
|
41
30
|
requirements:
|
42
31
|
- - ~>
|
43
32
|
- !ruby/object:Gem::Version
|
44
|
-
version: 1.3.
|
33
|
+
version: 1.3.2
|
45
34
|
type: :runtime
|
46
35
|
prerelease: false
|
47
|
-
version_requirements: *
|
36
|
+
version_requirements: *70256438213820
|
48
37
|
description:
|
49
38
|
email: jarrod@vesperapps.com
|
50
39
|
executables:
|
@@ -65,13 +54,12 @@ files:
|
|
65
54
|
- lib/vesper/framework/application/hello_world.rb
|
66
55
|
- lib/vesper/framework/config.ru
|
67
56
|
- lib/vesper/framework/config/sessions.rb
|
68
|
-
- lib/vesper/framework/plugins/core-extensions/Gemfile
|
69
|
-
- lib/vesper/framework/plugins/core-extensions/Readme.md
|
70
|
-
- lib/vesper/framework/plugins/core-extensions/application/date_time.rb
|
71
|
-
- lib/vesper/framework/plugins/core-extensions/application/helpers.rb
|
72
|
-
- lib/vesper/framework/plugins/core-extensions/application/number.rb
|
73
|
-
- lib/vesper/framework/plugins/core-extensions/application/string.rb
|
74
|
-
- lib/vesper/framework/plugins/core-extensions/meta_data.rb
|
57
|
+
- lib/vesper/framework/plugins/core-extensions.vpi/Gemfile
|
58
|
+
- lib/vesper/framework/plugins/core-extensions.vpi/Readme.md
|
59
|
+
- lib/vesper/framework/plugins/core-extensions.vpi/application/date_time.rb
|
60
|
+
- lib/vesper/framework/plugins/core-extensions.vpi/application/helpers.rb
|
61
|
+
- lib/vesper/framework/plugins/core-extensions.vpi/application/number.rb
|
62
|
+
- lib/vesper/framework/plugins/core-extensions.vpi/application/string.rb
|
75
63
|
- lib/vesper/framework/public/400.html
|
76
64
|
- lib/vesper/framework/public/401.html
|
77
65
|
- lib/vesper/framework/public/403.html
|
@@ -84,23 +72,22 @@ files:
|
|
84
72
|
- lib/vesper/framework/public/js/hide_addressbar.js
|
85
73
|
- lib/vesper/framework/public/robots.txt
|
86
74
|
- lib/vesper/framework/tasks/irb.rb
|
87
|
-
- lib/vesper/framework/
|
88
|
-
- lib/vesper/framework/tmp/plugins/data-mapper/
|
89
|
-
- lib/vesper/framework/tmp/plugins/data-mapper/
|
90
|
-
- lib/vesper/framework/tmp/plugins/data-mapper/assets/data/
|
91
|
-
- lib/vesper/framework/tmp/plugins/data-mapper/
|
92
|
-
- lib/vesper/framework/tmp/plugins/data-mapper/
|
93
|
-
- lib/vesper/framework/tmp/plugins/data-mapper/
|
94
|
-
- lib/vesper/framework/tmp/plugins/
|
95
|
-
- lib/vesper/framework/tmp/plugins/
|
96
|
-
- lib/vesper/framework/tmp/plugins/hot-reloader/
|
97
|
-
- lib/vesper/framework/tmp/plugins/
|
98
|
-
- lib/vesper/framework/tmp/plugins/
|
99
|
-
- lib/vesper/framework/tmp/plugins/
|
100
|
-
- lib/vesper/framework/tmp/plugins/pony-emailer/Gemfile
|
101
|
-
- lib/vesper/framework/tmp/plugins/pony-emailer/Readme.md
|
102
|
-
- lib/vesper/framework/tmp/plugins/pony-emailer/config/pony.rb
|
103
|
-
- lib/vesper/framework/tmp/plugins/pony-emailer/meta_data.rb
|
75
|
+
- lib/vesper/framework/tmp/plugins/data-mapper.vpi/Gemfile
|
76
|
+
- lib/vesper/framework/tmp/plugins/data-mapper.vpi/Readme.md
|
77
|
+
- lib/vesper/framework/tmp/plugins/data-mapper.vpi/assets/data/seeds.rb
|
78
|
+
- lib/vesper/framework/tmp/plugins/data-mapper.vpi/assets/data/transmogrify.rb
|
79
|
+
- lib/vesper/framework/tmp/plugins/data-mapper.vpi/config/datasources.rb
|
80
|
+
- lib/vesper/framework/tmp/plugins/data-mapper.vpi/hooks/post-boot.rb
|
81
|
+
- lib/vesper/framework/tmp/plugins/data-mapper.vpi/tasks/data-mapper.rb
|
82
|
+
- lib/vesper/framework/tmp/plugins/hot-reloader.vpi/Gemfile
|
83
|
+
- lib/vesper/framework/tmp/plugins/hot-reloader.vpi/Readme.md
|
84
|
+
- lib/vesper/framework/tmp/plugins/hot-reloader.vpi/config/hot-reloader.rb
|
85
|
+
- lib/vesper/framework/tmp/plugins/mini-test.vpi/Readme.md
|
86
|
+
- lib/vesper/framework/tmp/plugins/mini-test.vpi/assets/tests/hello_world.rb
|
87
|
+
- lib/vesper/framework/tmp/plugins/mini-test.vpi/tasks/mini-test.rb
|
88
|
+
- lib/vesper/framework/tmp/plugins/pony-emailer.vpi/Gemfile
|
89
|
+
- lib/vesper/framework/tmp/plugins/pony-emailer.vpi/Readme.md
|
90
|
+
- lib/vesper/framework/tmp/plugins/pony-emailer.vpi/config/pony.rb
|
104
91
|
- lib/vesper/framework/tmp/restart.txt
|
105
92
|
- lib/vesper/framework/views/hello_world.html
|
106
93
|
- lib/vesper/framework/views/layout.html
|
@@ -109,14 +96,12 @@ files:
|
|
109
96
|
- lib/vesper/plugin/application/plugin.rb
|
110
97
|
- lib/vesper/plugin/assets/plugin.rb
|
111
98
|
- lib/vesper/plugin/config/plugin.rb
|
112
|
-
- lib/vesper/plugin/meta_data.rb
|
113
99
|
- lib/vesper/plugin/tasks/plugin.rb
|
114
|
-
- lib/vesper/rake.rb
|
115
100
|
- lib/vesper/version.rb
|
116
101
|
- vesper.gemspec
|
117
102
|
homepage: http://vesperapps.com/
|
118
103
|
licenses: []
|
119
|
-
post_install_message: ! "\nTo see what vesper can do:\n vesper
|
104
|
+
post_install_message: ! "\nTo see what vesper can do:\n vesper messages\n\nSend any
|
120
105
|
questions or comments to jarrod@vesperapps.com\n\n"
|
121
106
|
rdoc_options: []
|
122
107
|
require_paths:
|
@@ -126,7 +111,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
126
111
|
requirements:
|
127
112
|
- - ! '>='
|
128
113
|
- !ruby/object:Gem::Version
|
129
|
-
version: 1.9.
|
114
|
+
version: 1.9.3
|
130
115
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
131
116
|
none: false
|
132
117
|
requirements:
|
data/lib/vesper/rake.rb
DELETED