blossom 0.0.12 → 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.
Files changed (4) hide show
  1. data/bin/blossom +141 -44
  2. data/lib/blossom.rb +266 -92
  3. data/lib/blossom/version.rb +3 -0
  4. metadata +24 -39
data/bin/blossom CHANGED
@@ -1,7 +1,9 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- require 'fileutils'
4
- require "#{File.dirname(__FILE__)}/../lib/blossom"
3
+ BLOSSOM_HOME = File.join(File.dirname(__FILE__), "..")
4
+
5
+ require "fileutils"
6
+ require "#{BLOSSOM_HOME}/lib/blossom"
5
7
 
6
8
  include FileUtils
7
9
 
@@ -9,83 +11,178 @@ def make_file(name, content)
9
11
  File.open(name, "w") { |file| file.write(content) }
10
12
  end
11
13
 
12
- def print_usage
13
- warn "Usage: #$0 PROJECT-NAME"
14
+ def copy_file(name, destination)
15
+ FileUtils.cp "#{BLOSSOM_HOME}/#{name}", "#{destination}/#{name}"
16
+ end
17
+
18
+ def usage
19
+ "Usage: #$0 PROJECT-NAME"
20
+ end
21
+
22
+ def die(message)
23
+ error message
24
+ exit 1
25
+ end
26
+
27
+ def error(message)
28
+ warn "Blossom: Error: #{message}"
29
+ end
30
+
31
+ def run(command)
32
+ puts "$ #{command}"
33
+ system command or die "Command failed: #{command}"
14
34
  end
15
35
 
16
36
  if ARGV.empty?
17
- print_usage
37
+ puts usage
18
38
  elsif ARGV[0].start_with? "-"
19
39
  case ARGV[0]
20
40
  when "--version", "-v"
21
41
  puts Blossom::VERSION
22
42
  when "--help", "-h", "-?"
23
- print_usage
43
+ puts usage
24
44
  else
25
- warn "#$0: unrecognized option: #{ARGV[0]}"
45
+ error "Unrecognized option: #{ARGV[0]}"
46
+ warn usage
47
+ exit 1
26
48
  end
27
49
  else
28
50
  name = ARGV.first
29
51
  name_symbol = name =~ /\W|^\d/ ? ":'#{name}'" : ":#{name}"
30
- unless File.exist? name
31
- mkdir name
32
- cd name
52
+ name_pretty = name.capitalize.gsub(/[-_]/, " ")
53
+
54
+ if File.exist? name
55
+ die "File already exists: #{name}"
56
+ else
57
+ puts "Blossom creating project: #{name}"
58
+
59
+ puts "$ mkdir #{name}; cd #{name}"
60
+ mkdir name; cd name
61
+
62
+ puts "Installing Blossom boilerplate."
63
+
64
+ make_file "#{name}.blossom", <<"^D"
65
+ ## This is the Blossom configuration file.
66
+ ##
67
+ ## All settings are listed here with their default values.
68
+ ## To change a setting, you have to uncomment the line first.
69
+
70
+ ## The directory in which to put arbitrary public files:
71
+ # Public-Directory: public
72
+
73
+ ## Files with these extensions are always public:
74
+ # Public-Extensions: js css html png jpg
75
+
76
+ ## The maximum amount of time browsers may cache the site:
77
+ # Max-Cache-Time: 1 day
78
+
79
+ ## Whether or not to remove the "www." part of the domain:
80
+ # Remove-WWW-From-Domain: yes
81
+ ^D
33
82
 
34
83
  make_file ".gitignore", "tmp\n"
35
84
 
36
- make_file "config.ru", <<-"end_file"
85
+ make_file "config.ru", <<"^D"
37
86
  require "rubygems"
38
87
  require "bundler/setup"
39
88
  require "blossom"
40
89
 
41
- run Blossom(__FILE__, #{name_symbol}, :cache => [1, :day])
42
- end_file
90
+ run Blossom __FILE__
91
+ ^D
43
92
 
44
- make_file "Gemfile", <<-"end_file"
93
+ make_file "Gemfile", <<"^D"
45
94
  source :rubygems
46
95
 
47
- gem 'blossom', '~> #{Blossom::VERSION}'
48
- end_file
96
+ gem "blossom", "~> #{Blossom::VERSION}"
97
+
98
+ # Uncomment the following if you want to use CoffeeScript.
99
+ # (See further instructions in #{name}.js.)
100
+ #
101
+ # gem "rack-coffee"
102
+ ^D
49
103
 
50
- make_file "#{name}.haml", <<-"end_file"
104
+ mkdir "public"
105
+
106
+ make_file "#{name}.haml", <<"^D"
51
107
  !!!
52
108
  %html
53
109
  %head
54
110
  %meta(charset="utf-8")
55
- %title #{name.capitalize}
56
- %meta(name="description" content="Description of #{name.capitalize}.")
111
+ %title [insert title here]
112
+ %meta(name="description" content="[insert description here]")
57
113
  %link(rel="stylesheet" href="#{name}.css")
114
+ %script(src="#{name}.js")
115
+ /[if lt IE 9]
116
+ %script(src="//html5shiv.googlecode.com/svn/trunk/html5.js")
58
117
  %body
59
- %h1 This is <tt>#{name}.haml</tt>.
60
- end_file
118
+ %h1 #{name}.haml
119
+ ^D
61
120
 
62
- make_file "#{name}.sass", <<-"end_file"
121
+ make_file "#{name}.sass", <<"^D"
63
122
  @import compass/reset
64
-
65
- body
66
- width: 600px
67
- margin: auto
123
+ @import compass/utilities
124
+ @import compass/css3
68
125
 
69
126
  h1
70
- font: 200 40px "Helvetica Neue", Helvetica
71
- margin-top: 80px
72
- end_file
127
+ font: 48px monospace
128
+ margin-top: 1em
129
+ text-align: center
130
+ ^D
131
+
132
+ make_file "#{name}.sinatra.rb", <<"^D"
133
+ # Put any custom Sinatra routes or configuration here.
134
+ # See <http://www.sinatrarb.com/documentation> for help.
135
+
136
+ # This is also where you insert middleware (just remember to add
137
+ # any new dependencies to your Gemfile and to run \`bundle\'):
138
+ #
139
+ # require "some/middleware"
140
+ # use Some::Middleware
141
+
142
+ # get "/hello" do
143
+ # "Hello World"
144
+ # end
145
+ ^D
146
+
147
+ make_file "#{name}.js", <<"^D"
148
+ // If you do not want to use CoffeeScript, you can delete this comment.
149
+ // If you do, first install the CoffeeScript compiler and Rack::Coffee:
150
+ //
151
+ // $ npm install -g coffee-script
152
+ // $ sudo gem install rack-coffee
153
+ // $ echo 'gem "rack-coffee"' >> Gemfile
154
+ // $ bundle
155
+ //
156
+ // Then simply delete this file and create #{name}.coffee instead.
157
+ ^D
158
+
159
+ run "bundle --local"
160
+ run "git init"
161
+ run "git add -A"
162
+ run "git commit -m 'Create project.'"
163
+
164
+ puts <<"^D"
73
165
 
74
- mkdir "static"
166
+ Application created! Now type \`cd #{name}\' and then \`rackup\'.
167
+ This will run your application at <http://localhost:9292/>.
75
168
 
76
- %x{git init && git add -A && git commit -m 'Create project.'}
77
-
78
- print "\
79
- Application created! Now type \`cd #{name}\' and then \`rackup\'.\n\
80
- This will run your application at <http://localhost:9292/>.\n\
81
- You can start hacking in \`#{name}.haml\' and \`#{name}.sass\'.\n\
82
- If you create \`x.haml\', it will show up at <http://localhost:9292/x>.\n\
83
- Images and other static files go in the \`static/\' directory.\n\
84
- In production, your pages are cached; configure this in \`config.ru\'.
85
- Good luck, have fun!\n\
86
- "
87
- else
88
- warn "#$0: error: file already exists: #{name}"
89
- exit -1
169
+ Start hacking in \`#{name}.haml\' and \`#{name}.sass\'. If you
170
+ create \`x.haml\', it will show up at <http://localhost:9292/x>.
171
+
172
+ Public files go in the \`public/\' directory, but you can put images
173
+ and Javascript files directly in the root directory if you want.
174
+ This (and other things) can be configured in \`#{name}.blossom\'.
175
+
176
+ Put any custom middleware or Sinatra code in \`#{name}.sinatra.rb\',
177
+ but remember to restart your application after changing this file.
178
+
179
+ If you restart your application a lot, there is a drop-in replacement
180
+ for rackup called Shotgun <https://github.com/rtomayko/shotgun>:
181
+
182
+ $ sudo gem install shotgun
183
+ $ shotgun # Like rackup, except with automatic reloading.
184
+
185
+ Good luck and have fun! :-)
186
+ ^D
90
187
  end
91
188
  end
data/lib/blossom.rb CHANGED
@@ -1,115 +1,289 @@
1
- require "rubygems"
1
+ require "blossom/version"
2
2
 
3
- require "compass" # Load before sinatra.
3
+ require "sass"
4
+ require "compass"
5
+
6
+ require "haml"
7
+ require "rack"
8
+ require "rack/normalize-domain"
4
9
  require "sinatra/base"
5
- require "haml" # Load after sinatra.
6
- require "rack/strip-www"
7
- require "hassle"
10
+ require "yaml"
8
11
 
9
- module Blossom
10
- VERSION = "0.0.12"
12
+ begin
13
+ require "rack/coffee"
14
+ rescue LoadError
11
15
  end
12
16
 
13
- def Blossom.get_seconds(value, unit)
14
- days = 60 * 60 * 24
15
- case unit
16
- when :seconds, :second
17
- value
18
- when :minutes, :minute
19
- value * 60
20
- when :hours, :hour
21
- value * 60 * 60
22
- when :days, :day
23
- value * days
24
- when :weeks, :week
25
- value * days * 7
26
- when :months, :month
27
- value * days * 30
28
- when :years, :year
29
- value * days * 365
30
- else
31
- raise ArgumentError, "Unrecognized unit: #{unit}"
17
+ module Blossom
18
+ def self.fail(message)
19
+ info "Error: #{message}"
20
+ exit 1
32
21
  end
33
- end
34
22
 
35
- def Blossom(root_file, index = :index, options = {})
36
- Rack::Builder.app do
37
- cache = options[:cache]
38
- use Hassle
39
- use Rack::StripWWW unless options[:strip_www?] == false
40
- defined? Rack::Coffee and use Rack::Coffee,
41
- :static => false,
42
- :urls => "/",
43
- :cache => !!cache,
44
- :ttl => cache && Blossom.get_seconds(*cache)
45
- run Blossom::Base(root_file, index, options)
23
+ def self.info(message)
24
+ Kernel.warn "[Blossom] #{message}"
46
25
  end
47
26
  end
48
27
 
49
- def Blossom.Base(root_file, index = :index, blossom_options = {})
50
- root = File.dirname(root_file)
51
- Class.new(Sinatra::Base).tap do |app|
52
- app.class_eval do
53
- extend Blossom::Helpers
54
-
55
- configure do
56
- set :root, root
57
- set :public, "#{root}/static"
58
- set :views, root
59
- set :index, index
60
- set :haml, { :format => :html5, :attr_wrapper => '"' }
61
-
62
- Compass.configuration.project_path = root
63
- Compass.configuration.sass_dir = ""
64
- Compass.configuration.images_dir = "static"
65
- Compass.configuration.http_images_path = "/"
66
- Compass.configuration.output_style = :compact
67
- Compass.configuration.line_comments = false
68
-
69
- sass_options = Compass.sass_engine_options.merge \
70
- :cache_location => "#{root}/tmp/sass-cache"
71
-
72
- set :sass, sass_options
73
- end
74
-
75
- get "/" do
76
- headers blossom_headers
77
- haml settings.index
28
+ def Blossom(root_filename)
29
+ Blossom::Application.new(File.dirname(root_filename))
30
+ end
31
+
32
+ class Blossom::Application < Rack::Builder
33
+ def initialize(root)
34
+ super()
35
+
36
+ @root = root
37
+
38
+ determine_name!
39
+ load_configuration!
40
+ configure!
41
+ build_rack!
42
+ end
43
+
44
+ # --------------------------------------------------------
45
+
46
+ def compass_options
47
+ return \
48
+ :cache_dir => "tmp/sass-cache",
49
+ :http_images_path => "/",
50
+ :images_dir => @config.public_directory,
51
+ :line_comments => false,
52
+ :output_style => :compact,
53
+ :project_path => @root,
54
+ :sass_dir => ""
55
+ end
56
+
57
+ def coffee_options
58
+ return \
59
+ :cache => @config.cache_content?,
60
+ :static => false,
61
+ :ttl => @config.content_max_age,
62
+ :urls => "/"
63
+ end
64
+
65
+ def haml_options
66
+ return \
67
+ :format => :html5,
68
+ :attr_wrapper => '"'
69
+ end
70
+
71
+ def sass_options
72
+ Compass.sass_engine_options
73
+ end
74
+
75
+ # --------------------------------------------------------
76
+
77
+ def determine_name!
78
+ names = glob("*.blossom")
79
+ case names.size
80
+ when 0
81
+ Blossom.fail "Missing configuration file: NAME.blossom"
82
+ when 1
83
+ @name = names[0].sub(/\.blossom$/, '')
84
+ else
85
+ Blossom.fail "Multiple configuration files: #{names * ', '}"
86
+ end
87
+ end
88
+
89
+ def load_configuration!
90
+ @config = Configuration.new(configuration_hash)
91
+ end
92
+
93
+ def configuration_hash
94
+ case result = YAML.load_file(configuration_filename)
95
+ when false then {} # Empty file.
96
+ when Hash then result
97
+ else Blossom.fail "Bad configuration file: #{configuration_filename}"
98
+ end
99
+ rescue Errno::ENOENT
100
+ {}
101
+ end
102
+
103
+ # --------------------------------------------------------
104
+
105
+ def configuration_filename
106
+ filename("#@name.blossom") end
107
+ def sinatra_code_filename
108
+ filename("#@name.sinatra.rb") end
109
+ def public_dirname
110
+ filename(@config.public_directory) end
111
+
112
+ def glob(glob)
113
+ Dir[filename(glob)].map { |name| File.basename(name) } end
114
+ def filename(*components)
115
+ File.join(@root, *components) end
116
+
117
+ # --------------------------------------------------------
118
+
119
+ def configure!
120
+ compass_options.each do |key, value|
121
+ Compass.configuration.send("#{key}=", value)
122
+ end
123
+
124
+ Compass.configure_sass_plugin!
125
+ end
126
+
127
+ def build_rack!
128
+ use_rack_normalize_domain!
129
+ use_rack_coffee!
130
+ run sinatra_app
131
+ end
132
+
133
+ def use_rack_normalize_domain!
134
+ if @config.strip_www?
135
+ use Rack::NormalizeDomain
136
+ Blossom.info "Normalizing domains by removing initial www."
137
+ else
138
+ Blossom.info "Not normalizing domains."
139
+ end
140
+ end
141
+
142
+ def use_rack_coffee!
143
+ if defined? Rack::Coffee
144
+ use Rack::Coffee, coffee_options
145
+ Blossom.info "Using CoffeeScript."
146
+ else
147
+ Blossom.info "Not using CoffeeScript."
148
+ end
149
+ end
150
+
151
+ def sinatra_app
152
+ app = Sinatra.new
153
+ app.set :blossom, self
154
+
155
+ app.set :root, @root
156
+ app.set :index, @name.to_sym
157
+
158
+ app.set :views, @root
159
+ app.set :public, public_dirname
160
+
161
+ app.set :haml, haml_options
162
+ app.set :sass, sass_options
163
+
164
+ if custom_sinatra_code
165
+ app.class_eval(custom_sinatra_code)
166
+ end
167
+
168
+ # Need variable here for lexical scoping.
169
+ max_age = @config.max_age
170
+ app.before { cache_control :max_age => max_age }
171
+
172
+ app.register do
173
+ def path_exists? suffix
174
+ condition do
175
+ basename = File.basename(request.path_info)
176
+ File.exist? File.join(settings.root, "#{basename}.#{suffix}")
177
+ end
78
178
  end
79
179
 
80
- get "/:name.css", :file_exists? => :sass do
81
- headers blossom_headers
82
- content_type "text/css", :charset => "utf-8"
83
- sass params[:name].to_sym
180
+ def file_exists? suffix
181
+ condition do
182
+ basename = File.basename(request.path_info)
183
+ barename = basename.sub(/\.[^.]*$/, '')
184
+ File.exist? File.join(settings.root, "#{barename}.#{suffix}")
185
+ end
186
+ end
187
+ end
188
+
189
+ @config.public_extensions.each do |extension|
190
+ app.get "/:name.#{extension}", :file_exists? => extension do
191
+ send_file "#{params[:name]}.#{extension}"
84
192
  end
193
+ end
194
+
195
+ app.get "/:name.css", :file_exists? => :sass do
196
+ content_type :css
197
+ sass params[:name].to_sym
198
+ end
85
199
 
86
- get "/:name", :file_exists? => :haml do
87
- headers blossom_headers
88
- haml params[:name].to_sym
200
+ app.get "/:name", :path_exists? => :haml do
201
+ haml params[:name].to_sym
202
+ end
203
+
204
+ app.get "/" do
205
+ haml settings.index
206
+ end
207
+
208
+ app
209
+ end
210
+
211
+ def custom_sinatra_code
212
+ File.read(sinatra_code_filename) rescue nil
213
+ end
214
+
215
+ # --------------------------------------------------------
216
+
217
+ class Configuration < Struct.new(:user_data)
218
+ DEFAULTS = YAML.load <<"^D"
219
+ Public-Directory: public
220
+ Public-Extensions: js css html png jpg
221
+ Max-Cache-Time: 1 day
222
+ Remove-WWW-From-Domain: yes
223
+ ^D
224
+
225
+ def public_directory
226
+ get("Public-Directory").string end
227
+ def strip_www?
228
+ get("Remove-WWW-From-Domain").boolean end
229
+ def max_age
230
+ get("Max-Cache-Time").duration end
231
+ def public_extensions
232
+ get("Public-Extensions").words end
233
+
234
+ private
235
+
236
+ def get(name)
237
+ if user_data.include? name
238
+ Value.new(user_data[name])
239
+ else
240
+ Value.new(DEFAULTS[name])
241
+ end
242
+ end
243
+
244
+ class Value < Struct.new(:value)
245
+ def string
246
+ value.to_s
247
+ end
248
+
249
+ def words
250
+ value.gsub(/^\s+|\s$/, "").split(/\s+/)
251
+ end
252
+
253
+ def boolean
254
+ if value == true or value == false
255
+ value
256
+ else
257
+ fail "Must be \`yes' or \`no\': #{name}"
258
+ end
89
259
  end
90
-
91
- define_method :blossom_headers do
92
- if blossom_options.include? :cache
93
- seconds = Blossom.get_seconds(*blossom_options[:cache])
94
- { 'Cache-Control' => "max-age=#{seconds}" }
260
+
261
+ def duration
262
+ if value =~ /^((?:\d+\.)?\d+) ([a-z]+?)s?$/
263
+ $1.to_f * time_unit($2.to_sym)
95
264
  else
96
- {}
265
+ error "Bad duration: #{value}"
97
266
  end
98
267
  end
99
- end
100
268
 
101
- code = File.read("#{root}/#{index}.rb") rescue nil
102
- app.class_eval(code) if code
103
- end
104
- end
269
+ private
270
+
271
+ def fail(message)
272
+ Blossom.fail "Configuration: #{value}: #{message}"
273
+ end
105
274
 
106
- module Blossom::Helpers
107
- def file_exists? suffix
108
- condition do
109
- basename = File.basename(request.path)
110
- barename = basename.sub(/\.[^.]*$/, '')
111
- name = "#{barename}.#{suffix}"
112
- File.exist? File.join(settings.root, name)
275
+ def time_unit(name)
276
+ case name
277
+ when :second then 1
278
+ when :minute then 60
279
+ when :hour then 60 * 60
280
+ when :day then 24 * time_unit(:hour)
281
+ when :week then 7 * time_unit(:day)
282
+ when :month then 30 * time_unit(:day)
283
+ when :year then 365 * time_unit(:day)
284
+ else fail "Unknown time unit: #{name}"
285
+ end
286
+ end
113
287
  end
114
288
  end
115
289
  end
@@ -0,0 +1,3 @@
1
+ module Blossom
2
+ VERSION = "0.1.0"
3
+ end
metadata CHANGED
@@ -1,13 +1,12 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: blossom
3
3
  version: !ruby/object:Gem::Version
4
- hash: 7
5
- prerelease:
4
+ prerelease: false
6
5
  segments:
7
6
  - 0
7
+ - 1
8
8
  - 0
9
- - 12
10
- version: 0.0.12
9
+ version: 0.1.0
11
10
  platform: ruby
12
11
  authors:
13
12
  - Daniel Brockman
@@ -15,81 +14,70 @@ autorequire:
15
14
  bindir: bin
16
15
  cert_chain: []
17
16
 
18
- date: 2011-05-08 00:00:00 Z
17
+ date: 2012-01-10 00:00:00 +01:00
18
+ default_executable:
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
21
21
  name: sinatra
22
22
  prerelease: false
23
23
  requirement: &id001 !ruby/object:Gem::Requirement
24
- none: false
25
24
  requirements:
26
25
  - - ~>
27
26
  - !ruby/object:Gem::Version
28
- hash: 23
29
27
  segments:
30
28
  - 1
31
29
  - 0
32
- - 0
33
- version: 1.0.0
30
+ version: "1.0"
34
31
  type: :runtime
35
32
  version_requirements: *id001
36
33
  - !ruby/object:Gem::Dependency
37
- name: haml
34
+ name: sass
38
35
  prerelease: false
39
36
  requirement: &id002 !ruby/object:Gem::Requirement
40
- none: false
41
37
  requirements:
42
38
  - - ~>
43
39
  - !ruby/object:Gem::Version
44
- hash: 7
45
40
  segments:
46
41
  - 3
47
- - 0
48
- - 0
49
- version: 3.0.0
42
+ - 1
43
+ - 1
44
+ version: 3.1.1
50
45
  type: :runtime
51
46
  version_requirements: *id002
52
47
  - !ruby/object:Gem::Dependency
53
- name: compass
48
+ name: haml
54
49
  prerelease: false
55
50
  requirement: &id003 !ruby/object:Gem::Requirement
56
- none: false
57
51
  requirements:
58
52
  - - ~>
59
53
  - !ruby/object:Gem::Version
60
- hash: 55
61
54
  segments:
62
- - 0
63
- - 10
64
- - 0
65
- version: 0.10.0
55
+ - 3
56
+ - 1
57
+ - 1
58
+ version: 3.1.1
66
59
  type: :runtime
67
60
  version_requirements: *id003
68
61
  - !ruby/object:Gem::Dependency
69
- name: rack-strip-www
62
+ name: compass
70
63
  prerelease: false
71
64
  requirement: &id004 !ruby/object:Gem::Requirement
72
- none: false
73
65
  requirements:
74
66
  - - ~>
75
67
  - !ruby/object:Gem::Version
76
- hash: 23
77
68
  segments:
78
69
  - 0
79
- - 2
80
- - 0
81
- version: 0.2.0
70
+ - 10
71
+ version: "0.10"
82
72
  type: :runtime
83
73
  version_requirements: *id004
84
74
  - !ruby/object:Gem::Dependency
85
- name: hassle
75
+ name: rack-normalize-domain
86
76
  prerelease: false
87
77
  requirement: &id005 !ruby/object:Gem::Requirement
88
- none: false
89
78
  requirements:
90
79
  - - ~>
91
80
  - !ruby/object:Gem::Version
92
- hash: 29
93
81
  segments:
94
82
  - 0
95
83
  - 0
@@ -98,8 +86,7 @@ dependencies:
98
86
  type: :runtime
99
87
  version_requirements: *id005
100
88
  description:
101
- email:
102
- - daniel@brockman.se
89
+ email: daniel@gointeractive.se
103
90
  executables:
104
91
  - blossom
105
92
  extensions: []
@@ -107,8 +94,10 @@ extensions: []
107
94
  extra_rdoc_files: []
108
95
 
109
96
  files:
110
- - lib/blossom.rb
111
97
  - bin/blossom
98
+ - lib/blossom.rb
99
+ - lib/blossom/version.rb
100
+ has_rdoc: true
112
101
  homepage: http://github.com/dbrock/blossom
113
102
  licenses: []
114
103
 
@@ -118,27 +107,23 @@ rdoc_options: []
118
107
  require_paths:
119
108
  - lib
120
109
  required_ruby_version: !ruby/object:Gem::Requirement
121
- none: false
122
110
  requirements:
123
111
  - - ">="
124
112
  - !ruby/object:Gem::Version
125
- hash: 3
126
113
  segments:
127
114
  - 0
128
115
  version: "0"
129
116
  required_rubygems_version: !ruby/object:Gem::Requirement
130
- none: false
131
117
  requirements:
132
118
  - - ">="
133
119
  - !ruby/object:Gem::Version
134
- hash: 3
135
120
  segments:
136
121
  - 0
137
122
  version: "0"
138
123
  requirements: []
139
124
 
140
125
  rubyforge_project:
141
- rubygems_version: 1.8.1
126
+ rubygems_version: 1.3.6
142
127
  signing_key:
143
128
  specification_version: 3
144
129
  summary: Quick-start web development with Haml, Sass and Compass.