renee-core 0.2.0 → 0.3.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.
@@ -1,6 +1,6 @@
1
1
  require File.expand_path('../test_helper', __FILE__)
2
2
 
3
- describe Renee::Core::Application::Responding do
3
+ describe Renee::Core::Responding do
4
4
  describe "#interpret_response" do
5
5
  it "should render from a number" do
6
6
  mock_app do
data/test/routing_test.rb CHANGED
@@ -1,9 +1,9 @@
1
1
  require File.expand_path('../test_helper', __FILE__)
2
2
 
3
- describe Renee::Core::Application::Routing do
3
+ describe Renee::Core::Routing do
4
4
 
5
5
  def renee_for(path, options = {}, &block)
6
- Renee::Core.new(&block).call(Rack::MockRequest.env_for(path, options))
6
+ Renee.core(&block).call(Rack::MockRequest.env_for(path, options))
7
7
  end
8
8
 
9
9
  describe "with paths" do
@@ -118,7 +118,7 @@ describe Renee::Core::Application::Routing do
118
118
  it "should not ignore trailing slashes if told not to" do
119
119
  type = { 'Content-Type' => 'text/plain' }
120
120
  mock_app do
121
- exact_path('test') { get { halt [200,type,['test']] } }
121
+ path('test').empty { get { halt [200,type,['test']] } }
122
122
  end
123
123
  get '/test/'
124
124
  assert_equal 404, response.status
@@ -403,7 +403,7 @@ describe Renee::Core::Application::Routing do
403
403
  type = { 'Content-Type' => 'text/plain' }
404
404
  mock_app do
405
405
  path 'test' do
406
- halt run Renee::Core.new {
406
+ halt run Renee.core {
407
407
  path 'time' do
408
408
  halt halt [200,type,['test']]
409
409
  end
@@ -419,7 +419,7 @@ describe Renee::Core::Application::Routing do
419
419
  type = { 'Content-Type' => 'text/plain' }
420
420
  mock_app do
421
421
  path 'test' do
422
- run! Renee::Core.new {
422
+ run! Renee.core {
423
423
  path 'time' do
424
424
  halt halt [200,type,['test']]
425
425
  end
data/test/test_helper.rb CHANGED
@@ -1,4 +1,4 @@
1
1
  $: << File.expand_path('../../lib', __FILE__)
2
- require 'renee-core'
2
+ require 'renee_core'
3
3
  # Load shared test helpers
4
4
  require File.expand_path('../../../lib/test_helper', __FILE__)
@@ -4,7 +4,7 @@ require File.expand_path('../test_helper', __FILE__)
4
4
 
5
5
  describe Renee::Core::URLGeneration do
6
6
  it "should allow registration and generation of paths" do
7
- r = Renee::Core.new
7
+ r = Renee.core()
8
8
  r.register(:test, '/test/time')
9
9
  r.register(:test_var, '/test/:id')
10
10
  assert_equal '/test/time', r.path(:test)
@@ -13,41 +13,41 @@ describe Renee::Core::URLGeneration do
13
13
  end
14
14
 
15
15
  it "should allow registration and generation of urls" do
16
- r = Renee::Core.new
16
+ r = Renee.core()
17
17
  r.register(:test, 'http://localhost:8080/test/:time')
18
18
  assert_equal 'http://localhost:8080/test/123', r.url(:test, 123)
19
19
  assert_equal 'http://localhost:8080/test/654', r.url(:test, :time => '654')
20
20
  end
21
21
 
22
22
  it "should escape values when generating" do
23
- r = Renee::Core.new
23
+ r = Renee.core()
24
24
  r.register(:test, '/:test')
25
25
  assert_equal '/f%C3%B8%C3%B8', r.path(:test, "føø")
26
26
  end
27
27
 
28
28
  it "should encode extra values as query string params" do
29
- r = Renee::Core.new
29
+ r = Renee.core()
30
30
  r.register(:test, '/:test')
31
31
  assert_equal '/foo?bar=baz', r.path(:test, 'foo', :bar => :baz)
32
32
  assert_equal '/foo?bar=baz', r.path(:test, :test => 'foo', :bar => :baz)
33
33
  end
34
34
 
35
35
  it "should allow default values" do
36
- r = Renee::Core.new
36
+ r = Renee.core()
37
37
  r.register(:test, '/:test', :test => 'foo')
38
38
  assert_equal '/foo', r.path(:test)
39
39
  assert_equal '/baz', r.path(:test, :test => 'baz')
40
40
  end
41
41
 
42
42
  it "should include default vars as query string vars" do
43
- r = Renee::Core.new
43
+ r = Renee.core()
44
44
  r.register(:test, '/:foo', :test => 'foo')
45
45
  assert_equal '/foo?test=foo', r.path(:test, 'foo')
46
46
  assert_equal '/foo?test=foo', r.path(:test, :foo => 'foo')
47
47
  end
48
48
 
49
49
  it "should allow #prefix calls for nesting common path parts" do
50
- r = Renee::Core.new
50
+ r = Renee.core()
51
51
  r.prefix('/foo') do
52
52
  r.register(:foo_bar, '/bar')
53
53
  end
@@ -55,7 +55,7 @@ describe Renee::Core::URLGeneration do
55
55
  end
56
56
 
57
57
  it "should allow passing defaults and overriding them on a per-register basis" do
58
- r = Renee::Core.new
58
+ r = Renee.core()
59
59
  r.prefix('/foo', :bar => 'baz') do
60
60
  register(:foo_bar, '/bar', :bar => 'bam')
61
61
  register(:foo_baz, '/baz')
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: renee-core
3
3
  version: !ruby/object:Gem::Version
4
- hash: 23
4
+ hash: 19
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
- - 2
8
+ - 3
9
9
  - 0
10
- version: 0.2.0
10
+ version: 0.3.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Josh Hull
@@ -17,7 +17,7 @@ autorequire:
17
17
  bindir: bin
18
18
  cert_chain: []
19
19
 
20
- date: 2011-10-20 00:00:00 Z
20
+ date: 2011-10-25 00:00:00 Z
21
21
  dependencies:
22
22
  - !ruby/object:Gem::Dependency
23
23
  version_requirements: &id001 !ruby/object:Gem::Requirement
@@ -114,22 +114,22 @@ files:
114
114
  - .yardopts
115
115
  - README.md
116
116
  - Rakefile
117
- - lib/renee-core.rb
118
- - lib/renee-core/application.rb
119
- - lib/renee-core/application/chaining.rb
120
- - lib/renee-core/application/rack_interaction.rb
121
- - lib/renee-core/application/request_context.rb
122
- - lib/renee-core/application/responding.rb
123
- - lib/renee-core/application/routing.rb
124
- - lib/renee-core/application/transform.rb
125
- - lib/renee-core/exceptions.rb
126
- - lib/renee-core/matcher.rb
127
- - lib/renee-core/response.rb
128
- - lib/renee-core/settings.rb
129
- - lib/renee-core/url_generation.rb
130
- - lib/renee-core/version.rb
117
+ - lib/renee_core.rb
118
+ - lib/renee_core/chaining.rb
119
+ - lib/renee_core/env_accessors.rb
120
+ - lib/renee_core/exceptions.rb
121
+ - lib/renee_core/matcher.rb
122
+ - lib/renee_core/rack_interaction.rb
123
+ - lib/renee_core/request_context.rb
124
+ - lib/renee_core/responding.rb
125
+ - lib/renee_core/response.rb
126
+ - lib/renee_core/routing.rb
127
+ - lib/renee_core/transform.rb
128
+ - lib/renee_core/url_generation.rb
129
+ - lib/renee_core/version.rb
131
130
  - renee-core.gemspec
132
131
  - test/chaining_test.rb
132
+ - test/env_accessors_test.rb
133
133
  - test/include_test.rb
134
134
  - test/responding_test.rb
135
135
  - test/routing_test.rb
@@ -171,6 +171,7 @@ specification_version: 3
171
171
  summary: The super-friendly rack helpers
172
172
  test_files:
173
173
  - test/chaining_test.rb
174
+ - test/env_accessors_test.rb
174
175
  - test/include_test.rb
175
176
  - test/responding_test.rb
176
177
  - test/routing_test.rb
data/lib/renee-core.rb DELETED
@@ -1,78 +0,0 @@
1
- require 'rack'
2
- require 'renee-core/version'
3
- require 'renee-core/matcher'
4
- require 'renee-core/settings'
5
- require 'renee-core/response'
6
- require 'renee-core/application'
7
- require 'renee-core/url_generation'
8
- require 'renee-core/exceptions'
9
-
10
- # Top-level Renee constant
11
- class Renee
12
- # The top-level class for creating core application.
13
- # For convience you can also used a method named #Renee
14
- # for decalaring new instances.
15
- #
16
- # @example
17
- # Renee::Core.new { path('/hello') { halt :ok } }
18
- #
19
- class Core
20
- include URLGeneration
21
-
22
- # The application block used to initialize this application.
23
- attr_reader :application_block
24
- # The {Settings} object used to initialize this application.
25
- attr_reader :settings
26
-
27
- # @param [Proc] application_block The block of code that will be executed on each invocation of call #call.
28
- # Each time #call is called, a new instance of {Renee::Core::Application} will
29
- # be created. The block given will be #instance_eval 'd within
30
- # the context of that new instance.
31
- #
32
- def initialize(base_application_class = Application, &application_block)
33
- @base_application_class = base_application_class
34
- @application_block = application_block
35
- @settings = Settings.new
36
- end
37
-
38
- # This is a rack-compliant `Rack#call`.
39
- #
40
- # @param [Hash] env The environment hash.
41
- #
42
- # @return [Array] A rack compliant return.
43
- #
44
- # @see http://rack.rubyforge.org/doc/SPEC.html
45
- #
46
- def call(env)
47
- application_class.new(settings, &application_block).call(env)
48
- end
49
-
50
- ##
51
- # Configure settings for your Renee application. Accepts a settings file path
52
- # or a block containing the configuration settings.
53
- #
54
- # @example
55
- # Renee::Core.new { ... }.setup { views_path "./views" }
56
- #
57
- # @api public
58
- def setup(path = nil, &blk)
59
- raise "You cannot supply both an argument and a block to the method." unless path.nil? ^ blk.nil?
60
- case path
61
- when nil then settings.instance_eval(&blk)
62
- when Settings then @settings = path
63
- when String then File.exist?(path) ? settings.instance_eval(File.read(path), path, 1) : raise("The settings file #{path} does not exist")
64
- else raise "Could not setup with #{path.inspect}"
65
- end
66
- self
67
- end
68
-
69
- private
70
- def application_class
71
- @application_class ||= begin
72
- app_cls = Class.new(@base_application_class)
73
- settings.includes.each { |inc| app_cls.send(:include, inc) }
74
- app_cls
75
- end
76
- end
77
- end
78
- end
@@ -1,32 +0,0 @@
1
- require "renee-core/application/request_context"
2
- require "renee-core/application/chaining"
3
- require "renee-core/application/routing"
4
- require "renee-core/application/responding"
5
- require "renee-core/application/rack_interaction"
6
- require "renee-core/application/transform"
7
-
8
- class Renee
9
- class Core
10
- # This is the main class used to do the respond to requests. {Routing} provides route helpers.
11
- # {RequestContext} adds the RequestContext#call method to respond to Rack applications.
12
- # {Responding} defines the method Responding#halt which stops processing within a {Renee::Application}.
13
- # It also has methods to interpret arguments to #halt and redirection response helpers.
14
- # {RackInteraction} adds methods for interacting with Rack.
15
- class Application
16
- include Chaining
17
- include RequestContext
18
- include Routing
19
- include Responding
20
- include RackInteraction
21
- include Transform
22
-
23
- attr_reader :application_block, :settings
24
-
25
- # @param [Proc] application_block The block that will be #instance_eval'd on each invocation to #call
26
- def initialize(settings, &application_block)
27
- @settings = settings
28
- @application_block = application_block
29
- end
30
- end
31
- end
32
- end
@@ -1,73 +0,0 @@
1
- require 'set'
2
-
3
- class Renee
4
- class Core
5
- class Application
6
- # Module for creating chainable methods. To use this within your own modules, first `include Chaining`, then,
7
- # mark methods you want to be available with `chain_method :method_name`.
8
- # @example
9
- # module MoreRoutingMethods
10
- # include Chaining
11
- # def other_routing_method
12
- # # ..
13
- # end
14
- # chain_method :other_routing_method
15
- #
16
- module Chaining
17
- # @private
18
- class ChainingProxy
19
- def initialize(target, proxy_blk)
20
- @target, @proxy_blk, @calls = target, proxy_blk, []
21
- end
22
-
23
- def method_missing(m, *args, &blk)
24
- @calls << [m, *args]
25
- if blk.nil? && @target.class.private_method_defined?(:"#{m}_without_chain")
26
- self
27
- else
28
- ret = nil
29
- @proxy_blk.call(proc do |*inner_args|
30
- callback = proc do |*callback_args|
31
- inner_args.concat(callback_args)
32
- if @calls.size == 0
33
- return blk.call(*inner_args) if blk
34
- else
35
- call = @calls.shift
36
- ret = @target.send(call.at(0), *call.at(1), &callback)
37
- end
38
- end
39
- call = @calls.shift
40
- ret = @target.send(call.at(0), *call.at(1), &callback)
41
- end)
42
- ret
43
- end
44
- end
45
- end
46
-
47
- # @private
48
- module ClassMethods
49
- def chain_method(*methods)
50
- methods.each do |m|
51
- class_eval <<-EOT, __FILE__, __LINE__ + 1
52
- alias_method :#{m}_without_chain, :#{m}
53
- def #{m}(*args, &blk)
54
- chain(blk) { |subblk| #{m}_without_chain(*args, &subblk) }
55
- end
56
- private :#{m}_without_chain
57
- EOT
58
- end
59
- end
60
- end
61
-
62
- private
63
- def chain(blk, &proxy)
64
- blk ? yield(blk) : ChainingProxy.new(self, proxy)
65
- end
66
-
67
- def self.included(o)
68
- o.extend(ClassMethods)
69
- end
70
- end
71
- end
72
- end
73
- end
@@ -1,45 +0,0 @@
1
- class Renee
2
- class Core
3
- class Application
4
- # A module that defines useful Rack interaction methods.
5
- module RackInteraction
6
-
7
- # Creates an ad-hoc Rack application within the context of a Rack::Builder.
8
- # @example
9
- # get { halt build { use Rack::ContentLength; run proc { |env| Rack::Response.new("Hello!").finish } } }
10
- #
11
- def build(&blk)
12
- run Rack::Builder.new(&blk).to_app
13
- end
14
-
15
- # Creates an ad-hoc Rack application within the context of a Rack::Builder that immediately halts when done.
16
- # @see #run!
17
- # @example
18
- # get { halt build { use Rack::ContentLength; run proc { |env| Rack::Response.new("Hello!").finish } } }
19
- #
20
- def build!(&blk)
21
- run! build(&blk)
22
- end
23
-
24
- # Runs a rack application
25
- # @example
26
- # get { halt run proc { |env| Renee::Core::Response.new("Hello!").finish } }
27
- #
28
- def run(app = nil, &blk)
29
- raise "You cannot supply both a block and an app" unless app.nil? ^ blk.nil?
30
- (app || blk).call(env)
31
- end
32
-
33
- # Runs a rack application and halts immediately.
34
- #
35
- # @see #run
36
- # @example
37
- # get { run proc { |env| Renee::Core::Response.new("Hello!").finish } }
38
- #
39
- def run!(*args)
40
- halt run(*args)
41
- end
42
- end
43
- end
44
- end
45
- end
@@ -1,29 +0,0 @@
1
- class Renee
2
- class Core
3
- class Application
4
- # This module deals with the Rack#call compilance. It defines #call and also defines several critical methods
5
- # used by interaction by other application modules.
6
- module RequestContext
7
- attr_reader :env, :request, :detected_extension, :is_index_request
8
- alias_method :is_index_request?, :is_index_request
9
-
10
- # Provides a rack interface compliant call method.
11
- # @param[Hash] env The rack environment.
12
- def call(env)
13
- @env, @request = env, Rack::Request.new(env)
14
- @detected_extension = env['PATH_INFO'][/\.([^\.\/]+)$/, 1]
15
- @is_index_request = env['PATH_INFO'][/^\/?$/]
16
- # TODO clear template cache in development? `template_cache.clear`
17
- catch(:halt) do
18
- begin
19
- instance_eval(&application_block)
20
- rescue ClientError => e
21
- e.response ? instance_eval(&e.response) : halt("There was an error with your request", 400)
22
- end
23
- Renee::Core::Response.new("Not found", 404).finish
24
- end
25
- end # call
26
- end
27
- end
28
- end
29
- end