polymer 1.0.0.beta.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (47) hide show
  1. data/Gemfile +8 -0
  2. data/History.md +126 -0
  3. data/LICENSE +28 -0
  4. data/README.md +229 -0
  5. data/Rakefile +186 -0
  6. data/bin/polymer +10 -0
  7. data/lib/polymer/cache.rb +106 -0
  8. data/lib/polymer/cli.rb +340 -0
  9. data/lib/polymer/core_ext.rb +78 -0
  10. data/lib/polymer/css_generator.rb +32 -0
  11. data/lib/polymer/deviant_finder.rb +76 -0
  12. data/lib/polymer/dsl.rb +283 -0
  13. data/lib/polymer/man/polymer-bond.1 +60 -0
  14. data/lib/polymer/man/polymer-bond.1.txt +66 -0
  15. data/lib/polymer/man/polymer-init.1 +33 -0
  16. data/lib/polymer/man/polymer-init.1.txt +42 -0
  17. data/lib/polymer/man/polymer-optimise.1 +23 -0
  18. data/lib/polymer/man/polymer-optimise.1.txt +25 -0
  19. data/lib/polymer/man/polymer-position.1 +39 -0
  20. data/lib/polymer/man/polymer-position.1.txt +42 -0
  21. data/lib/polymer/man/polymer.1 +50 -0
  22. data/lib/polymer/man/polymer.1.txt +60 -0
  23. data/lib/polymer/man/polymer.5 +130 -0
  24. data/lib/polymer/man/polymer.5.txt +145 -0
  25. data/lib/polymer/optimisation.rb +130 -0
  26. data/lib/polymer/project.rb +164 -0
  27. data/lib/polymer/sass_generator.rb +38 -0
  28. data/lib/polymer/source.rb +55 -0
  29. data/lib/polymer/sprite.rb +130 -0
  30. data/lib/polymer/templates/polymer.tt +28 -0
  31. data/lib/polymer/templates/sass_mixins.erb +29 -0
  32. data/lib/polymer/templates/sources/one/book.png +0 -0
  33. data/lib/polymer/templates/sources/one/box-label.png +0 -0
  34. data/lib/polymer/templates/sources/one/calculator.png +0 -0
  35. data/lib/polymer/templates/sources/one/calendar-month.png +0 -0
  36. data/lib/polymer/templates/sources/one/camera.png +0 -0
  37. data/lib/polymer/templates/sources/one/eraser.png +0 -0
  38. data/lib/polymer/templates/sources/two/inbox-image.png +0 -0
  39. data/lib/polymer/templates/sources/two/magnet.png +0 -0
  40. data/lib/polymer/templates/sources/two/newspaper.png +0 -0
  41. data/lib/polymer/templates/sources/two/television.png +0 -0
  42. data/lib/polymer/templates/sources/two/wand-hat.png +0 -0
  43. data/lib/polymer/templates/sources/two/wooden-box-label.png +0 -0
  44. data/lib/polymer/version.rb +4 -0
  45. data/lib/polymer.rb +49 -0
  46. data/polymer.gemspec +94 -0
  47. metadata +206 -0
@@ -0,0 +1,55 @@
1
+ module Polymer
2
+ # Represents a single source file used in a sprite.
3
+ #
4
+ class Source
5
+
6
+ # @return [String] The sprite name; the filename sans-extension.
7
+ attr_reader :name
8
+
9
+ # @return [Pathname] The path to the source file on disk.
10
+ attr_reader :path
11
+
12
+ # Creates a new Source instance.
13
+ #
14
+ # @param [Pathname] path
15
+ # The path the the source image.
16
+ #
17
+ def initialize(path)
18
+ @path = Pathname.new(path)
19
+ @name = @path.basename(@path.extname).to_s
20
+ end
21
+
22
+ # Returns the RMagick image instance representing the source.
23
+ #
24
+ # @return [Magick::Image]
25
+ #
26
+ def image
27
+ assert_file!
28
+ @image ||= Magick::Image.read(@path).first
29
+ end
30
+
31
+ # Returns a digest which represents the sprite name and file contents.
32
+ #
33
+ # @return [String]
34
+ #
35
+ def digest
36
+ assert_file!
37
+ Digest::SHA256.hexdigest(@name + Digest::SHA256.file(@path).to_s)
38
+ end
39
+
40
+ #######
41
+ private
42
+ #######
43
+
44
+ # Checks that the source file exists and is a file.
45
+ #
46
+ # @raise [Polymer::MissingSource]
47
+ # Raised if the source file is not present, or is not a file.
48
+ #
49
+ def assert_file!
50
+ raise MissingSource,
51
+ "Couldn't find the source file `#{@path}'" unless @path.file?
52
+ end
53
+
54
+ end # Source
55
+ end # Polymer
@@ -0,0 +1,130 @@
1
+ module Polymer
2
+ # Represents a collection of images which will be used to make a sprite.
3
+ #
4
+ class Sprite
5
+ attr_reader :name, :save_path, :url, :padding, :sources
6
+
7
+ # Creates a new Sprite instance.
8
+ #
9
+ # @param [String] name
10
+ # The name of the sprite.
11
+ # @param [Array<Pathname>] sources
12
+ # An array of Pathname instances to be used as sources.
13
+ # @param [Pathname] save_path
14
+ # The location at which the sprite should be saved.
15
+ # @param [Integer] padding
16
+ # The amount of transparent space, in pixels, to be inserted between
17
+ # each source image.
18
+ # @param [String] url
19
+ # The URL at which the sprite can be requested by a browser.
20
+ #
21
+ def initialize(name, sources, save_path, padding, url)
22
+ @name = name
23
+ @sources = sources.map { |path| Source.new(path) }
24
+ @save_path = save_path
25
+ @padding = padding
26
+ @url = url
27
+ end
28
+
29
+ # @return [Polymer::Source]
30
+ # Returns the source whose name matches +name+.
31
+ # @return [nil]
32
+ # Returns nil if no source with +name+ exists.
33
+ #
34
+ def source(name)
35
+ sources.detect { |source| source.name == name }
36
+ end
37
+
38
+ # Returns the y-position of a given source.
39
+ #
40
+ # @param [String, Polymer::Source] name
41
+ # The name of the source whose position is to be returned, or the
42
+ # Polymer::Source instance itself.
43
+ #
44
+ # @return [Integer, Source]
45
+ # The vertical position of the source image.
46
+ #
47
+ def position_of(name)
48
+ name = name.name if name.is_a?(Polymer::Source)
49
+
50
+ unless self.source(name)
51
+ raise MissingSource,
52
+ "Source image `#{name}' is not present in the `#{@name}' sprite"
53
+ end
54
+
55
+ unless @positions
56
+ # Rather than calculate each time we call position_of, cache the
57
+ # position of each image the first time it is called. Since we almost
58
+ # always want the position of each image at some point (when
59
+ # generating CSS), it works out faster to fetch each source height
60
+ # just once.
61
+ @positions = {}
62
+ @sources.inject(0) do |offset, src|
63
+ @positions[src.name] = offset
64
+ offset + src.image.rows + @padding
65
+ end
66
+ end
67
+
68
+ @positions[name]
69
+ end
70
+
71
+ # Returns a digest which represents the sprite and it's contents. If any
72
+ # of the file _contents_ or source names change, so will the hash.
73
+ #
74
+ # @return [Digest::SHA256]
75
+ #
76
+ def digest
77
+ Digest::SHA256.hexdigest(sources.map { |source| source.digest }.join)
78
+ end
79
+
80
+ # Saves the composited sprite to disk.
81
+ #
82
+ # In the event that the sprite has no sources, +save+ will return false
83
+ # and the existing file will be left untouched.
84
+ #
85
+ # @return [Boolean]
86
+ #
87
+ def save
88
+ @save_path.dirname.mkpath
89
+
90
+ unless @save_path.dirname.writable?
91
+ raise Polymer::TargetNotWritable, <<-ERROR
92
+ Polymer can't save the #{@name} sprite in
93
+ `#{@save_path.dirname.to_s}' as it isn't writable.
94
+ ERROR
95
+ end
96
+
97
+ list = Magick::ImageList.new
98
+
99
+ @sources.each do |source|
100
+ list << source.image
101
+
102
+ if @padding and @padding > 0
103
+ list << Magick::Image.new(1, @padding) do
104
+ self.background_color = '#F000'
105
+ end
106
+ end
107
+ end
108
+
109
+ # RMagick uses instance_eval, @set isn't available in the block below.
110
+ sources_length = @sources.length
111
+
112
+ montage = list.montage do
113
+ self.gravity = Magick::NorthWestGravity
114
+ # Transparent background.
115
+ self.background_color = '#FFF0'
116
+ # Allow each image to take up as much space as it needs.
117
+ self.geometry = '+0+0'
118
+ # columns=1, rows=Sources plus padding.
119
+ self.tile = Magick::Geometry.new(1, sources_length * 2)
120
+ end
121
+
122
+ # Remove the blank space from the bottom of the image.
123
+ montage.crop!(0, 0, 0, (montage.first.rows) - @padding)
124
+ montage.write("PNG32:#{@save_path}")
125
+
126
+ true
127
+ end
128
+
129
+ end # Sprite
130
+ end # Polymer
@@ -0,0 +1,28 @@
1
+ # This file is used by the Polymer application to generate and optimise sprite
2
+ # image files for use in web applications. You may alter any part of it in
3
+ # order to customise the way Polymer works.
4
+ #
5
+ # For a detailed overview of the .polymer file syntax, run
6
+ #
7
+ # $ polymer help .polymer
8
+
9
+ # --- CONFIGURATION ----------------------------------------------------------
10
+
11
+ # The config section allows you to set options which affect all of your
12
+ # sprites; you may override any of these on a sprite-by-sprite basis by
13
+ # specifying your custom value in the sprite section below.
14
+
15
+ <% if config[:windows] %>
16
+ config.cache 'polymer.cache'
17
+ config.sass 'public/stylesheets/sass'
18
+ config.url '/images/:filename'
19
+ <% else %>
20
+ config.sass 'public/stylesheets/sass'
21
+ config.url '/images/:filename'
22
+ <% end %>
23
+
24
+ # --- SPRITES ----------------------------------------------------------------
25
+
26
+ sprites '<%= config[:sources] %>/:name/*' => '<%= config[:sprites] %>/:name.png'
27
+
28
+ # vim: set filetype=ruby :
@@ -0,0 +1,29 @@
1
+ // The mixins in this file are automatically generated by the 'polymer'
2
+ // command provided by the polymer gem. Don't edit this file directly;
3
+ // change the polymer.rb configuration file, then re-run 'polymer'.
4
+
5
+ @mixin polymer($source, $x-offset: 0px, $y-offset: 0px)
6
+ <% project.sprites.each_with_index do |sprite, sprite_index| %>
7
+ <% sprite.sources.each_with_index do |source, source_index| %>
8
+ <% if sprite_index == 0 and source_index == 0 %>
9
+ @if $source == "<%= sprite.name %>/<%= source.name %>"
10
+ <% else %>
11
+ @else if $source == "<%= sprite.name %>/<%= source.name %>"
12
+ <% end %>
13
+ $y-offset: $y-offset - <%= sprite.position_of(source) %>px
14
+ background: url(<%= sprite.url %>) $x-offset $y-offset no-repeat
15
+ <% end %>
16
+ <% end %>
17
+
18
+ @mixin polymer-pos($source, $x-offset: 0px, $y-offset: 0px)
19
+ <% project.sprites.each_with_index do |sprite, sprite_index| %>
20
+ <% sprite.sources.each_with_index do |source, source_index| %>
21
+ <% if sprite_index == 0 and source_index == 0 %>
22
+ @if $source == "<%= sprite.name %>/<%= source.name %>"
23
+ <% else %>
24
+ @else if $source == "<%= sprite.name %>/<%= source.name %>"
25
+ <% end %>
26
+ $y-offset: $y-offset - <%= sprite.position_of(source) %>px
27
+ background-position: $x-offset $y-offset
28
+ <% end %>
29
+ <% end %>
@@ -0,0 +1,4 @@
1
+ module Polymer
2
+ # The current version of the Polymer library.
3
+ VERSION = '1.0.0.beta.3'.freeze
4
+ end
data/lib/polymer.rb ADDED
@@ -0,0 +1,49 @@
1
+ require 'digest/sha2'
2
+ require 'erb'
3
+ require 'pathname'
4
+ require 'yaml'
5
+
6
+ # Gems.
7
+ require 'rmagick'
8
+
9
+ # On with the library...
10
+ require 'polymer/cache'
11
+ require 'polymer/core_ext'
12
+ require 'polymer/css_generator'
13
+ require 'polymer/deviant_finder'
14
+ require 'polymer/dsl'
15
+ require 'polymer/optimisation'
16
+ require 'polymer/project'
17
+ require 'polymer/sass_generator'
18
+ require 'polymer/source'
19
+ require 'polymer/sprite'
20
+ require 'polymer/version'
21
+
22
+ module Polymer
23
+ # Generic exception for all Polymer exception classes.
24
+ PolymerError = Class.new(StandardError)
25
+
26
+ # Raised when a project directory couldn't be found.
27
+ MissingProject = Class.new(PolymerError)
28
+
29
+ # Raised when a creating a new project in an existing project directory.
30
+ ProjectExists = Class.new(PolymerError)
31
+
32
+ # Raised when a sprite set expects a source image, but none could be found.
33
+ MissingSource = Class.new(PolymerError)
34
+
35
+ # Raised when a sprite can't be saved due to incorrect permissions.
36
+ TargetNotWritable = Class.new(PolymerError)
37
+
38
+ # Raised when an error happens using the DSL.
39
+ DslError = Class.new(PolymerError)
40
+
41
+ # Raised when a sprite definition is lacking a { source => sprite } pair.
42
+ MissingMap = Class.new(DslError)
43
+
44
+ # Raised when a sprite defintion doesn't include a name.
45
+ MissingName = Class.new(DslError)
46
+
47
+ # Raised when sprite is defined with a name which has already been used.
48
+ DuplicateName = Class.new(DslError)
49
+ end
data/polymer.gemspec ADDED
@@ -0,0 +1,94 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $LOAD_PATH.unshift File.expand_path('../lib', __FILE__)
3
+
4
+ Gem::Specification.new do |s|
5
+ s.required_rubygems_version = '>= 1.3.6'
6
+
7
+ # The following four lines are automatically updates by the "gemspec"
8
+ # rake task. It it completely safe to edit them, but using the rake task
9
+ # is easier.
10
+ s.name = 'polymer'
11
+ s.version = '1.0.0.beta.3'
12
+ s.date = '2010-09-24'
13
+ s.rubyforge_project = 'polymer'
14
+
15
+ # You may safely edit the section below.
16
+
17
+ s.platform = Gem::Platform::RUBY
18
+ s.authors = ['Anthony Williams']
19
+ s.email = ['hi@antw.me']
20
+ s.homepage = 'http://github.com/antw/polymer'
21
+ s.summary = 'Creates sprites for web applications'
22
+ s.description = 'Polymer simplifies the creation of sprite images for ' \
23
+ 'web applications, while also generating nifty Sass ' \
24
+ 'mixins. CSS files are available for non-Sass users.'
25
+
26
+ s.rdoc_options = ['--charset=UTF-8']
27
+ s.extra_rdoc_files = %w[History.md LICENSE README.md]
28
+
29
+ s.executables = ['polymer']
30
+ s.require_path = 'lib'
31
+
32
+ s.add_runtime_dependency 'rmagick', '>= 2.13'
33
+ s.add_runtime_dependency 'thor', '>= 0.14.0'
34
+ s.add_development_dependency 'rspec', '>= 2.0.0.beta.19'
35
+ s.add_development_dependency 'cucumber', '>= 0.8.5'
36
+ s.add_development_dependency 'haml', '>= 3.0.18'
37
+ s.add_development_dependency 'ronn', '>= 0.7.3'
38
+
39
+ # The manifest is created by the "gemspec" rake task. Do not edit it
40
+ # directly; your changes will be wiped out when you next run the task.
41
+
42
+ # = MANIFEST =
43
+ s.files = %w[
44
+ Gemfile
45
+ History.md
46
+ LICENSE
47
+ README.md
48
+ Rakefile
49
+ bin/polymer
50
+ lib/polymer.rb
51
+ lib/polymer/cache.rb
52
+ lib/polymer/cli.rb
53
+ lib/polymer/core_ext.rb
54
+ lib/polymer/css_generator.rb
55
+ lib/polymer/deviant_finder.rb
56
+ lib/polymer/dsl.rb
57
+ lib/polymer/optimisation.rb
58
+ lib/polymer/project.rb
59
+ lib/polymer/sass_generator.rb
60
+ lib/polymer/source.rb
61
+ lib/polymer/sprite.rb
62
+ lib/polymer/templates/polymer.tt
63
+ lib/polymer/templates/sass_mixins.erb
64
+ lib/polymer/templates/sources/one/book.png
65
+ lib/polymer/templates/sources/one/box-label.png
66
+ lib/polymer/templates/sources/one/calculator.png
67
+ lib/polymer/templates/sources/one/calendar-month.png
68
+ lib/polymer/templates/sources/one/camera.png
69
+ lib/polymer/templates/sources/one/eraser.png
70
+ lib/polymer/templates/sources/two/inbox-image.png
71
+ lib/polymer/templates/sources/two/magnet.png
72
+ lib/polymer/templates/sources/two/newspaper.png
73
+ lib/polymer/templates/sources/two/television.png
74
+ lib/polymer/templates/sources/two/wand-hat.png
75
+ lib/polymer/templates/sources/two/wooden-box-label.png
76
+ lib/polymer/version.rb
77
+ polymer.gemspec
78
+ lib/polymer/man/polymer-bond.1
79
+ lib/polymer/man/polymer-bond.1.txt
80
+ lib/polymer/man/polymer-init.1
81
+ lib/polymer/man/polymer-init.1.txt
82
+ lib/polymer/man/polymer-optimise.1
83
+ lib/polymer/man/polymer-optimise.1.txt
84
+ lib/polymer/man/polymer-position.1
85
+ lib/polymer/man/polymer-position.1.txt
86
+ lib/polymer/man/polymer.1
87
+ lib/polymer/man/polymer.1.txt
88
+ lib/polymer/man/polymer.5
89
+ lib/polymer/man/polymer.5.txt
90
+ ]
91
+ # = MANIFEST =
92
+
93
+ s.test_files = s.files.select { |path| path =~ /^spec\/.*\.rb/ }
94
+ end
metadata ADDED
@@ -0,0 +1,206 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: polymer
3
+ version: !ruby/object:Gem::Version
4
+ prerelease: true
5
+ segments:
6
+ - 1
7
+ - 0
8
+ - 0
9
+ - beta
10
+ - 3
11
+ version: 1.0.0.beta.3
12
+ platform: ruby
13
+ authors:
14
+ - Anthony Williams
15
+ autorequire:
16
+ bindir: bin
17
+ cert_chain: []
18
+
19
+ date: 2010-09-24 00:00:00 +01:00
20
+ default_executable:
21
+ dependencies:
22
+ - !ruby/object:Gem::Dependency
23
+ name: rmagick
24
+ prerelease: false
25
+ requirement: &id001 !ruby/object:Gem::Requirement
26
+ none: false
27
+ requirements:
28
+ - - ">="
29
+ - !ruby/object:Gem::Version
30
+ segments:
31
+ - 2
32
+ - 13
33
+ version: "2.13"
34
+ type: :runtime
35
+ version_requirements: *id001
36
+ - !ruby/object:Gem::Dependency
37
+ name: thor
38
+ prerelease: false
39
+ requirement: &id002 !ruby/object:Gem::Requirement
40
+ none: false
41
+ requirements:
42
+ - - ">="
43
+ - !ruby/object:Gem::Version
44
+ segments:
45
+ - 0
46
+ - 14
47
+ - 0
48
+ version: 0.14.0
49
+ type: :runtime
50
+ version_requirements: *id002
51
+ - !ruby/object:Gem::Dependency
52
+ name: rspec
53
+ prerelease: false
54
+ requirement: &id003 !ruby/object:Gem::Requirement
55
+ none: false
56
+ requirements:
57
+ - - ">="
58
+ - !ruby/object:Gem::Version
59
+ segments:
60
+ - 2
61
+ - 0
62
+ - 0
63
+ - beta
64
+ - 19
65
+ version: 2.0.0.beta.19
66
+ type: :development
67
+ version_requirements: *id003
68
+ - !ruby/object:Gem::Dependency
69
+ name: cucumber
70
+ prerelease: false
71
+ requirement: &id004 !ruby/object:Gem::Requirement
72
+ none: false
73
+ requirements:
74
+ - - ">="
75
+ - !ruby/object:Gem::Version
76
+ segments:
77
+ - 0
78
+ - 8
79
+ - 5
80
+ version: 0.8.5
81
+ type: :development
82
+ version_requirements: *id004
83
+ - !ruby/object:Gem::Dependency
84
+ name: haml
85
+ prerelease: false
86
+ requirement: &id005 !ruby/object:Gem::Requirement
87
+ none: false
88
+ requirements:
89
+ - - ">="
90
+ - !ruby/object:Gem::Version
91
+ segments:
92
+ - 3
93
+ - 0
94
+ - 18
95
+ version: 3.0.18
96
+ type: :development
97
+ version_requirements: *id005
98
+ - !ruby/object:Gem::Dependency
99
+ name: ronn
100
+ prerelease: false
101
+ requirement: &id006 !ruby/object:Gem::Requirement
102
+ none: false
103
+ requirements:
104
+ - - ">="
105
+ - !ruby/object:Gem::Version
106
+ segments:
107
+ - 0
108
+ - 7
109
+ - 3
110
+ version: 0.7.3
111
+ type: :development
112
+ version_requirements: *id006
113
+ description: Polymer simplifies the creation of sprite images for web applications, while also generating nifty Sass mixins. CSS files are available for non-Sass users.
114
+ email:
115
+ - hi@antw.me
116
+ executables:
117
+ - polymer
118
+ extensions: []
119
+
120
+ extra_rdoc_files:
121
+ - History.md
122
+ - LICENSE
123
+ - README.md
124
+ files:
125
+ - Gemfile
126
+ - History.md
127
+ - LICENSE
128
+ - README.md
129
+ - Rakefile
130
+ - bin/polymer
131
+ - lib/polymer.rb
132
+ - lib/polymer/cache.rb
133
+ - lib/polymer/cli.rb
134
+ - lib/polymer/core_ext.rb
135
+ - lib/polymer/css_generator.rb
136
+ - lib/polymer/deviant_finder.rb
137
+ - lib/polymer/dsl.rb
138
+ - lib/polymer/optimisation.rb
139
+ - lib/polymer/project.rb
140
+ - lib/polymer/sass_generator.rb
141
+ - lib/polymer/source.rb
142
+ - lib/polymer/sprite.rb
143
+ - lib/polymer/templates/polymer.tt
144
+ - lib/polymer/templates/sass_mixins.erb
145
+ - lib/polymer/templates/sources/one/book.png
146
+ - lib/polymer/templates/sources/one/box-label.png
147
+ - lib/polymer/templates/sources/one/calculator.png
148
+ - lib/polymer/templates/sources/one/calendar-month.png
149
+ - lib/polymer/templates/sources/one/camera.png
150
+ - lib/polymer/templates/sources/one/eraser.png
151
+ - lib/polymer/templates/sources/two/inbox-image.png
152
+ - lib/polymer/templates/sources/two/magnet.png
153
+ - lib/polymer/templates/sources/two/newspaper.png
154
+ - lib/polymer/templates/sources/two/television.png
155
+ - lib/polymer/templates/sources/two/wand-hat.png
156
+ - lib/polymer/templates/sources/two/wooden-box-label.png
157
+ - lib/polymer/version.rb
158
+ - polymer.gemspec
159
+ - lib/polymer/man/polymer-bond.1
160
+ - lib/polymer/man/polymer-bond.1.txt
161
+ - lib/polymer/man/polymer-init.1
162
+ - lib/polymer/man/polymer-init.1.txt
163
+ - lib/polymer/man/polymer-optimise.1
164
+ - lib/polymer/man/polymer-optimise.1.txt
165
+ - lib/polymer/man/polymer-position.1
166
+ - lib/polymer/man/polymer-position.1.txt
167
+ - lib/polymer/man/polymer.1
168
+ - lib/polymer/man/polymer.1.txt
169
+ - lib/polymer/man/polymer.5
170
+ - lib/polymer/man/polymer.5.txt
171
+ has_rdoc: true
172
+ homepage: http://github.com/antw/polymer
173
+ licenses: []
174
+
175
+ post_install_message:
176
+ rdoc_options:
177
+ - --charset=UTF-8
178
+ require_paths:
179
+ - lib
180
+ required_ruby_version: !ruby/object:Gem::Requirement
181
+ none: false
182
+ requirements:
183
+ - - ">="
184
+ - !ruby/object:Gem::Version
185
+ segments:
186
+ - 0
187
+ version: "0"
188
+ required_rubygems_version: !ruby/object:Gem::Requirement
189
+ none: false
190
+ requirements:
191
+ - - ">"
192
+ - !ruby/object:Gem::Version
193
+ segments:
194
+ - 1
195
+ - 3
196
+ - 1
197
+ version: 1.3.1
198
+ requirements: []
199
+
200
+ rubyforge_project: polymer
201
+ rubygems_version: 1.3.7
202
+ signing_key:
203
+ specification_version: 3
204
+ summary: Creates sprites for web applications
205
+ test_files: []
206
+