big_band 0.2.1

Sign up to get free protection for your applications and to get access to all the features.
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
data/LICENSE ADDED
@@ -0,0 +1,27 @@
1
+ copyright (c) 2009 Konstantin Haase. All rights reserved.
2
+
3
+ Developed by: Konstantin Haase
4
+ http://github.com/rkh/big_band
5
+
6
+ Permission is hereby granted, free of charge, to any person obtaining a copy
7
+ of this software and associated documentation files (the "Software"), to
8
+ deal with the Software without restriction, including without limitation the
9
+ rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
10
+ sell copies of the Software, and to permit persons to whom the Software is
11
+ furnished to do so, subject to the following conditions:
12
+ 1. Redistributions of source code must retain the above copyright notice,
13
+ this list of conditions and the following disclaimers.
14
+ 2. Redistributions in binary form must reproduce the above copyright
15
+ notice, this list of conditions and the following disclaimers in the
16
+ documentation and/or other materials provided with the distribution.
17
+ 3. Neither the name of Konstantin Haase, nor the names of other contributors
18
+ may be used to endorse or promote products derived from this Software without
19
+ specific prior written permission.
20
+
21
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
22
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
23
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
24
+ CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
25
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
26
+ FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
27
+ WITH THE SOFTWARE.
data/README.rdoc ADDED
@@ -0,0 +1,303 @@
1
+ = BigBand 0.2.1
2
+ BigBand is a collection of Sinatra extensions and offers better sinatra integration for common tools.
3
+ It is pluggable and each extension can be used in stand alone mode.
4
+
5
+ The main features are:
6
+ * Routes as first class objects
7
+ * Better handling of #set: Merges hashes, more hooks
8
+ * Better compass integration
9
+ * Rails-like helpers, like content_for
10
+ * Unicorn and Rainbows integration
11
+ * Smart code reloader only reloading changed files and getting rid of old routes
12
+ * Sass extensions
13
+ * Routes for inspection in development mode
14
+ * Helpers and configuration for Bacon, RSpec, Test::Spec and Test::Unit
15
+ * Tasks listing all routes for Monk and Rake.
16
+ * YARD: Add Sinatra routes to generated documentation
17
+
18
+ Planned features:
19
+ * More template helpers
20
+ * ORM integration
21
+ * Configuration handling
22
+ * MSpec integration
23
+
24
+ == Usage
25
+
26
+ Using all BigBand features:
27
+
28
+ require "big_band"
29
+ class Example < BigBand
30
+ # Yay, BigBand!
31
+ end
32
+
33
+ Or for the lazy folks (read: you would don't subclass Sinatra::Base on your own):
34
+
35
+ require "sinatra"
36
+ require "big_band"
37
+ # Yay, BigBand!
38
+
39
+ Using just your favorite BigBand features:
40
+
41
+ require "big_band"
42
+ class Example < Sinatra::Base
43
+ register BigBand::SomeFeature
44
+ # Yay, BigBand::SomeFeature!
45
+ end
46
+
47
+ Or, if you like a more handy syntax:
48
+
49
+ require "big_band"
50
+ class Example < BigBand :SomeFeature, MyStuff::Extension, :development => :DevelopmentOnlyFeature
51
+ # Yay, BigBand::SomeFeature!
52
+ # Yay, MyStuff::Extension!
53
+ # Yay, BigBand::DevelopmentOnlyFeature, if this is development mode!
54
+ end
55
+
56
+ Loading all but one feature:
57
+
58
+ require "big_band"
59
+ class Example < BigBand :except => :SomeFeature
60
+ # Yay, all but BigBand::SomeFeature!
61
+ end
62
+
63
+ Or just your favorite feature without you subclassing Sinatra::Base manually:
64
+
65
+ require "sinatra"
66
+ require "big_band/some_feature"
67
+ Sinatra::Application.register BigBand::SomeFeature
68
+ # Yay, BigBand::SomeFeature!
69
+
70
+ == Extensions
71
+
72
+ === AdvancedRoutes
73
+
74
+ AdvancedRoutes makes routes first class objects in Sinatra:
75
+
76
+ require "sinatra"
77
+ require "big_band"
78
+
79
+ admin_route = get "/admin" do
80
+ administrate_stuff
81
+ end
82
+
83
+ before do
84
+ # Let's deactivate the route if we have no password file.
85
+ if File.exists? "admin_password"
86
+ admin_route.activate
87
+ else
88
+ admin_route.deactivate
89
+ end
90
+ end
91
+
92
+ first_route = get "/:name" do
93
+ # stuff
94
+ end
95
+
96
+ other_route = get "/foo_:name" do
97
+ # other stuff
98
+ end
99
+
100
+ # Unfortunatly first_route will catch all the requests other_route would
101
+ # have gotten, since it has been defined first. But wait, we can fix this!
102
+ other_route.promote
103
+
104
+ === BasicExtensions
105
+
106
+ Basic Sinatra extension (mainly extending Sinatra's standard methods, like set or register).
107
+ Also it features a more advanced path guessing than Sinatra::Base.
108
+ Normally you do not have to register this module manually, as the other extensions will do so
109
+ if necessary.
110
+
111
+ === Compass
112
+
113
+ Integrates the Compass stylesheet framework with Sinatra.
114
+
115
+ Usage without doing something:
116
+
117
+ require "big_band"
118
+ class Foo < BigBand; end
119
+
120
+ If you create a directory called views/stylesheets and place your
121
+ sass files in there, there you go. Just call stylesheet(name) form
122
+ your view to get the correct stylesheet tag. The URL for your
123
+ stylesheets will be /stylesheets/:name.css.
124
+
125
+ Of course you can use any other setup. Say, you want to store your
126
+ stylesheets in views/css and want the URL to be /css/:name.css:
127
+
128
+ class Foo < BigBand
129
+ get_compass("css")
130
+ end
131
+
132
+ But what about more complex setups?
133
+
134
+ class Foo < BigBand
135
+ set :compass, :sass_dir => "/foo/bar/blah"
136
+ get_compass("/foo/:name.css") do
137
+ compass :one_stylesheet
138
+ end
139
+ end
140
+
141
+ Note that already generated routes will be deactivated by calling
142
+ get_compass again.
143
+
144
+ === MoreHelpers
145
+
146
+ Adds more helper methods (more docs coming soon).
147
+
148
+ === MoreServer
149
+
150
+ Adds more servers to Sinatra::Base#run! (currently unicorn and rainbows).
151
+
152
+ === Reloader
153
+
154
+ Advanced reloader for sinatra. Reloads only files that have changed and automatically
155
+ detects orphaned routes that have to be removed. Files defining routes will be added
156
+ to the reload list per default. Avoid reloading with dont_reload. Add other files to
157
+ the reload list with also_reload.
158
+
159
+ Usage:
160
+
161
+ require "big_band"
162
+ class Foo < Sinatra::Base
163
+ configure(:development) do
164
+ register BigBand::Reloader
165
+ also_reload "app/models/*.rb"
166
+ dont_reload "lib/**/*.rb"
167
+ end
168
+ end
169
+
170
+ Per default this will only be acitvated in development mode.
171
+
172
+ === Sass
173
+
174
+ BigBand::Sass extends SassScript with more functions like min or max.
175
+
176
+ Example:
177
+ .someClass
178
+ width = max(!default_width - 10px, 200px)
179
+
180
+ This can be used without BigBand or even Sinatra.
181
+
182
+ === WebInspector
183
+
184
+ The WebInspector allowes you to inspect a running Sinatra app.
185
+ Just browse http://localhost:4567/\_\_inspect\_\_
186
+
187
+ Per default this will only be activated in development mode.
188
+
189
+
190
+ == Tool Integration
191
+
192
+ === Bacon
193
+
194
+ Some Bacon example and description goes here.
195
+
196
+ === Monk
197
+
198
+ In your Thorfile, place:
199
+
200
+ require "big_band/integration/monk"
201
+ class Monk < Thor
202
+ routes_task :list_routes
203
+ end
204
+
205
+ Now, running 'monk list_routes' in you project directory should
206
+ give you a list of all your routes.
207
+
208
+ === Rake
209
+
210
+ In your Rakefile, do the following:
211
+
212
+ require "big_band/integration/rake"
213
+ include BigBand::Integration::Rake
214
+
215
+ RoutesTask.new
216
+
217
+ then you can run 'rake routes' from your
218
+ project directory and it will list all routes
219
+ of your app. Per default it will scan for routes
220
+ defined in ruby files in the directories lib, app,
221
+ routes, models, views, and controllers (ignoring
222
+ non-existant directories, of course). You can change
223
+ that behavior by setting +source+ to another pattern:
224
+
225
+ RoutesTask.new { |t| t.source = "**/*.rb" }
226
+
227
+ However, you may also just pass in a Sinatra app, so it
228
+ will not have to scan through the source files:
229
+
230
+ require "my_app"
231
+ RoutesTask.new { |t| t.source = MyApp }
232
+
233
+ Keep in mind that a broken my_app in this case would also make
234
+ your Rakefile unusable.
235
+
236
+ Also, you may set another name for the task either by setting
237
+ the first argument or calling #name=:
238
+
239
+ RoutesTask.new(:some_routes) { |t| t.source = SomeApp }
240
+ RoutesTask.new do |t|
241
+ t.source = AnotherApp
242
+ t.name = :other_routes
243
+ end
244
+
245
+ === RSpec
246
+
247
+ Some RSpec example and description goes here.
248
+
249
+ === Test::Spec
250
+
251
+ Some TestSpec example and description goes here.
252
+
253
+ === Test::Unit
254
+
255
+ Some TestUnit example and description goes here.
256
+
257
+ === YARD
258
+
259
+ Some YARD example and description goes here.
260
+
261
+ == Running specs
262
+
263
+ rake spec
264
+
265
+ == Generating documentation
266
+
267
+ rake doc
268
+
269
+ == Known Issues
270
+ * Reloader: Needs some more love, but it should not cause any harm.
271
+ * YARD integration: Routes don't show up in list of all methods. Would prefer a routes list, anyway. Some YARD digging ahead.
272
+
273
+ == LICENSE
274
+ (MIT/BSD-style license, compatible with Ruby license and GPL)
275
+
276
+ copyright (c) 2009 Konstantin Haase. All rights reserved.
277
+
278
+ Developed by: Konstantin Haase
279
+ http://github.com/rkh/big_band
280
+
281
+ Permission is hereby granted, free of charge, to any person obtaining a copy
282
+ of this software and associated documentation files (the "Software"), to
283
+ deal with the Software without restriction, including without limitation the
284
+ rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
285
+ sell copies of the Software, and to permit persons to whom the Software is
286
+ furnished to do so, subject to the following conditions:
287
+ 1. Redistributions of source code must retain the above copyright notice,
288
+ this list of conditions and the following disclaimers.
289
+ 2. Redistributions in binary form must reproduce the above copyright
290
+ notice, this list of conditions and the following disclaimers in the
291
+ documentation and/or other materials provided with the distribution.
292
+ 3. Neither the name of Konstantin Haase, nor the names of other contributors
293
+ may be used to endorse or promote products derived from this Software without
294
+ specific prior written permission.
295
+
296
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
297
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
298
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
299
+ CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
300
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
301
+ FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
302
+ WITH THE SOFTWARE.
303
+
data/README.rdoc.erb ADDED
@@ -0,0 +1,39 @@
1
+ = BigBand <%= version %>
2
+ <%= docstring %>
3
+
4
+
5
+ == Extensions
6
+ <% extensions.each do |extension| %>
7
+
8
+ === <%= extension.name %>
9
+
10
+ <%= extension.docstring %>
11
+
12
+ <% end %>
13
+
14
+
15
+ == Tool Integration
16
+ <% integration.each do |tool| %>
17
+
18
+ === <%= tool.name %>
19
+
20
+ <%= tool.docstring %>
21
+
22
+ <% end %>
23
+
24
+ == Running specs
25
+
26
+ rake spec
27
+
28
+ == Generating documentation
29
+
30
+ rake doc
31
+
32
+ == Known Issues
33
+ * Reloader: Needs some more love, but it should not cause any harm.
34
+ * YARD integration: Routes don't show up in list of all methods. Would prefer a routes list, anyway. Some YARD digging ahead.
35
+
36
+ == LICENSE
37
+ (MIT/BSD-style license, compatible with Ruby license and GPL)
38
+
39
+ <%= File.read("LICENSE").gsub(/\n/, "\n ") %>
data/Rakefile ADDED
@@ -0,0 +1,129 @@
1
+ require "erb"
2
+ require "spec/rake/spectask"
3
+ require "rake/clean"
4
+ require "rake/rdoctask"
5
+ require "monkey-lib"
6
+ require "yard"
7
+
8
+ $LOAD_PATH.unshift __FILE__.dirname.expand_path / "lib"
9
+ require "big_band/integration/yard"
10
+ require "big_band/integration/rake"
11
+ require "big_band/version"
12
+
13
+ include BigBand::Integration::Rake
14
+ RoutesTask.new
15
+
16
+ task :default => "gems:build"
17
+ task :install => "gems:install"
18
+ task :test => :spec
19
+ task :clobber => "doc:clobber_rdoc"
20
+
21
+ CLEAN.include "**/*.rbc"
22
+ CLOBBER.include "*.gem", "README.rdoc"
23
+
24
+ Spec::Rake::SpecTask.new('spec') do |t|
25
+ t.spec_opts = %w[--options spec/spec.opts]
26
+ t.spec_files = Dir.glob 'spec/**/*_spec.rb'
27
+ end
28
+
29
+ TOOL_NAMES = { :Rspec => :RSpec, :Yard => :YARD, :TestSpec => :"Test::Spec", :TestUnit => :"Test::Unit" }
30
+
31
+ def yard(files)
32
+ YARD::Registry.load(Dir[files], true)
33
+ YARD::Registry.resolve(false, "BigBand")
34
+ end
35
+
36
+ def yard_children(ydoc, directory, defaults = {}, &block)
37
+ children = Dir.glob("#{directory}/*.rb").map { |f| f[(directory.size+1)..-4].to_const_string.to_sym }
38
+ children.select!(&block) if block
39
+ children.map! do |name|
40
+ rewritten_name = defaults[name] || name
41
+ ydoc.child(rewritten_name) or ydoc.child(name).tap { |c| c.name = rewritten_name unless c.nil? }
42
+ end
43
+ children.compact
44
+ end
45
+
46
+ def generate_readme(target = "README.rdoc", template = "README.rdoc.erb")
47
+ puts "generating #{target} from #{template}"
48
+ # HACK: loading other libraries later, for some strange heisenbug setting the docstring to an empty string later.
49
+ docstring = yard("lib/big_band.rb").docstring
50
+ ydoc = yard("lib/big_band/{**/,}*.rb")
51
+ extensions = yard_children(ydoc, "lib/big_band") { |n| n != :Integration }
52
+ integration = yard_children(ydoc.child(:Integration), "lib/big_band/integration", TOOL_NAMES) { |n| n != :Test }
53
+ version = BigBand::VERSION
54
+ File.open(target, "w") { |f| f << ERB.new(File.read(template), nil, "<>").result(binding) }
55
+ end
56
+
57
+ file "README.rdoc" => ["README.rdoc.erb", "lib/big_band.rb"] do
58
+ generate_readme
59
+ end
60
+
61
+ desc "Generate documentation"
62
+ task "doc" => "doc:yardoc"
63
+ task "yardoc" => "doc:yardoc"
64
+ task "rdoc" => "doc:yardoc"
65
+
66
+ namespace :doc do
67
+
68
+ task "yardoc" => "readme"
69
+ task "rdoc" => "readme"
70
+ task "rerdoc" => "readme"
71
+
72
+ desc "Generate README.rdoc from source files"
73
+ task "readme" do |t|
74
+ generate_readme
75
+ end
76
+
77
+ Rake::RDocTask.new("rdoc") do |rdoc|
78
+ rdoc.rdoc_dir = 'doc'
79
+ rdoc.options += %w[-a -S -N -m README.rdoc -q -w 2 -t BigBand -c UTF-8]
80
+ rdoc.rdoc_files.add ['*.{rdoc,rb}', '{config,lib,routes}/**/*.rb']
81
+ end
82
+
83
+ YARD::Rake::YardocTask.new("yardoc") do |t|
84
+ t.options = %w[--main README.rdoc --backtrace]
85
+ end
86
+
87
+ end
88
+
89
+ task :gems => "gems:build"
90
+
91
+ namespace :gems do
92
+
93
+ desc "Build gems (runs specs first)"
94
+ task :build => [:clobber, :spec, "doc:readme"] do
95
+ GEMS = []
96
+ Dir.glob("*.gemspec") do |file|
97
+ sh "gem build #{file}"
98
+ GEMS << "#{file[0..-9]}-#{BigBand::VERSION}.gem"
99
+ end
100
+ end
101
+
102
+ desc "Install gems"
103
+ task :install => :build do
104
+ GEMS.each { |file| sh "gem install #{file}" }
105
+ end
106
+
107
+ desc "Publish gems (gemcutter)"
108
+ task :push => :build do
109
+ GEMS.each { |file| sh "gem push #{file}" }
110
+ end
111
+
112
+ end
113
+
114
+ ############
115
+ # aliases
116
+
117
+ task :c => [:clobber, "doc:readme"]
118
+ task :s => :spec
119
+ task :d
120
+ namespace :d do
121
+ task :r => "doc:readme"
122
+ task :y => "doc:yardoc"
123
+ end
124
+ task :g => :gems
125
+ namespace :g do
126
+ task :b => "gems:build"
127
+ task :i => "gems:install"
128
+ task :p => "gems:push"
129
+ end
data/big_band.gemspec ADDED
@@ -0,0 +1,29 @@
1
+ $LOAD_PATH.unshift "lib"
2
+ require "lib/big_band/version"
3
+
4
+ SPEC = Gem::Specification.new do |s|
5
+
6
+ s.name = "big_band"
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 = "Collection of Sinatra extensions and sinatra integration for common tools like Rake, YARD and Monk."
14
+ s.files = Dir.glob("**/*").reject { |f| File.basename(f)[0] == ?. }
15
+ s.require_paths = ['lib']
16
+ s.has_rdoc = true
17
+ s.description = s.summary + " See README.rdoc for more infos."
18
+ s.rdoc_options = %w[-a -S -N -m README.rdoc -q -w 2 -t BigBand -c UTF-8]
19
+
20
+ s.add_dependency 'sinatra', '>= 0.9.4'
21
+ s.add_dependency 'monkey-lib', '>= 0.3.2'
22
+ s.add_dependency 'compass', '>= 0.8.17'
23
+ s.add_dependency 'yard', '>= 0.5.2'
24
+ s.add_dependency 'rack-test', '>= 0.5.3'
25
+
26
+ s.specification_version = 2 if s.respond_to? :specification_version=
27
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
28
+
29
+ end
@@ -0,0 +1,13 @@
1
+ $LOAD_PATH.unshift File.expand_path(__FILE__ + "/../../lib")
2
+ require "big_band"
3
+
4
+ class Example < BigBand
5
+
6
+ # The index page. You should see this comment in YARD.
7
+ get "/" do
8
+ haml :index
9
+ end
10
+
11
+ run! if run?
12
+
13
+ end
@@ -0,0 +1,8 @@
1
+ index page
2
+ %a{:href => "/", :class => "fancy-button1"} fancy
3
+ %a{:href => "/", :class => "fancy-button2"} fancy
4
+ %a{:href => "/", :class => "fancy-button3"} fancy
5
+ %a{:href => "/", :class => "fancy-button4"} fancy
6
+ %a{:href => "/", :class => "fancy-button5"} fancy
7
+ %a{:href => "/", :class => "fancy-button6"} fancy
8
+ %a{:href => "/", :class => "fancy-button7"} fancy
@@ -0,0 +1,2 @@
1
+ %link{:rel => "stylesheet", :href => "/stylesheets/screen.css", :type => "text/css"}/
2
+ !=yield
@@ -0,0 +1 @@
1
+ @import big_band.sass
@@ -0,0 +1,12 @@
1
+ @import base.sass
2
+
3
+ body
4
+ padding: 1em
5
+ background-color: #eee
6
+
7
+ @for !i from 1 through 7
8
+ a.fancy-button#{!i}
9
+ +fancy-button-link(#800, 10px + 10px * !i)
10
+
11
+ =attr(!name, !value)
12
+ #{!name} = !value