This gem was extracted from SalesKing, where it does placeholders substitution for user supplied strings in Email-, Text- and Export-Templates.
Placeholders are declared in each class and afterwards any strings containing [placeholders] can be parsed in the scope of the model.
Parsing is done by a simple statemachine using regex for placeholder detection.
Define the available methods in your class with 'has_placeholders'
class User include KingPlaceholder has_many :comments has_one :company has_placeholders :name, :email end class Comment include KingPlaceholder has_placeholders :text end
Use placeholder names in square brackets:
@user = User.new( name: "Schorsch", email: 'email@example.com') @user.expand_placeholders("Hey [name] your address is [email]") => "Hey Schorsch your address is firstname.lastname@example.org"
@user.expand_placeholders("[comments][text][/comments]") => All comment texts @user.expand_placeholders("[comments.1.text]") => First comment text
@user.expand_placeholders("[company.name]") => MyCompany
Set a custom formatting method(in format_placeholder) throught which all fields are run, if you have special money or date formatters.
class User include KingPlaceholder has_placeholders :created_at def format_placeholder(field) I18n.l( self.send(field) ) end end
Use callbacks to setup / teardown env variables
class User include KingPlaceholder has_placeholders :name, :email def before_expand_placeholders I18n.locale = self.language end def after_expand_placeholders I18n.locale = nil end end
Also see specs
This gems still relies on gem king_views with king_format, for money, date formatting. We will outsource king_format into its own gem and remove more Rails and SalesKing internal dependencies.
Add this line to your application's Gemfile:
Or install it yourself as:
$ gem install king_placeholder
Create your feature branch (`git checkout -b my-new-feature`)
Commit your changes (`git commit -am 'Added some feature'`)
Push to the branch (`git push origin my-new-feature`)
Create new Pull Request