vesper 1.0.1 → 1.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/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