scorched 0.5
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.
- checksums.yaml +7 -0
- data/Gemfile +2 -0
- data/LICENSE +7 -0
- data/Milestones.md +65 -0
- data/README.md +78 -0
- data/docs/be_creative.md +32 -0
- data/docs/filters.md +8 -0
- data/docs/routing.md +29 -0
- data/docs/sharing_request_state.md +5 -0
- data/examples/media_types.rb +18 -0
- data/examples/media_types.ru +2 -0
- data/lib/scorched.rb +19 -0
- data/lib/scorched/collection.rb +60 -0
- data/lib/scorched/controller.rb +343 -0
- data/lib/scorched/dynamic_delegate.rb +22 -0
- data/lib/scorched/error.rb +5 -0
- data/lib/scorched/options.rb +54 -0
- data/lib/scorched/request.rb +34 -0
- data/lib/scorched/response.rb +18 -0
- data/lib/scorched/static.rb +16 -0
- data/lib/scorched/version.rb +3 -0
- data/lib/scorched/view_helpers.rb +39 -0
- data/scorched.gemspec +19 -0
- data/spec/collection_spec.rb +46 -0
- data/spec/controller_spec.rb +565 -0
- data/spec/helper.rb +44 -0
- data/spec/options_spec.rb +42 -0
- data/spec/public/static.txt +1 -0
- data/spec/request_spec.rb +2 -0
- data/spec/view_helpers_spec.rb +84 -0
- data/spec/views/composer.erb +1 -0
- data/spec/views/layout.erb +1 -0
- data/spec/views/main.erb +1 -0
- data/spec/views/other.str +1 -0
- data/spec/views/partial.erb +1 -0
- metadata +157 -0
data/spec/helper.rb
ADDED
@@ -0,0 +1,44 @@
|
|
1
|
+
require 'rack/test'
|
2
|
+
require_relative '../lib/scorched.rb'
|
3
|
+
|
4
|
+
|
5
|
+
module Scorched
|
6
|
+
class SimpleCounter
|
7
|
+
def initialize(app)
|
8
|
+
@app = app
|
9
|
+
end
|
10
|
+
|
11
|
+
def call(env)
|
12
|
+
env['scorched.simple_counter'] ||= 0
|
13
|
+
env['scorched.simple_counter'] += 1
|
14
|
+
@app.call(env)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
# We set our target application and rack test environment using let. This ensures tests are isolated, and allows us to
|
20
|
+
# easily swap out our target application.
|
21
|
+
module GlobalConfig
|
22
|
+
extend RSpec::SharedContext
|
23
|
+
let(:app) do
|
24
|
+
Class.new(Scorched::Controller)
|
25
|
+
end
|
26
|
+
|
27
|
+
let(:rt) do
|
28
|
+
Rack::Test::Session.new(app)
|
29
|
+
end
|
30
|
+
|
31
|
+
original_dir = __dir__
|
32
|
+
before(:all) do
|
33
|
+
Dir.chdir(__dir__)
|
34
|
+
end
|
35
|
+
after(:all) do
|
36
|
+
Dir.chdir(original_dir)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
RSpec.configure do |c|
|
41
|
+
c.alias_example_to :they
|
42
|
+
# c.backtrace_clean_patterns = []
|
43
|
+
c.include GlobalConfig
|
44
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
require_relative './helper.rb'
|
2
|
+
|
3
|
+
class OptionsA
|
4
|
+
include Scorched::Options('colours')
|
5
|
+
end
|
6
|
+
|
7
|
+
class OptionsB < OptionsA
|
8
|
+
end
|
9
|
+
|
10
|
+
class OptionsC < OptionsB
|
11
|
+
end
|
12
|
+
|
13
|
+
module Scorched
|
14
|
+
describe Options do
|
15
|
+
it "defaults to an empty hash" do
|
16
|
+
OptionsA.colours.should be_empty
|
17
|
+
end
|
18
|
+
|
19
|
+
it "can be set to a given hash" do
|
20
|
+
my_hash = {car: 'red', house: 'cream'}
|
21
|
+
OptionsA.colours.replace my_hash
|
22
|
+
OptionsA.colours.should == my_hash
|
23
|
+
end
|
24
|
+
|
25
|
+
it "recursively inherits from parents by default" do
|
26
|
+
OptionsB.colours.should == {car: 'red', house: 'cream'}
|
27
|
+
OptionsC.colours.should == {car: 'red', house: 'cream'}
|
28
|
+
end
|
29
|
+
|
30
|
+
it "allows values to be overridden without modifying the parent" do
|
31
|
+
OptionsB.colours[:car] = 'blue'
|
32
|
+
OptionsB.colours[:car].should == 'blue'
|
33
|
+
OptionsA.colours[:car].should == 'red'
|
34
|
+
end
|
35
|
+
|
36
|
+
it "provides access to a copy of internal hash" do
|
37
|
+
OptionsB.colours.to_hash(false).should == {car: 'blue'}
|
38
|
+
OptionsC.colours.to_hash(false).should == {}
|
39
|
+
OptionsC.colours.to_hash(false).object_id.should_not == OptionsC.colours.object_id
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
My static file!
|
@@ -0,0 +1,84 @@
|
|
1
|
+
require_relative './helper.rb'
|
2
|
+
|
3
|
+
module Scorched
|
4
|
+
describe ViewHelpers do
|
5
|
+
describe "rendering" do
|
6
|
+
before(:each) do
|
7
|
+
app.view_config.each { |k,v| app.view_config[k] = nil }
|
8
|
+
end
|
9
|
+
|
10
|
+
it "can render a file, relative to the application root" do
|
11
|
+
app.get('/') do
|
12
|
+
render(:'views/main.erb').should == "3 for me"
|
13
|
+
end
|
14
|
+
rt.get('/')
|
15
|
+
end
|
16
|
+
|
17
|
+
it "can render a string" do
|
18
|
+
app.get('/') do
|
19
|
+
render('<%= 1 + 1 %> for you', engine: :erb).should == "2 for you"
|
20
|
+
end
|
21
|
+
rt.get('/')
|
22
|
+
end
|
23
|
+
|
24
|
+
it "takes an optional view directory, relative to the application root" do
|
25
|
+
app.get('/') do
|
26
|
+
render(:'main.erb', dir: 'views').should == "3 for me"
|
27
|
+
end
|
28
|
+
rt.get('/')
|
29
|
+
end
|
30
|
+
|
31
|
+
it "takes an optional block to be yielded by the view" do
|
32
|
+
app.get('/') do
|
33
|
+
render(:'views/layout.erb'){ "in the middle" }.should == "(in the middle)"
|
34
|
+
end
|
35
|
+
rt.get('/')
|
36
|
+
end
|
37
|
+
|
38
|
+
it "renders the given layout" do
|
39
|
+
app.get('/') do
|
40
|
+
render(:'views/main.erb', layout: :'views/layout.erb').should == "(3 for me)"
|
41
|
+
end
|
42
|
+
rt.get('/')
|
43
|
+
end
|
44
|
+
|
45
|
+
it "merges options with view config" do
|
46
|
+
app.get('/') do
|
47
|
+
render(:'main.erb').should == "3 for me"
|
48
|
+
end
|
49
|
+
app.get('/full_path') do
|
50
|
+
render(:'views/main.erb', {layout: :'views/layout.erb', dir: nil}).should == "(3 for me)"
|
51
|
+
end
|
52
|
+
app.view_config[:dir] = 'views'
|
53
|
+
rt.get('/')
|
54
|
+
rt.get('/full_path')
|
55
|
+
end
|
56
|
+
|
57
|
+
it "derived template engine overrides specified engine" do
|
58
|
+
app.view_config[:dir] = 'views'
|
59
|
+
app.view_config[:engine] = :erb
|
60
|
+
app.get('/str') do
|
61
|
+
render(:'other.str').should == "hello hello"
|
62
|
+
end
|
63
|
+
app.get('/erb_file') do
|
64
|
+
render(:main).should == "3 for me"
|
65
|
+
end
|
66
|
+
app.get('/erb_string') do
|
67
|
+
render('<%= 1 + 1 %> for you').should == "2 for you"
|
68
|
+
end
|
69
|
+
rt.get('/str')
|
70
|
+
rt.get('/erb_file')
|
71
|
+
rt.get('/erb_string')
|
72
|
+
end
|
73
|
+
|
74
|
+
it "ignores default layout when called within a view" do
|
75
|
+
app.view_config << {:dir => 'views', :layout => :layout, :engine => :erb}
|
76
|
+
app.get('/') do
|
77
|
+
render :composer
|
78
|
+
end
|
79
|
+
rt.get('/').body.should == '({1 for none})'
|
80
|
+
end
|
81
|
+
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
{<%= render :partial %>}
|
@@ -0,0 +1 @@
|
|
1
|
+
(<%= yield %>)
|
data/spec/views/main.erb
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
<%= 1 + 2 %> for me
|
@@ -0,0 +1 @@
|
|
1
|
+
#{2.times.map { 'hello' }.join(' ')}
|
@@ -0,0 +1 @@
|
|
1
|
+
1 for none
|
metadata
ADDED
@@ -0,0 +1,157 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: scorched
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: '0.5'
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Tom Wardrop
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2013-03-03 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: rack
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ~>
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1.4'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ~>
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1.4'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rack-accept
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ~>
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 0.4.5
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ~>
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 0.4.5
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: tilt
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ~>
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '1.3'
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ~>
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '1.3'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: rack-test
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ~>
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0.6'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ~>
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0.6'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: rspec
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ~>
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '2.9'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ~>
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '2.9'
|
83
|
+
description: A lightweight Sinatra-inspired web framework for web sites and applications
|
84
|
+
of any size.
|
85
|
+
email: tom@tomwardrop.com
|
86
|
+
executables: []
|
87
|
+
extensions: []
|
88
|
+
extra_rdoc_files: []
|
89
|
+
files:
|
90
|
+
- Gemfile
|
91
|
+
- LICENSE
|
92
|
+
- Milestones.md
|
93
|
+
- README.md
|
94
|
+
- docs/be_creative.md
|
95
|
+
- docs/filters.md
|
96
|
+
- docs/routing.md
|
97
|
+
- docs/sharing_request_state.md
|
98
|
+
- examples/media_types.rb
|
99
|
+
- examples/media_types.ru
|
100
|
+
- lib/scorched.rb
|
101
|
+
- lib/scorched/collection.rb
|
102
|
+
- lib/scorched/controller.rb
|
103
|
+
- lib/scorched/dynamic_delegate.rb
|
104
|
+
- lib/scorched/error.rb
|
105
|
+
- lib/scorched/options.rb
|
106
|
+
- lib/scorched/request.rb
|
107
|
+
- lib/scorched/response.rb
|
108
|
+
- lib/scorched/static.rb
|
109
|
+
- lib/scorched/version.rb
|
110
|
+
- lib/scorched/view_helpers.rb
|
111
|
+
- scorched.gemspec
|
112
|
+
- spec/collection_spec.rb
|
113
|
+
- spec/controller_spec.rb
|
114
|
+
- spec/helper.rb
|
115
|
+
- spec/options_spec.rb
|
116
|
+
- spec/public/static.txt
|
117
|
+
- spec/request_spec.rb
|
118
|
+
- spec/view_helpers_spec.rb
|
119
|
+
- spec/views/composer.erb
|
120
|
+
- spec/views/layout.erb
|
121
|
+
- spec/views/main.erb
|
122
|
+
- spec/views/other.str
|
123
|
+
- spec/views/partial.erb
|
124
|
+
homepage: http://scorchedrb.com
|
125
|
+
licenses: []
|
126
|
+
metadata: {}
|
127
|
+
post_install_message:
|
128
|
+
rdoc_options:
|
129
|
+
- --line-numbers
|
130
|
+
- --inline-source
|
131
|
+
- --title
|
132
|
+
- Scorched
|
133
|
+
- --encoding=UTF-8
|
134
|
+
require_paths:
|
135
|
+
- lib
|
136
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
137
|
+
requirements:
|
138
|
+
- - '>='
|
139
|
+
- !ruby/object:Gem::Version
|
140
|
+
version: '0'
|
141
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
142
|
+
requirements:
|
143
|
+
- - '>='
|
144
|
+
- !ruby/object:Gem::Version
|
145
|
+
version: '0'
|
146
|
+
requirements: []
|
147
|
+
rubyforge_project:
|
148
|
+
rubygems_version: 2.0.0
|
149
|
+
signing_key:
|
150
|
+
specification_version: 4
|
151
|
+
summary: Light-weight, DRY as a desert, web framework for Ruby
|
152
|
+
test_files:
|
153
|
+
- spec/collection_spec.rb
|
154
|
+
- spec/controller_spec.rb
|
155
|
+
- spec/options_spec.rb
|
156
|
+
- spec/request_spec.rb
|
157
|
+
- spec/view_helpers_spec.rb
|