web_merge 1.0.2 → 1.0.3

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: ae95c7b06804d65c4af0658a9d3276a5512c0164
4
- data.tar.gz: 1ecfc7e14318902e71601e2a93172f383da15ebd
3
+ metadata.gz: bc7a10e1ae74d9250ab19f76d480191409df2a53
4
+ data.tar.gz: ffe5b449a036bc8efdc7b3d44ee028b098d4a68c
5
5
  SHA512:
6
- metadata.gz: 03bcccc868d80c9a65c4cb052c33d6c2e3a78e980fb40ddf3a618ee7f439e3c24a7d6f2472e3845898fd53449ac498229891cb356d309d3e1c3491e6860c1a66
7
- data.tar.gz: 7bc9f2ae4c2431ed0fffea3a47781fb7eeb1e695f190b9ad4e631ede4cd3ea6c435a378919e1807efaaac649c33671a6cd73071c41126650c2aec101f2ec9de5
6
+ metadata.gz: 537cc6e7452062a6342393c1ab6d063e41e0b21a7e82ef4f371741cc1b2f82c1710acf70abe0d7e08f54596c65cb84b19c5f10a0f921ec5739ce5a28d9833938
7
+ data.tar.gz: 4926a32d64c0b0924fb4aeaceb83b289a2bcce78cbab708abc5f28e53b5eb0657be337eb6e6c945a8461738d7c78a87d4dc84a5198e6929c2d944d29958cbeeb
data/CHANGELOG.md CHANGED
@@ -1,3 +1,11 @@
1
+ ## 1.0.3
2
+
3
+ * Increased test coverage.
4
+ * Added support for more document types.
5
+ * Added support for the document file API endpoint.
6
+ * Added support for JSON payload.
7
+ * Raises an error if a document didn't save on WebMerge.
8
+
1
9
  ## 1.0.2
2
10
 
3
11
  * Update regex for single line match.
data/lib/web_merge/api.rb CHANGED
@@ -35,6 +35,10 @@ module WebMerge
35
35
  get("#{WebMerge::Constants::DOCUMENTS}/#{doc_id}/fields", &block)
36
36
  end
37
37
 
38
+ def get_document_file(doc_id, &block)
39
+ get("#{WebMerge::Constants::DOCUMENTS}/#{doc_id}/file", &block)
40
+ end
41
+
38
42
  # doc_id The Document ID
39
43
  # example: 436346
40
44
  # doc_key The Document Key
@@ -98,9 +102,9 @@ module WebMerge
98
102
  uri = URI.parse(url_string)
99
103
  Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == 'https') do |http|
100
104
  action_klass = "Net::HTTP::#{verb.camelize}".constantize
101
- request = action_klass.new(uri.request_uri)
105
+ request = action_klass.new(uri.request_uri, 'Content-Type' => 'application/json')
102
106
  request.basic_auth(@api_key, @api_secret)
103
- request.set_form_data(form_data) if form_data.present?
107
+ request.body = form_data.to_json if form_data.present?
104
108
  http.request(request) do |response|
105
109
  if block_given?
106
110
  return block.call(response)
@@ -20,13 +20,15 @@ module WebMerge
20
20
  HTML = 'html'
21
21
  DOCX = 'docx'
22
22
  EMAIL = 'email'
23
+ PPTX = 'pptx'
24
+ XLSX = 'xlsx'
23
25
 
24
26
  SECURITY_LEVEL_LOW = 'low'
25
27
  SECURITY_LEVEL_MEDIUM = 'medium'
26
28
  SECURITY_LEVEL_HIGH = 'high'
27
29
 
28
- SUPPORTED_TYPES = [HTML, PDF, DOCX]
29
- SUPPORTED_OUTPUTS = [PDF, DOCX, EMAIL]
30
+ SUPPORTED_TYPES = [HTML, PDF, DOCX, PPTX, XLSX]
31
+ SUPPORTED_OUTPUTS = [PDF, DOCX, EMAIL, PPTX, XLSX]
30
32
 
31
33
  SECURITY_LEVELS = [SECURITY_LEVEL_LOW, SECURITY_LEVEL_MEDIUM, SECURITY_LEVEL_HIGH]
32
34
  end
@@ -1,4 +1,7 @@
1
+
1
2
  module WebMerge
3
+ class DocumentError < RuntimeError; end;
4
+
2
5
  class Document
3
6
  include ::ActiveModel::Validations
4
7
 
@@ -21,8 +24,8 @@ module WebMerge
21
24
  @size_height = options[:size_height]
22
25
  end
23
26
 
24
- def self.find(doc_id)
25
- instance = empty_instance
27
+ def self.find(doc_id, client: required(:client))
28
+ instance = empty_instance(client)
26
29
  instance.send(:id=, doc_id)
27
30
  instance.reload
28
31
  end
@@ -33,9 +36,9 @@ module WebMerge
33
36
  end
34
37
  end
35
38
 
36
- def self.all
37
- @client.get_documents.map do |doc_hash|
38
- instance = empty_instance
39
+ def self.all(client: required(:client))
40
+ client.get_documents.map do |doc_hash|
41
+ instance = empty_instance(client)
39
42
  instance.send(:update_instance, doc_hash)
40
43
  instance
41
44
  end
@@ -56,6 +59,8 @@ module WebMerge
56
59
  else
57
60
  @client.update_document(id, as_form_data)
58
61
  end
62
+ raise WebMerge::DocumentError.new(response['error']) if response['error'].present?
63
+
59
64
  update_instance(response.symbolize_keys)
60
65
  true
61
66
  end
@@ -112,8 +117,8 @@ module WebMerge
112
117
  private
113
118
  attr_writer :id, :key, :size, :active, :url
114
119
 
115
- def self.empty_instance
116
- new(name: "", type: "", output: "")
120
+ def self.empty_instance(client)
121
+ new(client: client, name: "", type: "", output: "")
117
122
  end
118
123
 
119
124
  def update_instance(response)
@@ -1,3 +1,3 @@
1
1
  module WebMerge
2
- VERSION = "1.0.2"
2
+ VERSION = "1.0.3"
3
3
  end
data/spec/api_spec.rb ADDED
@@ -0,0 +1,22 @@
1
+ require 'spec_helper'
2
+ require_relative '../lib/web_merge/constants'
3
+ require_relative '../lib/web_merge/api'
4
+
5
+ describe WebMerge::API do
6
+ let(:api) { described_class.new(secret: 'foo', key: 'bar', force_test_mode: true) }
7
+ let(:document) do
8
+ double(:document, id: 123, type: 'pdf', contents: 'things', updated_at: Time.now)
9
+ end
10
+
11
+ describe '#get_document_file' do
12
+
13
+ let(:url_string) { "#{WebMerge::Constants::DOCUMENTS}/#{document.id}/file" }
14
+ let(:response) do
15
+ { 'type' => document.type, 'last_update' => document.updated_at, 'contents' => document.contents }
16
+ end
17
+ it 'makes a get request' do
18
+ expect(api).to receive(:get).with(url_string).and_return(response)
19
+ expect(api.get_document_file(document.id)).to eq(response)
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,112 @@
1
+ require 'spec_helper'
2
+ require_relative '../lib/web_merge/constants'
3
+ require_relative '../lib/web_merge/document'
4
+
5
+ describe WebMerge::Document do
6
+ describe '.find' do
7
+ let(:document) do
8
+ described_class.new(client: 'foo', name: 'foo', type: 'foo').tap do |document|
9
+ document.send(:id=, rand(1..10))
10
+ end
11
+ end
12
+ let(:client) { double(:client, get_document: response ) }
13
+ let(:response) { { foo: 'irrelevant' } }
14
+
15
+ it 'returns a document' do
16
+ finder = described_class.find(document.id, client: client)
17
+ expect(finder).to be_kind_of(described_class)
18
+ end
19
+ end
20
+
21
+ describe '.all' do
22
+ let(:client) { double(:client, get_documents: response ) }
23
+ let(:response) { [ first_document: 'foo', second_document: 'bar' ] }
24
+
25
+ it 'returns a collection of documents' do
26
+ finder = described_class.all(client: client)
27
+
28
+ finder.each do |doc|
29
+ expect(doc).to be_kind_of(described_class)
30
+ end
31
+ end
32
+ end
33
+
34
+ describe '#save' do
35
+ let(:client) { double(:client, create_document: response ) }
36
+ context 'document is valid' do
37
+ let(:response) do
38
+ {
39
+ "id":"234543",
40
+ "key":"firm3",
41
+ "type":"html",
42
+ "name":"1040 EZ",
43
+ "output":"pdf",
44
+ "size":"",
45
+ "size_width":"8.5",
46
+ "size_height":"11",
47
+ "active":"1",
48
+ "url":"https://www.webmerge.me/merge/234543/firm3",
49
+ "fields":[
50
+ {"key":"aflekjf409t3j4mg30m409m", "name":"FirstName"},
51
+ {"key":"3to3igj3g3gt94j9304jfqw", "name":"LastName"},
52
+ {"key":"t43j0grjaslkfje304vj9we", "name":"Email"}
53
+ ]
54
+ }
55
+ end
56
+
57
+ let(:valid_document) do
58
+ described_class.new(client: client, name: 'foo', type: 'docx')
59
+ end
60
+
61
+ it 'returns true' do
62
+ expect(valid_document.save).to eq(true)
63
+ end
64
+ end
65
+ end
66
+
67
+ describe '#save!' do
68
+ let(:client) { double(:client, create_document: response ) }
69
+ context 'document is valid' do
70
+ let(:response) do
71
+ {
72
+ "id":"234543",
73
+ "key":"firm3",
74
+ "type":"html",
75
+ "name":"1040 EZ",
76
+ "output":"pdf",
77
+ "size":"",
78
+ "size_width":"8.5",
79
+ "size_height":"11",
80
+ "active":"1",
81
+ "url":"https://www.webmerge.me/merge/234543/firm3",
82
+ "fields":[
83
+ {"key":"aflekjf409t3j4mg30m409m", "name":"FirstName"},
84
+ {"key":"3to3igj3g3gt94j9304jfqw", "name":"LastName"},
85
+ {"key":"t43j0grjaslkfje304vj9we", "name":"Email"}
86
+ ]
87
+ }
88
+ end
89
+
90
+ let(:valid_document) do
91
+ described_class.new(client: client, name: 'foo', type: 'docx')
92
+ end
93
+
94
+ it 'returns nil' do
95
+ expect(valid_document.save!).to be_nil
96
+ end
97
+ end
98
+
99
+ context 'document has merge field errors' do
100
+ let(:response) do
101
+ { 'error' => 'Error merging document: Syntax error in template...' }
102
+ end
103
+ let(:document_with_merge_field_errors) do
104
+ described_class.new(client: client, name: 'foo', type: 'docx')
105
+ end
106
+
107
+ it 'raises an error upon document save error' do
108
+ expect { document_with_merge_field_errors.save! }.to raise_error(WebMerge::DocumentError)
109
+ end
110
+ end
111
+ end
112
+ end
@@ -0,0 +1,2 @@
1
+ require 'active_model'
2
+ require 'rspec'
data/web_merge.gemspec CHANGED
@@ -20,5 +20,7 @@ Gem::Specification.new do |spec|
20
20
 
21
21
  spec.add_development_dependency "bundler", "~> 1.7"
22
22
  spec.add_development_dependency "rake", "~> 10.0"
23
+ spec.add_development_dependency "rspec", "~> 3.4"
24
+ spec.add_development_dependency "pry", "~> 0.10"
23
25
  spec.add_development_dependency "activemodel", ">= 3.0"
24
26
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: web_merge
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.2
4
+ version: 1.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jeremy Clarke
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-05-12 00:00:00.000000000 Z
11
+ date: 2017-07-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -38,6 +38,34 @@ dependencies:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: '10.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rspec
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '3.4'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '3.4'
55
+ - !ruby/object:Gem::Dependency
56
+ name: pry
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '0.10'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '0.10'
41
69
  - !ruby/object:Gem::Dependency
42
70
  name: activemodel
43
71
  requirement: !ruby/object:Gem::Requirement
@@ -71,6 +99,9 @@ files:
71
99
  - lib/web_merge/document.rb
72
100
  - lib/web_merge/notification.rb
73
101
  - lib/web_merge/version.rb
102
+ - spec/api_spec.rb
103
+ - spec/document_spec.rb
104
+ - spec/spec_helper.rb
74
105
  - web_merge.gemspec
75
106
  homepage: http://www.webmerge.me
76
107
  licenses:
@@ -92,8 +123,11 @@ required_rubygems_version: !ruby/object:Gem::Requirement
92
123
  version: '0'
93
124
  requirements: []
94
125
  rubyforge_project:
95
- rubygems_version: 2.4.8
126
+ rubygems_version: 2.6.11
96
127
  signing_key:
97
128
  specification_version: 4
98
129
  summary: WebMerge REST API Wrapper
99
- test_files: []
130
+ test_files:
131
+ - spec/api_spec.rb
132
+ - spec/document_spec.rb
133
+ - spec/spec_helper.rb