This is a view helper that dynamically generates class attributes in Rails view, like JedWatson/classnames.
The Helper method is included automatically, so you can use it immediately.
<div class="<%= class_names('foo') %>">Hello World</div>
<%# <div class="foo">Hello World</div> %>
The class_names
method takes any number of arguments which can be a string or hash.
The argument 'foo'
is short for { foo: true }
. If the value associated with a given key is falsy, that key won't be included in the output.
class_names('foo', 'bar'); // => 'foo bar'
class_names('foo', { bar: true }); // => 'foo bar'
class_names({ 'foo-bar': true }); // => 'foo-bar'
class_names({ 'foo-bar': false }); // => ''
class_names({ foo: true }, { bar: true }); // => 'foo bar'
class_names({ foo: true, bar: true }); // => 'foo bar'
// lots of arguments of various types
class_names('foo', { bar: true, duck: false }, 'baz', { quux: true }); // => 'foo bar baz quux'
// other falsy values are just ignored
class_names(null, false, 'bar', undefined, 0, 1, { baz: null }, ''); // => 'bar 1'
Arrays will be recursively flattened as per the rules above:
var arr = ['b', { c: true, d: false }];
class_names('a', arr); // => 'a b c'
If you want to change the method name, you can change it with config when starting the application.
# config/application.rb
class Application < Rails::Application
...
config.classnames_rails_view.method_name = :classes
end
<div class="<%= classes('foo') %>">Hello World</div>
Add this line to your application's Gemfile:
gem 'classnames-rails-view'
And then execute:
$ bundle
- The test uses Rspec. Please execute the test with
rspec
command. - Please code check with rubocop.
The gem is available as open source under the terms of the MIT License.