dolphy 0.1.5

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.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 8fbd167c947e2d4bbd1a1b10a985c9c467cd0b0f
4
+ data.tar.gz: 0a3f510552e4e3a79e5cab2d81831f9aa6098fb1
5
+ SHA512:
6
+ metadata.gz: 08ab403c88a8e3c710bc72dbe0816813c4a0b70d759acb80d4e9c8e3c0bd2430ff6ab78dcfa379f5d0086e8d27cef8c34c6db7fcecbd816dd3d06343439bfa44
7
+ data.tar.gz: f0e12935f25aa99a629a1d9fb61774445747717bebc84cd2e3972878e34f9a7fb508ea02a068dc6568746d519f8db66080024c9f93cf2cc68cffa306e3d10aba
data/LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2014 Mathias Jean Johansen <mathias@mjj.io>
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ 'Software'), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
17
+ IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
18
+ CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
19
+ TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
20
+ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,98 @@
1
+ # Dolphy
2
+ [![Build Status](https://magnum.travis-ci.com/majjoha/dolphy.svg?token=G5jfvsY2S8tSb5P53rGq)](https://magnum.travis-ci.com/majjoha/dolphy)
3
+ [![Code Climate](https://codeclimate.com/repos/53cb2ea469568031fe01ad3f/badges/a7a6a867bc5744c524d7/gpa.png)](https://codeclimate.com/repos/53cb2ea469568031fe01ad3f/feed)
4
+
5
+ Dolphy is an incredibly small (~200 LOC) web framework written in Ruby and based
6
+ on Rack. It was originally mimicking the behavior of Sinatra, but as time has
7
+ passed, it has slightly changed direction and is now more of a mix between
8
+ different web frameworks.
9
+
10
+ It has solely been written for the purpose of learning and is not meant to be
11
+ used in production.
12
+
13
+ There are a lot of things I want to do to improve the code and functionality of
14
+ this project. I try to list these things in the
15
+ [issues](https://github.com/majjoha/dolphy/issues). Feel free to fork this
16
+ repository and contribute if you want to help me implement features or fixing
17
+ bugs.
18
+
19
+ ## Requirements
20
+ * Ruby 2.1.0 or newer.
21
+
22
+ ## Getting started
23
+ Add this line to your Gemfile:
24
+
25
+ ```ruby
26
+ gem 'dolphy'
27
+ ```
28
+
29
+ And then run:
30
+
31
+ ```
32
+ bundle
33
+ ```
34
+
35
+ Or simply install it yourself as:
36
+
37
+ ```
38
+ gem install dolphy
39
+ ```
40
+
41
+ ## Usage
42
+ ```ruby
43
+ require 'dolphy'
44
+
45
+ Dolphy.app do
46
+ setup do |app|
47
+ # It is possible to specify the template engine in the config block. If no
48
+ # template engine is specified, it will simply default to ERB.
49
+ app.settings[:template_engine] = Dolphy::TemplateEngines::HamlEngine
50
+
51
+ # You can also specify a view path where Dolphy will look for views. It is
52
+ # by default set to `./views/`.
53
+ app.settings[:view_path] = "./somewhere/else/views/"
54
+
55
+ # Configurations are available to the rest of the application defined in the
56
+ # router block, so we could for instance define a title. Basically, you can
57
+ # give the settings hash any key value pair that you might find useful to
58
+ # store for later use.
59
+ app.settings[:title] = "Building things with Dolphy"
60
+ end
61
+
62
+ Dolphy.router do
63
+ get '/' do
64
+ render :index, { title: settings[:title], body: "Hello!" }
65
+ end
66
+
67
+ get '/login' do
68
+ render :login
69
+ end
70
+
71
+ post '/post' do
72
+ render :post, body: "hello #{params["message"]["name"]}"
73
+ end
74
+
75
+ get '/hello/:name' do |name|
76
+ render :hello, name: name
77
+ end
78
+ end
79
+ end.serve!
80
+ ```
81
+
82
+ ## Inspiration
83
+ I've been looking in my directions for inspiration. I probably owe some credit
84
+ to [Camping](http://camping.io), [Cuba](http://cuba.is),
85
+ [NYNY](http://alisnic.github.io/nyny/), and obviously
86
+ [Sinatra](http://sinatrarb.com) and [Rails](http://rubyonrails.org).
87
+
88
+
89
+ ## Contribute
90
+ 1. [Fork it](https://github.com/majjoha/dolphy/fork).
91
+ 2. Create your feature branch (`git checkout -b my-new-feature`).
92
+ 3. Commit your changes (`git commit -am 'Add some new feature.'`).
93
+ 4. Push to the branch (`git push origin my-new-feature`).
94
+ 5. Create a new pull request.
95
+
96
+ ## License
97
+ See [LICENSE](https://github.com/majjoha/dolphy/blob/master/LICENSE).
98
+ Copyright (c) 2014 Mathias Jean Johansen <<mathias@mjj.io>>
@@ -0,0 +1,70 @@
1
+ require 'dolphy/router'
2
+ require 'dolphy/request'
3
+ require 'dolphy/template_engine'
4
+ require 'dolphy/settings'
5
+ require 'dolphy/response'
6
+ require 'forwardable'
7
+ require 'rack'
8
+
9
+ module Dolphy
10
+ class Core
11
+ extend Forwardable
12
+ include Dolphy::TemplateEngines
13
+
14
+ delegate Dolphy::Router::HTTP_METHODS => :router
15
+
16
+ attr_accessor :settings
17
+
18
+ def initialize(&block)
19
+ @router = Dolphy::Router.new
20
+ @settings = Dolphy::Settings.new
21
+ instance_eval(&block)
22
+ end
23
+
24
+ def serve!
25
+ Rack::Server.start(app: self)
26
+ end
27
+
28
+ def setup(&block)
29
+ instance_eval(&block)
30
+ end
31
+
32
+ def render(template_name, locals = {})
33
+ Dolphy::TemplateEngine.new(settings[:template_engine],
34
+ settings[:view_path]).
35
+ render(template_name, locals)
36
+ end
37
+
38
+ def redirect_to(path, status = 302)
39
+ response.headers["Location"] = path
40
+ response.status = status
41
+ end
42
+
43
+ def params
44
+ request.params
45
+ end
46
+
47
+ # The main logic of Dolphy nests inside the call(env) method. It looks up
48
+ # the route for the current request method in the routes hash, and if it
49
+ # finds a route that matches the current path, it evaluates the block and
50
+ # sets the response accordingly.
51
+ def call(env)
52
+ @request = Dolphy::Request.new(env)
53
+ @response = Dolphy::Response.new
54
+
55
+ router.find_route_for(request).each do |matcher, block|
56
+ if match = router.find_match_data_for(request, with: matcher)
57
+ response.body << block.call(*match.captures)
58
+ end
59
+ end
60
+
61
+ response.status = 404 if response.body.empty?
62
+ response.body << "Page not found." if response.body.empty?
63
+ response.finish
64
+ end
65
+
66
+ private
67
+
68
+ attr_accessor :response, :router, :request
69
+ end
70
+ end
@@ -0,0 +1,19 @@
1
+ require 'rack'
2
+
3
+ module Dolphy
4
+ class Request < Rack::Request
5
+ attr_accessor :env
6
+
7
+ def initialize(env)
8
+ @env = env
9
+ end
10
+
11
+ def http_method
12
+ @env['REQUEST_METHOD'].downcase.to_sym
13
+ end
14
+
15
+ def path
16
+ @env['PATH_INFO']
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,16 @@
1
+ module Dolphy
2
+ class Response
3
+ attr_accessor :status, :headers, :body
4
+
5
+ def initialize(status = 200,
6
+ headers = {"Content-type" => "text/html"})
7
+ @status = status
8
+ @headers = headers
9
+ @body = []
10
+ end
11
+
12
+ def finish
13
+ [status, headers, body]
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,36 @@
1
+ module Dolphy
2
+ class Router
3
+ attr_accessor :routes
4
+
5
+ HTTP_METHODS = %i(get post put delete head options patch trace)
6
+
7
+ def initialize
8
+ @routes = Hash.new { |h, k| h[k] = [] }
9
+ end
10
+
11
+ def find_route_for(request)
12
+ routes[request.http_method]
13
+ end
14
+
15
+ def find_match_data_for(request, with:)
16
+ trim_trailing_slash(request.path_info).match(with)
17
+ end
18
+
19
+ HTTP_METHODS.each do |verb|
20
+ define_method(verb) do |path, &block|
21
+ routes[verb] << [matcher(path), block]
22
+ end
23
+ end
24
+
25
+ private
26
+
27
+ def trim_trailing_slash(string)
28
+ string.gsub(/\/$/, "")
29
+ end
30
+
31
+ def matcher(path)
32
+ re = path.gsub(/\:[^\/]+/, "([^\/]+)")
33
+ %r{\A#{trim_trailing_slash(re)}\z}
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,26 @@
1
+ module Dolphy
2
+ class Settings
3
+ attr_accessor :settings
4
+
5
+ def initialize
6
+ @settings = settings_defaults
7
+ end
8
+
9
+ def [](element)
10
+ settings[element]
11
+ end
12
+
13
+ def []=(key, value)
14
+ settings[key] = value
15
+ end
16
+
17
+ private
18
+
19
+ def settings_defaults
20
+ {
21
+ template_engine: Dolphy::TemplateEngines::ErbEngine,
22
+ view_path: "./views/"
23
+ }
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,22 @@
1
+ require 'tilt'
2
+ require_relative 'template_engines/erb_engine'
3
+ require_relative 'template_engines/haml_engine'
4
+
5
+ module Dolphy
6
+ class TemplateEngine
7
+ include Dolphy::TemplateEngines
8
+
9
+ def initialize(template_engine, view_path)
10
+ @template_engine = template_engine
11
+ @view_path = view_path
12
+ end
13
+
14
+ def render(template_name, locals)
15
+ template_engine.render(template_name, locals, view_path)
16
+ end
17
+
18
+ private
19
+
20
+ attr_accessor :template_engine, :view_path
21
+ end
22
+ end
@@ -0,0 +1,13 @@
1
+ require 'tilt'
2
+
3
+ module Dolphy
4
+ module TemplateEngines
5
+ class ErbEngine
6
+ def self.render(template_name, locals = {}, view_path = "./views/")
7
+ path = File.expand_path("#{view_path}#{template_name.to_s}.erb", Dir.pwd)
8
+ template = Tilt::ERBTemplate.new(path)
9
+ template.render(Object.new, locals)
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,13 @@
1
+ require 'tilt'
2
+
3
+ module Dolphy
4
+ module TemplateEngines
5
+ class HamlEngine
6
+ def self.render(template_name, locals = {}, view_path = "./views/")
7
+ path = File.expand_path("#{view_path}/#{template_name.to_s}.haml", Dir.pwd)
8
+ template = Tilt::HamlTemplate.new(path)
9
+ template.render(Object.new, locals)
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,3 @@
1
+ module Dolphy
2
+ VERSION = "0.1.5"
3
+ end
data/lib/dolphy.rb ADDED
@@ -0,0 +1,14 @@
1
+ require 'dolphy/core'
2
+ require 'dolphy/version'
3
+
4
+ module Dolphy
5
+ class << self
6
+ def app(&block)
7
+ Dolphy::Core.new(&block)
8
+ end
9
+
10
+ def router(&block)
11
+ yield
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,135 @@
1
+ require_relative '../spec_helper'
2
+
3
+ describe Dolphy::Core do
4
+ let(:core) do
5
+ Dolphy::Core.new do
6
+ get '/' do
7
+ 'test'
8
+ end
9
+
10
+ get '/empty' do
11
+ ""
12
+ end
13
+ end
14
+ end
15
+
16
+ describe "#initialize" do
17
+ it "is an instance of Dolphy::Core" do
18
+ expect(core).to be_a(Dolphy::Core)
19
+ end
20
+ end
21
+
22
+ describe "#setup" do
23
+ let(:app) do
24
+ Dolphy::Core.new do
25
+ setup do |app|
26
+ app.settings[:title] = "booyah!"
27
+ end
28
+
29
+ get '/' do
30
+ 'test'
31
+ end
32
+ end
33
+ end
34
+
35
+ it "configures the app" do
36
+ expect(app.settings.settings).
37
+ to eq(
38
+ {
39
+ template_engine: Dolphy::TemplateEngines::ErbEngine,
40
+ view_path: "./views/",
41
+ title: "booyah!"
42
+ }
43
+ )
44
+ end
45
+ end
46
+
47
+ describe "#render" do
48
+ let(:app) do
49
+ Dolphy::Core.new do
50
+ setup do |app|
51
+ app.settings[:view_path] = "./spec/views/"
52
+ end
53
+ end
54
+ end
55
+
56
+ it "renders the template with the locals" do
57
+ expect(app.render :what, body: "wat").to eq "wat"
58
+ end
59
+ end
60
+
61
+ describe "#call" do
62
+ context "when the page exists" do
63
+ let(:env) do
64
+ {
65
+ "REQUEST_METHOD" => "GET",
66
+ "PATH_INFO" => "/"
67
+ }
68
+ end
69
+
70
+ it "returns an array with a status, headers and the response" do
71
+ expect(core.call(env)).to eq(
72
+ [200, {"Content-type" => "text/html"}, ['test']]
73
+ )
74
+ end
75
+ end
76
+
77
+ context "when the page doesn't exist" do
78
+ let(:env) do
79
+ {
80
+ "REQUEST_METHOD" => "GET",
81
+ "PATH_INFO" => "/404"
82
+ }
83
+ end
84
+
85
+ it "returns an array with a status set to 404, headers and the response
86
+ set to 'Page not found'" do
87
+ expect(core.call(env)).to(
88
+ eq [404, {"Content-type" => "text/html"}, ['Page not found.']]
89
+ )
90
+ end
91
+ end
92
+
93
+ context "when the page is an empty string" do
94
+ let(:env) do
95
+ {
96
+ "REQUEST_METHOD" => "GET",
97
+ "PATH_INFO" => '/empty'
98
+ }
99
+ end
100
+
101
+ it "returns an empty page with a status set to 200" do
102
+ expect(core.call(env)).to(
103
+ eq [200, {"Content-type" => "text/html"}, [""]]
104
+ )
105
+ end
106
+ end
107
+ end
108
+
109
+ describe "#redirect_to" do
110
+ let(:app) do
111
+ Dolphy::Core.new do
112
+ get '/' do
113
+ 'test'
114
+ end
115
+
116
+ get '/test' do
117
+ redirect_to '/'
118
+ end
119
+ end
120
+ end
121
+
122
+ let(:env) do
123
+ {
124
+ "REQUEST_METHOD" => "GET",
125
+ "PATH_INFO" => "/test"
126
+ }
127
+ end
128
+
129
+ it "sets the HTTP status to 302" do
130
+ expect(app.call(env)).to(
131
+ eq [302, {"Content-type" => "text/html", "Location" => "/"}, [302]]
132
+ )
133
+ end
134
+ end
135
+ end
@@ -0,0 +1,28 @@
1
+ require_relative '../spec_helper'
2
+
3
+ describe Dolphy::Request do
4
+ let(:env) do
5
+ Dolphy::Request.new({
6
+ "REQUEST_METHOD" => "GET",
7
+ "PATH_INFO" => "/"
8
+ })
9
+ end
10
+
11
+ describe "#initialize" do
12
+ it "is an instance of Dolphy::Request" do
13
+ expect(env).to be_a(Dolphy::Request)
14
+ end
15
+ end
16
+
17
+ describe "#http_method" do
18
+ it "returns the HTTP method as a lowercase symbol" do
19
+ expect(env.http_method).to eq :get
20
+ end
21
+ end
22
+
23
+ describe "#path" do
24
+ it "returns the path information" do
25
+ expect(env.path).to eq "/"
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,24 @@
1
+ require_relative '../spec_helper'
2
+ require_relative '../../lib/dolphy/response'
3
+
4
+ describe Dolphy::Response do
5
+ let(:response) { Dolphy::Response.new }
6
+
7
+ describe "#initialize" do
8
+ it "initializes a response with a status, headers and an empty body" do
9
+ expect(response.status).to eq 200
10
+ expect(response.headers).to eq({"Content-type" => "text/html"})
11
+ expect(response.body).to eq []
12
+ end
13
+
14
+ it "is an instance of Dolphy::Response" do
15
+ expect(response).to be_a(Dolphy::Response)
16
+ end
17
+ end
18
+
19
+ describe "#finish" do
20
+ it "returns an array consisting of the status, headers and body" do
21
+ expect(response.finish).to eq [200, {"Content-type" => "text/html"}, []]
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,76 @@
1
+ require_relative '../spec_helper'
2
+
3
+ describe Dolphy::Router do
4
+ let(:router) { Dolphy::Router.new }
5
+
6
+ describe "#initialize" do
7
+ it "initializes an empty router" do
8
+ expect(router.routes).to eq({})
9
+ end
10
+
11
+ it "is an instance of Dolphy::Router" do
12
+ expect(router).to be_a(Dolphy::Router)
13
+ end
14
+ end
15
+
16
+ describe "#find_route_for" do
17
+ let(:request) do
18
+ Dolphy::Request.new({
19
+ "REQUEST_METHOD" => "GET",
20
+ "PATH_INFO" => "/"
21
+ })
22
+ end
23
+
24
+ it "returns the block associated with the route" do
25
+ router.get '/' do
26
+ 'test'
27
+ end
28
+
29
+ expect(router.find_route_for(request).flatten.last.call).to eq "test"
30
+ end
31
+ end
32
+
33
+ describe "#get" do
34
+ it "adds a route to the router" do
35
+ router.get '/' do
36
+ 'test'
37
+ end
38
+
39
+ expect(router.routes[:get].flatten.first).to eq /\A\z/
40
+ expect(router.routes[:get].flatten.last.call).to eq "test"
41
+ end
42
+ end
43
+
44
+ describe "#post" do
45
+ it "adds a route to the router" do
46
+ router.post '/' do
47
+ 'test'
48
+ end
49
+
50
+ expect(router.routes[:post].flatten.first).to eq /\A\z/
51
+ expect(router.routes[:post].flatten.last.call).to eq "test"
52
+ end
53
+ end
54
+
55
+ describe "#put" do
56
+ it "adds a route to the router" do
57
+ router.put '/' do
58
+ 'test'
59
+ end
60
+
61
+ expect(router.routes[:put].flatten.first).to eq /\A\z/
62
+ expect(router.routes[:put].flatten.last.call).to eq "test"
63
+ end
64
+ end
65
+
66
+ describe "#delete" do
67
+ it "adds a route to the router" do
68
+ router.delete '/' do
69
+ 'test'
70
+ end
71
+
72
+ expect(router.routes[:delete].flatten.first).to eq /\A\z/
73
+ expect(router.routes[:delete].flatten.last.call).to eq "test"
74
+ end
75
+ end
76
+ end
@@ -0,0 +1,35 @@
1
+ require_relative '../spec_helper'
2
+
3
+ describe Dolphy::Settings do
4
+ let(:settings) { Dolphy::Settings.new }
5
+
6
+ describe "#initialize" do
7
+ it "initializes an empty configuration hash" do
8
+ expect(settings.settings).to eq(
9
+ {
10
+ template_engine: Dolphy::TemplateEngines::ErbEngine,
11
+ view_path: "./views/"
12
+ }
13
+ )
14
+ end
15
+
16
+ it "is an instance of Dolphy::Settings" do
17
+ expect(settings).to be_a(Dolphy::Settings)
18
+ end
19
+ end
20
+
21
+ describe "#[]" do
22
+ it "finds the selected element from the settings hash" do
23
+ expect(
24
+ settings[:template_engine]
25
+ ).to eq Dolphy::TemplateEngines::ErbEngine
26
+ end
27
+ end
28
+
29
+ describe "#[]=" do
30
+ it "sets the key value pair in the settings hash properly" do
31
+ settings[:checkout] = 12
32
+ expect(settings[:checkout]).to be 12
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,30 @@
1
+ require_relative '../spec_helper'
2
+
3
+ describe Dolphy::TemplateEngine do
4
+ let(:template_engine) do
5
+ Dolphy::TemplateEngine.new(
6
+ Dolphy::TemplateEngines::ErbEngine,
7
+ "./spec/views/"
8
+ )
9
+ end
10
+
11
+ describe "#initialize" do
12
+ it "is an instance of Dolphy::TemplateEngine" do
13
+ expect(template_engine).to be_a(Dolphy::TemplateEngine)
14
+ end
15
+ end
16
+
17
+ describe "#render" do
18
+ it "renders the page with the locals" do
19
+ expect(template_engine.render(:what, body: "wat")).to eq "wat"
20
+ end
21
+
22
+ it "renders the page without the locals" do
23
+ expect(template_engine.render(:not_found, {})).to eq <<-HTML
24
+ <img src="http://upload.wikimedia.org/wikipedia/en/thumb/8/86/Eric_Dolphy.jpg/220px-Eric_Dolphy.jpg" alt="">
25
+ <h1>Dolphy says no!</h1>
26
+ <h2>HTTP 404 Page not found.</h2>
27
+ HTML
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,44 @@
1
+ require 'spec_helper'
2
+
3
+ describe Dolphy do
4
+ include Rack::Test::Methods
5
+
6
+ describe "#get" do
7
+ it "returns a page saying Hello on a correct path" do
8
+ visit '/'
9
+ expect(page).to have_content "Hello"
10
+ end
11
+
12
+ it "does not have this route" do
13
+ visit '/fail'
14
+ expect(page).to have_content "Page not found."
15
+ end
16
+
17
+ it "returns regular strings (without calling render)" do
18
+ visit '/hello'
19
+ expect(page).to have_content "hello world!"
20
+ end
21
+
22
+ it "returns a page using the input from the matcher" do
23
+ visit '/hello/davis'
24
+ expect(page).to have_content "hello davis"
25
+ end
26
+ end
27
+
28
+ describe "#post" do
29
+ it "returns a page saying Hello Mathias" do
30
+ visit '/'
31
+ fill_in('message[name]', with: 'Mathias')
32
+ click_button('Submit')
33
+ expect(page).to have_content "Hello Mathias"
34
+ end
35
+ end
36
+
37
+ describe "#redirect_to" do
38
+ it "redirects to the given path" do
39
+ visit '/wat'
40
+ expect(current_path).to eq "/hello"
41
+ expect(page).to have_content "hello world!"
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,52 @@
1
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
2
+ require 'rspec'
3
+ require 'rack/test'
4
+ require 'capybara'
5
+ require './lib/dolphy'
6
+
7
+ ENV['RACK_ENV'] = 'test'
8
+
9
+ app = Dolphy.app do
10
+ setup do |app|
11
+ app.settings[:template_engine] = Dolphy::TemplateEngines::HamlEngine
12
+ app.settings[:view_path] = "./spec/views/"
13
+ end
14
+
15
+ Dolphy.router do
16
+ get '/' do
17
+ render :index, { title: "booyah!", body: "Hello" }
18
+ end
19
+
20
+ post '/post' do
21
+ render :post, { body: "Hello #{params["message"]["name"]}" }
22
+ end
23
+
24
+ get '/hello' do
25
+ "hello world!"
26
+ end
27
+
28
+ get '/wat' do
29
+ redirect_to '/hello'
30
+ end
31
+
32
+ get '/hello/:name' do |name|
33
+ "hello #{name}"
34
+ end
35
+ end
36
+ end
37
+
38
+ Capybara.javascript_driver = :webkit
39
+ Capybara.app = app
40
+
41
+ module SpecHelper
42
+ include Rack::Test::Methods
43
+
44
+ def app
45
+ Capybara.app
46
+ end
47
+ end
48
+
49
+ RSpec.configure do |config|
50
+ config.include SpecHelper
51
+ config.include Capybara::DSL
52
+ end
metadata ADDED
@@ -0,0 +1,184 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: dolphy
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.5
5
+ platform: ruby
6
+ authors:
7
+ - Mathias Jean Johansen
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-08-14 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: tilt
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '2.0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '2.0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rack
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '1.2'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '1.2'
41
+ - !ruby/object:Gem::Dependency
42
+ name: haml
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '4.0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '4.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: erubis
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '2.7'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '2.7'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rake
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: 10.3.1
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: 10.3.1
83
+ - !ruby/object:Gem::Dependency
84
+ name: rspec
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '2.14'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '2.14'
97
+ - !ruby/object:Gem::Dependency
98
+ name: capybara
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: '2.2'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: '2.2'
111
+ - !ruby/object:Gem::Dependency
112
+ name: capybara-webkit
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - "~>"
116
+ - !ruby/object:Gem::Version
117
+ version: '1.2'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - "~>"
123
+ - !ruby/object:Gem::Version
124
+ version: '1.2'
125
+ description: Dolphy is an incredibly small (~200 LOC) web framework.
126
+ email: mathias@mjj.io
127
+ executables: []
128
+ extensions: []
129
+ extra_rdoc_files: []
130
+ files:
131
+ - LICENSE
132
+ - README.md
133
+ - lib/dolphy.rb
134
+ - lib/dolphy/core.rb
135
+ - lib/dolphy/request.rb
136
+ - lib/dolphy/response.rb
137
+ - lib/dolphy/router.rb
138
+ - lib/dolphy/settings.rb
139
+ - lib/dolphy/template_engine.rb
140
+ - lib/dolphy/template_engines/erb_engine.rb
141
+ - lib/dolphy/template_engines/haml_engine.rb
142
+ - lib/dolphy/version.rb
143
+ - spec/dolphy/core_spec.rb
144
+ - spec/dolphy/request_spec.rb
145
+ - spec/dolphy/response_spec.rb
146
+ - spec/dolphy/router_spec.rb
147
+ - spec/dolphy/settings_spec.rb
148
+ - spec/dolphy/template_engine_spec.rb
149
+ - spec/dolphy_spec.rb
150
+ - spec/spec_helper.rb
151
+ homepage: https://github.com/majjoha/dolphy
152
+ licenses:
153
+ - MIT
154
+ metadata: {}
155
+ post_install_message:
156
+ rdoc_options: []
157
+ require_paths:
158
+ - lib
159
+ required_ruby_version: !ruby/object:Gem::Requirement
160
+ requirements:
161
+ - - ">="
162
+ - !ruby/object:Gem::Version
163
+ version: '0'
164
+ required_rubygems_version: !ruby/object:Gem::Requirement
165
+ requirements:
166
+ - - ">="
167
+ - !ruby/object:Gem::Version
168
+ version: '0'
169
+ requirements: []
170
+ rubyforge_project:
171
+ rubygems_version: 2.2.0
172
+ signing_key:
173
+ specification_version: 4
174
+ summary: A small and simple web framework.
175
+ test_files:
176
+ - spec/dolphy/core_spec.rb
177
+ - spec/dolphy/request_spec.rb
178
+ - spec/dolphy/response_spec.rb
179
+ - spec/dolphy/router_spec.rb
180
+ - spec/dolphy/settings_spec.rb
181
+ - spec/dolphy/template_engine_spec.rb
182
+ - spec/dolphy_spec.rb
183
+ - spec/spec_helper.rb
184
+ has_rdoc: