deas 0.24.1 → 0.25.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.
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