mail_merge 0.0.4 → 0.0.5
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.
- data/README.rdoc +7 -1
- data/lib/mail_merge.rb +24 -4
- data/lib/mail_merge/version.rb +1 -1
- metadata +4 -4
data/README.rdoc
CHANGED
@@ -5,9 +5,15 @@ Mail Merge Gem
|
|
5
5
|
Parses a string and replaces specified merge fields with the evaluated result:
|
6
6
|
|
7
7
|
[Usage]
|
8
|
-
* MailMerge.merge(content, options = {}, merge_fields = [], delimeter = "::")
|
8
|
+
* MailMerge.merge(content, options = {}, merge_fields = [], delimeter = "::", allow_dynamic = false)
|
9
9
|
|
10
10
|
[Examples]
|
11
|
+
* content = "Welcome to ::site.name::, ::user.full_name::!"
|
11
12
|
* merged_content = MailMerge.merge(content, {:site => @site, :user => @user}, ['::site.name::', '::user.full_name::']) # Basic example
|
12
13
|
* merged_content = MailMerge.merge(content, {:site => @site, :user => @user}) # This will evaluate any merge fields that start with 'site' or 'user'
|
13
14
|
* merged_content = MailMerge.merge(content, {:site => @site, :user => @user}, ['~~site.name~~', '~~user.full_name~~'], "~~") # Using your own delimeter
|
15
|
+
|
16
|
+
|
17
|
+
* content = "Welcome, ::[user-1].full_name::!"
|
18
|
+
merged_content = MailMerge.merge(:content => content, :allow_dynamic => true) # This will call find on any fields wrapped in [] (Ex. User.find(1).full_name)
|
19
|
+
# output: "Welcome, Andrew Wiggin!"
|
data/lib/mail_merge.rb
CHANGED
@@ -4,16 +4,16 @@ module MailMerge
|
|
4
4
|
# will search text_block.content and find all instances of ::user.[method]::
|
5
5
|
# and ::site.[method]:: and send the [method] to the associated object
|
6
6
|
# Chaining works as well (ex. ::site.organization.name:: yields 'TST Media')
|
7
|
-
|
7
|
+
# Supports finding of objects with this syntax: ::[user-1].full_name:: (calls User.find(1).full_name)
|
8
|
+
# - requires allow_dynamic flag to be true
|
9
|
+
def self.merge(content, options = {}, merge_fields = [], delimeter = "::", allow_dynamic = false)
|
8
10
|
merged = content
|
9
11
|
options.keys.each do |key|
|
10
12
|
obj = options[key]
|
11
13
|
merged = merged.gsub(/#{delimeter}#{key.to_s}\.[\w|\.]*#{delimeter}/) do |s|
|
12
14
|
if merge_fields.empty? or merge_fields.include?(s)
|
13
15
|
begin
|
14
|
-
|
15
|
-
obj = options[key]
|
16
|
-
res
|
16
|
+
call_methods(s, obj)
|
17
17
|
rescue
|
18
18
|
s
|
19
19
|
end
|
@@ -22,7 +22,27 @@ module MailMerge
|
|
22
22
|
end
|
23
23
|
end
|
24
24
|
end
|
25
|
+
if allow_dynamic
|
26
|
+
objects = {}
|
27
|
+
merged = merged.gsub(/#{delimeter}\[?\w*(-\d*)?\]?\.[\w|\.]*#{delimeter}/) do |s|
|
28
|
+
x = s[/\[?\w*-\d*\]/].delete('[]')
|
29
|
+
begin
|
30
|
+
unless objects[x]
|
31
|
+
class_name, id = x.split('-')
|
32
|
+
objects[x] = class_name.camelize.constantize.find(id)
|
33
|
+
end
|
34
|
+
call_methods(s, objects[x])
|
35
|
+
rescue
|
36
|
+
s
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
25
40
|
merged
|
26
41
|
end
|
27
42
|
|
43
|
+
private
|
44
|
+
def self.call_methods(s, obj)
|
45
|
+
s[/\..*\w/][/\w.*/].split('.').collect{|m| obj = obj.send(m)}.last
|
46
|
+
end
|
47
|
+
|
28
48
|
end
|
data/lib/mail_merge/version.rb
CHANGED
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mail_merge
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 21
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 0
|
9
|
-
-
|
10
|
-
version: 0.0.
|
9
|
+
- 5
|
10
|
+
version: 0.0.5
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Ian Ehlert
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2011-
|
18
|
+
date: 2011-07-13 00:00:00 -05:00
|
19
19
|
default_executable:
|
20
20
|
dependencies: []
|
21
21
|
|