rightsignature 0.1.4 → 0.1.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.md CHANGED
@@ -8,7 +8,7 @@ gem install rightsignature
8
8
  ```
9
9
  or in your Gemfile
10
10
  ```
11
- gem 'rightsignature', '~> 0.1.4'
11
+ gem 'rightsignature', '~> 0.1.5'
12
12
  ```
13
13
 
14
14
  Setup
@@ -199,6 +199,7 @@ Optional options:
199
199
  Ex. ['sent_from_api', {"user_id" => "32"}]
200
200
  * callback_url: A URI encoded URL that specifies the location for API to POST a callback notification to when the document has been created and signed.
201
201
  Ex. "http://yoursite/callback"
202
+ * use_merge_field_ids: Using merge field ids instead of merge field name for merge_fields. true or false.
202
203
 
203
204
  #####Template Prepacking
204
205
  For cloning a Template before sending it.
@@ -211,17 +212,20 @@ After prepacking, the new template can be updated with prefill data. This won't
211
212
  ```
212
213
  RightSignature::Template.prefill(guid, subject, roles)
213
214
  ```
214
-
215
- Optional options:
216
- * description: document description that'll appear in the email
217
- * merge_fields: document merge fields, should be an array of merge_field_values in a hash with the merge_field_name.
218
- Ex. [{"Salary" => "$1,000,000"}]
219
- * expires_in: number of days before expiring the document. API only allows 2,5,15, or 30.
220
- * tags: document tags, an array of string or hashes 'single_tag' (for simple tag) or {'tag_name' => 'tag_value'} (for tuples pairs)
221
- Ex. ['sent_from_api', {"user_id" => "32"}]
222
- * callback_url: A URI encoded URL that specifies the location for API to POST a callback notification to when the document has been created and signed.
223
- Ex. "http://yoursite/callback"
224
-
215
+ * guid: template guid to use. Should be a template that was prepackaged
216
+ * subject: document subject.
217
+ * roles: recipient names in array of {:name => "Person's Name", :email => "Email"} hashed by Role ID. Ex. {"signer_A" => {:name => "Your Name", :name => "a@example.com"}}
218
+ * Optional options:
219
+ * description: document description that'll appear in the email
220
+ * merge_fields: document merge fields, should be an array of merge_field_values in a hash with the merge_field_name.
221
+ Ex. [{"Salary" => "$1,000,000"}]
222
+ * expires_in: number of days before expiring the document. API only allows 2,5,15, or 30.
223
+ * tags: document tags, an array of string or hashes 'single_tag' (for simple tag) or {'tag_name' => 'tag_value'} (for tuples pairs)
224
+ Ex. ['sent_from_api', {"user_id" => "32"}]
225
+ * callback_url: A URI encoded URL that specifies the location for API to POST a callback notification to when the document has been created and signed.
226
+ Ex. "http://yoursite/callback"
227
+ * use_merge_field_ids: Using merge field ids instead of merge field name for merge_fields. true or false.
228
+
225
229
  ```
226
230
  options = {
227
231
  :description => "Please read over the handbook and sign it.",
@@ -245,16 +249,19 @@ Send template as a document for signing. Same options as prefill.
245
249
  ```
246
250
  RightSignature::Template.send_template(guid, subject, roles)
247
251
  ```
248
-
249
- Optional options:
250
- * description: document description that'll appear in the email
251
- * merge_fields: document merge fields, should be an array of merge_field_values in a hash with the merge_field_name.
252
- Ex. [{"Salary" => "$1,000,000"}]
253
- * expires_in: number of days before expiring the document. API only allows 2,5,15, or 30.
254
- * tags: document tags, an array of string or hashes 'single_tag' (for simple tag) or {'tag_name' => 'tag_value'} (for tuples pairs)
255
- Ex. ['sent_from_api', {"user_id" => "32"}]
256
- * callback_url: A URI encoded URL that specifies the location for API to POST a callback notification to when the document has been created and signed.
257
- Ex. "http://yoursite/callback"
252
+ * guid: template guid to use. Should be a template that was prepackaged
253
+ * subject: document subject.
254
+ * roles: recipient names in array of {:name => "Person's Name", :email => "Email"} hashed by Role ID. Ex. {"signer_A" => {:name => "Your Name", :name => "a@example.com"}}
255
+ * Optional options:
256
+ * description: document description that'll appear in the email
257
+ * merge_fields: document merge fields, should be an array of merge_field_values in a hash with the merge_field_name.
258
+ Ex. [{"Salary" => "$1,000,000"}]
259
+ * expires_in: number of days before expiring the document. API only allows 2,5,15, or 30.
260
+ * tags: document tags, an array of string or hashes 'single_tag' (for simple tag) or {'tag_name' => 'tag_value'} (for tuples pairs)
261
+ Ex. ['sent_from_api', {"user_id" => "32"}]
262
+ * callback_url: A URI encoded URL that specifies the location for API to POST a callback notification to when the document has been created and signed.
263
+ Ex. "http://yoursite/callback"
264
+ * use_merge_field_ids: Using merge field ids instead of merge field name for merge_fields. true or false.
258
265
 
259
266
  ```
260
267
  options = {
@@ -280,7 +287,7 @@ Returns an array of {:name => "John Bellingham", "url" => "https://rightsignatur
280
287
  RightSignature::Template.send_as_embedded_signers(guid, recipients, options={})
281
288
  ```
282
289
  * guid: guid of template to create document with
283
- * recipient: recipient names in array of {"Role Name" => {:name => "Your Name"}}
290
+ * recipient: recipient names in array of {:name => "Person's Name"} hashed by Role ID. Ex. {"signer_A" => {:name => "Your Name"}}
284
291
  * options:
285
292
  * subject: document subject that'll appear in the email
286
293
  * description: document description that'll appear in the email
@@ -292,6 +299,7 @@ RightSignature::Template.send_as_embedded_signers(guid, recipients, options={})
292
299
  * callback_url: A URI encoded URL that specifies the location for API to POST a callback notification to when the document has been created and signed.
293
300
  Ex. "http://yoursite/callback"
294
301
  * redirect_location: URL to redirect users after signing.
302
+ * use_merge_field_ids: Using merge field ids instead of merge field name for merge_fields. true or false.
295
303
 
296
304
  #####Create New Template Link
297
305
  Generate a url that let's someone upload and create a template under OAuth user's account.
@@ -34,14 +34,19 @@ module RightSignature::Helpers
34
34
 
35
35
  module RolesHelper
36
36
  class <<self
37
- # Converts [{"Role Name" => {:name => "John", :email => "email@example.com"}}] to
38
- # [{:role => {:name => "John", :email => "email@example.com", "@role_name" => "Role Name"} }]
37
+ # Converts [{"Role_ID" => {:name => "John", :email => "email@example.com"}}] to
38
+ # [{:role => {:name => "John", :email => "email@example.com", "@role_id" => "Role_ID"} }]
39
+ # Tries to guess if it's using Role ID or Role Name
39
40
  def array_to_xml_hash(roles_array)
40
41
  roles_hash_array = []
41
42
  roles_array.each do |role_hash|
42
43
  name, value = role_hash.first
43
44
  raise "Hash '#{role_hash.inspect}' is malformed, should be something like {ROLE_NAME => {:name => \"a\", :email => \"a@a.com\"}}" unless value.is_a? Hash and name.is_a? String
44
- roles_hash_array << {:role => value.merge({"@role_name" => name})}
45
+ if name.match(/^signer_[A-Z]+$/) || name.match(/^cc_[A-Z]+$/)
46
+ roles_hash_array << {:role => value.merge({"@role_id" => name})}
47
+ else
48
+ roles_hash_array << {:role => value.merge({"@role_name" => name})}
49
+ end
45
50
  end
46
51
 
47
52
  roles_hash_array
@@ -55,11 +60,15 @@ module RightSignature::Helpers
55
60
  class <<self
56
61
  # Converts [{"Role Name" => {:name => "John", :email => "email@example.com"}}] to
57
62
  # [{"role roles_name=\"Role Name\"" => {:role => {:name => "John", :email => "email@example.com"}} }]
58
- def array_to_xml_hash(merge_fields_array)
63
+ def array_to_xml_hash(merge_fields_array, use_id=false)
59
64
  merge_fields = []
60
65
  merge_fields_array.each do |merge_field_hash|
61
66
  name, value = merge_field_hash.first
62
- merge_fields << { :merge_field => {:value => value, "@merge_field_name" => name}}
67
+ if use_id
68
+ merge_fields << { :merge_field => {:value => value, "@merge_field_id" => name}}
69
+ else
70
+ merge_fields << { :merge_field => {:value => value, "@merge_field_name" => name}}
71
+ end
63
72
  end
64
73
 
65
74
  merge_fields
@@ -80,7 +80,8 @@ module RightSignature
80
80
  xml_hash[:template][:roles] = RolesHelper.array_to_xml_hash(roles)
81
81
 
82
82
  # Optional arguments
83
- xml_hash[:template][:merge_fields] = MergeFieldsHelper.array_to_xml_hash(options[:merge_fields]) if options[:merge_fields]
83
+ use_merge_field_ids = options.delete(:use_merge_field_ids)
84
+ xml_hash[:template][:merge_fields] = MergeFieldsHelper.array_to_xml_hash(options[:merge_fields], use_merge_field_ids) if options[:merge_fields]
84
85
  xml_hash[:template][:tags] = TagsHelper.array_to_xml_hash(options[:tags]) if options[:tags]
85
86
  [:expires_in, :description, :callback_url, :action].each do |other_option|
86
87
  xml_hash[:template][other_option] = options[other_option] if options[other_option]
@@ -1,3 +1,3 @@
1
1
  module RightSignature
2
- VERSION = "0.1.4"
2
+ VERSION = "0.1.5"
3
3
  end
@@ -0,0 +1,67 @@
1
+ require File.dirname(__FILE__) + '/spec_helper.rb'
2
+
3
+ describe RightSignature::Helpers::TagsHelper do
4
+ describe "mixed_array_to_string_array" do
5
+ it "should convert array of strings and hashes to string" do
6
+ RightSignature::Helpers::TagsHelper.mixed_array_to_string_array(["a", {'good' => "yea"}, '123']).should == "a,good:yea,123"
7
+ end
8
+
9
+ it "should raise error if array contains something other than hash or string" do
10
+ lambda {RightSignature::Helpers::TagsHelper.mixed_array_to_string_array(["a", ['bad'], {'good' => "yea"}])}.should raise_error
11
+ end
12
+ end
13
+
14
+ describe "array_to_xml_hash" do
15
+ it "should convert array of string and hash of {name => value} into array of :tag => {:name => name, :value => value}" do
16
+ RightSignature::Helpers::TagsHelper.array_to_xml_hash(['abc', {"taggy" => "tvalue"}]).should == [{:tag => {:name => 'abc'}}, {:tag => {:name => 'taggy', :value => 'tvalue'}}]
17
+ end
18
+ end
19
+ end
20
+
21
+ describe RightSignature::Helpers::RolesHelper do
22
+ describe "array_to_xml_hash" do
23
+ it "should convert array of {\"Role name\" => {:name => name, :email => email}} to array of {:role => {:name => name, :email => email, \"@role_id\" => \"Role name\"}} " do
24
+ results = RightSignature::Helpers::RolesHelper.array_to_xml_hash([
25
+ {"Leaser" => {:name => "John Bellingham", :email => "j@example.com"}},
26
+ {"Leasee" => {:name => "Timmy S", :email => "t@example.com"}}
27
+ ])
28
+ results.size.should == 2
29
+ results.include?({:role => {:name => "John Bellingham", :email => "j@example.com", "@role_name" => "Leaser"}})
30
+ results.include?({:role => {:name => "Timmy S", :email => "t@example.com", "@role_name" => "Leasee"}})
31
+ end
32
+
33
+ it "should convert array of {\"signer_A\" => {:name => name, :email => email}} or {\"cc_A\" => {:name => name, :email => email}} to array of {:role => {:name => name, :email => email, \"@role_id\" => \"signer_a\"}} " do
34
+ results = RightSignature::Helpers::RolesHelper.array_to_xml_hash([
35
+ {"signer_A" => {:name => "John Bellingham", :email => "j@example.com"}},
36
+ {"cc_A" => {:name => "Timmy S", :email => "t@example.com"}}
37
+ ])
38
+ results.size.should == 2
39
+ results.include?({:role => {:name => "John Bellingham", :email => "j@example.com", "@role_id" => "signer_A"}})
40
+ results.include?({:role => {:name => "Timmy S", :email => "t@example.com", "@role_id" => "cc_A"}})
41
+ end
42
+ end
43
+ end
44
+
45
+ describe RightSignature::Helpers::MergeFieldsHelper do
46
+ describe "array_to_xml_hash" do
47
+ it "should convert array of {\"Merge field name\" => \"Merge Field Value\"} to array of {:merge_field => {:value => \"Merge Field Value\", \"@merge_field_name\" => \"Merge Field Name\"}} " do
48
+ results = RightSignature::Helpers::MergeFieldsHelper.array_to_xml_hash([
49
+ {"City" => "Santa Barbara"},
50
+ {"Section" => "House"}
51
+ ])
52
+ results.size.should == 2
53
+ results.include?({:merge_field => {:value => "Santa Barbara", "@merge_field_name" => "City"}})
54
+ results.include?({:merge_field => {:value => "House", "@merge_field_name" => "Section"}})
55
+ end
56
+
57
+ it "should convert array of {\"Merge field name\" => \"Merge Field Value\"} to array of {:merge_field => {:value => \"Merge Field Value\", \"@merge_field_id\" => \"Merge Field Name\"}} " do
58
+ results = RightSignature::Helpers::MergeFieldsHelper.array_to_xml_hash([
59
+ {"1_abc_defg" => "Santa Barbara"},
60
+ {"2_345_789" => "House"}
61
+ ], true)
62
+ results.size.should == 2
63
+ results.include?({:merge_field => {:value => "Santa Barbara", "@merge_field_id" => "1_abc_defg"}})
64
+ results.include?({:merge_field => {:value => "House", "@merge_field_id" => "2_345_789"}})
65
+ end
66
+ end
67
+ end
@@ -80,6 +80,24 @@ describe RightSignature::Template do
80
80
  })
81
81
  RightSignature::Template.prefill("MYGUID", "sign me", [{"Employee" => {:name => "John Employee", :email => "john@employee.com"}}])
82
82
  end
83
+
84
+ it "should add \"@role_id\"=>'signer_A' key to roles in xml hash" do
85
+ RightSignature::Connection.should_receive(:post).with('/api/templates.xml', {
86
+ :template => {
87
+ :guid => "MYGUID",
88
+ :action => "prefill",
89
+ :subject => "sign me",
90
+ :roles => [
91
+ {:role => {
92
+ :name => "John Employee",
93
+ :email => "john@employee.com",
94
+ "@role_id" => "signer_A"
95
+ }}
96
+ ]
97
+ }
98
+ })
99
+ RightSignature::Template.prefill("MYGUID", "sign me", [{"signer_A" => {:name => "John Employee", :email => "john@employee.com"}}])
100
+ end
83
101
 
84
102
  describe "optional options" do
85
103
  it "should add \"@merge_field_name\"=>'Tax_id' key to merge_fields in xml hash" do
@@ -96,6 +114,20 @@ describe RightSignature::Template do
96
114
  RightSignature::Template.prefill("MYGUID", "sign me", [], {:merge_fields => [{"Tax_id" => "123456"}]})
97
115
  end
98
116
 
117
+ it "should add \"@merge_field_id\"=>'123_abc_78' key to merge_fields in xml hash" do
118
+ RightSignature::Connection.should_receive(:post).with('/api/templates.xml', {
119
+ :template => {
120
+ :guid => "MYGUID",
121
+ :action => "prefill",
122
+ :subject => "sign me",
123
+ :roles => [
124
+ ],
125
+ :merge_fields => [{:merge_field => {:value => "123456", "@merge_field_id" => "123_abc_78"}}]
126
+ }
127
+ })
128
+ RightSignature::Template.prefill("MYGUID", "sign me", [], {:merge_fields => [{"123_abc_78" => "123456"}], :use_merge_field_ids => true})
129
+ end
130
+
99
131
  it "should add \"tag\" key to tags in xml hash" do
100
132
  RightSignature::Connection.should_receive(:post).with('/api/templates.xml', {
101
133
  :template => {
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rightsignature
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.4
4
+ version: 0.1.5
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -136,6 +136,7 @@ files:
136
136
  - spec/connection_spec.rb
137
137
  - spec/document_spec.rb
138
138
  - spec/errors_spec.rb
139
+ - spec/normalizing_spec.rb
139
140
  - spec/oauth_connnection_spec.rb
140
141
  - spec/spec_helper.rb
141
142
  - spec/template_spec.rb