polymer 1.0.0.beta.5 → 1.0.0.beta.6

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/lib/polymer/cache.rb CHANGED
@@ -14,6 +14,10 @@ module Polymer
14
14
  :paths => {}
15
15
  }
16
16
 
17
+ # If the first three characters of a path match this, the path isn't
18
+ # in a subtree of the project.
19
+ NON_SUBTREE = '../'.freeze
20
+
17
21
  # Returns the path to the cache file.
18
22
  #
19
23
  # @return [Pathname]
@@ -22,15 +26,16 @@ module Polymer
22
26
 
23
27
  # Creates a new Cache.
24
28
  #
25
- # If the given +path+ does not exist, an empty cache instance will be
26
- # created, and calling +write+ will create a new file at +path+.
29
+ # If the project's +cache+ method returns a path which does not exist, the
30
+ # path -- and parent directories -- will be created.
27
31
  #
28
- # @param [Pathname] path
29
- # Path to the cache file to be loaded. If no +path+ is given, the cache
30
- # will operate in-memory only and +write+ is disabled.
32
+ # @param [Polymer::Project] project
33
+ # The project whose cache file is to be loaded. If no +project+ is
34
+ # given, the cache will operate in-memory only and +write+ is disabled.
31
35
  #
32
- def initialize(path = nil)
33
- @path = path
36
+ def initialize(project = nil)
37
+ @project = project
38
+ @path = project && project.cachefile
34
39
 
35
40
  if @path and @path.file?
36
41
  @cache = YAML.load_file @path
@@ -59,7 +64,13 @@ module Polymer
59
64
  # @return [Boolean]
60
65
  #
61
66
  def fresh?(thing)
62
- return false if thing.is_a?(Sprite) and not thing.save_path.file?
67
+ if thing.is_a?(Sprite) and not thing.save_path.file?
68
+ # If this is a data URI sprite a non-existent file is normal.
69
+ if ! @project || ! @project.data_uri_sprites.include?(thing)
70
+ return false
71
+ end
72
+ end
73
+
63
74
  return false if thing.is_a?(Pathname) and not thing.cleanpath.file?
64
75
 
65
76
  @cache[section(thing)][key(thing)] == digest(thing)
@@ -83,19 +94,19 @@ module Polymer
83
94
  @cache[section(thing)].delete(key(thing))
84
95
  end
85
96
 
86
- # Removes any sprites no longer present in a project, and any cached
97
+ # Removes any sprites no longer present in the project, and any cached
87
98
  # images which cannot be located.
88
99
  #
89
- # @param [Flexo::Project] project
90
- #
91
- def clean!(project)
100
+ def clean!
92
101
  return false unless @path
93
102
 
94
103
  @cache[:paths].delete_if do |key, _|
95
- not @path.dirname.join(key).file?
104
+ not @path.dirname.join(key).file? or
105
+ # Remove any path to a file not in a subtree (:data_uri images).
106
+ key[0..2] == NON_SUBTREE
96
107
  end
97
108
 
98
- sprite_keys = project.sprites.map { |sprite| key(sprite) }
109
+ sprite_keys = @project.sprites.map { |sprite| key(sprite) }
99
110
 
100
111
  @cache[:sprites].delete_if do |key, _|
101
112
  not sprite_keys.include?(key)
@@ -113,6 +124,8 @@ module Polymer
113
124
  def write
114
125
  return false unless @path
115
126
 
127
+ clean!
128
+
116
129
  @path.open('w') do |file|
117
130
  file.puts YAML.dump(@cache)
118
131
  end
data/lib/polymer/cli.rb CHANGED
@@ -83,9 +83,6 @@ module Polymer
83
83
  end
84
84
  end
85
85
 
86
- # Clean up the cache, removing sprites which no longer exist.
87
- project.cache.clean!(project)
88
-
89
86
  # Finish by writing the new cache.
90
87
  project.cache.write
91
88
 
@@ -234,7 +231,7 @@ module Polymer
234
231
  end
235
232
  end
236
233
 
237
- cache.clean!(project) if project
234
+ cache.clean! if project
238
235
  cache.write
239
236
  end
240
237
 
@@ -2,7 +2,7 @@
2
2
  .\" http://github.com/rtomayko/ronn/tree/0.7.3
3
3
  .ad l
4
4
  .
5
- .TH "POLYMER\-BOND" "1" "October 2010" "POLYMER 1.0.0.BETA.5" "Polymer Manual"
5
+ .TH "POLYMER\-BOND" "1" "November 2010" "POLYMER 1.0.0.BETA.6" "Polymer Manual"
6
6
  .
7
7
  .SH "NAME"
8
8
  \fBpolymer\-bond\fR \- Create sprite images defined in your \.polymer file
@@ -63,4 +63,4 @@ SEE ALSO
63
63
 
64
64
 
65
65
 
66
- POLYMER 1.0.0.BETA.5 October 2010 POLYMER-BOND(1)
66
+ POLYMER 1.0.0.BETA.6 November 2010 POLYMER-BOND(1)
@@ -2,7 +2,7 @@
2
2
  .\" http://github.com/rtomayko/ronn/tree/0.7.3
3
3
  .ad l
4
4
  .
5
- .TH "POLYMER\-INIT" "1" "October 2010" "POLYMER 1.0.0.BETA.5" "Polymer Manual"
5
+ .TH "POLYMER\-INIT" "1" "November 2010" "POLYMER 1.0.0.BETA.6" "Polymer Manual"
6
6
  .
7
7
  .SH "NAME"
8
8
  \fBpolymer\-init\fR \- Create a new Polymer project in the current directory
@@ -39,4 +39,4 @@ OPTIONS
39
39
 
40
40
 
41
41
 
42
- POLYMER 1.0.0.BETA.5 October 2010 POLYMER-INIT(1)
42
+ POLYMER 1.0.0.BETA.6 November 2010 POLYMER-INIT(1)
@@ -2,7 +2,7 @@
2
2
  .\" http://github.com/rtomayko/ronn/tree/0.7.3
3
3
  .ad l
4
4
  .
5
- .TH "POLYMER\-OPTIMISE" "1" "October 2010" "POLYMER 1.0.0.BETA.5" "Polymer Manual"
5
+ .TH "POLYMER\-OPTIMISE" "1" "November 2010" "POLYMER 1.0.0.BETA.6" "Polymer Manual"
6
6
  .
7
7
  .SH "NAME"
8
8
  \fBpolymer\-optimise\fR \- Optimise PNG images
@@ -27,4 +27,4 @@ DESCRIPTION
27
27
 
28
28
 
29
29
 
30
- POLYMER 1.0.0.BETA.5 October 2010 POLYMER-OPTIMISE(1)
30
+ POLYMER 1.0.0.BETA.6 November 2010 POLYMER-OPTIMISE(1)
@@ -2,7 +2,7 @@
2
2
  .\" http://github.com/rtomayko/ronn/tree/0.7.3
3
3
  .ad l
4
4
  .
5
- .TH "POLYMER\-POSITION" "1" "October 2010" "POLYMER 1.0.0.BETA.5" "Polymer Manual"
5
+ .TH "POLYMER\-POSITION" "1" "November 2010" "POLYMER 1.0.0.BETA.6" "Polymer Manual"
6
6
  .
7
7
  .SH "NAME"
8
8
  \fBpolymer\-position\fR \- Information about your sprite sources
@@ -39,4 +39,4 @@ DESCRIPTION
39
39
 
40
40
 
41
41
 
42
- POLYMER 1.0.0.BETA.5 October 2010 POLYMER-POSITION(1)
42
+ POLYMER 1.0.0.BETA.6 November 2010 POLYMER-POSITION(1)
@@ -2,7 +2,7 @@
2
2
  .\" http://github.com/rtomayko/ronn/tree/0.7.3
3
3
  .ad l
4
4
  .
5
- .TH "POLYMER" "1" "October 2010" "POLYMER 1.0.0.BETA.5" "Polymer Manual"
5
+ .TH "POLYMER" "1" "November 2010" "POLYMER 1.0.0.BETA.6" "Polymer Manual"
6
6
  .
7
7
  .SH "NAME"
8
8
  \fBpolymer\fR \- Image spriting for web applications
@@ -57,4 +57,4 @@ SEE ALSO
57
57
 
58
58
 
59
59
 
60
- POLYMER 1.0.0.BETA.5 October 2010 POLYMER(1)
60
+ POLYMER 1.0.0.BETA.6 November 2010 POLYMER(1)
@@ -2,7 +2,7 @@
2
2
  .\" http://github.com/rtomayko/ronn/tree/0.7.3
3
3
  .ad l
4
4
  .
5
- .TH "\.POLYMER" "5" "October 2010" "POLYMER 1.0.0.BETA.5" "Polymer Manual"
5
+ .TH "\.POLYMER" "5" "November 2010" "POLYMER 1.0.0.BETA.6" "Polymer Manual"
6
6
  .
7
7
  .SH "NAME"
8
8
  \fB\.polymer\fR \- a format for describing image sprites and their sources
@@ -156,4 +156,4 @@ SEE ALSO
156
156
 
157
157
 
158
158
 
159
- POLYMER 1.0.0.BETA.5 October 2010 .POLYMER(5)
159
+ POLYMER 1.0.0.BETA.6 November 2010 .POLYMER(5)
@@ -30,13 +30,20 @@ module Polymer
30
30
  #
31
31
  attr_reader :sass
32
32
 
33
- # @return [Pathname, false]
33
+ # @return [Pathname]
34
34
  # The path to the CSS file.
35
35
  # @return [false]
36
36
  # False if CSS generation has been disabled.
37
37
  #
38
38
  attr_reader :css
39
39
 
40
+ # @return [Pathname]
41
+ # Returns the path to the project cache file.
42
+ # @return [false]
43
+ # Returns false if the project cache is disabled.
44
+ #
45
+ attr_reader :cachefile
46
+
40
47
  # An array containing all of the sprites in the project.
41
48
  #
42
49
  # @return [Array<Polymer::Sprite>]
@@ -115,7 +122,7 @@ module Polymer
115
122
  # @return [Polymer::Cache]
116
123
  #
117
124
  def cache
118
- @cache ||= Polymer::Cache.new(@cachefile)
125
+ @cache ||= Polymer::Cache.new(self)
119
126
  end
120
127
 
121
128
  # Returns a path to a temporary directory which may be used by this
@@ -27,9 +27,24 @@ module Polymer
27
27
  save_to = project.sass + '_polymer.sass'
28
28
  end
29
29
 
30
+ # We need to keep track of any existing data URI values since, if the
31
+ # sprite is unchanged, we won't have access to it.
32
+ existing_data_uris = extract_existing_data_uris(
33
+ save_to, project.data_uri_sprites)
34
+
30
35
  data_uris = project.data_uri_sprites.inject({}) do |memo, sprite|
31
- data = [sprite.save_path.read].pack('m').strip
32
- memo[sprite.name] = "data:image/png;base64,#{data}"
36
+ if sprite.save_path.file?
37
+ data = [sprite.save_path.read].pack('m')
38
+
39
+ # Ruby < 1.9 doesn't support pack('m0'),
40
+ # so we have to do it manually.
41
+ data.gsub!(/\n/, '')
42
+
43
+ memo[sprite.name] = "data:image/png;base64,#{data}"
44
+ else
45
+ memo[sprite.name] = existing_data_uris[sprite.name]
46
+ end
47
+
33
48
  memo
34
49
  end
35
50
 
@@ -40,5 +55,22 @@ module Polymer
40
55
  true
41
56
  end # self.generate
42
57
 
58
+ # Given a path to a Sass file, extracts the existing data URI strings.
59
+ #
60
+ def self.extract_existing_data_uris(path, sprites)
61
+ return {} unless path.file?
62
+
63
+ sass = path.read.split("\n")
64
+
65
+ sprites.inject({}) do |memo, sprite|
66
+ if index = sass.index(".#{sprite.name}_data")
67
+ # The data is contained on the line following the selector.
68
+ memo[sprite.name] = sass[index + 1].scan(/url\((.+)\)/).first.first
69
+ end
70
+
71
+ memo
72
+ end
73
+ end
74
+
43
75
  end # SassGenerator
44
76
  end # Polymer
@@ -80,6 +80,14 @@ module Polymer
80
80
  Digest::SHA256.hexdigest(sources.map { |source| source.digest }.join)
81
81
  end
82
82
 
83
+ # A sprite is equal to another sprite if the names are the same.
84
+ #
85
+ # @return [Boolean]
86
+ #
87
+ def ==(other)
88
+ other.respond_to?(:name) and other.name == name
89
+ end
90
+
83
91
  # Saves the composited sprite to disk.
84
92
  #
85
93
  # In the event that the sprite has no sources, +save+ will return false
@@ -1,4 +1,4 @@
1
1
  module Polymer
2
2
  # The current version of the Polymer library.
3
- VERSION = '1.0.0.beta.5'.freeze
3
+ VERSION = '1.0.0.beta.6'.freeze
4
4
  end
data/polymer.gemspec CHANGED
@@ -8,8 +8,8 @@ Gem::Specification.new do |s|
8
8
  # rake task. It it completely safe to edit them, but using the rake task
9
9
  # is easier.
10
10
  s.name = 'polymer'
11
- s.version = '1.0.0.beta.5'
12
- s.date = '2010-10-31'
11
+ s.version = '1.0.0.beta.6'
12
+ s.date = '2010-11-01'
13
13
  s.rubyforge_project = 'polymer'
14
14
 
15
15
  # You may safely edit the section below.
metadata CHANGED
@@ -1,14 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: polymer
3
3
  version: !ruby/object:Gem::Version
4
+ hash: 62196367
4
5
  prerelease: true
5
6
  segments:
6
7
  - 1
7
8
  - 0
8
9
  - 0
9
10
  - beta
10
- - 5
11
- version: 1.0.0.beta.5
11
+ - 6
12
+ version: 1.0.0.beta.6
12
13
  platform: ruby
13
14
  authors:
14
15
  - Anthony Williams
@@ -16,7 +17,7 @@ autorequire:
16
17
  bindir: bin
17
18
  cert_chain: []
18
19
 
19
- date: 2010-10-31 00:00:00 +01:00
20
+ date: 2010-11-01 00:00:00 +00:00
20
21
  default_executable:
21
22
  dependencies:
22
23
  - !ruby/object:Gem::Dependency
@@ -27,6 +28,7 @@ dependencies:
27
28
  requirements:
28
29
  - - ">="
29
30
  - !ruby/object:Gem::Version
31
+ hash: 25
30
32
  segments:
31
33
  - 2
32
34
  - 13
@@ -41,6 +43,7 @@ dependencies:
41
43
  requirements:
42
44
  - - ">="
43
45
  - !ruby/object:Gem::Version
46
+ hash: 39
44
47
  segments:
45
48
  - 0
46
49
  - 14
@@ -56,6 +59,7 @@ dependencies:
56
59
  requirements:
57
60
  - - ">="
58
61
  - !ruby/object:Gem::Version
62
+ hash: 62196421
59
63
  segments:
60
64
  - 2
61
65
  - 0
@@ -73,6 +77,7 @@ dependencies:
73
77
  requirements:
74
78
  - - ">="
75
79
  - !ruby/object:Gem::Version
80
+ hash: 53
76
81
  segments:
77
82
  - 0
78
83
  - 8
@@ -88,6 +93,7 @@ dependencies:
88
93
  requirements:
89
94
  - - ">="
90
95
  - !ruby/object:Gem::Version
96
+ hash: 35
91
97
  segments:
92
98
  - 3
93
99
  - 0
@@ -103,6 +109,7 @@ dependencies:
103
109
  requirements:
104
110
  - - ">="
105
111
  - !ruby/object:Gem::Version
112
+ hash: 5
106
113
  segments:
107
114
  - 0
108
115
  - 7
@@ -182,6 +189,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
182
189
  requirements:
183
190
  - - ">="
184
191
  - !ruby/object:Gem::Version
192
+ hash: 3
185
193
  segments:
186
194
  - 0
187
195
  version: "0"
@@ -190,6 +198,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
190
198
  requirements:
191
199
  - - ">"
192
200
  - !ruby/object:Gem::Version
201
+ hash: 25
193
202
  segments:
194
203
  - 1
195
204
  - 3