phaxio 0.4.1 → 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 7dfb55296264298ff1a5e2cb1d0023139f40e38a
4
- data.tar.gz: 3d8f431ec99140798feb5b2d44a48f0ace04a59a
3
+ metadata.gz: b0ba3d3a1d93ed66b41b2f43e4830301b1cf636f
4
+ data.tar.gz: 61dec61548a074dbaedd1e450fe8aa23bc729740
5
5
  SHA512:
6
- metadata.gz: 1ec3d6e31a9410f4dbac626a13ae2543b76a219fd79906a8e5b2cf926e47b5175aa94507842584a0b07b1c37d139a19696114c35d85f49ee77a712c289205d49
7
- data.tar.gz: 48aa273d74b05dc1a047c55cf714c76d07e32fe0102ee3f634b5bf94c2250f06742cb0b9a289f1e6abd16c6cf0df3b0124a7f5f6e27297834e4af3c6fd6692a7
6
+ metadata.gz: c04abdcfb62078eace54eb05a7560cd183aa4b70717f0c267833b5808f39130a89f6c448713b6f9036b038894909b8ae9cc97234208f713a2bcb665723f5b2f9
7
+ data.tar.gz: 48ea7099e4556e635f0a66dcfd61d5f205594835230a7797effd4e823b7762d24affe7fed8dd3fb2c759fd85f9a015353b63532aaf17f2adaa1b6df1476e9643
data/.gitignore CHANGED
@@ -17,3 +17,4 @@ test/version_tmp
17
17
  tmp
18
18
  .DS_Store
19
19
  .envrc
20
+ .idea
@@ -0,0 +1,6 @@
1
+ === 0.4.2 2016-02-15
2
+
3
+ * Transferred repo from Gristmill to Phaxio. Thanks guys!
4
+ * Support for all API operations
5
+ * Support for callback validation using X-Phaxio-Signature
6
+ * Sinatra example for handling callback requests
data/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # Phaxio
2
2
 
3
- [![Build Status](https://travis-ci.org/gristmill/phaxio.svg)](https://travis-ci.org/gristmill/phaxio)
3
+ [![Build Status](https://travis-ci.org/phaxio/phaxio-ruby.svg?branch=master)](https://travis-ci.org/phaxio/phaxio-ruby)
4
4
 
5
5
  A Ruby gem for interacting with the [Phaxio API]( https://www.phaxio.com/docs ).
6
6
 
@@ -36,17 +36,22 @@ To send a fax:
36
36
  ### Currently Supported API Calls
37
37
 
38
38
  * send_fax - `Phaxio.send_fax(to: "0123456789", filename: File.new("test.pdf"))`
39
+ * resend_fax - `Phaxio.resend_fax(id: 1234)`
39
40
  * test_receive - `Phaxio.test_receive(filename: "test_file.pdf")`
40
41
  * provision_number - `Phaxio.provision_number(area_code: 802)`
41
42
  * release_number - `Phaxio.release_number(number: "8021112222")`
42
43
  * list_numbers - `Phaxio.list_numbers(area_code: 802)`
43
- * get_fax_file - `Phaxio.get_fax_file(id: 123456, type: p)`
44
+ * get_fax_file - `Phaxio.get_fax_file(id: 123456, type: p)`
44
45
  * list_faxes - `Phaxio.list_numbers(area_code: 802)`
45
- * list_faxes - `Phaxio.list_faxes(start: Time.now - 48000,
46
- end: Time.now)`
46
+ * list_faxes - `Phaxio.list_faxes(start: Time.now - 48000, end: Time.now)`
47
47
  * get_fax_status - `Phaxio.get_fax_status(id: 123456)`
48
48
  * cancel_fax - `Phaxio.cancel_fax(id: 123456)`
49
+ * delete_fax - `Phaxio.delete_fax(id: 1234, files_only: true)`
49
50
  * get_account_status - `Phaxio.get_account_status`
51
+ * attach_phaxcode_to_pdf - `Phaxio.attach_phaxcode_to_pdf(x: 10, y:10, File.new("input.pdf"))`
52
+ * create_phaxcode - `Phaxio.create_phaxcode(metadata: "some metadata")`
53
+ * supported_countries
54
+ * area_codes
50
55
 
51
56
  ### Example
52
57
 
@@ -66,6 +71,35 @@ end: Time.now)`
66
71
  file << @pdf
67
72
  end
68
73
 
74
+ ## Callback Validation Example with Sinatra
75
+
76
+ require 'sinatra/base'
77
+ require 'phaxio'
78
+
79
+ class PhaxioCallbackExample < Sinatra::Base
80
+ Phaxio.config do |config|
81
+ config.api_key = '0123456789'
82
+ config.api_secret = '0123456789'
83
+ config.callback_token = '0123456789'
84
+ end
85
+
86
+ post '/phaxio_callback' do
87
+ if Phaxio.valid_callback_signature?(
88
+ request.env['HTTP_X_PHAXIO_SIGNATURE'],
89
+ request.url, callback_params, params[:filename])
90
+ 'Success'
91
+ else
92
+ 'Invalid callback signature'
93
+ end
94
+ end
95
+
96
+ def callback_params
97
+ params.select do |key, _value|
98
+ %w(success is_test direction fax metadata).include?(key)
99
+ end
100
+ end
101
+ end
102
+
69
103
  ## Contributing
70
104
 
71
105
  1. Fork it
data/Rakefile CHANGED
@@ -9,5 +9,13 @@ Rake::TestTask.new do |t|
9
9
  t.verbose = true
10
10
  end
11
11
 
12
- desc "Run tests"
12
+ desc 'Run tests'
13
13
  task :default => :test
14
+
15
+ desc 'Run integration tests'
16
+ task :integration_tests do
17
+ integration_tests_path = File.expand_path(
18
+ '../test/integration/*_integration_test.rb', __FILE__
19
+ )
20
+ FileList[integration_tests_path].each { |file| require file }
21
+ end
@@ -3,10 +3,12 @@ module Phaxio
3
3
  base_uri 'https://api.phaxio.com/v1'
4
4
 
5
5
  module Config
6
- attr_accessor :api_key, :api_secret
6
+ attr_accessor :api_key, :api_secret, :callback_token
7
7
  end
8
8
 
9
9
  module Client
10
+ DIGEST = OpenSSL::Digest.new('sha1')
11
+
10
12
  # Public: Send a fax.
11
13
  #
12
14
  # options - The Hash options used to refine the selection (default: {}):
@@ -16,14 +18,8 @@ module Phaxio
16
18
  # square brackets after parameter
17
19
  # name to send to multiple
18
20
  # recipients (e.g. to[]) (required).
19
- # :filename - The Binary Stream name of the file
20
- # you want to fax. This is optional
21
- # if you specify string_data. Must
22
- # have file name in the filename
23
- # field of the body-part header. Put
24
- # square brackets after parameter
25
- # name to send multiple files (e.g.
26
- # filename[]) (required).
21
+ # :filename - A Ruby File of a document to fax
22
+ # (supported file types: https://www.phaxio.com/faq#faq10)
27
23
  # :string_data - A String of html, plain text, or a
28
24
  # URL. If additional files are
29
25
  # specified as well, this data will
@@ -60,7 +56,7 @@ module Phaxio
60
56
  #
61
57
  # Examples
62
58
  #
63
- # Phaxio.send_fax(to: "0123456789", filename: "test.pdf")
59
+ # Phaxio.send_fax(to: "0123456789", filename: File.new("docToSend.pdf"))
64
60
  #
65
61
  # Returns a HTTParty::Response object containing a success bool,
66
62
  # a String message, and an in faxID.
@@ -68,6 +64,21 @@ module Phaxio
68
64
  send_post("/send", options)
69
65
  end
70
66
 
67
+ # Public: Resend a fax.
68
+ #
69
+ # options - The Hash options used to refine the selection (default: {}):
70
+ # :id - The int id of the fax you want to resend (required).
71
+ #
72
+ # Examples
73
+ #
74
+ # Phaxio.resend_fax(id: "123456")
75
+ #
76
+ # Returns a HTTParty::Response object containing a success bool,
77
+ # a message string, and data containing the fax ID int.
78
+ def resend_fax(options)
79
+ send_post("/resendFax", options)
80
+ end
81
+
71
82
  # Public: Test receiving a fax.
72
83
  #
73
84
  # options - The Hash options used to refine the selection (default: {}):
@@ -131,7 +142,7 @@ module Phaxio
131
142
  # Phaxio.
132
143
  #
133
144
  # options - The Hash options used to refne th selection (default: {}):
134
- # area_code - An integer area code you'd like to filter by
145
+ # area_code - An integer area code you'd like to filter by
135
146
  # (optional).
136
147
  # number - A String phone number you'd like to retrieve
137
148
  # (optional).
@@ -223,6 +234,24 @@ module Phaxio
223
234
  send_post("/faxCancel", options)
224
235
  end
225
236
 
237
+ # Public: Delete a specific fax.
238
+ #
239
+ # options - The hash options used to refine the selection (defaults: {}):
240
+ # :id - The int ID of the fax you want to cancel
241
+ # (required).
242
+ # :files_only - The bool used to determine whether only the files
243
+ # are deleted. If not specified, default is false
244
+ # (optional).
245
+ #
246
+ # Examples
247
+ #
248
+ # Phaxio.delete_fax(id: 1234, files_only: true)
249
+ #
250
+ # Returns a HTTParty::Response object with success bool and message string.
251
+ def delete_fax(options)
252
+ send_post("/deleteFax", options)
253
+ end
254
+
226
255
  # Public: Get the status of Client's account.
227
256
  #
228
257
  # Examples
@@ -235,18 +264,232 @@ module Phaxio
235
264
  send_post("/accountStatus", {})
236
265
  end
237
266
 
267
+ # Public: Attach a PhaxCode to a PDF you provide.
268
+ #
269
+ # options - Type: hash. Options used to refine the action (default: {}):
270
+ # x - Type: float. The x-coordinate (in PDF points*)
271
+ # where the PhaxCode should be drawn. x=0 is at the
272
+ # left-most point on the page. (required)
273
+ # y - Type: float. The y-coordinate (in PDF points*)
274
+ # where the PhaxCode should be drawn. Y=0 is the
275
+ # bottom-most point on the page. (required)
276
+ # filename - A Ruby File in PDF format (required)
277
+ # metadata - Type: string. Custom metadata to be associated
278
+ # with the created barcode. If not present, the
279
+ # basic PhaxCode for your account will be used.
280
+ # page_number - Type: integer. The page where the PhaxCode should
281
+ # be drawn. 1-based.
282
+ # *PDF points definition: A "point" is 1/72 of an inch. An
283
+ # 8.5"x11" document is therefore 612 pt x 792 pt.
284
+ #
285
+ # Examples
286
+ #
287
+ # Phaxio.attach_phaxcode_to_pdf(
288
+ # x: "0", y: "100", filename: File.new("input.pdf")
289
+ # )
290
+ #
291
+ # Response: A PDF file containing a PhaxCode at the location specified.
292
+ def attach_phaxcode_to_pdf(options)
293
+ if options[:filename].nil?
294
+ raise StandardError, 'You must include a PDF file.'
295
+ end
296
+
297
+ if options[:x] < 0 || options[:y] < 0
298
+ raise StandardError, 'Coordinates must be greater than or equal to 0.'
299
+ end
300
+
301
+ send_post('/attachPhaxCodeToPdf', options)
302
+ end
303
+
304
+ # Public: Create a custom PhaxCode.
305
+ #
306
+ # options - Type: hash. Options used to refine the action (default: {}):
307
+ # metadata - Type: string. Custom metadata to be associated with
308
+ # this barcode. If not present, the basic PhaxCode for
309
+ # your account will be used. (optional)
310
+ # redirect - Type: boolean. If present and true, the PhaxCode
311
+ # barcode image will be dumped in the response.
312
+ # (optional)
313
+ #
314
+ # Example:
315
+ # Phaxio.create_phaxcode(metadata: "sale_id=44")
316
+ #
317
+ # Response: If the redirect parameter is not provided, a JSON object with
318
+ # success, message, and data attributes is returned. The data
319
+ # attribute contains a url where the PhaxCode barcode image can be
320
+ # accessed. Otherwise, the image data is dumped in the response.
321
+ def create_phaxcode(options = {})
322
+ send_post('/createPhaxCode', options)
323
+ end
324
+
325
+ # Public: Get a Hosted Document with PhaxCode included
326
+ #
327
+ # Note: You will have to set up the hosted document with Phaxio (along with
328
+ # the relevant PhaxCode) before calling this method.
329
+ #
330
+ # options - Type: hash. Options used to refine the action (default: {}):
331
+ # name - Type: string. The name of a hosted document.
332
+ # (required)
333
+ # metadata - Type: string. Custom metadata to be associated with
334
+ # the PhaxCode that will be attached to the hosted
335
+ # document. If not present, the basic PhaxCode for your
336
+ # account will be used.
337
+ # (optional)
338
+ #
339
+ # Example:
340
+ # Phaxio.get_hosted_document(name:"business_fax")
341
+ #
342
+ # Response: A PDF copy of the hosted document with a PhaxCode included at
343
+ # the pre-specified location.
344
+ def get_hosted_document(options)
345
+ if options[:name].nil?
346
+ raise StandardError, 'You must include the name of the hosted document.'
347
+ end
348
+
349
+ send_post('/getHostedDocument', options)
350
+ end
351
+
352
+ # Public: Get a list of supported countries for sending faxes
353
+ #
354
+ # Note: This method doesn't require API keys and is included for the sake of
355
+ # completion.
356
+ #
357
+ # Example:
358
+ # Phaxio.supported_countries
359
+ #
360
+ # Response: A JSON object with success, message, and data attributes. The
361
+ # data attribute contains a hash, where the key contains the name
362
+ # of the country, and the value is a hash of attributes for the
363
+ # country (currently only pricing information).
364
+ #
365
+ # Example Response:
366
+ # {
367
+ # "success": true,
368
+ # "message": "Data contains supported countries.",
369
+ # "data": {
370
+ # "United States": {
371
+ # "price_per_page": 7
372
+ # },
373
+ # "Canada": {
374
+ # "price_per_page": 7
375
+ # },
376
+ # "United Kingdom": {
377
+ # "price_per_page": 10
378
+ # },
379
+ # ...
380
+ # }
381
+ # }
382
+ def supported_countries
383
+ post('/supportedCountries')
384
+ end
385
+
386
+ # Public: List area codes available for purchasing numbers
387
+ #
388
+ # Note: This method doesn't require API keys and is included for the sake of
389
+ # completion.
390
+ #
391
+ # options - Type: hash. Options used to refine the query (default: {}):
392
+ # is_toll_free - Type: boolean. Will only return toll free area
393
+ # codes. (optional)
394
+ # state - Type: string. A two character state or province
395
+ # abbreviation (e.g. IL or YT). Will only return
396
+ # area codes for this state. (optional)
397
+ #
398
+ # Response: A JSON object with success, message, and data attributes. The
399
+ # data attribute contains a map of area codes to city and state.
400
+ #
401
+ # Example response:
402
+ # {
403
+ # "success": true,
404
+ # "message": "295 area codes available.",
405
+ # "data": {
406
+ # "201": {
407
+ # "city": "Bayonne, Jersey City, Union City",
408
+ # "state": "New Jersey"
409
+ # },
410
+ # "202": {
411
+ # "city": "Washington",
412
+ # "state": "District Of Columbia"
413
+ # },
414
+ # ... a lot more area codes here...
415
+ # }
416
+ # }
417
+ def area_codes(options = {})
418
+ post('/areaCodes', options)
419
+ end
420
+
238
421
  def send_post(path, options)
239
- post(path, query: options.merge!({api_key: api_key, api_secret: api_secret}))
422
+ post(
423
+ path, query: options.merge!(api_key: api_key, api_secret: api_secret)
424
+ )
425
+ end
426
+
427
+ # Public: Check the signature of the signed request.
428
+ #
429
+ # signature - Type: string. The X-Phaxio-Signature HTTP header value.
430
+ # url - Type: string. The full URL that was called by Phaxio,
431
+ # including the query. (required)
432
+ # params - Type: hash. The POSTed form data (required)
433
+ # files - Type: array. Submitted files (required - "received" fax
434
+ # callback only)
435
+ #
436
+ # Returns true if the signature matches the signed request, otherwise false
437
+ def valid_callback_signature?(signature, url, params, files = [])
438
+ check_signature = generate_check_signature(url, params, files)
439
+ check_signature == signature
440
+ end
441
+
442
+ # Public: Generate a signature using the request data and callback token
443
+ #
444
+ # url - Type: string. The full URL that was called by Phaxio,
445
+ # including the query. (required)
446
+ # params - Type: hash. The POSTed form data (required)
447
+ # files - Type: array. Submitted files (required - "received" fax
448
+ # callback only)
449
+ #
450
+ # Retuns a signature based on the request data and configured callback
451
+ # token, which can then be compared with the request signature.
452
+ def generate_check_signature(url, params, files = [])
453
+ params_string = generate_params_string(params)
454
+ file_string = generate_files_string(files)
455
+ callback_data = "#{url}#{params_string}#{file_string}"
456
+ OpenSSL::HMAC.hexdigest(DIGEST, callback_token, callback_data)
457
+ end
458
+
459
+ private
460
+
461
+ def generate_params_string(params)
462
+ sorted_params = params.sort_by { |key, _value| key }
463
+ params_strings = sorted_params.map { |key, value| "#{key}#{value}" }
464
+ params_strings.join
465
+ end
466
+
467
+ def generate_files_string(files)
468
+ files_array = files_to_array(files).reject(&:nil?)
469
+ sorted_files = files_array.sort_by { |file| file[:name] }
470
+ files_strings = sorted_files.map { |file| generate_file_string(file) }
471
+ files_strings.join
472
+ end
473
+
474
+ def files_to_array(files)
475
+ files.is_a?(Array) ? files : [files]
476
+ end
477
+
478
+ def generate_file_string(file)
479
+ file[:name] + DIGEST.hexdigest(file[:tempfile].read)
240
480
  end
241
481
  end
242
482
 
243
- # Public: Configure Phaxio with your api_key and api_secret
483
+ # Public: Configure Phaxio with your api_key, api_secret, and the callback
484
+ # token provided in your Phaxio account (to verify that requests are
485
+ # coming from Phaxio).
244
486
  #
245
487
  # Examples
246
488
  #
247
489
  # Phaxio.config do |config|
248
- # config.api_key = "12345678910"
249
- # config.api_secret = "10987654321"
490
+ # config.api_key = '12345678910'
491
+ # config.api_secret = '10987654321'
492
+ # config.callback_token = '32935829'
250
493
  # end
251
494
  #
252
495
  # Returns nothing.
@@ -1,3 +1,3 @@
1
1
  module Phaxio
2
- VERSION = "0.4.1"
2
+ VERSION = "0.5.0"
3
3
  end
@@ -2,11 +2,11 @@
2
2
  require File.expand_path('../lib/phaxio/version', __FILE__)
3
3
 
4
4
  Gem::Specification.new do |gem|
5
- gem.authors = ["Sean Behan", "Brett Chalupa"]
6
- gem.email = ["inbox@seanbehan.com", "brettchalupa@gmail.com"]
7
- gem.description = %q{A Ruby Gem for interacting with Phaxio's JSON API. Currently, not all of the Phaxio API calls are supported. The essentials are in place and more will be coming with future versions of this gem.}
8
- gem.summary = %q{A Ruby Gem for interacting with Phaxio's JSON API}
9
- gem.homepage = "http://www.gristmill.io/posts/17-introducing-the-phaxio-gem-an-easy-way-to-use-phaxio-with-ruby"
5
+ gem.authors = ["Josh Nankin"]
6
+ gem.email = ["support@phaxio.com"]
7
+ gem.description = %q{Ruby wrapper for the Phaxio API}
8
+ gem.summary = %q{Ruby wrapper for the Phaxio API}
9
+ gem.homepage = "http://github.com/phaxio/phaxio-ruby"
10
10
 
11
11
  gem.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
12
12
  gem.files = `git ls-files`.split("\n")
@@ -21,4 +21,5 @@ Gem::Specification.new do |gem|
21
21
  gem.add_development_dependency 'fakeweb', '~> 1.3'
22
22
  gem.add_development_dependency 'rake', '~> 10'
23
23
  gem.add_development_dependency 'minitest', '~> 5'
24
+ gem.add_development_dependency 'mocha', '~> 1.1'
24
25
  end
Binary file
@@ -0,0 +1,45 @@
1
+ require_relative '../test_helper'
2
+ require 'json'
3
+
4
+ class PhaxioIntegrationTest < MiniTest::Test
5
+ def setup
6
+ FakeWeb.clean_registry
7
+ configure
8
+
9
+ @fax_number = '2025550168'
10
+ end
11
+
12
+ def test_resend_fax
13
+ send_fax(test_fail: 'faxError')
14
+ response = Phaxio.resend_fax(id: @send_fax_response['faxId'])
15
+ assert response['success']
16
+ assert_equal 'Fax queued for resend', response['message']
17
+ assert response['data']['faxId'].integer?
18
+ end
19
+
20
+ def test_delete_fax
21
+ send_fax
22
+ response = Phaxio.delete_fax(id: @send_fax_response['faxId'])
23
+ assert response['success']
24
+ assert_equal 'Deleted fax successfully!', response['message']
25
+ end
26
+
27
+ private
28
+
29
+ def configure
30
+ Phaxio.config do |config|
31
+ config.api_key = ENV.fetch 'PHAXIO_TEST_API_KEY'
32
+ config.api_secret = ENV.fetch 'PHAXIO_TEST_API_SECRET'
33
+ end
34
+ rescue KeyError
35
+ raise(KeyError, 'You must set PHAXIO_TEST_API_KEY and ' \
36
+ 'PHAXIO_TEST_API_SECRET to run integration tests')
37
+ end
38
+
39
+ # Convenience method for actions requiring an existing fax
40
+ def send_fax(options = {})
41
+ params = options.merge(to: @fax_number, string_data: 'test')
42
+ @send_fax_response = Phaxio.send_fax(params)
43
+ sleep(5)
44
+ end
45
+ end
@@ -1,12 +1,15 @@
1
- $:<<(".")
1
+ $LOAD_PATH << '.'
2
+
2
3
  require 'minitest/autorun'
3
4
 
4
- require "fakeweb"
5
- require "lib/phaxio"
5
+ require 'mocha/mini_test'
6
+ require 'fakeweb'
7
+ require 'lib/phaxio'
6
8
 
7
9
  Phaxio.config do |config|
8
- config.api_key = "12345678910"
9
- config.api_secret = "10987654321"
10
+ config.api_key = '12345678910'
11
+ config.api_secret = '10987654321'
12
+ config.callback_token = '1234567890'
10
13
  end
11
14
 
12
15
  FakeWeb.register_uri(:post, "https://api.phaxio.com/v1/send",
@@ -1,6 +1,11 @@
1
1
  require_relative "test_helper"
2
2
 
3
3
  class TestPhaxio < MiniTest::Test
4
+ def setup
5
+ @callback_data = ['example.com', { test: true }]
6
+ @testPDF = File.new(File.dirname(__FILE__) + "/files/test.pdf")
7
+ end
8
+
4
9
  def test_config
5
10
  assert_equal "12345678910", Phaxio.api_key
6
11
  assert_equal "10987654321", Phaxio.api_secret
@@ -10,10 +15,16 @@ class TestPhaxio < MiniTest::Test
10
15
  end
11
16
 
12
17
  def test_send_fax
13
- @response = Phaxio.send_fax(to: "0123456789", filename: "test.pdf")
14
- assert_equal true, @response["success"]
15
- assert_equal "Fax queued for sending", @response["message"]
16
- assert_equal 1234, @response["faxId"]
18
+ Phaxio.expects(:send_post).with(
19
+ '/send',
20
+ to: "+18005551234", filename: @testPDF
21
+ )
22
+ Phaxio.send_fax(to: "+18005551234", filename: @testPDF)
23
+ end
24
+
25
+ def test_resend_fax
26
+ Phaxio.expects(:send_post).with('/resendFax', id: 1234)
27
+ Phaxio.resend_fax(id: 1234)
17
28
  end
18
29
 
19
30
  def test_test_receive
@@ -63,10 +74,55 @@ class TestPhaxio < MiniTest::Test
63
74
  assert_equal "Fax canceled successfully.", @response["message"]
64
75
  end
65
76
 
77
+ def test_delete_fax
78
+ Phaxio.expects(:send_post).with('/deleteFax', id: 1234)
79
+ Phaxio.delete_fax(id: 1234)
80
+ end
81
+
66
82
  def test_get_account_status
67
83
  @response = Phaxio.get_account_status
68
84
  assert_equal true, @response["success"]
69
85
  assert_equal "Account status retrieved successfully", @response["message"]
70
86
  assert_equal 120, @response["data"]["faxes_sent_this_month"]
71
87
  end
88
+
89
+ def test_generate_check_signature
90
+ signature = Phaxio.generate_check_signature(*@callback_data)
91
+ assert_equal '15adeecb7eca79676ece07ee4bc1bbba2c69eddd', signature
92
+ end
93
+
94
+ def test_valid_callback_signature?
95
+ assert_equal true, Phaxio.valid_callback_signature?(
96
+ '15adeecb7eca79676ece07ee4bc1bbba2c69eddd', *@callback_data)
97
+ assert_equal false, Phaxio.valid_callback_signature?(
98
+ 'wrong', *@callback_data)
99
+ end
100
+
101
+ def test_attach_phax_code_to_pdf
102
+ Phaxio.expects(:send_post).with(
103
+ '/attachPhaxCodeToPdf',
104
+ x: 0, y: 100, filename: @testPDF
105
+ )
106
+ Phaxio.attach_phaxcode_to_pdf(x: 0, y: 100, filename: @testPDF)
107
+ end
108
+
109
+ def test_create_phaxcode
110
+ Phaxio.expects(:send_post).with('/createPhaxCode', {})
111
+ Phaxio.create_phaxcode
112
+ end
113
+
114
+ def test_get_hosted_document
115
+ Phaxio.expects(:send_post).with('/getHostedDocument', name: 'test_fax')
116
+ Phaxio.get_hosted_document(name: 'test_fax')
117
+ end
118
+
119
+ def test_supported_countries
120
+ Phaxio.expects(:post).with('/supportedCountries')
121
+ Phaxio.supported_countries
122
+ end
123
+
124
+ def test_area_codes
125
+ Phaxio.expects(:post).with('/areaCodes', is_toll_free: true, state: 'IL')
126
+ Phaxio.area_codes(is_toll_free: true, state: 'IL')
127
+ end
72
128
  end
metadata CHANGED
@@ -1,15 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: phaxio
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.1
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
- - Sean Behan
8
- - Brett Chalupa
7
+ - Josh Nankin
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2015-12-16 00:00:00.000000000 Z
11
+ date: 2016-02-16 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: httmultiparty
@@ -81,12 +80,23 @@ dependencies:
81
80
  - - "~>"
82
81
  - !ruby/object:Gem::Version
83
82
  version: '5'
84
- description: A Ruby Gem for interacting with Phaxio's JSON API. Currently, not all
85
- of the Phaxio API calls are supported. The essentials are in place and more will
86
- be coming with future versions of this gem.
83
+ - !ruby/object:Gem::Dependency
84
+ name: mocha
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '1.1'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '1.1'
97
+ description: Ruby wrapper for the Phaxio API
87
98
  email:
88
- - inbox@seanbehan.com
89
- - brettchalupa@gmail.com
99
+ - support@phaxio.com
90
100
  executables: []
91
101
  extensions: []
92
102
  extra_rdoc_files: []
@@ -94,6 +104,7 @@ files:
94
104
  - ".gitignore"
95
105
  - ".ruby-version"
96
106
  - ".travis.yml"
107
+ - CHANGELOG
97
108
  - Gemfile
98
109
  - LICENSE
99
110
  - README.md
@@ -102,6 +113,8 @@ files:
102
113
  - lib/phaxio/client.rb
103
114
  - lib/phaxio/version.rb
104
115
  - phaxio.gemspec
116
+ - test/files/test.pdf
117
+ - test/integration/phaxio_integration_test.rb
105
118
  - test/support/responses/account_status.json
106
119
  - test/support/responses/cancel_success.json
107
120
  - test/support/responses/fax_status_success.json
@@ -115,7 +128,7 @@ files:
115
128
  - test/support/responses/test_receive.json
116
129
  - test/test_helper.rb
117
130
  - test/test_phaxio.rb
118
- homepage: http://www.gristmill.io/posts/17-introducing-the-phaxio-gem-an-easy-way-to-use-phaxio-with-ruby
131
+ homepage: http://github.com/phaxio/phaxio-ruby
119
132
  licenses: []
120
133
  metadata: {}
121
134
  post_install_message:
@@ -137,5 +150,5 @@ rubyforge_project:
137
150
  rubygems_version: 2.4.6
138
151
  signing_key:
139
152
  specification_version: 4
140
- summary: A Ruby Gem for interacting with Phaxio's JSON API
153
+ summary: Ruby wrapper for the Phaxio API
141
154
  test_files: []