gretel 3.0.8 → 3.0.9

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: f6ea439e9c5de59ad623d0f2f90affb3ec5a4815
4
- data.tar.gz: d95784f691b047b1dd58f324eecdc8157beb78b0
3
+ metadata.gz: 0080b505b59c5b36fb677893d4eb7eb423653392
4
+ data.tar.gz: 6cab21d17741ad215d56a26f7d12c20c833bcc9d
5
5
  SHA512:
6
- metadata.gz: 0f2e1c8b30834d532aaa245ab4aba2b01738712108ae7f00ce990db684c9a4821d7da21ce90ca8abdbc7e1eccecbcd6836ae19e0b9a014b6d2a49fb3ebb00cb8
7
- data.tar.gz: 7c6975eb29de22545495a7e990970527b5794876ec360c8b776a1b26b2a2c57b82bf66deb55984b06cbf0f46213279edb59a774be3e552d2d2c2abb2ff407473
6
+ metadata.gz: a39a87e3267b845a254a72a1d7478d987cff71d6484de22326aa28c7eb8476d22d6500df7c376fa5407ba9d65ad82d6f975fa2d70916e2169954c9bbbd7b7938
7
+ data.tar.gz: d02a3bc7312ab98ad6b0b6adc68c38454e655c5bb29db4fbf140871cec41c8eb59dabc09170b9d94b8f9c9b24c64a4db659e27f32ac3d04411f9ad136df2cdd5
@@ -1,9 +1,12 @@
1
1
  language: ruby
2
+ sudo: false
2
3
  rvm:
4
+ - 2.2.0
3
5
  - 2.1.0
4
6
  - 2.0.0
5
7
  - 1.9.3
6
8
  gemfile:
9
+ - gemfiles/Gemfile-rails.3.1.x
7
10
  - gemfiles/Gemfile-rails.3.2.x
8
11
  - gemfiles/Gemfile-rails.4.0.x
9
12
  - gemfiles/Gemfile-rails.4.1.x
@@ -1,5 +1,13 @@
1
1
  # Changelog
2
2
 
3
+ ## Version 3.0.9
4
+ * Adds breadcrumbs option `link_current_to_request_path` to link the current breadcrumb to the request path(#28 via #29)
5
+ * Fixes semantic breadcrumbs when the last item has no link (via #55)
6
+ * Downgrades Rails dependency to 3.1 (via #56)
7
+ * Fixes jRuby issue with `Rails::Application` constant (via #50)
8
+ * Fixes deprecation warnings for `alias_method_chain` (via #66)
9
+ * Updated coprights (via #63)
10
+
3
11
  ## Version 3.0.8
4
12
  * Parent breadcrumbs can now also be inferred from models responding to `model_name`.
5
13
 
@@ -45,4 +53,4 @@
45
53
  * No longer supports procs for link text or URL as this is unnecessary when you can pass arguments to the block anyway.
46
54
  * It now accepts multiple arguments for `crumb` and `parent` (see the readme).
47
55
  * Breadcrumbs are now rendered with `<%= breadcrumbs %>`, although you can still use the old `<%= breadcrumb %>` (without *s*).
48
- * You can now access view helpers from inside `Gretel::Crumbs.layout do .. end`.
56
+ * You can now access view helpers from inside `Gretel::Crumbs.layout do .. end`.
data/Gemfile CHANGED
@@ -5,9 +5,6 @@ source "http://rubygems.org"
5
5
  # development dependencies will be added by default to the :development group.
6
6
  gemspec
7
7
 
8
- # jquery-rails is used by the dummy application
9
- gem "jquery-rails"
10
-
11
8
  # Declare any dependencies that are still in development here instead of in
12
9
  # your gemspec. These might include edge Rails or gems from your path or
13
10
  # Git. Remember to move these dependencies to your gemspec before releasing
@@ -15,3 +12,12 @@ gem "jquery-rails"
15
12
 
16
13
  # To use debugger
17
14
  # gem 'debugger'
15
+
16
+ group :development do
17
+ # jquery-rails is used by the dummy application
18
+ gem "jquery-rails"
19
+ end
20
+
21
+ group :test do
22
+ gem 'test-unit', '~> 3.0' if RUBY_VERSION >= "2.2"
23
+ end
@@ -1,4 +1,4 @@
1
- Copyright (c) 2010-2013 Lasse Bunk
1
+ Copyright (c) 2010-2016 Lasse Bunk
2
2
 
3
3
  MIT License
4
4
 
@@ -19,4 +19,4 @@ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
19
  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
20
  LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
21
  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
- WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md CHANGED
@@ -87,6 +87,7 @@ Option | Description
87
87
  :autoroot | Whether it should automatically link to the `:root` crumb if no parent is given. | True
88
88
  :display_single_fragment | Whether it should display the breadcrumb if it includes only one link. | False
89
89
  :link_current | Whether the current crumb should be linked to. | False
90
+ :link_current_to_request_path | Whether the current crumb should always link to the current request path. *Note:* This option will have no effect unless `:link_current` is set to `true`. | True
90
91
  :semantic | Whether it should generate [semantic breadcrumbs](http://support.google.com/webmasters/bin/answer.py?hl=en&answer=185417). | False
91
92
  :id | ID for the breadcrumbs container. | None
92
93
  :class | CSS class for the breadcrumbs container. Can be set to `nil` for no class. | `"breadcrumbs"`
@@ -133,7 +134,7 @@ crumb :project_issues do |project|
133
134
  parent project # inferred to :project
134
135
  end
135
136
 
136
- # Child
137
+ # Child
137
138
  crumb :issue do |issue|
138
139
  link issue.name, issue_path(issue)
139
140
  parent :project_issues, issue.project
@@ -333,6 +334,7 @@ in `config/breadcrumbs.rb`.
333
334
 
334
335
  * [Full documentation](http://rubydoc.info/gems/gretel)
335
336
  * [Changelog](https://github.com/lassebunk/gretel/blob/master/CHANGELOG.md)
337
+ * [Tutorial on using Gretel](http://www.sitepoint.com/breadcrumbs-rails-gretel/) (Sitepoint)
336
338
 
337
339
  ## Versioning
338
340
 
@@ -347,17 +349,20 @@ To contribute:
347
349
  1. Fork the project
348
350
  2. Create your feature branch (`git checkout -b my-new-feature`)
349
351
  3. Make your changes
350
- 4. Add tests
351
- 5. Run `rake` to make sure all tests pass
352
- 6. Commit your changes (`git commit -am 'Add new feature'`)
353
- 7. Push to the branch (`git push origin my-new-feature`)
354
- 8. Create new pull request
352
+ 4. Add/Fix tests
353
+ 5. Prepare database for testing: `cd test/dummy; rake db:migrate; rake db:test:prepare; cd ../..`
354
+ 6. Run `rake` to make sure all tests pass
355
+ 7. Commit your changes (`git commit -am 'Add new feature'`)
356
+ 8. Push to the branch (`git push origin my-new-feature`)
357
+ 9. Create new pull request
355
358
 
356
359
  Thanks.
357
360
 
358
361
  ## Contributors
359
362
 
360
- * [See the list of contributors](https://github.com/lassebunk/gretel/graphs/contributors)
363
+ Gretel was created by [@lassebunk](https://github.com/lassebunk) and is maintained by [@WilHall](https://github.com/WilHall).
364
+
365
+ [See the list of contributors](https://github.com/lassebunk/gretel/graphs/contributors)
361
366
 
362
367
  ## And then
363
368
 
@@ -365,4 +370,4 @@ Thanks.
365
370
 
366
371
  Have fun!
367
372
 
368
- Copyright (c) 2010-2013 [Lasse Bunk](http://lassebunk.dk), released under the MIT license
373
+ Copyright (c) 2010-2016 [Lasse Bunk](http://lassebunk.dk), released under the MIT license
@@ -0,0 +1,19 @@
1
+ source "https://rubygems.org"
2
+
3
+ gem "gretel", :path => ".."
4
+
5
+ gem "rails", "~> 3.1.0"
6
+ gem "sqlite3"
7
+
8
+ # jquery-rails is used by the dummy application
9
+ gem "jquery-rails"
10
+
11
+ # Declare any dependencies that are still in development here instead of in
12
+ # your gemspec. These might include edge Rails or gems from your path or
13
+ # Git. Remember to move these dependencies to your gemspec before releasing
14
+ # your gem to rubygems.org.
15
+
16
+ # To use debugger
17
+ # gem 'debugger'
18
+
19
+ gem 'test-unit', '~> 3.0' if RUBY_VERSION >= "2.2"
@@ -15,3 +15,5 @@ gem "jquery-rails"
15
15
 
16
16
  # To use debugger
17
17
  # gem 'debugger'
18
+
19
+ gem 'test-unit', '~> 3.0' if RUBY_VERSION >= "2.2"
@@ -15,3 +15,5 @@ gem "jquery-rails"
15
15
 
16
16
  # To use debugger
17
17
  # gem 'debugger'
18
+
19
+ gem 'test-unit', '~> 3.0' if RUBY_VERSION >= "2.2"
@@ -15,3 +15,5 @@ gem "jquery-rails"
15
15
 
16
16
  # To use debugger
17
17
  # gem 'debugger'
18
+
19
+ gem 'test-unit', '~> 3.0' if RUBY_VERSION >= "2.2"
@@ -17,6 +17,6 @@ Gem::Specification.new do |gem|
17
17
  gem.test_files = gem.files.grep(%r{^test/})
18
18
  gem.require_paths = ["lib"]
19
19
 
20
- gem.add_dependency "rails", ">= 3.2.0"
20
+ gem.add_dependency "rails", ">= 3.1.0"
21
21
  gem.add_development_dependency "sqlite3"
22
- end
22
+ end
@@ -16,8 +16,8 @@ module Gretel
16
16
  # breadcrumbs set in engines.
17
17
  def breadcrumb_paths
18
18
  @breadcrumb_paths ||= begin
19
- engines = Rails::Application::Railties.respond_to?(:engines) ?
20
- Rails::Application::Railties.engines :
19
+ engines = Rails::Engine::Railties.respond_to?(:engines) ?
20
+ Rails::Engine::Railties.engines :
21
21
  Rails::Engine.subclasses.map(&:instance)
22
22
 
23
23
  engine_roots = engines.map { |e| e.config.root }
@@ -79,4 +79,4 @@ module Gretel
79
79
  end
80
80
  end
81
81
 
82
- ActionView::Base.send :include, Gretel::ViewHelpers
82
+ ActionView::Base.send :include, Gretel::ViewHelpers
@@ -1,11 +1,25 @@
1
- Gretel::Renderer.class_eval do
2
- def options_for_style_with_default_style_key(style_key)
3
- if style_key == :default
4
- Gretel.show_deprecation_warning "The :default style key is now called :inline. Please use `breadcrumbs style: :inline` instead or omit it, as it is the default."
5
- style_key = :inline
1
+ if RUBY_VERSION < "2.0"
2
+ Gretel::Renderer.class_eval do
3
+ def options_for_style_with_default_style_key(style_key)
4
+ if style_key == :default
5
+ Gretel.show_deprecation_warning "The :default style key is now called :inline. Please use `breadcrumbs style: :inline` instead or omit it, as it is the default."
6
+ style_key = :inline
7
+ end
8
+ options_for_style_without_default_style_key(style_key)
9
+ end
10
+
11
+ alias_method_chain :options_for_style, :default_style_key
12
+ end
13
+ else
14
+ module DeprecatedDefaultStyleKey
15
+ def options_for_style(style_key)
16
+ if style_key == :default
17
+ Gretel.show_deprecation_warning "The :default style key is now called :inline. Please use `breadcrumbs style: :inline` instead or omit it, as it is the default."
18
+ style_key = :inline
19
+ end
20
+ super(style_key)
6
21
  end
7
- options_for_style_without_default_style_key(style_key)
8
22
  end
9
23
 
10
- alias_method_chain :options_for_style, :default_style_key
24
+ Gretel::Renderer.send :prepend, DeprecatedDefaultStyleKey
11
25
  end
@@ -1,12 +1,27 @@
1
- Gretel::Renderer.class_eval do
2
- def options_for_render_with_show_root_alone(options = {})
3
- options = options_for_render_without_show_root_alone(options)
4
- if show_root_alone = options.delete(:show_root_alone)
5
- Gretel.show_deprecation_warning "The :show_root_alone option is deprecated and will be removed in Gretel v4.0.0. Use `breadcrumbs(display_single_fragment: #{show_root_alone.inspect})` instead."
6
- options[:display_single_fragment] = show_root_alone
1
+ if RUBY_VERSION < "2.0"
2
+ Gretel::Renderer.class_eval do
3
+ def options_for_render_with_show_root_alone(options = {})
4
+ options = options_for_render_without_show_root_alone(options)
5
+ if show_root_alone = options.delete(:show_root_alone)
6
+ Gretel.show_deprecation_warning "The :show_root_alone option is deprecated and will be removed in Gretel v4.0.0. Use `breadcrumbs(display_single_fragment: #{show_root_alone.inspect})` instead."
7
+ options[:display_single_fragment] = show_root_alone
8
+ end
9
+ options
10
+ end
11
+
12
+ alias_method_chain :options_for_render, :show_root_alone
13
+ end
14
+ else
15
+ module DeprecatedShowRootAlone
16
+ def options_for_render(options = {})
17
+ options = super(options)
18
+ if show_root_alone = options.delete(:show_root_alone)
19
+ Gretel.show_deprecation_warning "The :show_root_alone option is deprecated and will be removed in Gretel v4.0.0. Use `breadcrumbs(display_single_fragment: #{show_root_alone.inspect})` instead."
20
+ options[:display_single_fragment] = show_root_alone
21
+ end
22
+ options
7
23
  end
8
- options
9
24
  end
10
25
 
11
- alias_method_chain :options_for_render, :show_root_alone
12
- end
26
+ Gretel::Renderer.send :prepend, DeprecatedShowRootAlone
27
+ end
@@ -1,4 +1,6 @@
1
- Gretel::ViewHelpers.class_eval do
1
+ if RUBY_VERSION < "2.0"
2
+ Gretel::ViewHelpers.class_eval do
3
+
2
4
  def breadcrumbs_with_yield_links(options = {})
3
5
  if block_given?
4
6
  Gretel.show_deprecation_warning(
@@ -17,4 +19,26 @@ Gretel::ViewHelpers.class_eval do
17
19
  end
18
20
 
19
21
  alias_method_chain :breadcrumbs, :yield_links
20
- end
22
+ end
23
+ else
24
+ module DeprecatedYieldLinks
25
+ def breadcrumbs(options = {})
26
+ if block_given?
27
+ Gretel.show_deprecation_warning(
28
+ "Calling `breadcrumbs` with a block has been deprecated and will be removed in Gretel version 4.0. Please use `tap` instead. Example:\n" +
29
+ "\n" +
30
+ " breadcrumbs(autoroot: false).tap do |links|\n" +
31
+ " if links.any?\n" +
32
+ " # process links here\n" +
33
+ " end\n" +
34
+ " end\n"
35
+ )
36
+ yield gretel_renderer.render(options)
37
+ else
38
+ super(options)
39
+ end
40
+ end
41
+ end
42
+
43
+ Gretel::ViewHelpers.send :prepend, DeprecatedYieldLinks
44
+ end
@@ -8,6 +8,7 @@ module Gretel
8
8
  autoroot: true,
9
9
  display_single_fragment: false,
10
10
  link_current: false,
11
+ link_current_to_request_path: true,
11
12
  semantic: false,
12
13
  class: "breadcrumbs",
13
14
  current_class: "current",
@@ -84,7 +85,7 @@ module Gretel
84
85
  end
85
86
 
86
87
  # Set current link to actual path
87
- if out.any? && request
88
+ if options[:link_current_to_request_path] && out.any? && request
88
89
  out.last.url = request.fullpath
89
90
  end
90
91
 
@@ -111,7 +112,7 @@ module Gretel
111
112
 
112
113
  # Links of first crumb
113
114
  links = crumb.links.dup
114
-
115
+
115
116
  # Get parent links
116
117
  links.unshift *parent_links_for(crumb)
117
118
 
@@ -137,9 +138,9 @@ module Gretel
137
138
 
138
139
  class << self
139
140
  include Resettable
140
-
141
+
141
142
  # Registers a style for later use.
142
- #
143
+ #
143
144
  # Gretel::Renderer.register_style :ul, { container_tag: :ul, fragment_tag: :li }
144
145
  def register_style(style_key, options)
145
146
  styles[style_key] = options
@@ -175,7 +176,7 @@ module Gretel
175
176
 
176
177
  # The current link is handled a little differently, and is only linked if specified in the options
177
178
  current_link = links.last
178
- fragments << render_fragment(options[:fragment_tag], current_link.text, (options[:link_current] ? current_link.url : nil), options[:semantic], class: options[:current_class])
179
+ fragments << render_fragment(options[:fragment_tag], current_link.text, (options[:link_current] ? current_link.url : nil), options[:semantic], class: options[:current_class], current_link: current_link.url)
179
180
 
180
181
  # Build the final HTML
181
182
  html_fragments = []
@@ -209,7 +210,14 @@ module Gretel
209
210
  def render_semantic_fragment(fragment_tag, text, url, options = {})
210
211
  if fragment_tag
211
212
  text = content_tag(:span, text, itemprop: "title")
212
- text = breadcrumb_link_to(text, url, itemprop: "url") if url.present?
213
+
214
+ if url.present?
215
+ text = breadcrumb_link_to(text, url, itemprop: "url")
216
+ elsif options[:current_link].present?
217
+ current_url = "#{root_url}#{options[:current_link].gsub(/^\//, '')}"
218
+ text = text + tag(:meta, itemprop: "url", content: current_url)
219
+ end
220
+
213
221
  content_tag(fragment_tag, text, class: options[:class], itemscope: "", itemtype: "http://data-vocabulary.org/Breadcrumb")
214
222
  elsif url.present?
215
223
  content_tag(:span, breadcrumb_link_to(content_tag(:span, text, itemprop: "title"), url, class: options[:class], itemprop: "url"), itemscope: "", itemtype: "http://data-vocabulary.org/Breadcrumb")
@@ -1,3 +1,3 @@
1
1
  module Gretel
2
- VERSION = "3.0.8"
3
- end
2
+ VERSION = "3.0.9"
3
+ end
@@ -219,10 +219,10 @@ class HelperMethodsTest < ActionView::TestCase
219
219
  links[0].tap do |link|
220
220
  assert link.title?
221
221
  assert_equal "My Title", link.title
222
-
222
+
223
223
  assert link.other?
224
224
  assert_equal "Other Option", link.other
225
-
225
+
226
226
  assert !link.nonexistent?
227
227
  assert_nil link.nonexistent
228
228
  end
@@ -263,15 +263,15 @@ class HelperMethodsTest < ActionView::TestCase
263
263
 
264
264
  test "with_breadcrumb" do
265
265
  breadcrumb :basic
266
-
266
+
267
267
  assert_dom_equal %{<div class="breadcrumbs"><a href="/">Home</a> &rsaquo; <span class="current">About</span></div>},
268
268
  breadcrumbs.to_s
269
269
 
270
270
  with_breadcrumb(:with_parent_object, issues(:one)) do
271
271
  assert_dom_equal %{<div class="breadcrumbs"><a href="/">Home</a> &rsaquo; <a href="/projects/1">Test Project</a> &rsaquo; <span class="current">Test Issue</span></div>},
272
272
  breadcrumbs.to_s
273
- end
274
-
273
+ end
274
+
275
275
  assert_dom_equal %{<div class="breadcrumbs"><a href="/">Home</a> &rsaquo; <span class="current">About</span></div>},
276
276
  breadcrumbs.to_s
277
277
  end
@@ -298,6 +298,13 @@ class HelperMethodsTest < ActionView::TestCase
298
298
  assert_equal "/testpath?a=1&b=2", breadcrumbs.last.url
299
299
  end
300
300
 
301
+ test "current link url is not set to fullpath using link_current_to_request_path=false" do
302
+ self.request = OpenStruct.new(fullpath: "/testpath?a=1&b=2")
303
+
304
+ breadcrumb :basic
305
+ assert_equal "/about", breadcrumbs(:link_current_to_request_path => false).last.url
306
+ end
307
+
301
308
  test "calling the breadcrumb method with wrong arguments" do
302
309
  assert_nothing_raised do
303
310
  breadcrumb :basic, test: 1
@@ -365,7 +372,7 @@ class HelperMethodsTest < ActionView::TestCase
365
372
 
366
373
  test "custom semantic container and fragment tags" do
367
374
  breadcrumb :basic
368
- assert_dom_equal %Q{<c class="breadcrumbs"><f itemscope="#{itemscope_value}" itemtype="http://data-vocabulary.org/Breadcrumb"><a href="/" itemprop="url"><span itemprop="title">Home</span></a></f> &rsaquo; <f class="current" itemscope="#{itemscope_value}" itemtype="http://data-vocabulary.org/Breadcrumb"><span itemprop="title">About</span></f></c>},
375
+ assert_dom_equal %Q{<c class="breadcrumbs"><f itemscope="#{itemscope_value}" itemtype="http://data-vocabulary.org/Breadcrumb"><a itemprop="url" href="/"><span itemprop="title">Home</span></a></f> &rsaquo; <f class="current" itemscope="#{itemscope_value}" itemtype="http://data-vocabulary.org/Breadcrumb"><span itemprop="title">About</span><meta itemprop="url" content="http://test.host/about" /></f></c>},
369
376
  breadcrumbs(container_tag: :c, fragment_tag: :f, semantic: true).to_s
370
377
  end
371
378
 
@@ -378,7 +385,7 @@ class HelperMethodsTest < ActionView::TestCase
378
385
 
379
386
  test "register style" do
380
387
  Gretel.register_style :test_style, { container_tag: :one, fragment_tag: :two }
381
-
388
+
382
389
  breadcrumb :basic
383
390
 
384
391
  assert_dom_equal %{<one class="breadcrumbs"><two><a href="/">Home</a></two><two class="current">About</two></one>},
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gretel
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.0.8
4
+ version: 3.0.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - Lasse Bunk
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-08-23 00:00:00.000000000 Z
11
+ date: 2016-08-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: 3.2.0
19
+ version: 3.1.0
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: 3.2.0
26
+ version: 3.1.0
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: sqlite3
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -53,6 +53,7 @@ files:
53
53
  - LICENSE.txt
54
54
  - README.md
55
55
  - Rakefile
56
+ - gemfiles/Gemfile-rails.3.1.x
56
57
  - gemfiles/Gemfile-rails.3.2.x
57
58
  - gemfiles/Gemfile-rails.4.0.x
58
59
  - gemfiles/Gemfile-rails.4.1.x
@@ -137,7 +138,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
137
138
  version: '0'
138
139
  requirements: []
139
140
  rubyforge_project:
140
- rubygems_version: 2.2.2
141
+ rubygems_version: 2.5.1
141
142
  signing_key:
142
143
  specification_version: 4
143
144
  summary: Flexible Ruby on Rails breadcrumbs plugin.