KingPlaceholder
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.
Usage
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 protected]')
@user.expand_placeholders("Hey [name] your address is [email]")
=> "Hey Schorsch your address is [email protected]"
Handle collections
@user.expand_placeholders("[comments][text][/comments]")
=> All comment texts
@user.expand_placeholders("[comments.1.text]")
=> First comment text
Handle relations
@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
I18n.locale = self.language
end
def
I18n.locale = nil
end
end
Also see specs
TODO
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.
Installation
Add this line to your application’s Gemfile:
gem 'king_placeholder'
Or install it yourself as:
$ gem install king_placeholder
Contributing
-
Fork it
-
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