cuba 3.0.1.rc2 → 3.1.0.rc1

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG CHANGED
@@ -1,3 +1,10 @@
1
+ 3.1.0.rc1
2
+
3
+ * Do a deep clone of the settings object during inheritance.
4
+ * Start namespacing plugins (i.e. settings[:render]).
5
+ * Use rack/test when doing equire 'cuba/test'.
6
+ * Capybara available via equire 'cuba/capybara'.
7
+
1
8
  3.0.0
2
9
 
3
10
  * Remove Cuba.build. Use subclassing instead.
data/cuba.gemspec CHANGED
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = "cuba"
3
- s.version = "3.0.1.rc2"
3
+ s.version = "3.1.0.rc1"
4
4
  s.summary = "Microframework for web applications."
5
5
  s.description = "Cuba is a microframework for web applications."
6
6
  s.authors = ["Michel Martens"]
data/lib/cuba.rb CHANGED
@@ -84,10 +84,17 @@ class Cuba
84
84
  @settings ||= {}
85
85
  end
86
86
 
87
+ def self.deepclone(obj)
88
+ Marshal.load(Marshal.dump(obj))
89
+ end
90
+
87
91
  def self.inherited(child)
88
- child.settings.replace(settings)
92
+ child.settings.replace(deepclone(settings))
89
93
  end
90
94
 
95
+ attr :env
96
+ attr :req
97
+ attr :res
91
98
  attr :captures
92
99
 
93
100
  def initialize(&blk)
@@ -103,22 +110,10 @@ class Cuba
103
110
  dup.call!(env)
104
111
  end
105
112
 
106
- def req
107
- Thread.current[:_cuba_req]
108
- end
109
-
110
- def res
111
- Thread.current[:_cuba_res]
112
- end
113
-
114
- def env
115
- Thread.current[:_cuba_env]
116
- end
117
-
118
113
  def call!(env)
119
- Thread.current[:_cuba_env] = env
120
- Thread.current[:_cuba_req] = Rack::Request.new(env)
121
- Thread.current[:_cuba_res] = Cuba::Response.new
114
+ @env = env
115
+ @req = Rack::Request.new(env)
116
+ @res = Cuba::Response.new
122
117
 
123
118
  # This `catch` statement will either receive a
124
119
  # rack response tuple via a `halt`, or will
@@ -0,0 +1,13 @@
1
+ require "cuba"
2
+ require "cutest"
3
+ require "capybara/dsl"
4
+
5
+ class Cutest::Scope
6
+ if defined? Capybara::DSL
7
+ include Capybara::DSL
8
+ else
9
+ include Capybara
10
+ end
11
+ end
12
+
13
+ Capybara.app = Cuba
data/lib/cuba/render.rb CHANGED
@@ -3,17 +3,28 @@ require "tilt"
3
3
  class Cuba
4
4
  module Render
5
5
  def self.setup(app)
6
- app.settings[:template_engine] ||= "erb"
7
- app.settings[:views] ||= File.expand_path("views", Dir.pwd)
6
+ app.settings[:render] ||= {}
7
+ app.settings[:render][:template_engine] ||= "erb"
8
+ app.settings[:render][:views] ||= File.expand_path("views", Dir.pwd)
9
+ app.settings[:render][:options] ||= {
10
+ default_encoding: Encoding.default_external
11
+ }
8
12
  end
9
13
 
10
14
  def view(template, locals = {}, layout = "layout")
11
15
  partial(layout, { content: partial(template, locals) }.merge(locals))
12
16
  end
13
17
 
18
+ def template_path(template)
19
+ "%s/%s.%s" % [
20
+ settings[:render][:views],
21
+ template,
22
+ settings[:render][:template_engine]
23
+ ]
24
+ end
25
+
14
26
  def partial(template, locals = {})
15
- render("#{settings[:views]}/#{template}.#{settings[:template_engine]}",
16
- locals, default_encoding: Encoding.default_external)
27
+ render(template_path(template), locals, settings[:render][:options])
17
28
  end
18
29
 
19
30
  # Render any type of template file supported by Tilt.
@@ -34,7 +45,7 @@ class Cuba
34
45
  #
35
46
  def render(template, locals = {}, options = {}, &block)
36
47
  _cache.fetch(template) {
37
- Tilt.new(template, 1, options.merge(outvar: '@_output')
48
+ Tilt.new(template, 1, options.merge(outvar: '@_output'))
38
49
  }.render(self, locals, &block)
39
50
  end
40
51
 
data/lib/cuba/test.rb CHANGED
@@ -1,13 +1,11 @@
1
1
  require "cuba"
2
2
  require "cutest"
3
- require "capybara/dsl"
3
+ require "rack/test"
4
4
 
5
5
  class Cutest::Scope
6
- if defined? Capybara::DSL
7
- include Capybara::DSL
8
- else
9
- include Capybara
6
+ include Rack::Test::Methods
7
+
8
+ def app
9
+ Cuba
10
10
  end
11
11
  end
12
-
13
- Capybara.app = Cuba
data/test/rack.rb ADDED
@@ -0,0 +1,22 @@
1
+ require File.expand_path("helper", File.dirname(__FILE__))
2
+ require "cuba/test"
3
+
4
+ scope do
5
+ test do
6
+ Cuba.define do
7
+ on root do
8
+ res.write "home"
9
+ end
10
+
11
+ on "about" do
12
+ res.write "about"
13
+ end
14
+ end
15
+
16
+ get "/"
17
+ assert_equal "home", last_response.body
18
+
19
+ get "/about"
20
+ assert_equal "about", last_response.body
21
+ end
22
+ end
data/test/render.rb CHANGED
@@ -3,20 +3,22 @@ require_relative "helper"
3
3
  require "cuba/render"
4
4
 
5
5
  test "doesn't override the settings if they already exist" do
6
- Cuba.settings[:views] = "./test/views"
7
- Cuba.settings[:template_engine] = "haml"
6
+ Cuba.settings[:render] = {
7
+ :views => "./test/views",
8
+ :template_engine => "haml"
9
+ }
8
10
 
9
11
  Cuba.plugin Cuba::Render
10
12
 
11
- assert_equal "./test/views", Cuba.settings[:views]
12
- assert_equal "haml", Cuba.settings[:template_engine]
13
+ assert_equal "./test/views", Cuba.settings[:render][:views]
14
+ assert_equal "haml", Cuba.settings[:render][:template_engine]
13
15
  end
14
16
 
15
17
  scope do
16
18
  setup do
17
19
  Cuba.plugin Cuba::Render
18
- Cuba.settings[:views] = "./test/views"
19
- Cuba.settings[:template_engine] = "erb"
20
+ Cuba.settings[:render][:views] = "./test/views"
21
+ Cuba.settings[:render][:template_engine] = "erb"
20
22
 
21
23
  Cuba.define do
22
24
  on "home" do
@@ -42,7 +44,7 @@ scope do
42
44
  end
43
45
 
44
46
  test "partial with str as engine" do
45
- Cuba.settings[:template_engine] = "str"
47
+ Cuba.settings[:render][:template_engine] = "str"
46
48
 
47
49
  _, _, body = Cuba.call({ "PATH_INFO" => "/about", "SCRIPT_NAME" => "/" })
48
50
 
@@ -50,7 +52,7 @@ scope do
50
52
  end
51
53
 
52
54
  test "view with str as engine" do
53
- Cuba.settings[:template_engine] = "str"
55
+ Cuba.settings[:render][:template_engine] = "str"
54
56
 
55
57
  _, _, body = Cuba.call({ "PATH_INFO" => "/home", "SCRIPT_NAME" => "/" })
56
58
 
@@ -62,7 +64,7 @@ test "caching behavior" do
62
64
  Thread.current[:_cache] = nil
63
65
 
64
66
  Cuba.plugin Cuba::Render
65
- Cuba.settings[:views] = "./test/views"
67
+ Cuba.settings[:render][:views] = "./test/views"
66
68
 
67
69
  Cuba.define do
68
70
  on "foo/:i" do |i|
data/test/settings.rb CHANGED
@@ -37,3 +37,16 @@ test do
37
37
 
38
38
  assert_equal ["Hello World"], body
39
39
  end
40
+
41
+ # The following tests the settings clone bug where
42
+ # we share the same reference. Deep cloning is the solution here.
43
+ Cuba.settings[:mote] ||= {}
44
+ Cuba.settings[:mote][:layout] ||= "layout"
45
+
46
+ class Login < Cuba
47
+ settings[:mote][:layout] = "layout/guest"
48
+ end
49
+
50
+ test do
51
+ assert Login.settings[:mote].object_id != Cuba.settings[:mote].object_id
52
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cuba
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.0.1.rc2
4
+ version: 3.1.0.rc1
5
5
  prerelease: 6
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-06-25 00:00:00.000000000 Z
12
+ date: 2012-07-03 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rack
16
- requirement: &2151841760 !ruby/object:Gem::Requirement
16
+ requirement: &2152007660 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '0'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *2151841760
24
+ version_requirements: *2152007660
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: cutest
27
- requirement: &2151838500 !ruby/object:Gem::Requirement
27
+ requirement: &2152007040 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: '0'
33
33
  type: :development
34
34
  prerelease: false
35
- version_requirements: *2151838500
35
+ version_requirements: *2152007040
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: capybara
38
- requirement: &2151837080 !ruby/object:Gem::Requirement
38
+ requirement: &2152006120 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ! '>='
@@ -43,7 +43,7 @@ dependencies:
43
43
  version: '0'
44
44
  type: :development
45
45
  prerelease: false
46
- version_requirements: *2151837080
46
+ version_requirements: *2152006120
47
47
  description: Cuba is a microframework for web applications.
48
48
  email:
49
49
  - michel@soveran.com
@@ -55,6 +55,7 @@ files:
55
55
  - CHANGELOG
56
56
  - README.md
57
57
  - Rakefile
58
+ - lib/cuba/capybara.rb
58
59
  - lib/cuba/render.rb
59
60
  - lib/cuba/test.rb
60
61
  - lib/cuba.rb
@@ -74,6 +75,7 @@ files:
74
75
  - test/param.rb
75
76
  - test/path.rb
76
77
  - test/plugin.rb
78
+ - test/rack.rb
77
79
  - test/redirect.rb
78
80
  - test/render.rb
79
81
  - test/root.rb