ionfish-stylish 0.1.5 → 0.1.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/History.txt CHANGED
@@ -1,3 +1,12 @@
1
+ === Version 0.1.6 (2009-06-02)
2
+
3
+ API polish
4
+ * New Stylesheet#print method to serialise a tree to a file.
5
+ * Avoid incomprehensible stack traces by raising an explicit error if a user
6
+ fails to define a variable when serialising a stylesheet.
7
+ * Add support for the background-clip property to the Background class.
8
+
9
+
1
10
  === Version 0.1.5 (2009-05-03)
2
11
 
3
12
  Improved background support
data/Rakefile CHANGED
@@ -6,7 +6,7 @@ begin
6
6
  s.name = "stylish"
7
7
  s.summary = "Write CSS with Ruby"
8
8
  s.email = "benedict@eastaugh.net"
9
- s.homepage = "http://github.com/ionfish/stylish"
9
+ s.homepage = "http://ionfish.github.com/stylish/"
10
10
  s.description = "A Ruby library for generating cascading stylesheets."
11
11
  s.authors = ["Benedict Eastaugh"]
12
12
  end
data/VERSION.yml CHANGED
@@ -1,4 +1,4 @@
1
1
  ---
2
2
  :minor: 1
3
- :patch: 5
3
+ :patch: 6
4
4
  :major: 0
data/lib/stylish/core.rb CHANGED
@@ -37,6 +37,17 @@ module Stylish
37
37
  return "" if @nodes.empty?
38
38
  @nodes.map {|node| node.to_s(symbols) }.join(self.class.format)
39
39
  end
40
+
41
+ # A convenience method to print the stylesheet to a file.
42
+ def print(filename, symbols = {})
43
+ serialised = self.to_s(symbols)
44
+
45
+ File.open(filename, "w+") do |f|
46
+ f.puts(serialised)
47
+ end
48
+
49
+ serialised
50
+ end
40
51
  end
41
52
 
42
53
  # Rule objects represent CSS rules, and serialise to them. They possess one
@@ -54,6 +54,7 @@ module Stylish
54
54
  [:repeat, "background-repeat"],
55
55
  [:position, "background-position"],
56
56
  [:attachment, "background-attachment"],
57
+ [:clip, "background-clip"],
57
58
  [:origin, "background-origin"],
58
59
  [:break, "background-break"],
59
60
  [:compressed]]
@@ -63,6 +64,7 @@ module Stylish
63
64
  ATTACHMENT_VALUES = ["scroll", "fixed", "local"]
64
65
  ORIGIN_VALUES = ["border-box", "padding-box", "content-box"]
65
66
  BREAK_VALUES = ["bounding-box", "each-box", "continuous"]
67
+ CLIP_VALUES = ORIGIN_VALUES | ["no-clip"]
66
68
 
67
69
  PROPERTIES.each do |name, value|
68
70
  attr_reader name
@@ -170,10 +172,32 @@ module Stylish
170
172
  end
171
173
  end
172
174
 
175
+ # The background-clip property specifies the background painting area.
176
+ #
177
+ # clipped = Background.new :clip => "no-clip"
178
+ # clipped.to_s # => "background-clip:no-clip;"
179
+ #
180
+ def clip=(clip)
181
+ @clip = clip if CLIP_VALUES.include? clip
182
+ end
183
+
184
+ # The background-clip property is a CSS3 property and can take multiple
185
+ # values.
186
+ #
187
+ # clipper = Background.new :clips => ["border-box", "padding-box"]
188
+ # clipper.to_s # => "background-clip:border-box, padding-box;"
189
+ #
190
+ def clips=(clips)
191
+ @clip = clips.inject(PropertyBundle.new) do |cs, c|
192
+ cs << c if CLIP_VALUES.include? c
193
+ cs
194
+ end
195
+ end
196
+
173
197
  # The background-origin property specifies the background positioning area.
174
198
  #
175
199
  # original = Background.new :origin => "content-box"
176
- # original.to_s # => background-origin:content-box;
200
+ # original.to_s # => "background-origin:content-box;"
177
201
  #
178
202
  def origin=(origin)
179
203
  @origin = origin if ORIGIN_VALUES.include? origin
@@ -183,7 +207,7 @@ module Stylish
183
207
  # values.
184
208
  #
185
209
  # origs = Background.new :origin => ["padding-box", "content-box"]
186
- # origs.to_s # => background-origin:padding-box, content-box;
210
+ # origs.to_s # => "background-origin:padding-box, content-box;"
187
211
  #
188
212
  def origins=(origins)
189
213
  @origin = origins.inject(PropertyBundle.new) do |os, o|
@@ -36,6 +36,8 @@ module Stylish
36
36
  end
37
37
  end
38
38
 
39
+ private
40
+
39
41
  def accept_format(pattern, default)
40
42
  @format_pattern = pattern if pattern.is_a? Regexp
41
43
  self.format = default
@@ -138,7 +138,12 @@ module Stylish
138
138
  replaceable = name_or_hash || @name
139
139
 
140
140
  if replaceable.is_a? Symbol
141
- symbol_table[replaceable]
141
+ if symbol_table[replaceable]
142
+ symbol_table[replaceable]
143
+ else
144
+ raise UndefinedVariable,
145
+ ":#{replaceable.to_s} could not be located in the symbol table."
146
+ end
142
147
  elsif replaceable.is_a?(Hash) || replaceable.is_a?(Array)
143
148
  replaceable.to_a.inject(replaceable.class.new) do |acc, el|
144
149
  if acc.is_a? Hash
data/lib/stylish.rb CHANGED
@@ -12,4 +12,6 @@ module Stylish
12
12
  require STYLISH_PATH + 'extended'
13
13
  require STYLISH_PATH + 'color'
14
14
  require STYLISH_PATH + 'generate'
15
+
16
+ class UndefinedVariable < ArgumentError; end
15
17
  end
@@ -77,6 +77,13 @@ class BackgroundTest < Test::Unit::TestCase
77
77
  end
78
78
  end
79
79
 
80
+ def test_clips
81
+ clipper = Stylish::Background.new :clips => ["no-clip", "content-box"]
82
+
83
+ assert_equal(2, clipper.clip.length)
84
+ assert_equal("background-clip:no-clip, content-box;", clipper.to_s)
85
+ end
86
+
80
87
  def test_origins
81
88
  original = Stylish::Background.new :origins => ["border-box", "padding-box"]
82
89
 
@@ -94,4 +94,14 @@ class GenerateTest < Test::Unit::TestCase
94
94
  "background-position:left top, right top, right bottom, left bottom;}",
95
95
  style.to_s({:pos => "bottom"}))
96
96
  end
97
+
98
+ def test_undefined_variables
99
+ style = Stylish.generate do
100
+ body :color => :super_colour
101
+ end
102
+
103
+ assert_raise Stylish::UndefinedVariable do
104
+ style.to_s({})
105
+ end
106
+ end
97
107
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ionfish-stylish
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.5
4
+ version: 0.1.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Benedict Eastaugh
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-05-03 00:00:00 -07:00
12
+ date: 2009-06-02 00:00:00 -07:00
13
13
  default_executable:
14
14
  dependencies: []
15
15
 
@@ -51,7 +51,7 @@ files:
51
51
  - test/tree_test.rb
52
52
  - test/variable_test.rb
53
53
  has_rdoc: true
54
- homepage: http://github.com/ionfish/stylish
54
+ homepage: http://ionfish.github.com/stylish/
55
55
  post_install_message:
56
56
  rdoc_options:
57
57
  - --charset=UTF-8