thumblemonks-chicago 0.1.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/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