roadie 3.0.0 → 3.0.1

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: fb9d9810978beb19ef7c13d2ef8953827b418bb1
4
- data.tar.gz: db5db2dc87d93790b131fd0b3c515e9c24114525
3
+ metadata.gz: 3e46e63eac0d8ed2687129918a809ae20203b1e3
4
+ data.tar.gz: 5e6e1a556dbc197c61b5d209f85c123ae1075e1c
5
5
  SHA512:
6
- metadata.gz: 7cf63f4924682f07f21960926b8b804e9d82e7db8b8c90b2e658557983e9e098534841b823d162736a3d3cc973c23f568987db3e3911fbadcdc0234998c09587
7
- data.tar.gz: c65545723737f33444e7c2797a8b01b288d0945a556100217fe7b0f86748bcfbc00908e1cd2204ea21fe26b543f0ebbf40e510831ba681fa6f66cc43ec67e981
6
+ metadata.gz: 3dd556c62999f098e98863d52292b7bb80752695ba68fe9d2309c791334f5ae950b47717482a7f1a18fd00284f84c5eae404f7747d26287ee8a34891bd1c7759
7
+ data.tar.gz: 1bbd2fbc9ef860af00a4b1da17507e341679ee555e11447749103958383d5713fed349cd73b68e928103309283dea9342c35a49a69d7d1dfc4b549c1e3fe1d14
data/Changelog.md CHANGED
@@ -1,9 +1,20 @@
1
1
  ### dev
2
2
 
3
- [full changelog](https://github.com/Mange/roadie/compare/v3.0.0...master)
3
+ [full changelog](https://github.com/Mange/roadie/compare/v3.0.1...master)
4
4
 
5
5
  * Nothing yet.
6
6
 
7
+ ### 3.0.1
8
+
9
+ [full changelog](https://github.com/Mange/roadie/compare/v3.0.0...v3.0.1)
10
+
11
+ * Enhancements:
12
+ * `CssNotFound` can take a provider which will be shown in error messages.
13
+ * Bug fixes:
14
+ * URL rewriter no longer raises on absolute URLs that cannot be parsed by `URI`. Absolute URLs are completely ignored.
15
+ * URL rewriter supports urls without a scheme (like `//assets.myapp.com/foo`).
16
+ * URL rewriter no longer crashes on absolute URLs without a path (like `myapp://`).
17
+
7
18
  ### 3.0.0
8
19
 
9
20
  [full changelog](https://github.com/Mange/roadie/compare/v3.0.0.pre1...v3.0.0)
data/README.md CHANGED
@@ -107,7 +107,7 @@ Example:
107
107
 
108
108
  ```ruby
109
109
  # /home/user/foo/stylesheets/primary.css
110
- body { color: blue; }
110
+ body { color: green; }
111
111
 
112
112
  # /home/user/foo/script.rb
113
113
  html = <<-HTML
@@ -176,7 +176,7 @@ class UserAssetsProvider
176
176
  end
177
177
 
178
178
  def find_stylesheet!(name)
179
- find_stylesheet(name) or raise Roadie::CssNotFound.new(name)
179
+ find_stylesheet(name) or raise Roadie::CssNotFound.new(name, "does not match a user stylesheet", self)
180
180
  end
181
181
 
182
182
  # Instead of implementing #find_stylesheet!, you could also:
@@ -243,7 +243,7 @@ Tested with [Travis CI](http://travis-ci.org) using:
243
243
 
244
244
  Let me know if you want any other VM supported officially.
245
245
 
246
- Rubinius support is experimental since it it currently hindered by a Rubinius bug that will probably be fixed shortly.
246
+ Rubinius support is experimental since it is currently hindered by a Rubinius bug that will probably be fixed shortly.
247
247
 
248
248
  ### Versioning ###
249
249
 
@@ -274,7 +274,7 @@ Documentation
274
274
 
275
275
  * [Online documentation for gem](http://rubydoc.info/gems/roadie/frames)
276
276
  * [Online documentation for master](http://rubydoc.info/github/Mange/roadie/master/frames)
277
- * [Online documentation for Roadie 2.4](http://rubydoc.info/gems/roadie/2.4/frames)
277
+ * [Online documentation for Roadie 2.4.3](http://rubydoc.info/gems/roadie/2.4.3/frames)
278
278
  * [Changelog](https://github.com/Mange/roadie/blob/master/Changelog.md)
279
279
 
280
280
  Running specs
@@ -5,7 +5,7 @@ module Roadie
5
5
  # It helps you by declaring {#find_stylesheet!} in the terms of #find_stylesheet in your own class.
6
6
  module AssetProvider
7
7
  def find_stylesheet!(name)
8
- find_stylesheet(name) or raise CssNotFound, name
8
+ find_stylesheet(name) or raise CssNotFound.new(name, nil, self)
9
9
  end
10
10
  end
11
11
  end
data/lib/roadie/errors.rb CHANGED
@@ -40,18 +40,22 @@ module Roadie
40
40
  # The name of the stylesheet that cannot be found
41
41
  attr_reader :css_name
42
42
 
43
- def initialize(css_name, extra_message = nil)
43
+ # Provider used when finding
44
+ attr_reader :provider
45
+
46
+ # TODO: Change signature in the next major version of Roadie.
47
+ def initialize(css_name, extra_message = nil, provider = nil)
44
48
  @css_name = css_name
49
+ @provider = provider
45
50
  super build_message(extra_message)
46
51
  end
47
52
 
48
53
  private
49
54
  def build_message(extra_message)
50
- if extra_message
51
- %(Could not find stylesheet "#{css_name}": #{extra_message})
52
- else
53
- %(Could not find stylesheet "#{css_name}")
54
- end
55
+ message = %(Could not find stylesheet "#{css_name}")
56
+ message << ": #{extra_message}" if extra_message
57
+ message << "\nUsed provider:\n#{provider}" if provider
58
+ message
55
59
  end
56
60
  end
57
61
  end
@@ -30,8 +30,8 @@ module Roadie
30
30
  if File.exist? file_path
31
31
  Stylesheet.new file_path, File.read(file_path)
32
32
  else
33
- clean_name = File.basename file_path
34
- raise CssNotFound.new(clean_name, %{#{file_path} does not exist. (Original name was "#{name}")})
33
+ basename = File.basename file_path
34
+ raise CssNotFound.new(basename, %{#{file_path} does not exist. (Original name was "#{name}")}, self)
35
35
  end
36
36
  end
37
37
 
@@ -44,6 +44,14 @@ module Roadie
44
44
  nil
45
45
  end
46
46
 
47
+ def to_s
48
+ list = @providers.map { |provider|
49
+ # Indent every line one level
50
+ provider.to_s.split("\n").join("\n\t")
51
+ }
52
+ "ProviderList: [\n\t#{list.join(",\n\t")}\n]"
53
+ end
54
+
47
55
  # ProviderList can be coerced to an array. This makes Array#flatten work
48
56
  # with it, among other things.
49
57
  def to_ary() to_a end
@@ -105,7 +105,9 @@ module Roadie
105
105
  end
106
106
 
107
107
  def path_is_absolute?(path)
108
- not parse_path(path).relative?
108
+ # Ruby's URI is pretty unforgiving, but roadie aims to be. Don't involve
109
+ # URI for URLs that's easy to determine to be absolute.
110
+ path =~ %r{^(\w+:)?//} || !parse_path(path).relative?
109
111
  end
110
112
 
111
113
  def parse_path(path)
@@ -1,3 +1,3 @@
1
1
  module Roadie
2
- VERSION = '3.0.0'
2
+ VERSION = '3.0.1'
3
3
  end
@@ -13,5 +13,12 @@ module Roadie
13
13
  'Could not find stylesheet "file.css": directory is missing'
14
14
  )
15
15
  end
16
+
17
+ it "shows information about used provider when given" do
18
+ provider = double("Some cool provider")
19
+ expect(CssNotFound.new('style.css', nil, provider).message).to eq(
20
+ %(Could not find stylesheet "style.css"\nUsed provider:\n#{provider})
21
+ )
22
+ end
16
23
  end
17
24
  end
@@ -64,6 +64,20 @@ module Roadie
64
64
  }.to change(provider, :size).by(-1)
65
65
  end
66
66
 
67
+ it "has a readable string represenation" do
68
+ provider = double("Provider", to_s: "Some provider")
69
+ sublist = ProviderList.new([provider, provider])
70
+ list = ProviderList.new([provider, sublist, provider])
71
+ expect(list.to_s).to eql "ProviderList: [\n" +
72
+ "\tSome provider,\n" +
73
+ "\tProviderList: [\n" +
74
+ "\t\tSome provider,\n" +
75
+ "\t\tSome provider\n" +
76
+ "\t],\n" +
77
+ "\tSome provider\n" +
78
+ "]"
79
+ end
80
+
67
81
  describe "wrapping" do
68
82
  it "creates provider lists with the arguments" do
69
83
  expect(ProviderList.wrap(test_provider)).to be_instance_of(ProviderList)
@@ -84,6 +84,21 @@ module Roadie
84
84
  it "does not touch data: URIs" do
85
85
  expect(url("data:deadbeef", host: "example.com")).to eq("data:deadbeef")
86
86
  end
87
+
88
+ it "does not touch absolute URLs without schemes" do
89
+ expect(url("//assets.myapp.com/foo.jpg", host: "example.com")).to eq("//assets.myapp.com/foo.jpg")
90
+ end
91
+
92
+ it "does not touch custom schemes" do
93
+ expect(url("myapp://", host: "example.com")).to eq("myapp://")
94
+ end
95
+
96
+ it "does not care if absolute URLs have parse errors" do
97
+ # Pipe character is invalid inside URLs, but that does not stop a whole
98
+ # lot of templating/emailing systems for using them as template
99
+ # markers.
100
+ expect(url("https://foo.com/%|MARKETING_TOKEN|%", host: "example.com")).to eq("https://foo.com/%|MARKETING_TOKEN|%")
101
+ end
87
102
  end
88
103
 
89
104
  # URLs in resources that are not based inside the root requires that we may
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: roadie
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.0.0
4
+ version: 3.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Magnus Bergmark
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-06-27 00:00:00.000000000 Z
11
+ date: 2014-08-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: nokogiri