dotloop 0.1.2

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.
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