big_band 0.2.1

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.
Files changed (54) hide show
  1. data/LICENSE +27 -0
  2. data/README.rdoc +303 -0
  3. data/README.rdoc.erb +39 -0
  4. data/Rakefile +129 -0
  5. data/big_band.gemspec +29 -0
  6. data/example/example.rb +13 -0
  7. data/example/views/index.haml +8 -0
  8. data/example/views/layout.haml +2 -0
  9. data/example/views/stylesheets/_base.sass +1 -0
  10. data/example/views/stylesheets/screen.sass +12 -0
  11. data/lib/big_band/advanced_routes.rb +184 -0
  12. data/lib/big_band/basic_extensions.rb +176 -0
  13. data/lib/big_band/compass/big_band.rb +4 -0
  14. data/lib/big_band/compass/stylesheets/_big_band.sass +1 -0
  15. data/lib/big_band/compass/stylesheets/big_band/_blueprint.sass +1 -0
  16. data/lib/big_band/compass/stylesheets/big_band/_utilities.sass +6 -0
  17. data/lib/big_band/compass/stylesheets/big_band/blueprint/_html5.sass +4 -0
  18. data/lib/big_band/compass/stylesheets/big_band/layouts/_inspector.sass +103 -0
  19. data/lib/big_band/compass/stylesheets/big_band/utilities/_border_radius.sass +27 -0
  20. data/lib/big_band/compass/stylesheets/big_band/utilities/_css3_prefix.sass +14 -0
  21. data/lib/big_band/compass/stylesheets/big_band/utilities/_fancy_buttons.sass +62 -0
  22. data/lib/big_band/compass/stylesheets/big_band/utilities/_html5.sass +3 -0
  23. data/lib/big_band/compass.rb +94 -0
  24. data/lib/big_band/files/overlay-button.png +0 -0
  25. data/lib/big_band/integration/bacon.rb +10 -0
  26. data/lib/big_band/integration/monk.rb +26 -0
  27. data/lib/big_band/integration/rake.rb +60 -0
  28. data/lib/big_band/integration/rspec.rb +11 -0
  29. data/lib/big_band/integration/test/spec.rb +2 -0
  30. data/lib/big_band/integration/test/unit.rb +2 -0
  31. data/lib/big_band/integration/test.rb +42 -0
  32. data/lib/big_band/integration/test_spec.rb +8 -0
  33. data/lib/big_band/integration/test_unit.rb +10 -0
  34. data/lib/big_band/integration/yard.rb +104 -0
  35. data/lib/big_band/integration.rb +42 -0
  36. data/lib/big_band/more_helpers.rb +50 -0
  37. data/lib/big_band/more_server/rainbows.rb +13 -0
  38. data/lib/big_band/more_server/unicorn.rb +28 -0
  39. data/lib/big_band/more_server.rb +14 -0
  40. data/lib/big_band/reloader.rb +113 -0
  41. data/lib/big_band/sass.rb +28 -0
  42. data/lib/big_band/version.rb +3 -0
  43. data/lib/big_band/web_inspector.rb +178 -0
  44. data/lib/big_band.rb +239 -0
  45. data/lib/big_bang.rb +6 -0
  46. data/lib/yard-sinatra.rb +2 -0
  47. data/spec/big_band/advanced_routes_spec.rb +70 -0
  48. data/spec/big_band/basic_extensions_spec.rb +39 -0
  49. data/spec/big_band/more_server_spec.rb +7 -0
  50. data/spec/big_band/sass_spec.rb +21 -0
  51. data/spec/spec.opts +5 -0
  52. data/spec/spec_helper.rb +4 -0
  53. data/yard-sinatra.gemspec +24 -0
  54. metadata +167 -0
@@ -0,0 +1,178 @@
1
+ require "sinatra/base"
2
+ require "monkey-lib"
3
+ require "big_band/compass"
4
+
5
+ class BigBand < Sinatra::Base
6
+
7
+ # The WebInspector allowes you to inspect a running Sinatra app.
8
+ # Just browse http://localhost:4567/\_\_inspect\_\_
9
+ #
10
+ # Per default this will only be activated in development mode.
11
+ module WebInspector
12
+
13
+ attr_reader :middleware
14
+
15
+ class Middleware < Sinatra::Base
16
+
17
+ attr_accessor :sinatra_app
18
+ use_in_file_templates! __FILE__
19
+ register BasicExtensions
20
+ set :app_file, __FILE__
21
+
22
+ # If this is a git project, then it returns the path to the .git directory.
23
+ def git_directory
24
+ @git_directory ||= root_glob(".{,.,./..,./../..}/.git").first
25
+ end
26
+
27
+ # Whether or not this is a git project.
28
+ def git?
29
+ !!git_directory
30
+ end
31
+
32
+ # Figures out some URLs to public git hosts by parsing the remote urls from the git config.
33
+ # Currently detects: GitHub, Codaset and Gitorious.
34
+ def git_remotes
35
+ @git_remotes ||= (File.read(git_directory / :config).scan(/\s*url\s*=\s*(.*)\n/).flatten.collect do |url|
36
+ case url
37
+ when %r{(github.com)[:/](.+)/(.+)/?\.git$} then [$3, "GitHub", "http://#$1/#$2/#$3", "http://#$1"]
38
+ when %r{(codaset.com)[:/](.+)/(.+)?\.git$} then [$3, "Codaset", "http://#$1/#$2/#$3", "http://#$1"]
39
+ when %r{(gitorious.org)[:/](.+)/.+/?\.git$} then [$2, "Gitorious", "http://#$1/#$2", "http://#$1"]
40
+ end
41
+ end).compact
42
+ end
43
+
44
+ # Recent git log.
45
+ def git_log
46
+ @git_format ||= begin
47
+ line = ["<a href='mailto:%ae'>%an</a>", "%s", "<date>%ai</date>"].map { |e| "<td>#{e}</td>" }.join
48
+ "<tr>#{line}</tr>"
49
+ end
50
+ %x[git log -50 --pretty=format:"#{@git_format}"]
51
+ end
52
+
53
+ # webinspector stylesheet.
54
+ get "/__inspect__/screen.css" do
55
+ content_type 'text/css', :charset => 'utf-8'
56
+ sass :stylesheet, ::Compass.sass_engine_options
57
+ end
58
+
59
+ # Route for inspection. Currently we display all information on a single page. In case the amount of data
60
+ # increases, we might split this on multiple pages. Also, this would ease hooking own data into the front-end.
61
+ get "/__inspect__/?" do
62
+ ruby_env = %w[RUBY_VERSION RUBY_DESCRIPTION RUBY_PATCHLEVEL RUBY_PLATFORM RUBY_ENGINE RUBY_ENGINE_VERSION]
63
+ ruby_env.map! { |var| [var, eval("#{var}.inspect if defined? #{var}")] }
64
+ haml :inspect, {}, :ruby_env => ruby_env
65
+ end
66
+
67
+ end
68
+
69
+ def self.registered(klass)
70
+ klass.register BasicExtensions
71
+ klass.register AdvancedRoutes
72
+ klass.use(Middleware) { |m| m.sinatra_app = klass }
73
+ end
74
+
75
+ end
76
+ end
77
+
78
+ __END__
79
+
80
+ @@layout
81
+ !!!
82
+ %html
83
+ %head
84
+ %meta{:charset=>"utf-8"}/
85
+ %link{:rel => "stylesheet", :href => "/__inspect__/screen.css", :type => "text/css"}/
86
+ %title= "#{sinatra_app.name}.inspect"
87
+ %body
88
+ %header
89
+ %h1= "#{sinatra_app.name}.inspect"
90
+ Generated on
91
+ %date= Time.now
92
+ %nav
93
+ %a{:href => "/__inspect__/#routes" } Routes
94
+ %a{:href => "/__inspect__/#extensions" } Extensions
95
+ %a{:href => "/__inspect__/#middleware" } Middleware
96
+ %a{:href => "/__inspect__/#system" } System
97
+ - if git?
98
+ %a{:href => "/__inspect__/#git_log" } Git Log
99
+ %article
100
+ !=yield
101
+ %footer
102
+ powered by
103
+ %a{:href => "http://www.sinatrarb.com"} Sinatra
104
+ and
105
+ %a{:href => "http://github.com/rkh/big_band"} BigBand
106
+
107
+ @@stylesheet
108
+ @import big_band/layouts/inspector.sass
109
+ +layout_inspector
110
+
111
+ @@inspect
112
+
113
+ %a{ :name => "routes" }
114
+ %h2 Routes
115
+ %table
116
+ %tr
117
+ %th Verb
118
+ %th Pattern
119
+ %th File
120
+ %th Keys
121
+ %th Conditions
122
+ - sinatra_app.each_route do |route|
123
+ %tr
124
+ %td= route.verb
125
+ %td= route.pattern.inspect
126
+ %td
127
+ - if route.file?
128
+ = route.file
129
+ %i= "(line #{route.line})" if route.line
130
+ %td= route.keys.map { |e| e.inspect }.join ", "
131
+ %td= route.conditions.map { |e| e.inspect }.join ", "
132
+
133
+ %a{ :name => "extensions" }
134
+ %h2 Extensions
135
+ %table
136
+ %tr
137
+ %th Extension
138
+ %th Status
139
+ - sinatra_app.extensions.each do |extension|
140
+ %tr
141
+ %td= extension.name
142
+ %td= extension.status if extension.respond_to? :status
143
+
144
+ %a{ :name => "middleware" }
145
+ %h2 Middleware
146
+ %table
147
+ %tr
148
+ %th Middleware
149
+ %th Arguments
150
+ %th Block Given
151
+ - sinatra_app.middleware.each do |name, arguments, block|
152
+ %tr
153
+ %td= name
154
+ %td= arguments.map { |e| e.inspect }.join ", "
155
+ %td= block ? "yes" : "no"
156
+
157
+ %a{ :name => "system" }
158
+ %h2 System
159
+ %table
160
+ %tr
161
+ %th Variable
162
+ %th Value
163
+ - ruby_env.each do |key, value|
164
+ %tr
165
+ %td= key
166
+ %td= value
167
+
168
+ - if git?
169
+ %a{ :name => "git_log" }
170
+ %h2 Recent Git Log
171
+ - git_remotes.each do |name, service, url, service_url|
172
+ .note Visit <a href="#{url}">#{name}</a> on <a href="#{service_url}">#{service}</a>.
173
+ %table
174
+ %tr
175
+ %th Author
176
+ %th Subject
177
+ %th Date
178
+ != git_log
data/lib/big_band.rb ADDED
@@ -0,0 +1,239 @@
1
+ require "sinatra/base"
2
+ #require "monkey-lib"
3
+ require "set"
4
+
5
+ # BigBand is a collection of Sinatra extensions and offers better sinatra integration for common tools.
6
+ # It is pluggable and each extension can be used in stand alone mode.
7
+ #
8
+ # The main features are:
9
+ # * Routes as first class objects
10
+ # * Better handling of #set: Merges hashes, more hooks
11
+ # * Better compass integration
12
+ # * Rails-like helpers, like content_for
13
+ # * Unicorn and Rainbows integration
14
+ # * Smart code reloader only reloading changed files and getting rid of old routes
15
+ # * Sass extensions
16
+ # * Routes for inspection in development mode
17
+ # * Helpers and configuration for Bacon, RSpec, Test::Spec and Test::Unit
18
+ # * Tasks listing all routes for Monk and Rake.
19
+ # * YARD: Add Sinatra routes to generated documentation
20
+ #
21
+ # Planned features:
22
+ # * More template helpers
23
+ # * ORM integration
24
+ # * Configuration handling
25
+ # * MSpec integration
26
+ #
27
+ # == Usage
28
+ #
29
+ # Using all BigBand features:
30
+ #
31
+ # require "big_band"
32
+ # class Example < BigBand
33
+ # # Yay, BigBand!
34
+ # end
35
+ #
36
+ # Or for the lazy folks (read: you would don't subclass Sinatra::Base on your own):
37
+ #
38
+ # require "sinatra"
39
+ # require "big_band"
40
+ # # Yay, BigBand!
41
+ #
42
+ # Using just your favorite BigBand features:
43
+ #
44
+ # require "big_band"
45
+ # class Example < Sinatra::Base
46
+ # register BigBand::SomeFeature
47
+ # # Yay, BigBand::SomeFeature!
48
+ # end
49
+ #
50
+ # Or, if you like a more handy syntax:
51
+ #
52
+ # require "big_band"
53
+ # class Example < BigBand :SomeFeature, MyStuff::Extension, :development => :DevelopmentOnlyFeature
54
+ # # Yay, BigBand::SomeFeature!
55
+ # # Yay, MyStuff::Extension!
56
+ # # Yay, BigBand::DevelopmentOnlyFeature, if this is development mode!
57
+ # end
58
+ #
59
+ # Loading all but one feature:
60
+ #
61
+ # require "big_band"
62
+ # class Example < BigBand :except => :SomeFeature
63
+ # # Yay, all but BigBand::SomeFeature!
64
+ # end
65
+ #
66
+ # Or just your favorite feature without you subclassing Sinatra::Base manually:
67
+ #
68
+ # require "sinatra"
69
+ # require "big_band/some_feature"
70
+ # Sinatra::Application.register BigBand::SomeFeature
71
+ # # Yay, BigBand::SomeFeature!
72
+ class BigBand < Sinatra::Base
73
+
74
+ # Classes generated by BigBand.generate_class will be extended
75
+ # with this class.
76
+ module Generated
77
+
78
+ attr_reader :big_band_extensions, :big_band_constructor
79
+
80
+ # Adds extensions to subclass
81
+ def inherited(klass)
82
+ super
83
+ BigBand.applications << klass
84
+ BigBand.load_extensions(klass, *big_band_extensions)
85
+ end
86
+
87
+ # Use Generated#name for inspection.
88
+ def inspect
89
+ name
90
+ end
91
+
92
+ # Nice output for inspect and friends:
93
+ # foo = Class.new BigBand(:SomeExtension)
94
+ # foo.name # => BigBand(:SomeExtension)
95
+ # Foo = foo
96
+ # foo.name # => Foo
97
+ def name
98
+ real_name = super
99
+ real_name.empty? ? big_band_constructor : real_name
100
+ end
101
+
102
+ end
103
+
104
+ extend Generated
105
+
106
+ def self.applications
107
+ @applications ||= []
108
+ end
109
+
110
+ # Extensions to load.
111
+ def self.big_band_extensions
112
+ default_extensions
113
+ end
114
+
115
+ # Generates a class for the given extensions. Note that this class is ment to be
116
+ # subclassed rather than used directly. Given extensione will only be available for
117
+ # subclasses.
118
+ #
119
+ # class Foo < BigBand.generate_class(:except => :SomeExtension)
120
+ # end
121
+ def self.generate_class(*options)
122
+ @generated_classes ||= {setify_parameters([]) => BigBand}
123
+ @generated_classes[setify_parameters(options)] ||= Class.new(Sinatra::Base) do
124
+ extend BigBand::Generated
125
+ @big_band_extensions = options
126
+ @big_band_constructor = "BigBand(#{options.map { |o| o.inspect}.join ", "})"
127
+ end
128
+ end
129
+
130
+ # Adds extensions to a Sinatra application:
131
+ #
132
+ # class MyApp < Sinatra::Base
133
+ # end
134
+ #
135
+ # BigBand.load_extensions MyApp, :SomeExtension, :development => :AnotherExtension
136
+ def self.load_extensions(klass, *extensions)
137
+ extensions = default_extensions if extensions.empty?
138
+ extensions.flatten.each do |extension|
139
+ if extension.respond_to? :each_pair
140
+ extension.each_pair do |key, value|
141
+ values = [value].flatten
142
+ case key
143
+ when :production, :test, :development
144
+ klass.configure(key) { BigBand.load_extensions(klass, *values) }
145
+ when :except
146
+ exts = @nonenv_extensions.reject { |e| values.include? e }
147
+ exts << @env_extensions.inject({}) do |accepted, (env, list)|
148
+ accepted.merge env => list.reject { |e| values.include? e }
149
+ end
150
+ load_extensions(klass, *exts)
151
+ else raise ArgumentError, "unknown key #{key.inspect}"
152
+ end
153
+ end
154
+ else
155
+ klass.register module_for(extension)
156
+ end
157
+ end
158
+ end
159
+
160
+ # Returns the module for a given extension identifier:
161
+ #
162
+ # BigBand.module_for :BasicExtension # => BigBand::BasicExtension
163
+ # BigBand.module_for Array # => Array
164
+ # BigBand.module_for "Foo::Bar" # => BigBand::Foo::Bar or Foo::Bar or raises an exception
165
+ def self.module_for(extension)
166
+ case extension
167
+ when Module then extension
168
+ when String then extension.split("::").inject(self) { |klass, name| klass.const_get name }
169
+ when Symbol then const_get(extension)
170
+ end
171
+ end
172
+
173
+ def self.setify_parameters(args)
174
+ case args
175
+ when Hash then args.inject({}) { |h,(k,v)| h k => setify_parameters(v) }
176
+ when Array then args.flatten.to_set
177
+ else args
178
+ end
179
+ end
180
+
181
+ # Default extensions that will be used whenever you subclass BigBand. You can also use this to create
182
+ # your own extension collection:
183
+ #
184
+ # class MyExtensions < BigBand(:except => :ExtensionIDontLike)
185
+ # default_extension FunkyExtension, :development => DevExtension
186
+ # end
187
+ #
188
+ # Note: If given a string or symbol, it will also try to setup an autoloader:
189
+ #
190
+ # MyExtensions.default_extensions :Foo
191
+ def self.default_extensions(*extensions)
192
+ return @default_extensions if @default_extensions and extensions.empty?
193
+ @nonenv_extensions ||= []
194
+ @env_extensions ||= {:development => []}
195
+ extensions.each do |extension|
196
+ if extension.respond_to? :each_pair
197
+ extension.each_pair { |env, exts| (@env_extensions[env] ||= []).push(*exts) }
198
+ else
199
+ @nonenv_extensions.push(*extension)
200
+ end
201
+ end
202
+ @default_extensions = [@nonenv_extensions, @env_extensions].flatten
203
+ end
204
+
205
+ def self.default_extension(name, path = nil, env = nil)
206
+ autoload name, path if path
207
+ default_extensions(env ? {env => name} : name)
208
+ end
209
+
210
+ default_extension :AdvancedRoutes, "big_band/advanced_routes"
211
+ default_extension :BasicExtensions, "big_band/basic_extensions"
212
+ default_extension :Compass, "big_band/compass"
213
+ default_extension :MoreHelpers, "big_band/more_helpers"
214
+ default_extension :MoreServer, "big_band/more_server"
215
+ default_extension :Reloader, "big_band/reloader", :development
216
+ default_extension :Sass, "big_band/sass"
217
+ default_extension :WebInspector, "big_band/web_inspector", :development
218
+
219
+ end
220
+
221
+ # Shorthand for BigBand.generate_class
222
+ def BigBand(*options)
223
+ BigBand.generate_class(*options)
224
+ end
225
+
226
+ module Sinatra
227
+ module Delegator
228
+ # Hooks into Sinatra to allow easy integration with "require 'sinatra'".
229
+ def self.included(klass)
230
+ BigBand.inherited(Sinatra::Application)
231
+ Sinatra::Application.extensions.each do |ext|
232
+ delegate(*ext.delegations) if ext.respond_to? :delegations
233
+ end
234
+ end
235
+ end
236
+ end
237
+
238
+ # If require "sinatra" came before require "big_band" Sinatra::Delegator.included has not been called.
239
+ Sinatra::Delegator.included(self) if is_a? Sinatra::Delegator
data/lib/big_bang.rb ADDED
@@ -0,0 +1,6 @@
1
+ require "big_band"
2
+
3
+ unless defined? BigBang
4
+ warn "It is called BigBand, not BigBang!"
5
+ BigBang = BigBand
6
+ end
@@ -0,0 +1,2 @@
1
+ # This is a dummy file to hook into YARD.load_plugins
2
+ require "big_band/integration/yard"
@@ -0,0 +1,70 @@
1
+ require File.expand_path(__FILE__ + "/../../spec_helper.rb")
2
+
3
+ describe BigBand::AdvancedRoutes do
4
+ before { app :AdvancedRoutes }
5
+
6
+ [:get, :head, :post, :put, :delete].each do |verb|
7
+
8
+ describe "HTTP #{verb.to_s.upcase}" do
9
+
10
+ describe "activation" do
11
+
12
+ it "is able to deactivate routes from the outside" do
13
+ route = define_route(verb, "/foo") { "bar" }
14
+ route.should be_active
15
+ browse_route(verb, "/foo").should be_ok
16
+ route.deactivate
17
+ route.should_not be_active
18
+ browse_route(verb, "/foo").should_not be_ok
19
+ end
20
+
21
+ it "is able to deacitvate routes from a before filter" do
22
+ route = define_route(verb, "/foo") { "bar" }
23
+ app.before { route.deactivate }
24
+ route.should be_active
25
+ browse_route(verb, "/foo").should_not be_ok
26
+ route.should_not be_active
27
+ end
28
+
29
+ it "is able to reactivate deactivated routes" do
30
+ route = define_route(verb, "/foo") { "bar" }
31
+ route.deactivate
32
+ route.activate
33
+ route.should be_active
34
+ browse_route(verb, "/foo").should be_ok
35
+ end
36
+
37
+ end
38
+
39
+ describe "inspection" do
40
+ it "exposes app, path, file, verb, pattern, " do
41
+ route = define_route(verb, "/foo") { }
42
+ route.app.should == app
43
+ route.path.should == "/foo"
44
+ route.file.should == __FILE__.expand_path
45
+ route.verb.should == verb.to_s.upcase
46
+ route.pattern.should == route[0]
47
+ route.keys.should == route[1]
48
+ route.conditions.should == route[2]
49
+ route.block.should == route[3]
50
+ end
51
+ end
52
+
53
+ describe "promotion" do
54
+ it "preffers promoted routes over earlier defined routes" do
55
+ next if verb == :head # cannot check body for head
56
+ bar = define_route(verb, "/foo") { "bar" }
57
+ baz = define_route(verb, "/foo") { "baz" }
58
+ browse_route(verb, "/foo").body.should == "bar"
59
+ baz.promote
60
+ browse_route(verb, "/foo").body.should == "baz"
61
+ bar.promote
62
+ browse_route(verb, "/foo").body.should == "bar"
63
+ end
64
+ end
65
+
66
+ end
67
+
68
+ end
69
+
70
+ end
@@ -0,0 +1,39 @@
1
+ require File.expand_path(__FILE__ + "/../../spec_helper.rb")
2
+
3
+ describe BigBand::BasicExtensions do
4
+
5
+ before { app :BasicExtensions }
6
+
7
+ describe "set" do
8
+
9
+ it "adds hooks to Sinatra::Base#set" do
10
+ extension = Module.new
11
+ extension.should_receive(:set_foo).with(app)
12
+ extension.should_receive(:set_value).with(app, :foo)
13
+ app.register extension
14
+ app.set :foo, 42
15
+ end
16
+
17
+ it "allows passing a block" do
18
+ app.set(:foo) { 42 }
19
+ app.foo.should == 42
20
+ end
21
+
22
+ it "merges hash values" do
23
+ app.set :foo, :bar => 42
24
+ app.set :foo, :baz => 23
25
+ app.foo[:bar].should == 42
26
+ app.foo[:baz].should == 23
27
+ end
28
+
29
+ end
30
+
31
+ describe "register" do
32
+ it "registers an extension only once" do
33
+ extension = Module.new
34
+ extension.should_receive(:registered).once.with(app)
35
+ 10.times { app.register extension }
36
+ end
37
+ end
38
+
39
+ end
@@ -0,0 +1,7 @@
1
+ require File.expand_path(__FILE__ + "/../../spec_helper.rb")
2
+
3
+ describe BigBand::MoreServer do
4
+ before { app :MoreServer }
5
+ it("should offer unicorn") { app.server.should include("unicorn") }
6
+ it("should offer rainbows") { app.server.should include("rainbows") }
7
+ end
@@ -0,0 +1,21 @@
1
+ require File.expand_path(__FILE__ + "/../../spec_helper.rb")
2
+
3
+ describe BigBand::Sass do
4
+
5
+ def evaluate_sass(value)
6
+ Sass::Script::Parser.parse(value, 0, 0).perform(Sass::Environment.new).to_s
7
+ end
8
+
9
+ it "returns the smaller value for min" do
10
+ evaluate_sass("min(10px, 20px)").should == evaluate_sass("10px")
11
+ evaluate_sass("min(50%, 10%)").should == evaluate_sass("10%")
12
+ evaluate_sass("min(42, 42)").should == evaluate_sass("42")
13
+ end
14
+
15
+ it "returns the greater value for max" do
16
+ evaluate_sass("max(10px, 20px)").should == evaluate_sass("20px")
17
+ evaluate_sass("max(50%, 10%)").should == evaluate_sass("50%")
18
+ evaluate_sass("max(42, 42)").should == evaluate_sass("42")
19
+ end
20
+
21
+ end
data/spec/spec.opts ADDED
@@ -0,0 +1,5 @@
1
+ --colour
2
+ --format progress
3
+ --loadby mtime
4
+ --reverse
5
+ -b
@@ -0,0 +1,4 @@
1
+ ENV['RACK_ENV'] = 'test'
2
+
3
+ $LOAD_PATH.unshift File.expand_path(__FILE__ + "../../lib")
4
+ require "big_band/integration/rspec"
@@ -0,0 +1,24 @@
1
+ $LOAD_PATH.unshift "lib"
2
+ require "lib/big_band/version"
3
+
4
+ YARD_SINATRA_SPEC = Gem::Specification.new do |s|
5
+
6
+ s.name = "yard-sinatra"
7
+ s.version = BigBand::VERSION
8
+ s.date = BigBand::DATE
9
+ s.author = "Konstantin Haase"
10
+ s.email = "konstantin.mailinglists@googlemail.com"
11
+ s.homepage = "http://github.com/rkh/big_band"
12
+ s.platform = Gem::Platform::RUBY
13
+ s.summary = "YARD plugin for parsing sinatra routes"
14
+ s.files = ["yard-sinatra.gemspec", "lib/yard-sinatra.rb", "lib/big_band/version.rb"]
15
+ s.require_paths = ['lib']
16
+ s.description = s.summary + " See README.rdoc for more infos."
17
+ s.has_rdoc = false
18
+
19
+ s.add_dependency "big_band", "= #{BigBand::VERSION}"
20
+
21
+ s.specification_version = 2 if s.respond_to? :specification_version=
22
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
23
+
24
+ end