Syd-sinatra 0.3.2

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 (48) hide show
  1. data/ChangeLog +78 -0
  2. data/LICENSE +22 -0
  3. data/README.rdoc +523 -0
  4. data/Rakefile +162 -0
  5. data/images/404.png +0 -0
  6. data/images/500.png +0 -0
  7. data/lib/sinatra/test/methods.rb +76 -0
  8. data/lib/sinatra/test/rspec.rb +10 -0
  9. data/lib/sinatra/test/spec.rb +10 -0
  10. data/lib/sinatra/test/unit.rb +13 -0
  11. data/lib/sinatra.rb +1470 -0
  12. data/sinatra.gemspec +77 -0
  13. data/test/app_test.rb +299 -0
  14. data/test/application_test.rb +318 -0
  15. data/test/builder_test.rb +101 -0
  16. data/test/custom_error_test.rb +62 -0
  17. data/test/erb_test.rb +136 -0
  18. data/test/event_context_test.rb +15 -0
  19. data/test/events_test.rb +65 -0
  20. data/test/filter_test.rb +30 -0
  21. data/test/haml_test.rb +233 -0
  22. data/test/helper.rb +7 -0
  23. data/test/mapped_error_test.rb +72 -0
  24. data/test/pipeline_test.rb +66 -0
  25. data/test/public/foo.xml +1 -0
  26. data/test/sass_test.rb +57 -0
  27. data/test/sessions_test.rb +39 -0
  28. data/test/streaming_test.rb +118 -0
  29. data/test/sym_params_test.rb +19 -0
  30. data/test/template_test.rb +30 -0
  31. data/test/use_in_file_templates_test.rb +47 -0
  32. data/test/views/foo.builder +1 -0
  33. data/test/views/foo.erb +1 -0
  34. data/test/views/foo.haml +1 -0
  35. data/test/views/foo.sass +2 -0
  36. data/test/views/foo_layout.erb +2 -0
  37. data/test/views/foo_layout.haml +2 -0
  38. data/test/views/layout_test/foo.builder +1 -0
  39. data/test/views/layout_test/foo.erb +1 -0
  40. data/test/views/layout_test/foo.haml +1 -0
  41. data/test/views/layout_test/foo.sass +2 -0
  42. data/test/views/layout_test/layout.builder +3 -0
  43. data/test/views/layout_test/layout.erb +1 -0
  44. data/test/views/layout_test/layout.haml +1 -0
  45. data/test/views/layout_test/layout.sass +2 -0
  46. data/test/views/no_layout/no_layout.builder +1 -0
  47. data/test/views/no_layout/no_layout.haml +1 -0
  48. metadata +129 -0
data/Rakefile ADDED
@@ -0,0 +1,162 @@
1
+ require 'rubygems'
2
+ require 'rake/clean'
3
+ require 'fileutils'
4
+
5
+ task :default => :test
6
+
7
+ # SPECS ===============================================================
8
+
9
+ desc 'Run specs with story style output'
10
+ task :spec do
11
+ sh 'specrb --specdox -Ilib:test test/*_test.rb'
12
+ end
13
+
14
+ desc 'Run specs with unit test style output'
15
+ task :test => FileList['test/*_test.rb'] do |t|
16
+ suite = t.prerequisites.map{|f| "-r#{f.chomp('.rb')}"}.join(' ')
17
+ sh "ruby -Ilib:test #{suite} -e ''", :verbose => false
18
+ end
19
+
20
+ # PACKAGING ============================================================
21
+
22
+ # Load the gemspec using the same limitations as github
23
+ def spec
24
+ @spec ||=
25
+ begin
26
+ require 'rubygems/specification'
27
+ data = File.read('sinatra.gemspec')
28
+ spec = nil
29
+ Thread.new { spec = eval("$SAFE = 3\n#{data}") }.join
30
+ spec
31
+ end
32
+ end
33
+
34
+ def package(ext='')
35
+ "dist/sinatra-#{spec.version}" + ext
36
+ end
37
+
38
+ desc 'Build packages'
39
+ task :package => %w[.gem .tar.gz].map {|e| package(e)}
40
+
41
+ desc 'Build and install as local gem'
42
+ task :install => package('.gem') do
43
+ sh "gem install #{package('.gem')}"
44
+ end
45
+
46
+ directory 'dist/'
47
+
48
+ file package('.gem') => %w[dist/ sinatra.gemspec] + spec.files do |f|
49
+ sh "gem build sinatra.gemspec"
50
+ mv File.basename(f.name), f.name
51
+ end
52
+
53
+ file package('.tar.gz') => %w[dist/] + spec.files do |f|
54
+ sh "git archive --format=tar HEAD | gzip > #{f.name}"
55
+ end
56
+
57
+ # Rubyforge Release / Publish Tasks ==================================
58
+
59
+ desc 'Publish website to rubyforge'
60
+ task 'publish:doc' => 'doc/api/index.html' do
61
+ sh 'scp -rp doc/* rubyforge.org:/var/www/gforge-projects/sinatra/'
62
+ end
63
+
64
+ task 'publish:gem' => [package('.gem'), package('.tar.gz')] do |t|
65
+ sh <<-end
66
+ rubyforge add_release sinatra sinatra #{spec.version} #{package('.gem')} &&
67
+ rubyforge add_file sinatra sinatra #{spec.version} #{package('.tar.gz')}
68
+ end
69
+ end
70
+
71
+ # Website ============================================================
72
+ # Building docs requires HAML and the hanna gem:
73
+ # gem install mislav-hanna --source=http://gems.github.com
74
+
75
+ task 'doc' => ['doc:api','doc:site']
76
+
77
+ desc 'Generate Hanna RDoc under doc/api'
78
+ task 'doc:api' => ['doc/api/index.html']
79
+
80
+ file 'doc/api/index.html' => FileList['lib/**/*.rb','README.rdoc'] do |f|
81
+ rb_files = f.prerequisites
82
+ sh((<<-end).gsub(/\s+/, ' '))
83
+ hanna --charset utf8 \
84
+ --fmt html \
85
+ --inline-source \
86
+ --line-numbers \
87
+ --main README.rdoc \
88
+ --op doc/api \
89
+ --title 'Sinatra API Documentation' \
90
+ #{rb_files.join(' ')}
91
+ end
92
+ end
93
+ CLEAN.include 'doc/api'
94
+
95
+ def rdoc_to_html(file_name)
96
+ require 'rdoc/markup/to_html'
97
+ rdoc = RDoc::Markup::ToHtml.new
98
+ rdoc.convert(File.read(file_name))
99
+ end
100
+
101
+ def haml(locals={})
102
+ require 'haml'
103
+ template = File.read('doc/template.haml')
104
+ haml = Haml::Engine.new(template, :format => :html4, :attr_wrapper => '"')
105
+ haml.render(Object.new, locals)
106
+ end
107
+
108
+ desc 'Build website HTML and stuff'
109
+ task 'doc:site' => ['doc/index.html', 'doc/book.html']
110
+
111
+ file 'doc/index.html' => %w[README.rdoc doc/template.haml] do |file|
112
+ File.open(file.name, 'w') do |file|
113
+ file << haml(:title => 'Sinatra', :content => rdoc_to_html('README.rdoc'))
114
+ end
115
+ end
116
+ CLEAN.include 'doc/index.html'
117
+
118
+ file 'doc/book.html' => ['book/output/sinatra-book.html'] do |file|
119
+ File.open(file.name, 'w') do |file|
120
+ book_content = File.read('book/output/sinatra-book.html')
121
+ file << haml(:title => 'Sinatra Book', :content => book_content)
122
+ end
123
+ end
124
+ CLEAN.include 'doc/book.html'
125
+
126
+ file 'book/output/sinatra-book.html' => FileList['book/**'] do |f|
127
+ unless File.directory?('book')
128
+ sh 'git clone git://github.com/cschneid/sinatra-book.git book'
129
+ end
130
+ sh((<<-SH).strip.gsub(/\s+/, ' '))
131
+ cd book &&
132
+ git fetch origin &&
133
+ git rebase origin/master &&
134
+ thor book:build
135
+ SH
136
+ end
137
+ CLEAN.include 'book/output/sinatra-book.html'
138
+
139
+ desc 'Build the Sinatra book'
140
+ task 'doc:book' => ['book/output/sinatra-book.html']
141
+
142
+ # Gemspec Helpers ====================================================
143
+
144
+ file 'sinatra.gemspec' => FileList['{lib,test,images}/**','Rakefile'] do |f|
145
+ # read spec file and split out manifest section
146
+ spec = File.read(f.name)
147
+ parts = spec.split(" # = MANIFEST =\n")
148
+ fail 'bad spec' if parts.length != 3
149
+ # determine file list from git ls-files
150
+ files = `git ls-files`.
151
+ split("\n").
152
+ sort.
153
+ reject{ |file| file =~ /^\./ }.
154
+ reject { |file| file =~ /^doc/ }.
155
+ map{ |file| " #{file}" }.
156
+ join("\n")
157
+ # piece file back together and write...
158
+ parts[1] = " s.files = %w[\n#{files}\n ]\n"
159
+ spec = parts.join(" # = MANIFEST =\n")
160
+ File.open(f.name, 'w') { |io| io.write(spec) }
161
+ puts "updated #{f.name}"
162
+ end
data/images/404.png ADDED
Binary file
data/images/500.png ADDED
Binary file
@@ -0,0 +1,76 @@
1
+ module Sinatra
2
+
3
+ module Test
4
+
5
+ module Methods
6
+ include Rack::Utils
7
+
8
+ ENV_KEY_NAMES = {
9
+ :accept => "HTTP_ACCEPT",
10
+ :agent => "HTTP_USER_AGENT",
11
+ :host => "HTTP_HOST",
12
+ :session => "HTTP_COOKIE",
13
+ :cookies => "HTTP_COOKIE",
14
+ :content_type => "CONTENT_TYPE"
15
+ }
16
+
17
+ def session(data, key = 'rack.session')
18
+ data = data.from_params if data.respond_to?(:from_params)
19
+ "#{escape(key)}=#{[Marshal.dump(data)].pack("m*")}"
20
+ end
21
+
22
+ def normalize_rack_environment(env)
23
+ env.inject({}) do |hash,(k,v)|
24
+ hash[ENV_KEY_NAMES[k] || k] = v
25
+ hash
26
+ end
27
+ end
28
+
29
+ def hash_to_param_string(hash)
30
+ hash.map { |pair| pair.map{|v|escape(v)}.join('=') }.join('&')
31
+ end
32
+
33
+ %w(get head post put delete).each do |verb|
34
+ http_method = verb.upcase
35
+ define_method("#{verb}_it") do |path, *args|
36
+ @request = Rack::MockRequest.new(Sinatra.build_application)
37
+ opts, input =
38
+ case args.size
39
+ when 2 # input, env
40
+ input, env = args
41
+ [env, input]
42
+ when 1 # params
43
+ if (data = args.first).kind_of?(Hash)
44
+ env = (data.delete(:env) || {})
45
+ [env, hash_to_param_string(data)]
46
+ else
47
+ [{}, data]
48
+ end
49
+ when 0
50
+ [{}, '']
51
+ else
52
+ raise ArgumentError, "zero, one, or two arguments expected"
53
+ end
54
+ opts = normalize_rack_environment(opts)
55
+ opts[:input] ||= input
56
+ @response = @request.request(http_method, path, opts)
57
+ end
58
+ end
59
+
60
+ def follow!
61
+ get_it(@response.location)
62
+ end
63
+
64
+ def method_missing(name, *args)
65
+ if @response.respond_to?(name)
66
+ @response.send(name, *args)
67
+ else
68
+ super
69
+ end
70
+ end
71
+
72
+ end
73
+
74
+ end
75
+
76
+ end
@@ -0,0 +1,10 @@
1
+ require File.dirname(__FILE__) + '/unit'
2
+ require 'spec/interop/test'
3
+
4
+ class Test::Unit::TestCase
5
+
6
+ def should
7
+ @response.should
8
+ end
9
+
10
+ end
@@ -0,0 +1,10 @@
1
+ require File.dirname(__FILE__) + '/unit'
2
+ require 'test/spec'
3
+
4
+ class Test::Unit::TestCase
5
+
6
+ def should
7
+ @response.should
8
+ end
9
+
10
+ end
@@ -0,0 +1,13 @@
1
+ require 'test/unit'
2
+ require File.dirname(__FILE__) + '/methods'
3
+
4
+ Test::Unit::TestCase.send(:include, Sinatra::Test::Methods)
5
+
6
+ Sinatra::Application.default_options.merge!(
7
+ :env => :test,
8
+ :run => false,
9
+ :raise_errors => true,
10
+ :logging => false
11
+ )
12
+
13
+ Sinatra.application = nil