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.
Files changed (40) hide show
  1. data/README.md +1 -1
  2. data/bin/vesper +119 -126
  3. data/lib/vesper.rb +31 -20
  4. data/lib/vesper/framework/Gemfile +1 -1
  5. data/lib/vesper/framework/Rakefile +2 -1
  6. data/lib/vesper/framework/application/hello_world.rb +0 -17
  7. data/lib/vesper/framework/config.ru +1 -0
  8. data/lib/vesper/framework/plugins/{core-extensions → core-extensions.vpi}/Gemfile +0 -0
  9. data/lib/vesper/framework/plugins/{core-extensions → core-extensions.vpi}/Readme.md +0 -0
  10. data/lib/vesper/framework/plugins/{core-extensions → core-extensions.vpi}/application/date_time.rb +0 -0
  11. data/lib/vesper/framework/plugins/{core-extensions → core-extensions.vpi}/application/helpers.rb +0 -0
  12. data/lib/vesper/framework/plugins/{core-extensions → core-extensions.vpi}/application/number.rb +0 -0
  13. data/lib/vesper/framework/plugins/{core-extensions → core-extensions.vpi}/application/string.rb +0 -0
  14. data/lib/vesper/framework/tmp/plugins/{data-mapper → data-mapper.vpi}/Gemfile +0 -0
  15. data/lib/vesper/framework/tmp/plugins/{data-mapper → data-mapper.vpi}/Readme.md +0 -0
  16. data/lib/vesper/framework/tmp/plugins/{data-mapper → data-mapper.vpi}/assets/data/seeds.rb +0 -0
  17. data/lib/vesper/framework/tmp/plugins/{data-mapper → data-mapper.vpi}/assets/data/transmogrify.rb +0 -0
  18. data/lib/vesper/framework/tmp/plugins/{data-mapper → data-mapper.vpi}/config/datasources.rb +0 -0
  19. data/lib/vesper/framework/tmp/plugins/{data-mapper → data-mapper.vpi}/hooks/post-boot.rb +0 -0
  20. data/lib/vesper/framework/tmp/plugins/{data-mapper → data-mapper.vpi}/tasks/data-mapper.rb +0 -0
  21. data/lib/vesper/framework/tmp/plugins/{hot-reloader → hot-reloader.vpi}/Gemfile +0 -0
  22. data/lib/vesper/framework/tmp/plugins/{hot-reloader → hot-reloader.vpi}/Readme.md +0 -0
  23. data/lib/vesper/framework/tmp/plugins/{hot-reloader → hot-reloader.vpi}/config/hot-reloader.rb +0 -0
  24. data/lib/vesper/framework/tmp/plugins/mini-test.vpi/Readme.md +14 -0
  25. data/lib/vesper/framework/tmp/plugins/mini-test.vpi/assets/tests/hello_world.rb +5 -0
  26. data/lib/vesper/framework/tmp/plugins/mini-test.vpi/tasks/mini-test.rb +16 -0
  27. data/lib/vesper/framework/tmp/plugins/{pony-emailer → pony-emailer.vpi}/Gemfile +0 -0
  28. data/lib/vesper/framework/tmp/plugins/{pony-emailer → pony-emailer.vpi}/Readme.md +0 -0
  29. data/lib/vesper/framework/tmp/plugins/{pony-emailer → pony-emailer.vpi}/config/pony.rb +0 -0
  30. data/lib/vesper/framework/views/hello_world.html +230 -45
  31. data/lib/vesper/version.rb +1 -1
  32. data/vesper.gemspec +4 -5
  33. metadata +31 -46
  34. data/lib/vesper/framework/plugins/core-extensions/meta_data.rb +0 -7
  35. data/lib/vesper/framework/tests/hello_world.rb +0 -9
  36. data/lib/vesper/framework/tmp/plugins/data-mapper/meta_data.rb +0 -7
  37. data/lib/vesper/framework/tmp/plugins/hot-reloader/meta_data.rb +0 -7
  38. data/lib/vesper/framework/tmp/plugins/pony-emailer/meta_data.rb +0 -7
  39. data/lib/vesper/plugin/meta_data.rb +0 -7
  40. data/lib/vesper/rake.rb +0 -4
data/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  ![Vesper Logo](http://vesperapps.com/img/vesper.png)
2
2
 
3
- Version 1.0.1
3
+ Version 1.1.0
4
4
  ======
5
5
  > The Ruby web framework designed for clarity, flexibility and effectiveness.
6
6
 
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
- def show_options
7
- puts ''
8
- puts 'Commands:'
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
- def create_app app_name
45
- if Dir.exists? app_name
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 #{app_name}..."
49
- FileUtils.cp_r File.dirname(__FILE__) + '/../lib/vesper/framework', app_name
50
- FileUtils.chmod_R 0777, app_name
51
- puts 'Installing default plugins...'
52
- Dir["#{app_name}/tmp/plugins/**"].each {|plugin| FileUtils.cp_r plugin, "#{app_name}/plugins"}
53
- Dir["#{app_name}/plugins/**"].each {|plugin| Dir["#{plugin}/assets/**"].each {|asset| FileUtils.cp_r asset, "#{app_name}/"}}
54
- FileUtils.rm_rf "#{app_name}/tmp/plugins"
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 #{app_name} && bundle > /dev/null"
43
+ system "cd #{rec} && bundle > /dev/null"
57
44
  puts ''
58
- puts "#{app_name} is ready. Next steps:"
59
- puts " cd #{app_name}"
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
- def create_plugin plugin_name
67
- plugin_name = plugin_name.downcase
68
- if Dir.exists? "plugins/#{plugin_name}"
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 "#{plugin_name} is already installed in /plugins."
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/#{plugin_name}"
75
- FileUtils.chmod_R 0777, "plugins/#{plugin_name}"
76
- File.rename "plugins/#{plugin_name}/application/plugin.rb", "plugins/#{plugin_name}/application/#{plugin_name}.rb"
77
- File.rename "plugins/#{plugin_name}/assets/plugin.rb", "plugins/#{plugin_name}/assets/#{plugin_name}.rb"
78
- File.rename "plugins/#{plugin_name}/config/plugin.rb", "plugins/#{plugin_name}/config/#{plugin_name}.rb"
79
- File.rename "plugins/#{plugin_name}/tasks/plugin.rb", "plugins/#{plugin_name}/tasks/#{plugin_name}.rb"
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 "#{plugin_name} has been installed in /plugins."
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
- def remove_plugin plugin_name
89
- if Dir.exists? "plugins/#{plugin_name}"
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/#{plugin_name}/assets/**/*"].each {|asset| assets << asset.gsub("plugins/#{plugin_name}/assets/", "")}
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/#{plugin_name}"
117
+ FileUtils.rm_rf "plugins/#{rec}"
97
118
  system "bundle > /dev/null"
98
119
  puts ''
99
- puts "#{plugin_name} plugin removed."
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
- def install_plugin repo
110
- puts 'Installing plugin...'
111
- new_plugin = Grit::Git.new 'tmp/new_plugin'
112
- new_plugin.clone({:branch => 'master'}, repo, new_plugin.git_dir)
113
- FileUtils.rm_rf "#{new_plugin.git_dir}/.git"
114
- require "./#{new_plugin.git_dir}/meta_data.rb"
115
- FileUtils.mv new_plugin.git_dir, "plugins/#{META_DATA[:name]}"
116
- FileUtils.chmod_R 0777, "plugins/#{META_DATA[:name]}"
117
- puts 'Copying assets...'
118
- Dir["plugins/#{META_DATA[:name]}/assets/**"].each {|asset| FileUtils.cp_r asset, "./"}
119
- puts 'Bundling gems...'
120
- system "bundle > /dev/null"
121
- puts ''
122
- puts "#{META_DATA[:name]} is installed in /plugins."
123
- puts ''
124
- end
125
-
126
-
127
- def run_test file
128
- if File.exists? "./tests/#{file}.rb"
129
- require 'minitest/autorun'
130
- require 'vesper'
131
- require "./tests/#{file}.rb"
132
- else
133
- puts ''
134
- puts 'I can\'t find that test. Maybe there\'s a typ0?'
135
- puts ''
136
- end
137
- end
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 ''
@@ -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
- require 'bundler'
6
- Bundler.require
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
- Tilt.register Tilt::ERBTemplate, 'html'
13
+ Tilt.register Tilt::ERBTemplate, 'html'
9
14
 
10
- set :views, './views'
11
- set :public_folder, './public'
15
+ set :views, './views'
16
+ set :public_folder, './public'
12
17
 
13
- Dir["./plugins/**/pre-boot.rb"].each {|file| require file}
18
+ Dir["./plugins/**/pre-boot.rb"].each {|file| require file}
14
19
 
15
- [
16
- 'config',
17
- 'plugins/**/config',
18
- 'plugins/**/application',
19
- 'application'
20
- ].each {|dir| Dir["./#{dir}/**/*.rb"].each {|file| require file}}
20
+ [
21
+ 'config',
22
+ 'plugins/**/config',
23
+ 'plugins/**/application',
24
+ 'application'
25
+ ].each {|dir| Dir["./#{dir}/**/*.rb"].each {|file| require file}}
21
26
 
22
- Dir["./plugins/**/post-boot.rb"].each {|file| require file}
27
+ Dir["./plugins/**/post-boot.rb"].each {|file| require file}
23
28
 
24
- error(400) { redirect '/400.html' }
25
- error(401) { redirect '/401.html' }
26
- error(403) { redirect '/403.html' }
27
- error(404) { redirect '/404.html' }
28
- error(408) { redirect '/408.html' }
29
- error(500) { redirect '/500.html' }
30
- error(502) { redirect '/502.html' }
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
@@ -2,7 +2,7 @@ source 'http://rubygems.org'
2
2
 
3
3
 
4
4
  gem 'sinatra', '~> 1.3.2'
5
- gem 'vesper', '~> 1.0.1', require: false
5
+ gem 'vesper', '~> 1.1.0', require: false
6
6
 
7
7
 
8
8
  Dir["./plugins/**/Gemfile"].each {|gemfile| self.send(:eval, File.open(gemfile, 'r').read)}
@@ -1,2 +1,3 @@
1
1
  require 'vesper'
2
- require 'vesper/rake'
2
+ Vesper.load_app
3
+ Vesper.load_tasks
@@ -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
@@ -1,4 +1,5 @@
1
1
  require 'vesper'
2
+ Vesper.load_app
2
3
 
3
4
  # Run the app on Rack
4
5
  run Sinatra::Application
@@ -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,5 @@
1
+ class TestHelloWorld < MiniTest::Unit::TestCase
2
+ def test_IAMA
3
+ assert_equal "IAMA String", "IAMA String"
4
+ end
5
+ end
@@ -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
@@ -1,51 +1,186 @@
1
1
  <!-- From /lib/hello_world.rb -->
2
2
 
3
-
4
3
  <style type="text/css" media="screen">
5
- /* Import fonts from Google */
6
- @import url(http://fonts.googleapis.com/css?family=Cabin+Condensed:400);
7
- @import url(http://fonts.googleapis.com/css?family=Lato:300,700);
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: "Lato", sans-serif;
18
+ font-family: 'Lato', sans-serif;
12
19
  font-size: 16px;
13
20
  line-height: 1.5em;
14
- padding-bottom: 33px;
15
- text-align: center;
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: rgb(39, 177, 245);
19
- text-decoration: none;
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: underline;
23
- text-shadow: 0 0 3px rgb(39, 177, 245);
39
+ text-decoration: none;
24
40
  }
25
- div {
26
- background-color: white;
27
- border: 1px solid silver;
28
- display: inline-block;
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
- padding: 11px 33px 22px 33px;
31
- text-align: left;
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
- blockquote {
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
- blockquote.output {
177
+
178
+ div#readme blockquote.output {
45
179
  font-family: monospace;
46
180
  font-size: 11px;
47
181
  }
48
- code {
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
- code span { color: #777; }
61
- dl dt { font-weight: bold; }
62
- dl dd {
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: 3px 11px 11px 11px;
220
+ margin-bottom: 11px;
221
+ margin-left: 11px;
222
+ margin-top: 3px;
67
223
  }
68
- hr {
69
- border: none;
70
- border-top: 1px solid #ededed;
71
- margin: 30px 0;
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
- <p><img src="/img/vesper.png" /></p>
231
+ div#readme p#credits a {
232
+ margin: 0 11px;
233
+ }
234
+
235
+
236
+ </style>
77
237
 
78
- <div>
79
- <p>Vesper handles tieing all this together for you, but it's still important to know where everything is and what it does. Take a look at what's included in a new application.</p>
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
- Write your tests here and they'll be automatically loaded, along with your app, when you run Vesper's test commands. Set up by default to use MiniTest.
125
- <code><span>~/HelloWorld:</span> vesper run tests</code>
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
- </div>
142
-
143
- <p>Documentation can be found online at: <a href="http://vesperapps.com">http://vesperapps.com</a></p>
144
- <p>Questions, comments and bugs should be send to: <a href="mailto:jarrod@vesperapps.com">jarrod@vesperapps.com</a></p>
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>
@@ -1,3 +1,3 @@
1
1
  module Vesper
2
- VERSION = "1.0.1"
2
+ VERSION = "1.1.0"
3
3
  end
@@ -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.2"
18
+ s.required_ruby_version = ">= 1.9.3"
19
19
 
20
- s.post_install_message = "\nTo see what vesper can do:\n vesper options\n\nSend any questions or comments to jarrod@vesperapps.com\n\n"
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 "grit", "~> 2.4.1"
24
- s.add_runtime_dependency "sinatra", "~> 1.3.1"
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.1
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 00:00:00.000000000 Z
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: &70345138772800 !ruby/object:Gem::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: *70345138772800
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: &70345138771880 !ruby/object:Gem::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.1
33
+ version: 1.3.2
45
34
  type: :runtime
46
35
  prerelease: false
47
- version_requirements: *70345138771880
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/tests/hello_world.rb
88
- - lib/vesper/framework/tmp/plugins/data-mapper/Gemfile
89
- - lib/vesper/framework/tmp/plugins/data-mapper/Readme.md
90
- - lib/vesper/framework/tmp/plugins/data-mapper/assets/data/seeds.rb
91
- - lib/vesper/framework/tmp/plugins/data-mapper/assets/data/transmogrify.rb
92
- - lib/vesper/framework/tmp/plugins/data-mapper/config/datasources.rb
93
- - lib/vesper/framework/tmp/plugins/data-mapper/hooks/post-boot.rb
94
- - lib/vesper/framework/tmp/plugins/data-mapper/meta_data.rb
95
- - lib/vesper/framework/tmp/plugins/data-mapper/tasks/data-mapper.rb
96
- - lib/vesper/framework/tmp/plugins/hot-reloader/Gemfile
97
- - lib/vesper/framework/tmp/plugins/hot-reloader/Readme.md
98
- - lib/vesper/framework/tmp/plugins/hot-reloader/config/hot-reloader.rb
99
- - lib/vesper/framework/tmp/plugins/hot-reloader/meta_data.rb
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 options\n\nSend any
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.2
114
+ version: 1.9.3
130
115
  required_rubygems_version: !ruby/object:Gem::Requirement
131
116
  none: false
132
117
  requirements:
@@ -1,7 +0,0 @@
1
- META_DATA = {
2
- name: 'core-extensions',
3
- version: '1.0.0',
4
- authors: ['Jarrod Taylor'],
5
- homepage: 'https://github.com/vesper/core-extensions',
6
- source: 'git@github.com:vesper/core-extensions.git'
7
- }
@@ -1,9 +0,0 @@
1
- class TestHelloWorld < MiniTest::Unit::TestCase
2
- def setup
3
- @user = User.new
4
- end
5
-
6
- def test_knock_knock_joke
7
- assert_equal "Who's there?", @user.knock_knock
8
- end
9
- end
@@ -1,7 +0,0 @@
1
- META_DATA = {
2
- name: 'data-mapper',
3
- version: '1.0.0',
4
- authors: ['Jarrod Taylor', 'Richard Rissanen'],
5
- homepage: 'https://github.com/jarrodtaylor/vpi-data-mapper',
6
- source: 'git@github.com:jarrodtaylor/vpi-data-mapper.git'
7
- }
@@ -1,7 +0,0 @@
1
- META_DATA = {
2
- name: 'hot-reloader',
3
- version: '1.0.0',
4
- authors: ['Jarrod Taylor'],
5
- homepage: 'https://github.com/jarrodtaylor/vpi-hot-reloader',
6
- source: 'git@github.com:jarrodtaylor/vpi-hot-reloader.git'
7
- }
@@ -1,7 +0,0 @@
1
- META_DATA = {
2
- name: 'pony-emailer',
3
- version: '1.0.0',
4
- authors: ['Jarrod Taylor', 'Richard Rissanen'],
5
- homepage: 'https://github.com/jarrodtaylor/vpi-pony-emailer',
6
- source: 'git@github.com:jarrodtaylor/vpi-pony-emailer.git'
7
- }
@@ -1,7 +0,0 @@
1
- META_DATA = {
2
- name: 'my-nifty-plugin', # This is what your plugin directory will be called
3
- version: '0.0.1',
4
- authors: ['Your name here...'],
5
- homepage: 'http://example.com/yourplugin',
6
- source: '' # Link to git repo for installation
7
- }
@@ -1,4 +0,0 @@
1
- class Vesper::Rake
2
- Dir["./plugins/**/tasks/*"].each {|file| require file}
3
- Dir["./tasks/**/*"].each {|file| require file}
4
- end