deas 0.24.1 → 0.25.0

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile CHANGED
@@ -3,7 +3,7 @@ source "https://rubygems.org"
3
3
  gemspec
4
4
 
5
5
  gem 'rake'
6
- gem 'pry'
6
+ gem 'pry', "~> 0.9.0"
7
7
  gem 'multi_json'
8
8
  gem 'yajl-ruby'
9
9
  gem 'rack-test'
data/deas.gemspec CHANGED
@@ -22,8 +22,7 @@ Gem::Specification.new do |gem|
22
22
  gem.add_dependency("rack", ["~> 1.5"])
23
23
  gem.add_dependency("sinatra", ["~> 1.4"])
24
24
 
25
- gem.add_development_dependency("assert", ["~> 2.8"])
26
- gem.add_development_dependency("assert-mocha")
25
+ gem.add_development_dependency("assert", ["~> 2.12"])
27
26
  gem.add_development_dependency("assert-rack-test")
28
27
  gem.add_development_dependency('haml')
29
28
 
data/lib/deas/router.rb CHANGED
@@ -18,6 +18,11 @@ module Deas
18
18
  @view_handler_ns
19
19
  end
20
20
 
21
+ def base_url(value = nil)
22
+ @base_url = value if !value.nil?
23
+ @base_url
24
+ end
25
+
21
26
  def url(name, path)
22
27
  if !path.kind_of?(::String)
23
28
  raise ArgumentError, "invalid path `#{path.inspect}` - "\
@@ -30,7 +35,7 @@ module Deas
30
35
  url = self.urls[name.to_sym]
31
36
  raise ArgumentError, "no route named `#{name.to_sym.inspect}`" unless url
32
37
 
33
- url.path_for(*args)
38
+ "#{base_url}#{url.path_for(*args)}"
34
39
  end
35
40
 
36
41
  def get(path, handler_name); self.route(:get, path, handler_name); end
@@ -47,7 +52,7 @@ module Deas
47
52
 
48
53
  from_url = self.urls[from_path]
49
54
  from_url_path = from_url.path if from_url
50
- add_route(http_method, from_url_path || from_path, proxy)
55
+ add_route(http_method, "#{base_url}#{from_url_path || from_path}", proxy)
51
56
  end
52
57
 
53
58
  def redirect(from_path, to_path = nil, &block)
data/lib/deas/server.rb CHANGED
@@ -38,7 +38,7 @@ module Deas::Server
38
38
  attr_accessor :settings, :error_procs, :init_procs, :template_helpers
39
39
  attr_accessor :middlewares, :router
40
40
 
41
- def initialize(values=nil)
41
+ def initialize(values = nil)
42
42
  # these are defaulted here because we want to use the Configuration
43
43
  # instance `root`. If we define a proc above, we will be using the
44
44
  # Configuration class `root`, which will not update these options as
@@ -206,6 +206,7 @@ module Deas::Server
206
206
  end
207
207
 
208
208
  def view_handler_ns(*args); self.router.view_handler_ns(*args); end
209
+ def base_url(*args); self.router.base_url(*args); end
209
210
 
210
211
  def url(*args, &block); self.router.url(*args, &block); end
211
212
  def url_for(*args, &block); self.router.url_for(*args, &block); end
@@ -34,6 +34,7 @@ module Deas
34
34
  set :deas_error_procs, server_config.error_procs
35
35
  set :deas_default_charset, server_config.default_charset
36
36
  set :logger, server_config.logger
37
+ set :router, server_config.router
37
38
 
38
39
  server_config.settings.each{ |set_args| set *set_args }
39
40
  server_config.middlewares.each{ |use_args| use *use_args }
data/lib/deas/template.rb CHANGED
@@ -66,7 +66,15 @@ module Deas
66
66
  alias :u :escape_url
67
67
 
68
68
  def logger
69
- @sinatra_call.logger
69
+ @sinatra_call.settings.logger
70
+ end
71
+
72
+ def router
73
+ @sinatra_call.settings.router
74
+ end
75
+
76
+ def url_for(url)
77
+ "#{self.router.base_url}#{url}"
70
78
  end
71
79
 
72
80
  def ==(other_scope)
data/lib/deas/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Deas
2
- VERSION = "0.24.1"
2
+ VERSION = "0.25.0"
3
3
  end
data/test/helper.rb CHANGED
@@ -9,7 +9,8 @@ TEST_SUPPORT_ROOT = ROOT.join('test/support')
9
9
 
10
10
  # require pry for debugging (`binding.pry`)
11
11
  require 'pry'
12
- require 'assert-mocha' if defined?(Assert)
12
+
13
+ require 'test/support/factory'
13
14
 
14
15
  require 'fileutils'
15
16
  require 'logger'
@@ -0,0 +1,6 @@
1
+ require 'assert/factory'
2
+
3
+ module Factory
4
+ extend Assert::Factory
5
+
6
+ end
@@ -9,16 +9,17 @@ class FakeSinatraCall
9
9
  attr_accessor :request, :response, :params, :settings, :session, :logger
10
10
 
11
11
  def initialize(settings={})
12
- @settings = OpenStruct.new(settings.merge({
13
- :deas_template_scope => Deas::Template::Scope,
14
- :deas_default_charset => 'utf-8'
15
- }))
16
-
17
12
  @request = FakeRequest.new('GET','/something', {}, OpenStruct.new)
18
13
  @response = FakeResponse.new
19
14
  @params = @request.params
20
15
  @logger = Deas::NullLogger.new
21
16
  @session = @request.session
17
+
18
+ @settings = OpenStruct.new({
19
+ :deas_template_scope => Deas::Template::Scope,
20
+ :deas_default_charset => 'utf-8',
21
+ :router => Deas::Router.new
22
+ }.merge(settings))
22
23
  end
23
24
 
24
25
  def halt(*args)
@@ -4,7 +4,7 @@ require 'deas/error_handler'
4
4
 
5
5
  class Deas::ErrorHandler
6
6
 
7
- class BaseTests < Assert::Context
7
+ class UnitTests < Assert::Context
8
8
  desc "Deas::ErrorHandler"
9
9
  setup do
10
10
  @exception = RuntimeError.new
@@ -18,7 +18,7 @@ class Deas::ErrorHandler
18
18
 
19
19
  end
20
20
 
21
- class RunTests < BaseTests
21
+ class RunTests < UnitTests
22
22
  desc "run"
23
23
  setup do
24
24
  @error_procs = [ proc do |exception|
@@ -40,7 +40,7 @@ class Deas::ErrorHandler
40
40
 
41
41
  end
42
42
 
43
- class RunWithMultipleProcsTests < BaseTests
43
+ class RunWithMultipleProcsTests < UnitTests
44
44
  desc "run with multiple procs"
45
45
  setup do
46
46
  @error_procs = [
@@ -74,7 +74,7 @@ class Deas::ErrorHandler
74
74
 
75
75
  end
76
76
 
77
- class RunWithProcsThatHaltTests < BaseTests
77
+ class RunWithProcsThatHaltTests < UnitTests
78
78
  desc "run with a proc that halts"
79
79
  setup do
80
80
  @error_procs = [
@@ -4,7 +4,7 @@ require 'deas/logging'
4
4
 
5
5
  module Deas::Logging
6
6
 
7
- class BaseTests < Assert::Context
7
+ class UnitTests < Assert::Context
8
8
  desc "Deas::Logging"
9
9
  setup do
10
10
  @app = FakeSinatraCall.new
@@ -15,7 +15,7 @@ module Deas::Logging
15
15
 
16
16
  end
17
17
 
18
- class VerboseLoggingTests < BaseTests
18
+ class VerboseLoggingTests < UnitTests
19
19
  desc "Deas::VerboseLogging"
20
20
  setup do
21
21
  @middleware = Deas::VerboseLogging.new(@app)
@@ -30,7 +30,7 @@ module Deas::Logging
30
30
 
31
31
  end
32
32
 
33
- class SummaryLoggingTests < BaseTests
33
+ class SummaryLoggingTests < UnitTests
34
34
  desc "Deas::SummaryLogging"
35
35
  setup do
36
36
  @middleware = Deas::SummaryLogging.new(@app)
@@ -45,7 +45,7 @@ module Deas::Logging
45
45
 
46
46
  end
47
47
 
48
- class SummaryLineTests < BaseTests
48
+ class SummaryLineTests < UnitTests
49
49
  desc "Deas::SummaryLine"
50
50
  subject{ Deas::SummaryLine }
51
51
 
@@ -4,7 +4,7 @@ require 'deas/redirect_proxy'
4
4
 
5
5
  class Deas::RedirectProxy
6
6
 
7
- class BaseTests < Assert::Context
7
+ class UnitTests < Assert::Context
8
8
  desc "Deas::RedirectProxy"
9
9
  setup do
10
10
  @proxy = Deas::RedirectProxy.new('/somewhere')
@@ -19,7 +19,7 @@ class Deas::RedirectProxy
19
19
 
20
20
  end
21
21
 
22
- class HandlerClassTests < BaseTests
22
+ class HandlerClassTests < UnitTests
23
23
  include Deas::TestHelpers
24
24
 
25
25
  desc "redir handler class"
@@ -5,7 +5,7 @@ require 'deas/route_proxy'
5
5
 
6
6
  class Deas::RouteProxy
7
7
 
8
- class BaseTests < Assert::Context
8
+ class UnitTests < Assert::Context
9
9
  desc "Deas::RouteProxy"
10
10
  setup do
11
11
  @proxy = Deas::RouteProxy.new('TestViewHandler')
@@ -3,7 +3,7 @@ require 'deas/router'
3
3
 
4
4
  class Deas::Router
5
5
 
6
- class BaseTests < Assert::Context
6
+ class UnitTests < Assert::Context
7
7
  desc "Deas::Router"
8
8
  setup do
9
9
  @router = Deas::Router.new
@@ -11,13 +11,14 @@ class Deas::Router
11
11
  subject{ @router }
12
12
 
13
13
  should have_accessors :urls, :routes
14
- should have_imeths :view_handler_ns
14
+ should have_imeths :view_handler_ns, :base_url
15
15
  should have_imeths :url, :url_for
16
16
  should have_imeths :get, :post, :put, :patch, :delete
17
17
  should have_imeths :route, :redirect
18
18
 
19
- should "have no view_handler_ns, urls, or routes by default" do
19
+ should "have no view_handler_ns, base_url, urls, or routes by default" do
20
20
  assert_nil subject.view_handler_ns
21
+ assert_nil subject.base_url
21
22
  assert_empty subject.urls
22
23
  assert_empty subject.routes
23
24
  end
@@ -95,6 +96,22 @@ class Deas::Router
95
96
  assert_equal '::NoNsTest', route.handler_proxy.handler_class_name
96
97
  end
97
98
 
99
+ should "set a base url" do
100
+ url = Factory.url
101
+ subject.base_url url
102
+
103
+ assert_equal url, subject.base_url
104
+ end
105
+
106
+ should "use the base url when adding routes" do
107
+ url = Factory.url
108
+ subject.base_url url
109
+ route = subject.get('/some-path', Object)
110
+
111
+ exp_path = "#{url}/some-path"
112
+ assert_equal exp_path, route.path
113
+ end
114
+
98
115
  should "add a redirect route using #redirect" do
99
116
  subject.redirect('/invalid', '/assets')
100
117
 
@@ -119,7 +136,7 @@ class Deas::Router
119
136
 
120
137
  end
121
138
 
122
- class NamedUrlTests < BaseTests
139
+ class NamedUrlTests < UnitTests
123
140
  desc "when using named urls"
124
141
  setup do
125
142
  @router.url('get_info', '/info/:for')
@@ -180,6 +197,15 @@ class Deas::Router
180
197
  assert_equal url.path, route.path
181
198
  end
182
199
 
200
+ should "use the base url when building named urls" do
201
+ url = Factory.url
202
+ subject.base_url url
203
+ subject.url('base_get_info', '/info/:for')
204
+
205
+ exp_path = "#{url}/info/now"
206
+ assert_equal exp_path, subject.url_for(:base_get_info, :for => 'now')
207
+ end
208
+
183
209
  end
184
210
 
185
211
  end
@@ -8,7 +8,7 @@ require 'deas/router'
8
8
 
9
9
  class Deas::Server::Configuration
10
10
 
11
- class BaseTests < Assert::Context
11
+ class UnitTests < Assert::Context
12
12
  desc "Deas::Server::Configuration"
13
13
  setup do
14
14
  @configuration = Deas::Server::Configuration.new
@@ -91,7 +91,7 @@ class Deas::Server::Configuration
91
91
 
92
92
  end
93
93
 
94
- class ValidationTests < BaseTests
94
+ class ValidationTests < UnitTests
95
95
  desc "when successfully validated"
96
96
  setup do
97
97
  @initialized = false
@@ -6,7 +6,7 @@ require 'deas/router'
6
6
 
7
7
  module Deas::Server
8
8
 
9
- class BaseTests < Assert::Context
9
+ class UnitTests < Assert::Context
10
10
  desc "Deas::Server"
11
11
  setup do
12
12
  @server_class = Class.new{ include Deas::Server }
@@ -22,12 +22,12 @@ module Deas::Server
22
22
 
23
23
  # DSL for server handling settings
24
24
  should have_imeths :init, :error, :template_helpers, :template_helper?
25
- should have_imeths :use, :set, :view_handler_ns, :verbose_logging, :logger
25
+ should have_imeths :use, :set, :verbose_logging, :logger
26
26
  should have_imeths :get, :post, :put, :patch, :delete
27
27
  should have_imeths :redirect, :route, :url, :url_for
28
28
 
29
29
  # DSL for server routing settings
30
- should have_imeths :router, :view_handler_ns
30
+ should have_imeths :router, :view_handler_ns, :base_url
31
31
  should have_imeths :url, :url_for
32
32
  should have_imeths :get, :post, :put, :patch, :delete
33
33
  should have_imeths :route, :redirect
@@ -98,6 +98,8 @@ module Deas::Server
98
98
 
99
99
  should "have a router by default and allow overriding it" do
100
100
  assert_kind_of Deas::Router, subject.router
101
+ assert_equal subject.router.view_handler_ns, subject.view_handler_ns
102
+ assert_equal subject.router.base_url, subject.base_url
101
103
 
102
104
  new_router = Deas::Router.new
103
105
  subject.router new_router
@@ -4,7 +4,7 @@ require 'deas/show_exceptions'
4
4
 
5
5
  class Deas::ShowExceptions
6
6
 
7
- class BaseTests < Assert::Context
7
+ class UnitTests < Assert::Context
8
8
  desc "Deas::ShowExceptions"
9
9
  setup do
10
10
  exception = Sinatra::NotFound.new
@@ -3,12 +3,13 @@ require 'sinatra/base'
3
3
  require 'test/support/view_handlers'
4
4
  require 'deas/route_proxy'
5
5
  require 'deas/route'
6
+ require 'deas/router'
6
7
  require 'deas/server'
7
8
  require 'deas/sinatra_app'
8
9
 
9
10
  module Deas::SinatraApp
10
11
 
11
- class BaseTests < Assert::Context
12
+ class UnitTests < Assert::Context
12
13
  desc "Deas::SinatraApp"
13
14
  setup do
14
15
  proxy = Deas::RouteProxy.new('TestViewHandler')
@@ -51,6 +52,7 @@ module Deas::SinatraApp
51
52
  assert_equal true, settings.static
52
53
  assert_equal true, settings.reload_templates
53
54
  assert_instance_of Deas::NullLogger, settings.logger
55
+ assert_instance_of Deas::Router, settings.router
54
56
 
55
57
  # settings that are set but can't be changed
56
58
  assert_equal false, settings.logging
@@ -83,7 +83,7 @@ class Deas::Template
83
83
 
84
84
  should have_reader :sinatra_call
85
85
  should have_imeths :render, :partial, :escape_html, :h, :escape_url, :u
86
- should have_imeths :logger
86
+ should have_imeths :logger, :router, :url_for
87
87
 
88
88
  should "call the sinatra_call's erb method with #render" do
89
89
  render_args = subject.render('my_template', {
@@ -127,7 +127,20 @@ class Deas::Template
127
127
  end
128
128
 
129
129
  should "expose the sinatra call (and deas server) logger" do
130
- assert_equal @fake_sinatra_call.logger, subject.logger
130
+ assert_equal @fake_sinatra_call.settings.logger, subject.logger
131
+ end
132
+
133
+ should "expose the sinatra call (and deas server) router" do
134
+ assert_equal @fake_sinatra_call.settings.router, subject.router
135
+ end
136
+
137
+ should "build urls with #url_for" do
138
+ base_url = Factory.url
139
+ url = Factory.url
140
+ @fake_sinatra_call.settings.router.base_url(base_url)
141
+
142
+ exp = "#{base_url}#{url}"
143
+ assert_equal exp, subject.url_for(url)
131
144
  end
132
145
 
133
146
  end
@@ -5,7 +5,7 @@ require 'deas/view_handler'
5
5
 
6
6
  module Deas::ViewHandler
7
7
 
8
- class BaseTests < Assert::Context
8
+ class UnitTests < Assert::Context
9
9
  include Deas::TestHelpers
10
10
 
11
11
  desc "Deas::ViewHandler"
@@ -57,7 +57,7 @@ module Deas::ViewHandler
57
57
 
58
58
  end
59
59
 
60
- class CallbackTests < BaseTests
60
+ class CallbackTests < UnitTests
61
61
  desc "callbacks"
62
62
  setup do
63
63
  @proc1 = proc{ '1' }
@@ -139,7 +139,7 @@ module Deas::ViewHandler
139
139
 
140
140
  end
141
141
 
142
- class WithMethodFlagsTests < BaseTests
142
+ class WithMethodFlagsTests < UnitTests
143
143
  setup do
144
144
  @handler = test_handler(FlagViewHandler)
145
145
  end
@@ -167,7 +167,7 @@ module Deas::ViewHandler
167
167
 
168
168
  end
169
169
 
170
- class HaltTests < BaseTests
170
+ class HaltTests < UnitTests
171
171
  desc "halt"
172
172
 
173
173
  should "return a response with the status code and the passed data" do
@@ -185,7 +185,7 @@ module Deas::ViewHandler
185
185
 
186
186
  end
187
187
 
188
- class ContentTypeTests < BaseTests
188
+ class ContentTypeTests < UnitTests
189
189
  desc "content_type"
190
190
 
191
191
  should "should set the response content_type/charset" do
@@ -198,7 +198,7 @@ module Deas::ViewHandler
198
198
 
199
199
  end
200
200
 
201
- class StatusTests < BaseTests
201
+ class StatusTests < UnitTests
202
202
  desc "status"
203
203
 
204
204
  should "should set the response status" do
@@ -210,7 +210,7 @@ module Deas::ViewHandler
210
210
 
211
211
  end
212
212
 
213
- class HeadersTests < BaseTests
213
+ class HeadersTests < UnitTests
214
214
  desc "headers"
215
215
 
216
216
  should "should set the response status" do
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: 125
4
+ hash: 123
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
- - 24
9
- - 1
10
- version: 0.24.1
8
+ - 25
9
+ - 0
10
+ version: 0.25.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: 2014-06-26 00:00:00 Z
19
+ date: 2014-08-01 00:00:00 Z
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
22
22
  requirement: &id001 !ruby/object:Gem::Requirement
@@ -77,11 +77,11 @@ dependencies:
77
77
  requirements:
78
78
  - - ~>
79
79
  - !ruby/object:Gem::Version
80
- hash: 19
80
+ hash: 27
81
81
  segments:
82
82
  - 2
83
- - 8
84
- version: "2.8"
83
+ - 12
84
+ version: "2.12"
85
85
  type: :development
86
86
  name: assert
87
87
  version_requirements: *id004
@@ -97,7 +97,7 @@ dependencies:
97
97
  - 0
98
98
  version: "0"
99
99
  type: :development
100
- name: assert-mocha
100
+ name: assert-rack-test
101
101
  version_requirements: *id005
102
102
  prerelease: false
103
103
  - !ruby/object:Gem::Dependency
@@ -111,22 +111,8 @@ dependencies:
111
111
  - 0
112
112
  version: "0"
113
113
  type: :development
114
- name: assert-rack-test
115
- version_requirements: *id006
116
- prerelease: false
117
- - !ruby/object:Gem::Dependency
118
- requirement: &id007 !ruby/object:Gem::Requirement
119
- none: false
120
- requirements:
121
- - - ">="
122
- - !ruby/object:Gem::Version
123
- hash: 3
124
- segments:
125
- - 0
126
- version: "0"
127
- type: :development
128
114
  name: haml
129
- version_requirements: *id007
115
+ version_requirements: *id006
130
116
  prerelease: false
131
117
  description: Handler-based web framework powered by Sinatra
132
118
  email:
@@ -168,6 +154,7 @@ files:
168
154
  - lib/deas/view_handler.rb
169
155
  - log/.gitkeep
170
156
  - test/helper.rb
157
+ - test/support/factory.rb
171
158
  - test/support/fake_sinatra_call.rb
172
159
  - test/support/normalized_params_spy.rb
173
160
  - test/support/routes.rb
@@ -241,6 +228,7 @@ specification_version: 3
241
228
  summary: Handler-based web framework powered by Sinatra
242
229
  test_files:
243
230
  - test/helper.rb
231
+ - test/support/factory.rb
244
232
  - test/support/fake_sinatra_call.rb
245
233
  - test/support/normalized_params_spy.rb
246
234
  - test/support/routes.rb