deas 0.6.0 → 0.7.0
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +24 -1
- data/deas.gemspec +3 -3
- data/lib/deas.rb +0 -26
- data/lib/deas/logging.rb +1 -1
- data/lib/deas/server.rb +83 -63
- data/lib/deas/sinatra_app.rb +7 -9
- data/lib/deas/template.rb +21 -26
- data/lib/deas/version.rb +1 -1
- data/lib/deas/view_handler.rb +4 -0
- data/test/helper.rb +12 -7
- data/test/support/fake_app.rb +5 -4
- data/test/support/routes.rb +4 -5
- data/test/system/{making_requests_tests.rb → rack_tests.rb} +10 -8
- data/test/unit/logging_tests.rb +9 -5
- data/test/unit/server_tests.rb +38 -45
- data/test/unit/sinatra_app_tests.rb +0 -1
- data/test/unit/sinatra_runner_tests.rb +9 -11
- data/test/unit/template_tests.rb +11 -31
- metadata +15 -20
- data/test/unit/deas_tests.rb +0 -21
data/README.md
CHANGED
@@ -4,7 +4,30 @@ Handler-based web framework powered by Sinatra.
|
|
4
4
|
|
5
5
|
## Usage
|
6
6
|
|
7
|
-
|
7
|
+
```ruby
|
8
|
+
# in your rackup file (or whatever)
|
9
|
+
|
10
|
+
require 'deas'
|
11
|
+
|
12
|
+
class MyApp
|
13
|
+
include Deas::Server
|
14
|
+
|
15
|
+
get '/', 'HelloWorldHandler'
|
16
|
+
|
17
|
+
end
|
18
|
+
|
19
|
+
class HellowWorldHandler
|
20
|
+
include Deas::ViewHandler
|
21
|
+
|
22
|
+
def run!
|
23
|
+
"<h1>Hello World</h1>"
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
27
|
+
|
28
|
+
app = MyApp.new
|
29
|
+
run app
|
30
|
+
```
|
8
31
|
|
9
32
|
## Installation
|
10
33
|
|
data/deas.gemspec
CHANGED
@@ -21,8 +21,8 @@ Gem::Specification.new do |gem|
|
|
21
21
|
gem.add_dependency("rack", ["~> 1.5"])
|
22
22
|
gem.add_dependency("sinatra", ["~> 1.4"])
|
23
23
|
|
24
|
-
gem.add_development_dependency("assert"
|
25
|
-
gem.add_development_dependency("assert-mocha"
|
26
|
-
gem.add_development_dependency("rack-test"
|
24
|
+
gem.add_development_dependency("assert")
|
25
|
+
gem.add_development_dependency("assert-mocha")
|
26
|
+
gem.add_development_dependency("assert-rack-test")
|
27
27
|
|
28
28
|
end
|
data/lib/deas.rb
CHANGED
@@ -3,39 +3,13 @@ require 'pathname'
|
|
3
3
|
|
4
4
|
require 'deas/version'
|
5
5
|
require 'deas/server'
|
6
|
-
require 'deas/sinatra_app'
|
7
6
|
require 'deas/view_handler'
|
8
7
|
|
9
8
|
# TODO - remove with future version of Rack (> v1.5.2)
|
10
9
|
require 'deas/rack_request_fix'
|
11
10
|
|
12
|
-
ENV['DEAS_ROUTES_FILE'] ||= 'config/routes'
|
13
|
-
|
14
11
|
module Deas
|
15
12
|
|
16
|
-
def self.app
|
17
|
-
@app
|
18
|
-
end
|
19
|
-
|
20
|
-
def self.config
|
21
|
-
Deas::Config
|
22
|
-
end
|
23
|
-
|
24
|
-
def self.configure(&block)
|
25
|
-
self.config.define(&block)
|
26
|
-
self.config
|
27
|
-
end
|
28
|
-
|
29
|
-
def self.init
|
30
|
-
require self.config.routes_file
|
31
|
-
@app = Deas::SinatraApp.new(Deas::Server.configuration)
|
32
|
-
end
|
33
|
-
|
34
|
-
module Config
|
35
|
-
include NsOptions::Proxy
|
36
|
-
option :routes_file, Pathname, :default => ENV['DEAS_ROUTES_FILE']
|
37
|
-
end
|
38
|
-
|
39
13
|
class NullLogger
|
40
14
|
require 'logger'
|
41
15
|
|
data/lib/deas/logging.rb
CHANGED
data/lib/deas/server.rb
CHANGED
@@ -1,59 +1,74 @@
|
|
1
1
|
require 'ns-options'
|
2
2
|
require 'ns-options/boolean'
|
3
3
|
require 'pathname'
|
4
|
-
require '
|
4
|
+
require 'deas/template'
|
5
5
|
require 'deas/route'
|
6
|
+
require 'deas/sinatra_app'
|
6
7
|
|
7
|
-
module Deas
|
8
|
-
|
9
|
-
class Server
|
10
|
-
include Singleton
|
11
|
-
|
12
|
-
class Configuration
|
13
|
-
include NsOptions::Proxy
|
14
|
-
|
15
|
-
# Sinatra based options
|
16
|
-
option :env, String, :default => 'development'
|
17
|
-
option :root, Pathname, :default => proc{ File.dirname(Deas.config.routes_file) }
|
18
|
-
|
19
|
-
option :app_file, Pathname, :default => proc{ Deas.config.routes_file }
|
20
|
-
option :public_folder, Pathname
|
21
|
-
option :views_folder, Pathname
|
22
|
-
|
23
|
-
option :dump_errors, NsOptions::Boolean, :default => false
|
24
|
-
option :method_override, NsOptions::Boolean, :default => true
|
25
|
-
option :sessions, NsOptions::Boolean, :default => false
|
26
|
-
option :show_exceptions, NsOptions::Boolean, :default => false
|
27
|
-
option :static_files, NsOptions::Boolean, :default => true
|
28
|
-
option :reload_templates, NsOptions::Boolean, :default => false
|
29
|
-
|
30
|
-
# server handling options
|
31
|
-
option :error_procs, Array, :default => []
|
32
|
-
option :init_procs, Array, :default => []
|
33
|
-
option :logger, :default => proc{ Deas::NullLogger.new }
|
34
|
-
option :middlewares, Array, :default => []
|
35
|
-
option :verbose_logging, :default => true
|
36
|
-
|
37
|
-
option :routes, Array, :default => []
|
38
|
-
option :view_handler_ns, String
|
39
|
-
|
40
|
-
def initialize
|
41
|
-
# these are defaulted here because we want to use the Configuration
|
42
|
-
# instance `root`. If we define a proc above, we will be using the
|
43
|
-
# Configuration class `root`, which will not update these options as
|
44
|
-
# expected.
|
45
|
-
super({
|
46
|
-
:public_folder => proc{ self.root.join('public') },
|
47
|
-
:views_folder => proc{ self.root.join('views') }
|
48
|
-
})
|
49
|
-
end
|
8
|
+
module Deas; end
|
9
|
+
module Deas::Server
|
50
10
|
|
51
|
-
|
11
|
+
class Configuration
|
12
|
+
include NsOptions::Proxy
|
13
|
+
|
14
|
+
# Sinatra based options
|
15
|
+
option :env, String, :default => 'development'
|
16
|
+
|
17
|
+
option :root, Pathname
|
18
|
+
option :public_folder, Pathname
|
19
|
+
option :views_folder, Pathname
|
20
|
+
|
21
|
+
option :dump_errors, NsOptions::Boolean, :default => false
|
22
|
+
option :method_override, NsOptions::Boolean, :default => true
|
23
|
+
option :sessions, NsOptions::Boolean, :default => false
|
24
|
+
option :show_exceptions, NsOptions::Boolean, :default => false
|
25
|
+
option :static_files, NsOptions::Boolean, :default => true
|
26
|
+
option :reload_templates, NsOptions::Boolean, :default => false
|
27
|
+
|
28
|
+
# server handling options
|
29
|
+
option :error_procs, Array, :default => []
|
30
|
+
option :init_procs, Array, :default => []
|
31
|
+
option :logger, :default => proc{ Deas::NullLogger.new }
|
32
|
+
option :middlewares, Array, :default => []
|
33
|
+
option :settings, Array, :default => []
|
34
|
+
option :verbose_logging, :default => true
|
35
|
+
option :routes, Array, :default => []
|
36
|
+
option :view_handler_ns, String
|
52
37
|
|
53
|
-
attr_reader :
|
38
|
+
attr_reader :template_helpers
|
54
39
|
|
55
40
|
def initialize
|
56
|
-
|
41
|
+
# these are defaulted here because we want to use the Configuration
|
42
|
+
# instance `root`. If we define a proc above, we will be using the
|
43
|
+
# Configuration class `root`, which will not update these options as
|
44
|
+
# expected.
|
45
|
+
super({
|
46
|
+
:public_folder => proc{ self.root.join('public') },
|
47
|
+
:views_folder => proc{ self.root.join('views') }
|
48
|
+
})
|
49
|
+
@template_helpers = []
|
50
|
+
end
|
51
|
+
|
52
|
+
def template_scope
|
53
|
+
Class.new(Deas::Template::Scope).tap do |klass|
|
54
|
+
klass.send(:include, *self.template_helpers)
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
end
|
59
|
+
|
60
|
+
def self.included(receiver)
|
61
|
+
receiver.class_eval{ extend ClassMethods }
|
62
|
+
end
|
63
|
+
|
64
|
+
module ClassMethods
|
65
|
+
|
66
|
+
def new
|
67
|
+
Deas::SinatraApp.new(self.configuration)
|
68
|
+
end
|
69
|
+
|
70
|
+
def configuration
|
71
|
+
@configuration ||= Configuration.new
|
57
72
|
end
|
58
73
|
|
59
74
|
# sinatra settings DSL
|
@@ -100,28 +115,41 @@ module Deas
|
|
100
115
|
|
101
116
|
# Server handling DSL
|
102
117
|
|
103
|
-
def error(&block)
|
104
|
-
self.configuration.error_procs << block
|
105
|
-
end
|
106
|
-
|
107
118
|
def init(&block)
|
108
119
|
self.configuration.init_procs << block
|
109
120
|
end
|
110
121
|
|
122
|
+
def template_helpers(*helper_modules)
|
123
|
+
helper_modules.each{ |m| self.configuration.template_helpers << m }
|
124
|
+
self.configuration.template_helpers
|
125
|
+
end
|
126
|
+
|
127
|
+
def template_helper?(helper_module)
|
128
|
+
self.configuration.template_helpers.include?(helper_module)
|
129
|
+
end
|
130
|
+
|
131
|
+
def error(&block)
|
132
|
+
self.configuration.error_procs << block
|
133
|
+
end
|
134
|
+
|
111
135
|
def logger(*args)
|
112
136
|
self.configuration.logger *args
|
113
137
|
end
|
114
138
|
|
115
|
-
def
|
116
|
-
self.configuration.
|
139
|
+
def use(*args)
|
140
|
+
self.configuration.middlewares << args
|
141
|
+
end
|
142
|
+
|
143
|
+
def set(*args)
|
144
|
+
self.configuration.settings << args
|
117
145
|
end
|
118
146
|
|
119
147
|
def view_handler_ns(*args)
|
120
148
|
self.configuration.view_handler_ns *args
|
121
149
|
end
|
122
150
|
|
123
|
-
def
|
124
|
-
self.configuration.
|
151
|
+
def verbose_logging(*args)
|
152
|
+
self.configuration.verbose_logging *args
|
125
153
|
end
|
126
154
|
|
127
155
|
def get(path, handler_class_name)
|
@@ -153,14 +181,6 @@ module Deas
|
|
153
181
|
end
|
154
182
|
end
|
155
183
|
|
156
|
-
def self.method_missing(method, *args, &block)
|
157
|
-
self.instance.send(method, *args, &block)
|
158
|
-
end
|
159
|
-
|
160
|
-
def self.respond_to?(*args)
|
161
|
-
super || self.instance.respond_to?(*args)
|
162
|
-
end
|
163
|
-
|
164
184
|
end
|
165
185
|
|
166
186
|
end
|
data/lib/deas/sinatra_app.rb
CHANGED
@@ -19,7 +19,6 @@ module Deas
|
|
19
19
|
set :environment, server_config.env
|
20
20
|
set :root, server_config.root
|
21
21
|
|
22
|
-
set :app_file, server_config.app_file
|
23
22
|
set :public_folder, server_config.public_folder
|
24
23
|
set :views, server_config.views_folder
|
25
24
|
|
@@ -29,21 +28,20 @@ module Deas
|
|
29
28
|
set :show_exceptions, server_config.show_exceptions
|
30
29
|
set :static, server_config.static_files
|
31
30
|
set :reload_templates, server_config.reload_templates
|
32
|
-
set :logging,
|
31
|
+
set :logging, false
|
33
32
|
|
34
33
|
# custom settings
|
35
|
-
set :
|
36
|
-
set :
|
34
|
+
set :deas_template_scope, server_config.template_scope
|
35
|
+
set :deas_error_procs, server_config.error_procs
|
36
|
+
set :logger, server_config.logger
|
37
|
+
|
38
|
+
server_config.settings.each{ |set_args| set *set_args }
|
39
|
+
server_config.middlewares.each{ |use_args| use *use_args }
|
37
40
|
|
38
|
-
server_config.middlewares.each do |middleware_args|
|
39
|
-
use *middleware_args
|
40
|
-
end
|
41
41
|
use Deas::Logging.middleware(server_config.verbose_logging)
|
42
42
|
|
43
43
|
# routes
|
44
44
|
server_config.routes.each do |route|
|
45
|
-
# defines Sinatra routes like:
|
46
|
-
# get('/'){ ... }
|
47
45
|
send(route.method, route.path){ route.run(self) }
|
48
46
|
end
|
49
47
|
|
data/lib/deas/template.rb
CHANGED
@@ -4,35 +4,25 @@ module Deas
|
|
4
4
|
|
5
5
|
class Template
|
6
6
|
|
7
|
-
def self.helpers(*helper_modules)
|
8
|
-
Deas::Template::RenderScope.class_eval{ include *helper_modules }
|
9
|
-
end
|
10
|
-
|
11
|
-
def self.helper?(helper_module)
|
12
|
-
Deas::Template::RenderScope.included_modules.include?(helper_module)
|
13
|
-
end
|
14
|
-
|
15
7
|
attr_reader :name, :options
|
16
8
|
|
17
9
|
def initialize(sinatra_call, name, options = nil)
|
18
|
-
@options = options || {}
|
19
|
-
@options[:scope] =
|
10
|
+
@sinatra_call, @name, @options = sinatra_call, name.to_sym, (options || {})
|
11
|
+
@options[:scope] = @sinatra_call.settings.deas_template_scope.new(@sinatra_call)
|
20
12
|
|
21
|
-
@sinatra_call = sinatra_call
|
22
|
-
@name = name.to_sym
|
23
13
|
(@options.delete(:layout) || @options.delete(:layouts) || []).tap do |l|
|
24
14
|
@layouts = l.compact.map(&:to_sym)
|
25
15
|
end
|
26
16
|
end
|
27
17
|
|
28
|
-
# builds
|
18
|
+
# builds render-blocks like:
|
29
19
|
#
|
30
20
|
# erb :main_layout do
|
31
21
|
# erb :second_layout do
|
32
22
|
# erb :user_index
|
33
23
|
# end
|
34
24
|
# end
|
35
|
-
|
25
|
+
|
36
26
|
def render(&block)
|
37
27
|
template_names = [ @layouts, @name ].flatten.reverse
|
38
28
|
top_render_proc = template_names.inject(block) do |render_proc, name|
|
@@ -41,17 +31,18 @@ module Deas
|
|
41
31
|
top_render_proc.call
|
42
32
|
end
|
43
33
|
|
44
|
-
class
|
34
|
+
class Scope
|
35
|
+
attr_reader :sinatra_call
|
45
36
|
def initialize(sinatra_call)
|
46
37
|
@sinatra_call = sinatra_call
|
47
38
|
end
|
48
39
|
|
49
40
|
def render(name, options = nil, &block)
|
50
|
-
|
41
|
+
Template.new(@sinatra_call, name, options || {}).render(&block)
|
51
42
|
end
|
52
43
|
|
53
44
|
def partial(name, locals = nil)
|
54
|
-
|
45
|
+
Partial.new(@sinatra_call, name, locals || {}).render
|
55
46
|
end
|
56
47
|
|
57
48
|
def escape_html(html)
|
@@ -64,19 +55,23 @@ module Deas
|
|
64
55
|
end
|
65
56
|
alias :u :escape_url
|
66
57
|
|
58
|
+
def ==(other_scope)
|
59
|
+
self.sinatra_call == other_scope.sinatra_call
|
60
|
+
self.class.included_modules == other_scope.class.included_modules
|
61
|
+
end
|
67
62
|
end
|
68
63
|
|
69
|
-
|
64
|
+
class Partial < Template
|
70
65
|
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
name
|
66
|
+
def initialize(sinatra_call, name, locals = nil)
|
67
|
+
options = { :locals => (locals || {}) }
|
68
|
+
name = begin
|
69
|
+
basename = File.basename(name.to_s)
|
70
|
+
name.to_s.sub(/#{basename}\Z/, "_#{basename}")
|
71
|
+
end
|
72
|
+
super sinatra_call, name, options
|
78
73
|
end
|
79
|
-
|
74
|
+
|
80
75
|
end
|
81
76
|
|
82
77
|
end
|
data/lib/deas/version.rb
CHANGED
data/lib/deas/view_handler.rb
CHANGED
data/test/helper.rb
CHANGED
@@ -2,15 +2,20 @@
|
|
2
2
|
# put any test helpers here
|
3
3
|
|
4
4
|
# add the root dir to the load path
|
5
|
-
|
6
|
-
|
5
|
+
require 'pathname'
|
6
|
+
ROOT = Pathname.new(File.expand_path('../..', __FILE__))
|
7
|
+
$LOAD_PATH.unshift(ROOT.to_s)
|
8
|
+
TEST_SUPPORT_ROOT = ROOT.join('test/support')
|
7
9
|
|
8
10
|
# require pry for debugging (`binding.pry`)
|
9
11
|
require 'pry'
|
10
12
|
require 'assert-mocha' if defined?(Assert)
|
11
13
|
|
12
|
-
require '
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
14
|
+
require 'fileutils'
|
15
|
+
require 'logger'
|
16
|
+
log_file_path = ROOT.join("log/test.log")
|
17
|
+
FileUtils.rm_f log_file_path
|
18
|
+
TEST_LOGGER = Logger.new(File.open(log_file_path, 'w'))
|
19
|
+
|
20
|
+
require TEST_SUPPORT_ROOT.join('routes')
|
21
|
+
|
data/test/support/fake_app.rb
CHANGED
@@ -13,18 +13,19 @@ class FakeApp
|
|
13
13
|
@params = @request.params
|
14
14
|
@session = @request.session
|
15
15
|
@response = FakeResponse.new
|
16
|
-
@settings = OpenStruct.new(
|
16
|
+
@settings = OpenStruct.new(:deas_template_scope => Deas::Template::Scope)
|
17
17
|
end
|
18
18
|
|
19
19
|
def halt(*args)
|
20
20
|
throw :halt, args
|
21
21
|
end
|
22
22
|
|
23
|
-
|
23
|
+
# return the template name for each nested calls
|
24
|
+
def erb(name, opts, &block)
|
24
25
|
if block
|
25
|
-
[
|
26
|
+
[ name, opts, block.call ].flatten
|
26
27
|
else
|
27
|
-
|
28
|
+
[ name, opts ]
|
28
29
|
end
|
29
30
|
end
|
30
31
|
|
data/test/support/routes.rb
CHANGED
@@ -1,12 +1,11 @@
|
|
1
1
|
require 'deas'
|
2
2
|
|
3
|
-
class
|
3
|
+
class DeasTestServer
|
4
|
+
include Deas::Server
|
4
5
|
|
5
|
-
root
|
6
|
+
root TEST_SUPPORT_ROOT
|
6
7
|
|
7
|
-
|
8
|
-
|
9
|
-
logger Logger.new(File.open(log_file_path, 'w'))
|
8
|
+
logger TEST_LOGGER
|
10
9
|
verbose_logging true
|
11
10
|
|
12
11
|
error do |exception|
|
@@ -1,14 +1,15 @@
|
|
1
1
|
require 'assert'
|
2
|
-
require 'rack
|
2
|
+
require 'assert-rack-test'
|
3
|
+
require 'deas'
|
3
4
|
|
4
5
|
module Deas
|
5
6
|
|
6
7
|
class RackTests < Assert::Context
|
7
|
-
include Rack::Test
|
8
|
+
include Assert::Rack::Test
|
8
9
|
|
9
|
-
desc "Deas
|
10
|
+
desc "a Deas server rack app"
|
10
11
|
setup do
|
11
|
-
@app =
|
12
|
+
@app = DeasTestServer.new
|
12
13
|
end
|
13
14
|
|
14
15
|
def app; @app; end
|
@@ -76,10 +77,11 @@ module Deas
|
|
76
77
|
class SessionTests < RackTests
|
77
78
|
desc "with sessions enabled"
|
78
79
|
setup do
|
79
|
-
orig_sessions =
|
80
|
-
|
81
|
-
|
82
|
-
|
80
|
+
@orig_sessions = @app.settings.sessions
|
81
|
+
@app.set :sessions, true
|
82
|
+
end
|
83
|
+
teardown do
|
84
|
+
@app.set :sessions, @orig_sessions
|
83
85
|
end
|
84
86
|
|
85
87
|
should "return a 200 response and the session value" do
|
data/test/unit/logging_tests.rb
CHANGED
@@ -1,20 +1,24 @@
|
|
1
1
|
require 'assert'
|
2
|
+
require 'test/support/fake_app'
|
2
3
|
require 'deas/logging'
|
3
4
|
|
4
5
|
module Deas::Logging
|
5
6
|
|
6
7
|
class BaseTests < Assert::Context
|
7
8
|
desc "Deas::Logging"
|
9
|
+
setup do
|
10
|
+
@app = FakeApp.new
|
11
|
+
end
|
8
12
|
subject{ Deas::Logging }
|
9
13
|
|
10
14
|
should have_imeths :middleware
|
11
15
|
|
12
16
|
end
|
13
17
|
|
14
|
-
class VerboseLoggingTests <
|
18
|
+
class VerboseLoggingTests < BaseTests
|
15
19
|
desc "Deas::VerboseLogging"
|
16
20
|
setup do
|
17
|
-
@middleware = Deas::VerboseLogging.new(
|
21
|
+
@middleware = Deas::VerboseLogging.new(@app)
|
18
22
|
end
|
19
23
|
subject{ @middleware }
|
20
24
|
|
@@ -26,10 +30,10 @@ module Deas::Logging
|
|
26
30
|
|
27
31
|
end
|
28
32
|
|
29
|
-
class SummaryLoggingTests <
|
33
|
+
class SummaryLoggingTests < BaseTests
|
30
34
|
desc "Deas::SummaryLogging"
|
31
35
|
setup do
|
32
|
-
@middleware = Deas::SummaryLogging.new(
|
36
|
+
@middleware = Deas::SummaryLogging.new(@app)
|
33
37
|
end
|
34
38
|
subject{ @middleware }
|
35
39
|
|
@@ -41,7 +45,7 @@ module Deas::Logging
|
|
41
45
|
|
42
46
|
end
|
43
47
|
|
44
|
-
class SummaryLineTests <
|
48
|
+
class SummaryLineTests < BaseTests
|
45
49
|
desc "Deas::SummaryLine"
|
46
50
|
subject{ Deas::SummaryLine }
|
47
51
|
|
data/test/unit/server_tests.rb
CHANGED
@@ -1,27 +1,19 @@
|
|
1
1
|
require 'assert'
|
2
|
+
require 'deas/template'
|
2
3
|
require 'deas/route'
|
3
4
|
require 'deas/server'
|
4
5
|
require 'logger'
|
5
6
|
|
6
|
-
|
7
|
+
module Deas::Server
|
7
8
|
|
8
9
|
class BaseTests < Assert::Context
|
9
10
|
desc "Deas::Server"
|
10
11
|
setup do
|
11
|
-
@
|
12
|
-
new_configuration = Deas::Server::Configuration.new
|
13
|
-
Deas::Server.instance.tap do |s|
|
14
|
-
s.instance_variable_set("@configuration", new_configuration)
|
15
|
-
end
|
12
|
+
@server_class = Class.new{ include Deas::Server }
|
16
13
|
end
|
17
|
-
|
18
|
-
Deas::Server.instance.tap do |s|
|
19
|
-
s.instance_variable_set("@configuration", @old_configuration)
|
20
|
-
end
|
21
|
-
end
|
22
|
-
subject{ Deas::Server }
|
14
|
+
subject{ @server_class }
|
23
15
|
|
24
|
-
should
|
16
|
+
should have_imeths :new, :configuration
|
25
17
|
|
26
18
|
# DSL for sinatra settings
|
27
19
|
should have_imeths :env, :root, :public_folder, :views_folder
|
@@ -29,13 +21,10 @@ class Deas::Server
|
|
29
21
|
should have_imeths :static_files, :reload_templates
|
30
22
|
|
31
23
|
# DSL for server handling
|
32
|
-
should have_imeths :init, :
|
24
|
+
should have_imeths :init, :template_helpers, :template_helper?, :error
|
25
|
+
should have_imeths :logger, :use, :set, :view_handler_ns, :verbose_logging
|
33
26
|
should have_imeths :get, :post, :put, :patch, :delete, :route
|
34
27
|
|
35
|
-
should "be a singleton" do
|
36
|
-
assert_includes Singleton, subject.included_modules
|
37
|
-
end
|
38
|
-
|
39
28
|
should "allow setting it's configuration options" do
|
40
29
|
config = subject.configuration
|
41
30
|
|
@@ -72,6 +61,9 @@ class Deas::Server
|
|
72
61
|
subject.use 'MyMiddleware'
|
73
62
|
assert_equal [ ['MyMiddleware'] ], config.middlewares
|
74
63
|
|
64
|
+
subject.set :testing_set_meth, 'it works!'
|
65
|
+
assert_equal [ [:testing_set_meth, 'it works!'] ], config.settings
|
66
|
+
|
75
67
|
stdout_logger = Logger.new(STDOUT)
|
76
68
|
subject.logger stdout_logger
|
77
69
|
assert_equal stdout_logger, config.logger
|
@@ -159,6 +151,11 @@ class Deas::Server
|
|
159
151
|
assert_equal '::NoNsTest', route.handler_class_name
|
160
152
|
end
|
161
153
|
|
154
|
+
should "add and query helper modules using #template_helpers and #template_helper?" do
|
155
|
+
subject.template_helpers (helper_module = Module.new)
|
156
|
+
assert subject.template_helper?(helper_module)
|
157
|
+
end
|
158
|
+
|
162
159
|
end
|
163
160
|
|
164
161
|
class ConfigurationTests < BaseTests
|
@@ -169,37 +166,25 @@ class Deas::Server
|
|
169
166
|
subject{ @configuration }
|
170
167
|
|
171
168
|
# sinatra related options
|
172
|
-
should have_imeths :env, :root, :
|
169
|
+
should have_imeths :env, :root, :public_folder, :views_folder
|
173
170
|
should have_imeths :dump_errors, :method_override, :sessions, :show_exceptions
|
174
171
|
should have_imeths :static_files, :reload_templates
|
175
172
|
|
176
173
|
# server handling options
|
177
|
-
should have_imeths :init_procs, :logger, :
|
178
|
-
should have_imeths :routes, :view_handler_ns
|
174
|
+
should have_imeths :error_procs, :init_procs, :logger, :middlewares, :settings
|
175
|
+
should have_imeths :verbose_logging, :routes, :view_handler_ns
|
176
|
+
|
177
|
+
should have_reader :template_helpers
|
179
178
|
|
180
179
|
should "default the env to 'development'" do
|
181
180
|
assert_equal 'development', subject.env
|
182
181
|
end
|
183
182
|
|
184
|
-
should "default the
|
185
|
-
|
186
|
-
assert_equal expected_root, subject.root.to_s
|
187
|
-
end
|
188
|
-
|
189
|
-
should "default the app file to the routes file" do
|
190
|
-
assert_equal Deas.config.routes_file.to_s, subject.app_file.to_s
|
191
|
-
end
|
183
|
+
should "default the public and views folders based off the root" do
|
184
|
+
subject.root = TEST_SUPPORT_ROOT
|
192
185
|
|
193
|
-
|
194
|
-
|
195
|
-
expected_public_folder = File.join(expected_root, 'public')
|
196
|
-
assert_equal expected_public_folder, subject.public_folder.to_s
|
197
|
-
end
|
198
|
-
|
199
|
-
should "default the views folder based on the root" do
|
200
|
-
expected_root = File.expand_path('..', Deas.config.routes_file)
|
201
|
-
expected_views_folder = File.join(expected_root, 'views')
|
202
|
-
assert_equal expected_views_folder, subject.views_folder.to_s
|
186
|
+
assert_equal subject.root.join('public'), subject.public_folder
|
187
|
+
assert_equal subject.root.join('views'), subject.views_folder
|
203
188
|
end
|
204
189
|
|
205
190
|
should "default the Sinatra flags" do
|
@@ -211,16 +196,24 @@ class Deas::Server
|
|
211
196
|
assert_equal false, subject.reload_templates
|
212
197
|
end
|
213
198
|
|
214
|
-
should "default the
|
199
|
+
should "default the handling options" do
|
200
|
+
assert_empty subject.error_procs
|
201
|
+
assert_empty subject.init_procs
|
215
202
|
assert_instance_of Deas::NullLogger, subject.logger
|
203
|
+
assert_empty subject.middlewares
|
204
|
+
assert_empty subject.settings
|
205
|
+
assert_equal true, subject.verbose_logging
|
206
|
+
assert_empty subject.routes
|
207
|
+
assert_nil subject.view_handler_ns
|
208
|
+
assert_empty subject.template_helpers
|
216
209
|
end
|
217
210
|
|
218
|
-
should "
|
219
|
-
|
220
|
-
|
211
|
+
should "build a template scope including its template helpers" do
|
212
|
+
config = Deas::Server::Configuration.new
|
213
|
+
config.template_helpers << (helper_module = Module.new)
|
221
214
|
|
222
|
-
|
223
|
-
|
215
|
+
assert_includes Deas::Template::Scope, config.template_scope.ancestors
|
216
|
+
assert_includes helper_module, config.template_scope.included_modules
|
224
217
|
end
|
225
218
|
|
226
219
|
end
|
@@ -49,7 +49,6 @@ module Deas::SinatraApp
|
|
49
49
|
subject.settings.tap do |settings|
|
50
50
|
assert_equal 'staging', settings.environment
|
51
51
|
assert_equal 'path/to/somewhere', settings.root.to_s
|
52
|
-
assert_equal @configuration.app_file, settings.app_file
|
53
52
|
assert_equal 'path/to/somewhere/public', settings.public_folder.to_s
|
54
53
|
assert_equal 'path/to/somewhere/views', settings.views.to_s
|
55
54
|
assert_equal true, settings.dump_errors
|
@@ -42,17 +42,15 @@ class Deas::SinatraRunner
|
|
42
42
|
assert_equal [ 'test' ], return_value
|
43
43
|
end
|
44
44
|
|
45
|
-
should "
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
expected_locals = { :view => subject.instance_variable_get("@handler") }
|
55
|
-
assert_equal(expected_locals, options[:locals])
|
45
|
+
should "render the template with a :view local and the handler layouts with #render" do
|
46
|
+
exp_handler = FlagViewHandler.new(subject)
|
47
|
+
exp_layouts = FlagViewHandler.layouts
|
48
|
+
exp_result = Deas::Template.new(@fake_sinatra_call, 'index', {
|
49
|
+
:locals => { :view => exp_handler },
|
50
|
+
:layout => exp_layouts
|
51
|
+
}).render
|
52
|
+
|
53
|
+
assert_equal exp_result, subject.render('index')
|
56
54
|
end
|
57
55
|
|
58
56
|
should "call the sinatra_call's redirect method with #redirect" do
|
data/test/unit/template_tests.rb
CHANGED
@@ -13,14 +13,13 @@ class Deas::Template
|
|
13
13
|
subject{ @template }
|
14
14
|
|
15
15
|
should have_instance_methods :name, :options, :render
|
16
|
-
should have_class_methods :helpers, :helper?
|
17
16
|
|
18
17
|
should "symbolize it's name" do
|
19
18
|
assert_equal :"users/index", subject.name
|
20
19
|
end
|
21
20
|
|
22
|
-
should "set it's scope option
|
23
|
-
assert_instance_of Deas::Template::
|
21
|
+
should "set it's scope option" do
|
22
|
+
assert_instance_of Deas::Template::Scope, subject.options[:scope]
|
24
23
|
end
|
25
24
|
|
26
25
|
should "call the sinatra_call's `erb` method with #render" do
|
@@ -30,17 +29,6 @@ class Deas::Template
|
|
30
29
|
assert_equal subject.options, return_value[1]
|
31
30
|
end
|
32
31
|
|
33
|
-
should "include modules on the RenderScope using `helpers` class method"\
|
34
|
-
" and know if a given modules has been included in the RenderScope" do
|
35
|
-
helper_module = Module.new
|
36
|
-
Deas::Template.helpers(helper_module)
|
37
|
-
|
38
|
-
included_modules = Deas::Template::RenderScope.included_modules
|
39
|
-
assert_includes helper_module, included_modules
|
40
|
-
|
41
|
-
assert Deas::Template.helper?(helper_module)
|
42
|
-
end
|
43
|
-
|
44
32
|
end
|
45
33
|
|
46
34
|
class WithLayoutsTests < BaseTests
|
@@ -64,13 +52,12 @@ class Deas::Template
|
|
64
52
|
|
65
53
|
end
|
66
54
|
|
67
|
-
class
|
55
|
+
class ScopeTests < BaseTests
|
68
56
|
desc "Deas::Template::RenderScope"
|
69
57
|
setup do
|
70
|
-
@
|
71
|
-
@render_scope = Deas::Template::RenderScope.new(@fake_sinatra_call)
|
58
|
+
@scope = Deas::Template::Scope.new(@fake_sinatra_call)
|
72
59
|
end
|
73
|
-
subject{ @
|
60
|
+
subject{ @scope }
|
74
61
|
|
75
62
|
should have_imeths :partial, :escape_html, :h, :escape_url, :u, :render
|
76
63
|
|
@@ -80,7 +67,7 @@ class Deas::Template
|
|
80
67
|
assert_equal :_part, return_value[0]
|
81
68
|
|
82
69
|
expected_options = return_value[1]
|
83
|
-
assert_instance_of Deas::Template::
|
70
|
+
assert_instance_of Deas::Template::Scope, expected_options[:scope]
|
84
71
|
|
85
72
|
expected_locals = { :something => true }
|
86
73
|
assert_equal(expected_locals, expected_options[:locals])
|
@@ -89,15 +76,13 @@ class Deas::Template
|
|
89
76
|
should "call the sinatra_call's erb method with #render" do
|
90
77
|
return_value = subject.render('my_template', {
|
91
78
|
:views => '/path/to/templates',
|
92
|
-
:locals => {
|
93
|
-
:something => true
|
94
|
-
}
|
79
|
+
:locals => { :something => true }
|
95
80
|
})
|
96
81
|
|
97
82
|
assert_equal :my_template, return_value[0]
|
98
83
|
|
99
84
|
expected_options = return_value[1]
|
100
|
-
assert_instance_of Deas::Template::
|
85
|
+
assert_instance_of Deas::Template::Scope, expected_options[:scope]
|
101
86
|
|
102
87
|
expected_locals = { :something => true }
|
103
88
|
assert_equal(expected_locals, expected_options[:locals])
|
@@ -121,15 +106,10 @@ class Deas::Template
|
|
121
106
|
|
122
107
|
end
|
123
108
|
|
124
|
-
|
125
|
-
|
126
|
-
class Deas::Partial
|
127
|
-
|
128
|
-
class BaseTests < Assert::Context
|
129
|
-
desc "Deas::Partial"
|
109
|
+
class PartialTests < BaseTests
|
110
|
+
desc "Partial"
|
130
111
|
setup do
|
131
|
-
@
|
132
|
-
@partial = Deas::Partial.new(@fake_sinatra_call, 'users/index/listing', {
|
112
|
+
@partial = Deas::Template::Partial.new(@fake_sinatra_call, 'users/index/listing', {
|
133
113
|
:user => 'Joe Test'
|
134
114
|
})
|
135
115
|
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: deas
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 3
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
|
-
-
|
8
|
+
- 7
|
9
9
|
- 0
|
10
|
-
version: 0.
|
10
|
+
version: 0.7.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Kelly Redding
|
@@ -16,7 +16,7 @@ autorequire:
|
|
16
16
|
bindir: bin
|
17
17
|
cert_chain: []
|
18
18
|
|
19
|
-
date: 2013-05-
|
19
|
+
date: 2013-05-13 00:00:00 Z
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
22
22
|
name: ns-options
|
@@ -77,13 +77,12 @@ dependencies:
|
|
77
77
|
requirement: &id004 !ruby/object:Gem::Requirement
|
78
78
|
none: false
|
79
79
|
requirements:
|
80
|
-
- -
|
80
|
+
- - ">="
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
hash: 3
|
83
83
|
segments:
|
84
|
-
- 2
|
85
84
|
- 0
|
86
|
-
version: "
|
85
|
+
version: "0"
|
87
86
|
type: :development
|
88
87
|
version_requirements: *id004
|
89
88
|
- !ruby/object:Gem::Dependency
|
@@ -92,28 +91,26 @@ dependencies:
|
|
92
91
|
requirement: &id005 !ruby/object:Gem::Requirement
|
93
92
|
none: false
|
94
93
|
requirements:
|
95
|
-
- -
|
94
|
+
- - ">="
|
96
95
|
- !ruby/object:Gem::Version
|
97
|
-
hash:
|
96
|
+
hash: 3
|
98
97
|
segments:
|
99
|
-
- 1
|
100
98
|
- 0
|
101
|
-
version: "
|
99
|
+
version: "0"
|
102
100
|
type: :development
|
103
101
|
version_requirements: *id005
|
104
102
|
- !ruby/object:Gem::Dependency
|
105
|
-
name: rack-test
|
103
|
+
name: assert-rack-test
|
106
104
|
prerelease: false
|
107
105
|
requirement: &id006 !ruby/object:Gem::Requirement
|
108
106
|
none: false
|
109
107
|
requirements:
|
110
|
-
- -
|
108
|
+
- - ">="
|
111
109
|
- !ruby/object:Gem::Version
|
112
|
-
hash:
|
110
|
+
hash: 3
|
113
111
|
segments:
|
114
112
|
- 0
|
115
|
-
|
116
|
-
version: "0.6"
|
113
|
+
version: "0"
|
117
114
|
type: :development
|
118
115
|
version_requirements: *id006
|
119
116
|
description: Handler-based web framework powered by Sinatra
|
@@ -158,8 +155,7 @@ files:
|
|
158
155
|
- test/support/views/layout3.erb
|
159
156
|
- test/support/views/show.erb
|
160
157
|
- test/support/views/with_layout.erb
|
161
|
-
- test/system/
|
162
|
-
- test/unit/deas_tests.rb
|
158
|
+
- test/system/rack_tests.rb
|
163
159
|
- test/unit/error_handler_tests.rb
|
164
160
|
- test/unit/logging_tests.rb
|
165
161
|
- test/unit/route_tests.rb
|
@@ -214,8 +210,7 @@ test_files:
|
|
214
210
|
- test/support/views/layout3.erb
|
215
211
|
- test/support/views/show.erb
|
216
212
|
- test/support/views/with_layout.erb
|
217
|
-
- test/system/
|
218
|
-
- test/unit/deas_tests.rb
|
213
|
+
- test/system/rack_tests.rb
|
219
214
|
- test/unit/error_handler_tests.rb
|
220
215
|
- test/unit/logging_tests.rb
|
221
216
|
- test/unit/route_tests.rb
|
data/test/unit/deas_tests.rb
DELETED
@@ -1,21 +0,0 @@
|
|
1
|
-
require 'assert'
|
2
|
-
require 'deas'
|
3
|
-
|
4
|
-
module Deas
|
5
|
-
|
6
|
-
class BaseTests < Assert::Context
|
7
|
-
desc "Deas"
|
8
|
-
subject{ Deas }
|
9
|
-
|
10
|
-
should have_instance_methods :config, :configure, :init, :app
|
11
|
-
|
12
|
-
end
|
13
|
-
|
14
|
-
class ConfigTests < BaseTests
|
15
|
-
desc "Deas::Config"
|
16
|
-
subject{ Deas::Config }
|
17
|
-
|
18
|
-
should have_instance_methods :routes_file
|
19
|
-
end
|
20
|
-
|
21
|
-
end
|