thumblemonks-chicago 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
data/HISTORY.txt ADDED
File without changes
data/MIT-LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2008 Justin Knowlden, Gabriel Gironda, Dan Hodos, Thumble Monks
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
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.markdown ADDED
@@ -0,0 +1,5 @@
1
+ # Chicago
2
+
3
+ > It's my kind of town!
4
+
5
+ > - Sinatra
data/Rakefile ADDED
@@ -0,0 +1,24 @@
1
+ require 'rubygems'
2
+ require 'rake'
3
+ require 'rake/testtask'
4
+
5
+ desc 'Default task: run all tests'
6
+ task :default => [:test]
7
+
8
+ task(:set_test_env) { ENV['SINATRA_ENV'] ||= 'test' }
9
+
10
+ task :environment do
11
+ # Nothing yet
12
+ end
13
+
14
+ task :test => [:set_test_env, :environment]
15
+ desc 'Run all tests'
16
+ Rake::TestTask.new do |t|
17
+ t.test_files = FileList['test/*_test.rb']
18
+ t.verbose = true
19
+ end
20
+
21
+ desc "Open an irb session preloaded with this library"
22
+ task :console do
23
+ exec "irb -rubygems"
24
+ end
data/chicago.gemspec ADDED
@@ -0,0 +1,35 @@
1
+ Gem::Specification.new do |s|
2
+ s.name = "chicago"
3
+ s.version = "0.1.0"
4
+ s.date = "2008-12-05"
5
+ s.summary = "Sinatra runtime and testing extensions used commonly by Thumblemonks"
6
+ s.email = %w[gus@gusg.us gabriel.gironda@gmail.com]
7
+ s.homepage = "http://github.com/thumblemonks/chicago/tree/master"
8
+ s.description = "Sinatra runtime and testing extensions used commonly by Thumblemonks. For example, :json_response, which turns an object into JSON and sets the content-type appropriately."
9
+ s.authors = %w[Justin\ Knowlden Gabriel\ Gironda]
10
+
11
+ s.has_rdoc = false
12
+ s.rdoc_options = ["--main", "README.markdown"]
13
+ s.extra_rdoc_files = ["HISTORY.txt", "README.markdown"]
14
+
15
+ # run git ls-files to get an updated list
16
+ s.files = %w[
17
+ HISTORY.txt
18
+ MIT-LICENSE
19
+ README.markdown
20
+ Rakefile
21
+ chicago.gemspec
22
+ lib/chicago.rb
23
+ lib/chicago/application.rb
24
+ lib/chicago/helpers.rb
25
+ lib/chicago/responders.rb
26
+ lib/chicago/shoulda.rb
27
+ lib/chicago/shoulda/sinatra.rb
28
+ ]
29
+
30
+ s.test_files = %w[
31
+ test/application_test.rb
32
+ test/responders_test.rb
33
+ test/test_helper.rb
34
+ ]
35
+ end
@@ -0,0 +1,35 @@
1
+ module Thumblemonks
2
+ module Sinatra
3
+ module Application
4
+
5
+ # Assumes all CSS is SASS and is referenced as being in a directory named stylesheets
6
+ def catch_all_css(path='/stylesheets')
7
+ get("#{path}/*.css") {sass params["splat"].first.to_sym}
8
+ end
9
+
10
+ # When you don't want anything special, but to load a named view
11
+ def get_obvious(name)
12
+ get "/#{name}" do
13
+ title = name.to_s
14
+ haml name.to_sym
15
+ end
16
+ end
17
+
18
+ end # Application
19
+
20
+ module Object
21
+ def self.forward_sinatra_method(*methods)
22
+ Array(methods).each do |method|
23
+ module_eval <<-EOS
24
+ def #{method}(*args, &b) ::Sinatra.application.#{method}(*args, &b); end
25
+ EOS
26
+ end
27
+ end
28
+
29
+ forward_sinatra_method :catch_all_css, :get_obvious
30
+ end # Object
31
+ end # Sinatra
32
+ end # Thumblemonks
33
+
34
+ Sinatra::Application.instance_eval { include Thumblemonks::Sinatra::Application }
35
+ Object.instance_eval { include Thumblemonks::Sinatra::Object }
@@ -0,0 +1,24 @@
1
+ module Thumblemonks
2
+ module Sinatra
3
+ module Helpers
4
+ def anchor(name, url, options={})
5
+ defaults = {:href => url}
6
+ options_str = hash_to_attributes(defaults.merge(options))
7
+ %Q[<a #{options_str}>#{name}</a>]
8
+ end
9
+
10
+ def stylesheet_include(name, options={})
11
+ defaults = {:href => "/stylesheets/#{name}.css", :media => "screen",
12
+ :rel => "stylesheet", :type => "text/css"}
13
+ options_str = hash_to_attributes(defaults.merge(options))
14
+ %Q[<link #{options_str}/>]
15
+ end
16
+ private
17
+ def hash_to_attributes(options)
18
+ options.map {|k,v| "#{k}=\"#{v}\""}.join(' ')
19
+ end
20
+ end # Helpers
21
+ end # Sinatra
22
+ end # Thumblemonks
23
+
24
+ Sinatra::EventContext.instance_eval { include Thumblemonks::Sinatra::Helpers }
@@ -0,0 +1,15 @@
1
+ module Thumblemonks
2
+ module Sinatra
3
+ module Responders
4
+
5
+ # Returns a JSON response for an object
6
+ def json_response(object)
7
+ content_type 'application/json'
8
+ object.to_json
9
+ end
10
+
11
+ end # Responders
12
+ end # Sinatra
13
+ end # Thumblemonks
14
+
15
+ Sinatra::EventContext.instance_eval { include Thumblemonks::Sinatra::Responders }
@@ -0,0 +1,69 @@
1
+ require 'json'
2
+
3
+ module Thumblemonks
4
+ module Shoulda
5
+ module Sinatra
6
+
7
+ def self.included(klass)
8
+ klass.extend(Macros)
9
+ klass.send(:include, Helpers)
10
+ end
11
+
12
+ module Macros
13
+ def should_have_response_status(expected)
14
+ should("have response status") { assert_response expected }
15
+ end
16
+
17
+ def should_have_response_body(expected)
18
+ should("have response body") { assert_response_body expected }
19
+ end
20
+
21
+ def should_have_content_type(expected)
22
+ should("have content_type") { assert_content_type expected }
23
+ end
24
+
25
+ def should_have_json_response(json={}, &block)
26
+ should_have_content_type 'application/json'
27
+ should "have JSON response in the body" do
28
+ json = self.instance_eval(&block) if block_given?
29
+ json = json.to_json unless json.instance_of?(String) || json.instance_of?(Regexp)
30
+ assert_response_body json
31
+ end
32
+ end
33
+ end # Macros
34
+
35
+ module Helpers
36
+ def deny(check, message=nil)
37
+ assert(!check, message)
38
+ end
39
+
40
+ def assert_response(status)
41
+ assert_equal status, @response.status
42
+ end
43
+
44
+ def assert_response_body(body)
45
+ assert_match body, @response.body
46
+ end
47
+
48
+ def assert_content_type(expected)
49
+ assert_equal expected, @response.headers['Content-type']
50
+ end
51
+
52
+ # Usage:
53
+ #
54
+ # assert_redirected_to '/foo/bar'
55
+ # or
56
+ # assert_redirected_to %r[foo.bar]
57
+ def assert_redirected_to(expected_path)
58
+ yield if block_given?
59
+ assert_response 302
60
+ action = expected_path.kind_of?(Regexp) ? 'match' : 'equal'
61
+ send("assert_#{action}", expected_path, @response.headers["Location"])
62
+ end
63
+ end # Helpers
64
+
65
+ end # Sinatra
66
+ end # Shoulda
67
+ end # Thumblemonks
68
+
69
+ Test::Unit::TestCase.instance_eval { include Thumblemonks::Shoulda::Sinatra }
@@ -0,0 +1 @@
1
+ require 'chicago/shoulda/sinatra'
data/lib/chicago.rb ADDED
@@ -0,0 +1,3 @@
1
+ require 'chicago/application'
2
+ require 'chicago/responders'
3
+ require 'chicago/helpers'
@@ -0,0 +1,33 @@
1
+ require File.join(File.dirname(__FILE__), 'test_helper')
2
+
3
+ class ApplicationTest < Test::Unit::TestCase
4
+
5
+ context "catching all css" do
6
+ context "with default path" do
7
+ setup do
8
+ get_it '/stylesheets/foo.css'
9
+ end
10
+
11
+ should_have_response_status 200
12
+ should_have_response_body %r[.bar \{\s+display: none; \}\s]
13
+ end
14
+
15
+ context "with specified path" do
16
+ setup do
17
+ get_it '/css/goo.css'
18
+ end
19
+
20
+ should_have_response_status 200
21
+ should_have_response_body %r[.car \{\s+display: some; \}\s]
22
+ end
23
+ end # catching all css
24
+
25
+ context "getting obvious views" do
26
+ setup do
27
+ get_it '/baz'
28
+ end
29
+
30
+ should_have_response_body "Whatever man. That's just like, your opinion."
31
+ end
32
+
33
+ end
@@ -0,0 +1,14 @@
1
+ require File.join(File.dirname(__FILE__), 'test_helper')
2
+
3
+ class RespondersTest < Test::Unit::TestCase
4
+
5
+ context "json response" do
6
+ setup do
7
+ get_it "/json_bait"
8
+ end
9
+
10
+ should_have_response_status 201
11
+ should_have_json_response({:foo => :bar})
12
+ end # json response
13
+
14
+ end
@@ -0,0 +1,33 @@
1
+ require 'rubygems'
2
+
3
+ require 'sinatra'
4
+ require 'sinatra/test/unit'
5
+ require 'shoulda'
6
+
7
+ require 'chicago'
8
+ require 'chicago/shoulda'
9
+
10
+ # JSON Stuff
11
+ get "/json_bait" do
12
+ status(201)
13
+ json_response({:foo => "bar"})
14
+ end
15
+
16
+ # CSS Stuff
17
+
18
+ catch_all_css
19
+ template :foo do
20
+ ".bar\n :display none"
21
+ end
22
+
23
+ catch_all_css('/css')
24
+ template :goo do
25
+ ".car\n :display some"
26
+ end
27
+
28
+ # Getting obvious
29
+
30
+ get_obvious 'baz'
31
+ template :baz do
32
+ "Whatever man. That's just like, your opinion."
33
+ end
metadata ADDED
@@ -0,0 +1,70 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: thumblemonks-chicago
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Justin Knowlden
8
+ - Gabriel Gironda
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+
13
+ date: 2008-12-05 00:00:00 -08:00
14
+ default_executable:
15
+ dependencies: []
16
+
17
+ description: Sinatra runtime and testing extensions used commonly by Thumblemonks. For example, :json_response, which turns an object into JSON and sets the content-type appropriately.
18
+ email:
19
+ - gus@gusg.us
20
+ - gabriel.gironda@gmail.com
21
+ executables: []
22
+
23
+ extensions: []
24
+
25
+ extra_rdoc_files:
26
+ - HISTORY.txt
27
+ - README.markdown
28
+ files:
29
+ - HISTORY.txt
30
+ - MIT-LICENSE
31
+ - README.markdown
32
+ - Rakefile
33
+ - chicago.gemspec
34
+ - lib/chicago.rb
35
+ - lib/chicago/application.rb
36
+ - lib/chicago/helpers.rb
37
+ - lib/chicago/responders.rb
38
+ - lib/chicago/shoulda.rb
39
+ - lib/chicago/shoulda/sinatra.rb
40
+ has_rdoc: false
41
+ homepage: http://github.com/thumblemonks/chicago/tree/master
42
+ post_install_message:
43
+ rdoc_options:
44
+ - --main
45
+ - README.markdown
46
+ require_paths:
47
+ - lib
48
+ required_ruby_version: !ruby/object:Gem::Requirement
49
+ requirements:
50
+ - - ">="
51
+ - !ruby/object:Gem::Version
52
+ version: "0"
53
+ version:
54
+ required_rubygems_version: !ruby/object:Gem::Requirement
55
+ requirements:
56
+ - - ">="
57
+ - !ruby/object:Gem::Version
58
+ version: "0"
59
+ version:
60
+ requirements: []
61
+
62
+ rubyforge_project:
63
+ rubygems_version: 1.2.0
64
+ signing_key:
65
+ specification_version: 2
66
+ summary: Sinatra runtime and testing extensions used commonly by Thumblemonks
67
+ test_files:
68
+ - test/application_test.rb
69
+ - test/responders_test.rb
70
+ - test/test_helper.rb