dotloop 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (50) hide show
  1. checksums.yaml +7 -0
  2. checksums.yaml.gz.sig +0 -0
  3. data.tar.gz.sig +0 -0
  4. data/.gitignore +9 -0
  5. data/.rspec +2 -0
  6. data/.rubocop.yml +44 -0
  7. data/.travis.yml +8 -0
  8. data/Gemfile +4 -0
  9. data/LICENSE.txt +21 -0
  10. data/README.md +109 -0
  11. data/Rakefile +6 -0
  12. data/bin/console +10 -0
  13. data/bin/setup +8 -0
  14. data/certs/shanedavies.pem +21 -0
  15. data/dotloop.gemspec +42 -0
  16. data/lib/dotloop.rb +42 -0
  17. data/lib/dotloop/admin.rb +24 -0
  18. data/lib/dotloop/client.rb +89 -0
  19. data/lib/dotloop/document.rb +26 -0
  20. data/lib/dotloop/document_activity.rb +24 -0
  21. data/lib/dotloop/employee.rb +14 -0
  22. data/lib/dotloop/folder.rb +14 -0
  23. data/lib/dotloop/loop.rb +62 -0
  24. data/lib/dotloop/loop_activity.rb +24 -0
  25. data/lib/dotloop/models/admin.rb +13 -0
  26. data/lib/dotloop/models/buying_brokerage.rb +15 -0
  27. data/lib/dotloop/models/document.rb +17 -0
  28. data/lib/dotloop/models/document_activity.rb +9 -0
  29. data/lib/dotloop/models/employee.rb +15 -0
  30. data/lib/dotloop/models/financials.rb +13 -0
  31. data/lib/dotloop/models/folder.rb +14 -0
  32. data/lib/dotloop/models/listing_brokerage.rb +15 -0
  33. data/lib/dotloop/models/loop.rb +15 -0
  34. data/lib/dotloop/models/loop_activity.rb +9 -0
  35. data/lib/dotloop/models/loop_detail.rb +9 -0
  36. data/lib/dotloop/models/participant.rb +12 -0
  37. data/lib/dotloop/models/person.rb +19 -0
  38. data/lib/dotloop/models/profile.rb +28 -0
  39. data/lib/dotloop/models/property_address.rb +16 -0
  40. data/lib/dotloop/models/section.rb +11 -0
  41. data/lib/dotloop/models/tag.rb +11 -0
  42. data/lib/dotloop/models/task.rb +16 -0
  43. data/lib/dotloop/participant.rb +15 -0
  44. data/lib/dotloop/person.rb +29 -0
  45. data/lib/dotloop/profile.rb +17 -0
  46. data/lib/dotloop/query_param_helpers.rb +59 -0
  47. data/lib/dotloop/task.rb +14 -0
  48. data/lib/dotloop/version.rb +3 -0
  49. metadata +294 -0
  50. metadata.gz.sig +0 -0
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 0c1546dd7b2d96ebbf6b21f0b74477923cb06e75
4
+ data.tar.gz: f9cfa01fbb2128a9c99fc322db081406a52ade98
5
+ SHA512:
6
+ metadata.gz: 75e6026d6e94e1b2dee3e8dfe7e64368dd30c61a9c608e29f2b42f48014da1540456261c980643d2ca693254b7a818f1dfdfe926eff220c4362c255a169ca7a2
7
+ data.tar.gz: 026b931ceaef7577d21b535509c9c393a7e48bcb08810c29cfdeededa09c7117a283bea8ac19bb4e1feac6d90eb972f4a2cc8cd6b4e26f564ba4dc81124b7c40
Binary file
Binary file
@@ -0,0 +1,9 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /Gemfile.lock
4
+ /_yardoc/
5
+ /coverage/
6
+ /doc/
7
+ /pkg/
8
+ /spec/reports/
9
+ /tmp/
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --format documentation
2
+ --color
@@ -0,0 +1,44 @@
1
+ AllCops:
2
+ TargetRubyVersion: 2.3
3
+ Include:
4
+ - '**/*.gemspec'
5
+ - '**/*.podspec'
6
+ - '**/*.jbuilder'
7
+ - '**/*.rake'
8
+ - '**/*.opal'
9
+ - '**/config.ru'
10
+ - '**/Gemfile'
11
+ - '**/Rakefile'
12
+ - '**/Capfile'
13
+ - '**/Podfile'
14
+ - '**/Thorfile'
15
+ - '**/Vagrantfile'
16
+ - '**/Berksfile'
17
+ - '**/Cheffile'
18
+ - '**/Vagabondfile'
19
+ Exclude:
20
+ - '**/Guardfile'
21
+ - 'db/**/*'
22
+ - 'tmp/**/*'
23
+ - 'vendor/**/*'
24
+ - 'bin/**/*'
25
+ - 'log/**/*'
26
+ Documentation:
27
+ Enabled: false
28
+ Metrics/LineLength:
29
+ Max: 120
30
+ AllowURI: true
31
+ URISchemes:
32
+ - http
33
+ - https
34
+ Metrics/MethodLength:
35
+ CountComments: false
36
+ Max: 15
37
+ Style/RaiseArgs:
38
+ Enabled: false
39
+ Style/FrozenStringLiteralComment:
40
+ Enabled: false
41
+ Style/Alias:
42
+ EnforcedStyle: prefer_alias_method
43
+ Style/MethodName:
44
+ Enabled: false
@@ -0,0 +1,8 @@
1
+ sudo: false
2
+ language: ruby
3
+ rvm:
4
+ - 2.3.0
5
+ before_install: gem install bundler -v 1.12.0
6
+ notifications:
7
+ slack:
8
+ secure: JabcnJlmrkhrrCtDTaqoylYn2dmyUP9h9SO/IyVKrIZ0YvTukaKzU2RSHP6PXjv1WC/9zfrmrWiODBZmg3HciOq4C6g+LdPEGtujx4ULSpztyIm8MlC+uODKtNLR7Q4j9cWTNOi6JKmBWJmo00i7OXLiB3njpEza3or3585vL9ffLJTG/9bi61u/ccuDXBKjqOg2Mxa5sWycgl/kAZ1qTgG76RARWFr6f2Cvxu9LG0BeUq0KpMHKToPjTllmYIKoXKStAX8bLnTU0M1JI5O4uc5W/QOaRhrNgSNyn2LVzHos/8+LO8I4kj+ptMYK037pM3ojByYmQOyE8WL/6kCAJbRN5njyENRUpXrGyWjfF7yDBGA5zMoYgC6MyUWiOj66p12tNTrUVkeFc53uYzlfAg8n331aHj+j+zWuT+oOrn0H9Nx1X4QtJleY6qkPHZO2aF9o7rZIeA7Fn9fGrECUvOQyskBHgHyyWnZ1SpZsRBXKCqlPMyf//RUO9Cx580VSTqgjTCcHa5gAhsoiTl5S9NjsTJCrshRxkj0t1tv2tiCbbTLJ9n309wsI2kj+53S4Q4lXgTV4SQEqrqoO7PldQKPiOZDF2ZOZO0Ou6EBEGcIqL54tWjoKXHpPxMuXW0UrXgl1wl+jhiQTzKBlW4raHLYfaL6u1Yjvo1ZKKTlLseg=
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in dotloop.gemspec
4
+ gemspec
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2016 Loft 47
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in
13
+ all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ THE SOFTWARE.
@@ -0,0 +1,109 @@
1
+ # DotLoop API Library
2
+ [![Build Status](https://travis-ci.org/Loft47/dotloop.svg?branch=master)](https://travis-ci.org/Loft47/dotloop)
3
+ [![Coverage Status](https://coveralls.io/repos/github/Loft47/dotloop/badge.svg?branch=master&renew=true)](https://coveralls.io/github/Loft47/dotloop?branch=master)
4
+
5
+ This library is designed to help ruby applications consume the DotLoop API.
6
+
7
+ You can read more about the api the the official documentation at [https://support.dotloop.com](https://support.dotloop.com/hc/en-us/articles/204407013-Dotloop-REST-API-Developer-s-Guide)
8
+
9
+ ## Installation
10
+
11
+ Add this line to your application's Gemfile:
12
+
13
+ ```ruby
14
+ gem 'dotloop'
15
+ ```
16
+
17
+ And then execute:
18
+
19
+ $ bundle
20
+
21
+ Or install it yourself as:
22
+
23
+ $ gem install dotloop
24
+
25
+ ## Usage
26
+
27
+ Optional parameters are prefixed with a __'*'__'
28
+ client = Dotloop::Client.new(api_key: 'c4c26918-b2df-49a6-9bc2-9009274b23a7')
29
+
30
+ client.Profile.all #=> get list of profiles
31
+
32
+ client.Loop.all(
33
+ profile_id: '1234',
34
+ *batch_number: 1,
35
+ *batch_size: 50,
36
+ *statusIds: '1,2,3'
37
+ *complianceStatusIds: '1,2,3'
38
+ *tagIds: '1,2,3'
39
+ *sortBy: 'email'
40
+ *searchQuery: 'test@example.com'
41
+ *tagNames: 'tag'
42
+ *createdByMe: '1234567'
43
+ ) #=> get list of loops
44
+
45
+ client.Loop.all(profile_id: '1234', loop_view_id: '76046') #=> get basic loop information
46
+
47
+ client.Loop.find(profile_id: '1234', loop_view_id: '76046') #=> get loop details
48
+ client.LoopActivity.all(
49
+ profile_id: '1234',
50
+ loop_view_id: '76046',
51
+ *batch_number: 1,
52
+ *batch_size: 50
53
+ ) #=> get loop activity
54
+ client.Document.all(profile_id: '1234', loop_view_id: '76046') #=> get loop document list
55
+
56
+ client.Participant.all(profile_id: '1234', loop_view_id: '76046') #=> get a list of loop participants
57
+
58
+ client.Task.all(profile_id: '1234', loop_view_id: '76046') #=> get a list of loop tasks
59
+
60
+ client.Folder.all(profile_id: '1234', loop_view_id: '76046') #=> get a list of folders in a loop
61
+
62
+ client.Employee.all(
63
+ profile_id: '1234',
64
+ *batch_number: 1,
65
+ *batch_size: 50,
66
+ *show_admin: true,
67
+ *show_in_active: true,
68
+ *include_child: true
69
+ ) #=> get a list of users in a profile
70
+ client.DocumentActivity.all(
71
+ profile_id: '1234',
72
+ document_id: '561622',
73
+ *batch_number: 1,
74
+ *batch_size: 50
75
+ ) #=> get activity details for a document
76
+ client.Person.all(
77
+ profile_id: '1234',
78
+ *batch_number: 1,
79
+ *batch_size: 50
80
+ ) #=> get list of contacts
81
+ client.Person.find(profile_id: '1234', contact_id: '3603862') #=> get details for a contact
82
+
83
+ client.Admin.all(
84
+ profile_id: '1234',
85
+ *batch_number: 1,
86
+ *batch_size: 50
87
+ ) #=> get list of admins for a profile
88
+
89
+ client.Document.get(
90
+ profile_id: '1234',
91
+ loop_view_id: '76046',
92
+ document_id: '561622',
93
+ document_name: 'My Offer'
94
+ ) #=> get a PDF document
95
+
96
+ ## Development
97
+
98
+ After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
99
+
100
+ To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
101
+
102
+ ## Contributing
103
+
104
+ Bug reports and pull requests are welcome on GitHub at https://github.com/[USERNAME]/dotloop.
105
+
106
+
107
+ ## License
108
+
109
+ The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
@@ -0,0 +1,6 @@
1
+ require 'bundler/gem_tasks'
2
+ require 'rspec/core/rake_task'
3
+
4
+ RSpec::Core::RakeTask.new(:spec)
5
+
6
+ task default: :spec
@@ -0,0 +1,10 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'bundler/setup'
4
+ require 'dotloop'
5
+
6
+ # You can add fixtures and/or initialization code here to make experimenting
7
+ # with your gem easier. You can also use a different console, if you like.
8
+
9
+ require 'pry'
10
+ Pry.start
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+ IFS=$'\n\t'
4
+ set -vx
5
+
6
+ bundle install
7
+
8
+ # Do any other automated setup that you need to do here
@@ -0,0 +1,21 @@
1
+ -----BEGIN CERTIFICATE-----
2
+ MIIDcDCCAligAwIBAgIBATANBgkqhkiG9w0BAQUFADA/MRAwDgYDVQQDDAdzZGF2
3
+ aWVzMRYwFAYKCZImiZPyLGQBGRYGbG9mdDQ3MRMwEQYKCZImiZPyLGQBGRYDY29t
4
+ MB4XDTE2MDgwODE5MzAzMloXDTE3MDgwODE5MzAzMlowPzEQMA4GA1UEAwwHc2Rh
5
+ dmllczEWMBQGCgmSJomT8ixkARkWBmxvZnQ0NzETMBEGCgmSJomT8ixkARkWA2Nv
6
+ bTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANbdLELnhjHmoCxtvOy3
7
+ mFcacIzle+eZa9n6a3D3S6mEGC/lO4WF8EePp94qwjMIQhyTWqF/yRwqFkpo+RVl
8
+ QWg5zxfxCM1AOspzaj7zaSpeHyh4KosQVyART60HS0GkFIFOlnQcHqVpwGQcPd4Z
9
+ uekgG0GAqgcj/+ioyDvgDhku5ANSBa4uYwH9OJVYCP5xXlcdxK8KbcxKgMorC2hx
10
+ 8hTQH+wTT5T/5j15p9bcOf/Tnm0EjtSoxfDWHJoQLIGNwfJOp/kFZaBxxy4oZq+j
11
+ GzPJff8AZvbs9nTg1AJ/RaCWjM/YEwkjBAf7g/6dm9SMC162nyg4/Yjgze6z6Zt3
12
+ w1cCAwEAAaN3MHUwCQYDVR0TBAIwADALBgNVHQ8EBAMCBLAwHQYDVR0OBBYEFH3o
13
+ 0f/0COUk9idtlFf1qCHIvMPRMB0GA1UdEQQWMBSBEnNkYXZpZXNAbG9mdDQ3LmNv
14
+ bTAdBgNVHRIEFjAUgRJzZGF2aWVzQGxvZnQ0Ny5jb20wDQYJKoZIhvcNAQEFBQAD
15
+ ggEBAE2ieglURsx6Rj0HQQw3TZUsurXTpoTfuajK7UjU/n4UatPSMDg663Zp2k+O
16
+ 7xv7cQlnn7I0uTpOKMVAiFxHbm01nSaIScyBed1SOsixCaRSjZTm5yq5Pabn4VmC
17
+ y2h5HMXQ6MSbD8oD5cOly6PPo5lhXfPCZ8H7yPbl3Z8i3A4co82TF+5yJxPK7DBM
18
+ WHXFKCoz2zIIOVblPHGnCVm0YVvO354ojsRsqh64WP7e5nT4QhSb+3iQkWuoBcbl
19
+ L+ceZspJWVt3gj8EHk5CVnWGEh6Pk69eo8EuR38vWHXOExU+b14Umj8wjYGjDgmQ
20
+ ULEgdaQHqkQV4C3edSFOUWTGehI=
21
+ -----END CERTIFICATE-----
@@ -0,0 +1,42 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'dotloop/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = 'dotloop'
8
+ spec.version = Dotloop::VERSION
9
+ spec.authors = ['Loft47']
10
+ spec.email = ['support@loft47.com']
11
+
12
+ spec.summary = %(Dotloop library)
13
+ spec.description = %(Ruby library for Dotloop API.)
14
+ spec.homepage = %(http://github.com/Loft47/dotloop)
15
+ spec.license = 'MIT'
16
+ spec.cert_chain = ['certs/shanedavies.pem']
17
+ spec.signing_key = File.expand_path('~/.ssh/dotloop-private_key.pem') if $0 =~ /gem\z/
18
+
19
+ # Prevent pushing this gem to RubyGems.org. To allow pushes either set the 'allowed_push_host'
20
+ # to allow pushing to a single host or delete this section to allow pushing to any host.
21
+ raise 'RubyGems 2.0 or newer is required to protect against public gem pushes.' unless spec.respond_to?(:metadata)
22
+ spec.metadata['allowed_push_host'] = 'https://rubygems.org'
23
+
24
+ spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
25
+ spec.bindir = 'exe'
26
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
27
+ spec.require_paths = ['lib']
28
+
29
+ spec.add_runtime_dependency 'simplecov', '~> 0.12'
30
+ spec.add_runtime_dependency 'coveralls', '~> 0.8'
31
+ spec.add_runtime_dependency 'httparty', '~> 0.13'
32
+ spec.add_runtime_dependency 'virtus', '~> 1.0'
33
+ spec.add_runtime_dependency 'plissken', '~> 0.2'
34
+ spec.add_development_dependency 'bundler', '~> 1.12'
35
+ spec.add_development_dependency 'rake', '~> 10.0'
36
+ spec.add_development_dependency 'rspec', '~> 3.0'
37
+ spec.add_development_dependency 'pry', '~> 0.10'
38
+ spec.add_development_dependency 'byebug', '~> 9.0'
39
+ spec.add_development_dependency 'rubocop', '~> 0.41'
40
+ spec.add_development_dependency 'webmock', '~> 2.1'
41
+ spec.add_development_dependency 'travis', '~> 1.8'
42
+ end
@@ -0,0 +1,42 @@
1
+ require 'plissken'
2
+ require 'httparty'
3
+ require 'virtus'
4
+
5
+ require 'dotloop/version'
6
+ require 'dotloop/client'
7
+ require 'dotloop/query_param_helpers'
8
+ require 'dotloop/profile'
9
+ require 'dotloop/loop'
10
+ require 'dotloop/admin'
11
+ require 'dotloop/document'
12
+ require 'dotloop/document_activity'
13
+ require 'dotloop/employee'
14
+ require 'dotloop/folder'
15
+ require 'dotloop/loop_activity'
16
+ require 'dotloop/participant'
17
+ require 'dotloop/person'
18
+ require 'dotloop/task'
19
+
20
+ require 'dotloop/models/property_address'
21
+ require 'dotloop/models/buying_brokerage'
22
+ require 'dotloop/models/listing_brokerage'
23
+ require 'dotloop/models/financials'
24
+ require 'dotloop/models/section'
25
+ require 'dotloop/models/loop_detail'
26
+
27
+ require 'dotloop/models/admin'
28
+ require 'dotloop/models/document'
29
+ require 'dotloop/models/document_activity'
30
+ require 'dotloop/models/employee'
31
+ require 'dotloop/models/folder'
32
+ require 'dotloop/models/loop'
33
+ require 'dotloop/models/loop_activity'
34
+ require 'dotloop/models/participant'
35
+ require 'dotloop/models/person'
36
+ require 'dotloop/models/profile'
37
+ require 'dotloop/models/tag'
38
+ require 'dotloop/models/task'
39
+
40
+ module Dotloop
41
+ # Your code goes here...
42
+ end
@@ -0,0 +1,24 @@
1
+ module Dotloop
2
+ class Admin
3
+ include Dotloop::QueryParamHelpers
4
+ attr_accessor :client
5
+
6
+ def initialize(client:)
7
+ @client = client
8
+ end
9
+
10
+ def all(options = {})
11
+ admins = []
12
+ url = "/profile/#{profile_id(options)}/admin"
13
+ (1..MAX_LOOPS).each do |i|
14
+ options[:batch_number] = i
15
+ current_admin = @client.get(url, query_params(options)).map do |admin_attrs|
16
+ Dotloop::Models::Admin.new(admin_attrs)
17
+ end
18
+ admins += current_admin
19
+ break if current_admin.size < BATCH_SIZE
20
+ end
21
+ admins
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,89 @@
1
+ module Dotloop
2
+ class Client
3
+ include HTTParty
4
+
5
+ base_uri 'https://www.dotloop.com/my/api/v1_0/'
6
+
7
+ attr_accessor :api_key
8
+ attr_accessor :application
9
+
10
+ def initialize(api_key:, application: 'dotloop')
11
+ @api_key = api_key
12
+ @application = application
13
+ raise 'Please enter an API key' unless @api_key
14
+ end
15
+
16
+ def get(page, params = {})
17
+ response = raw(page, params)
18
+ self.class.snakify(response)
19
+ end
20
+
21
+ def raw(page, params = {})
22
+ response = self.class.get(page, query: params, headers: headers, timeout: 60)
23
+ raise "Error communicating: Response code #{response.code}" unless response.code == 200
24
+ response.parsed_response
25
+ end
26
+
27
+ def Profile
28
+ @profile ||= Dotloop::Profile.new(client: self)
29
+ end
30
+
31
+ def Loop
32
+ @loop ||= Dotloop::Loop.new(client: self)
33
+ end
34
+
35
+ def Document
36
+ @document ||= Dotloop::Document.new(client: self)
37
+ end
38
+
39
+ def Participant
40
+ @participant ||= Dotloop::Participant.new(client: self)
41
+ end
42
+
43
+ def LoopActivity
44
+ @loop_activity ||= Dotloop::LoopActivity.new(client: self)
45
+ end
46
+
47
+ def Task
48
+ @task ||= Dotloop::Task.new(client: self)
49
+ end
50
+
51
+ def Folder
52
+ @folder ||= Dotloop::Folder.new(client: self)
53
+ end
54
+
55
+ def Employee
56
+ @employee ||= Dotloop::Employee.new(client: self)
57
+ end
58
+
59
+ def DocumentActivity
60
+ @document_activity ||= Dotloop::DocumentActivity.new(client: self)
61
+ end
62
+
63
+ def Person
64
+ @person ||= Dotloop::Person.new(client: self)
65
+ end
66
+
67
+ def Admin
68
+ @admin ||= Dotloop::Admin.new(client: self)
69
+ end
70
+
71
+ def self.snakify(hash)
72
+ if hash.is_a? Array
73
+ hash.map(&:to_snake_keys)
74
+ else
75
+ hash.to_snake_keys
76
+ end
77
+ end
78
+
79
+ private
80
+
81
+ def headers
82
+ {
83
+ 'Authorization' => "Bearer #{@api_key}",
84
+ 'User-Agent' => @application,
85
+ 'Accept' => '*/*'
86
+ }
87
+ end
88
+ end
89
+ end