followupboss_client 1.0.0
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 +7 -0
- data/.env.example +12 -0
- data/.gitignore +18 -0
- data/.rspec +2 -0
- data/.ruby-gemset +1 -0
- data/.ruby-version +1 -0
- data/.tool-versions +1 -0
- data/.travis.yml +9 -0
- data/CHANGELOG.md +149 -0
- data/CODE_OF_CONDUCT.md +49 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +22 -0
- data/README.md +882 -0
- data/Rakefile +6 -0
- data/bin/console +14 -0
- data/bin/setup +8 -0
- data/followupboss_client.gemspec +43 -0
- data/lib/followupboss_client.rb +16 -0
- data/lib/fub_client/action_plan.rb +5 -0
- data/lib/fub_client/appointment.rb +42 -0
- data/lib/fub_client/appointment_outcome.rb +51 -0
- data/lib/fub_client/appointment_type.rb +51 -0
- data/lib/fub_client/call.rb +4 -0
- data/lib/fub_client/client.rb +200 -0
- data/lib/fub_client/compatibility.rb +18 -0
- data/lib/fub_client/configuration.rb +54 -0
- data/lib/fub_client/cookie_client.rb +190 -0
- data/lib/fub_client/custom_field.rb +5 -0
- data/lib/fub_client/deal.rb +41 -0
- data/lib/fub_client/deal_attachment.rb +61 -0
- data/lib/fub_client/deal_custom_field.rb +47 -0
- data/lib/fub_client/em_event.rb +5 -0
- data/lib/fub_client/email_template.rb +5 -0
- data/lib/fub_client/event.rb +8 -0
- data/lib/fub_client/group.rb +58 -0
- data/lib/fub_client/her_patch.rb +101 -0
- data/lib/fub_client/identity.rb +33 -0
- data/lib/fub_client/message.rb +41 -0
- data/lib/fub_client/middleware/authentication.rb +26 -0
- data/lib/fub_client/middleware/cookie_authentication.rb +61 -0
- data/lib/fub_client/middleware/parser.rb +59 -0
- data/lib/fub_client/middleware.rb +8 -0
- data/lib/fub_client/note.rb +4 -0
- data/lib/fub_client/people_relationship.rb +34 -0
- data/lib/fub_client/person.rb +5 -0
- data/lib/fub_client/person_attachment.rb +50 -0
- data/lib/fub_client/pipeline.rb +45 -0
- data/lib/fub_client/property.rb +26 -0
- data/lib/fub_client/rails8_patch.rb +39 -0
- data/lib/fub_client/resource.rb +33 -0
- data/lib/fub_client/shared_inbox.rb +389 -0
- data/lib/fub_client/smart_list.rb +5 -0
- data/lib/fub_client/stage.rb +39 -0
- data/lib/fub_client/task.rb +18 -0
- data/lib/fub_client/team.rb +65 -0
- data/lib/fub_client/team_inbox.rb +65 -0
- data/lib/fub_client/text_message.rb +46 -0
- data/lib/fub_client/text_message_template.rb +49 -0
- data/lib/fub_client/user.rb +4 -0
- data/lib/fub_client/version.rb +3 -0
- data/lib/fub_client/webhook.rb +47 -0
- data/lib/fub_client.rb +61 -0
- data/scripts/test_api.rb +110 -0
- data/scripts/test_shared_inbox.rb +90 -0
- metadata +335 -0
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
module FubClient
|
|
2
|
+
class Webhook < Resource
|
|
3
|
+
collection_path 'webhooks'
|
|
4
|
+
root_element :webhook
|
|
5
|
+
include_root_in_json true
|
|
6
|
+
|
|
7
|
+
# Convenience method to find webhooks by event type
|
|
8
|
+
scope :by_event_type, ->(event_type) { where(eventType: event_type) }
|
|
9
|
+
|
|
10
|
+
# Convenience method to find active webhooks
|
|
11
|
+
def self.active
|
|
12
|
+
where(active: true)
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
# Convenience method to find inactive webhooks
|
|
16
|
+
def self.inactive
|
|
17
|
+
where(active: false)
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
# Get webhook events
|
|
21
|
+
def events(limit = 10)
|
|
22
|
+
return [] unless id
|
|
23
|
+
|
|
24
|
+
begin
|
|
25
|
+
response = self.class.get("#{id}/events", { limit: limit })
|
|
26
|
+
response[:events] || []
|
|
27
|
+
rescue StandardError
|
|
28
|
+
[]
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
# Activate a webhook
|
|
33
|
+
def activate
|
|
34
|
+
self.class.put("#{id}/activate", {})
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
# Deactivate a webhook
|
|
38
|
+
def deactivate
|
|
39
|
+
self.class.put("#{id}/deactivate", {})
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
# Test a webhook by sending a test event
|
|
43
|
+
def test
|
|
44
|
+
self.class.post("#{id}/test", {})
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
end
|
data/lib/fub_client.rb
ADDED
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
# Libs
|
|
2
|
+
require 'base64'
|
|
3
|
+
require 'singleton'
|
|
4
|
+
require 'logger'
|
|
5
|
+
require 'active_support'
|
|
6
|
+
require 'active_support/all'
|
|
7
|
+
require 'active_support/core_ext/hash/keys'
|
|
8
|
+
require 'faraday'
|
|
9
|
+
require 'fub_client/rails8_patch' # Must be loaded after ActiveSupport and Faraday but before Her
|
|
10
|
+
require 'fub_client/her_patch' # Must be loaded after Faraday but before Her
|
|
11
|
+
require 'facets/string/snakecase'
|
|
12
|
+
require 'multi_json'
|
|
13
|
+
require 'fub_client/compatibility'
|
|
14
|
+
require 'her'
|
|
15
|
+
|
|
16
|
+
# App
|
|
17
|
+
require 'fub_client/version'
|
|
18
|
+
require 'fub_client/configuration'
|
|
19
|
+
require 'fub_client/client'
|
|
20
|
+
require 'fub_client/cookie_client'
|
|
21
|
+
require 'fub_client/middleware'
|
|
22
|
+
require 'fub_client/middleware/cookie_authentication'
|
|
23
|
+
require 'fub_client/resource'
|
|
24
|
+
# App Models
|
|
25
|
+
require 'fub_client/event'
|
|
26
|
+
require 'fub_client/person'
|
|
27
|
+
require 'fub_client/note'
|
|
28
|
+
require 'fub_client/call'
|
|
29
|
+
require 'fub_client/user'
|
|
30
|
+
require 'fub_client/smart_list'
|
|
31
|
+
require 'fub_client/email_template'
|
|
32
|
+
require 'fub_client/action_plan'
|
|
33
|
+
require 'fub_client/em_event'
|
|
34
|
+
require 'fub_client/custom_field'
|
|
35
|
+
require 'fub_client/task'
|
|
36
|
+
require 'fub_client/property'
|
|
37
|
+
require 'fub_client/deal'
|
|
38
|
+
require 'fub_client/message'
|
|
39
|
+
require 'fub_client/appointment'
|
|
40
|
+
require 'fub_client/text_message'
|
|
41
|
+
require 'fub_client/stage'
|
|
42
|
+
require 'fub_client/pipeline'
|
|
43
|
+
require 'fub_client/webhook'
|
|
44
|
+
require 'fub_client/text_message_template'
|
|
45
|
+
require 'fub_client/people_relationship'
|
|
46
|
+
require 'fub_client/person_attachment'
|
|
47
|
+
require 'fub_client/team'
|
|
48
|
+
require 'fub_client/deal_custom_field'
|
|
49
|
+
require 'fub_client/deal_attachment'
|
|
50
|
+
require 'fub_client/group'
|
|
51
|
+
require 'fub_client/appointment_type'
|
|
52
|
+
require 'fub_client/appointment_outcome'
|
|
53
|
+
require 'fub_client/identity'
|
|
54
|
+
require 'fub_client/team_inbox'
|
|
55
|
+
require 'fub_client/shared_inbox'
|
|
56
|
+
|
|
57
|
+
module FubClient
|
|
58
|
+
def self.root
|
|
59
|
+
File.expand_path '..', __dir__
|
|
60
|
+
end
|
|
61
|
+
end
|
data/scripts/test_api.rb
ADDED
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
require 'bundler/setup'
|
|
3
|
+
require 'fub_client'
|
|
4
|
+
require 'dotenv'
|
|
5
|
+
require 'pp'
|
|
6
|
+
|
|
7
|
+
# Load environment variables from .env file
|
|
8
|
+
Dotenv.load
|
|
9
|
+
|
|
10
|
+
# Print API key (masked for security)
|
|
11
|
+
api_key = ENV['FUB_API_KEY']
|
|
12
|
+
if api_key
|
|
13
|
+
puts "Using API key: #{api_key[0..3]}...#{api_key[-4..-1]}"
|
|
14
|
+
else
|
|
15
|
+
puts 'ERROR: No API key found in environment. Make sure you have FUB_API_KEY set in your .env file.'
|
|
16
|
+
exit 1
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
# Helper function to test an endpoint
|
|
20
|
+
def test_endpoint(model_class, description = nil)
|
|
21
|
+
description ||= model_class.name.split('::').last.downcase
|
|
22
|
+
puts "\n===================================="
|
|
23
|
+
puts "Testing #{model_class.name}.all (#{description})..."
|
|
24
|
+
puts '===================================='
|
|
25
|
+
|
|
26
|
+
begin
|
|
27
|
+
puts 'Making API request...'
|
|
28
|
+
response = model_class.all
|
|
29
|
+
|
|
30
|
+
puts "\n=== Response Object Type ==="
|
|
31
|
+
puts response.class
|
|
32
|
+
|
|
33
|
+
if response.nil?
|
|
34
|
+
puts "\n=== Response is nil ==="
|
|
35
|
+
elsif response.respond_to?(:empty?) && response.empty?
|
|
36
|
+
puts "\n=== Response is empty array ==="
|
|
37
|
+
else
|
|
38
|
+
count = response.respond_to?(:length) ? response.length : 'N/A'
|
|
39
|
+
puts "\n=== Got #{count} results ==="
|
|
40
|
+
|
|
41
|
+
if response.respond_to?(:first) && response.first
|
|
42
|
+
puts "\n=== First result ==="
|
|
43
|
+
pp response.first
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
true
|
|
48
|
+
rescue StandardError => e
|
|
49
|
+
puts "\n=== ERROR ==="
|
|
50
|
+
puts "#{e.class}: #{e.message}"
|
|
51
|
+
puts e.backtrace[0..5]
|
|
52
|
+
false
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
# Test multiple endpoints
|
|
57
|
+
success = true
|
|
58
|
+
|
|
59
|
+
# Test People endpoint
|
|
60
|
+
success = test_endpoint(FubClient::Person) && success
|
|
61
|
+
|
|
62
|
+
# Test Users endpoint
|
|
63
|
+
success = test_endpoint(FubClient::User) && success
|
|
64
|
+
|
|
65
|
+
# Test Events endpoint
|
|
66
|
+
success = test_endpoint(FubClient::Event) && success
|
|
67
|
+
|
|
68
|
+
# Test newly added endpoints
|
|
69
|
+
puts "\n===================================="
|
|
70
|
+
puts 'Testing newly added endpoints...'
|
|
71
|
+
puts '===================================='
|
|
72
|
+
|
|
73
|
+
# Test Tasks endpoint
|
|
74
|
+
success = test_endpoint(FubClient::Task, 'tasks') && success
|
|
75
|
+
|
|
76
|
+
# Test Properties endpoint
|
|
77
|
+
success = test_endpoint(FubClient::Property, 'properties') && success
|
|
78
|
+
|
|
79
|
+
# Test Deals endpoint
|
|
80
|
+
success = test_endpoint(FubClient::Deal, 'deals') && success
|
|
81
|
+
|
|
82
|
+
# Test Messages endpoint
|
|
83
|
+
success = test_endpoint(FubClient::Message, 'messages') && success
|
|
84
|
+
|
|
85
|
+
# Test pagination with Events
|
|
86
|
+
puts "\n===================================="
|
|
87
|
+
puts 'Testing FubClient::Event.by_page (pagination)...'
|
|
88
|
+
puts '===================================='
|
|
89
|
+
begin
|
|
90
|
+
puts 'Making API request with pagination...'
|
|
91
|
+
response = FubClient::Event.by_page(1, 5)
|
|
92
|
+
|
|
93
|
+
puts "\n=== Response Metadata ==="
|
|
94
|
+
if response.respond_to?(:metadata) && response.metadata
|
|
95
|
+
pp response.metadata
|
|
96
|
+
else
|
|
97
|
+
puts 'No metadata available'
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
puts "\n=== Got #{response.length} results with pagination ===" if response.respond_to?(:length)
|
|
101
|
+
rescue StandardError => e
|
|
102
|
+
puts "\n=== ERROR (Pagination) ==="
|
|
103
|
+
puts "#{e.class}: #{e.message}"
|
|
104
|
+
puts e.backtrace[0..5]
|
|
105
|
+
success = false
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
puts "\n===================================="
|
|
109
|
+
puts "SUMMARY: All tests #{success ? 'PASSED ✓' : 'FAILED ✗'}"
|
|
110
|
+
puts '===================================='
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
require 'bundler/setup'
|
|
3
|
+
require 'fub_client'
|
|
4
|
+
require 'dotenv'
|
|
5
|
+
require 'pry'
|
|
6
|
+
Dotenv.load
|
|
7
|
+
|
|
8
|
+
# Load environment variables from .env file
|
|
9
|
+
EMAIL = ENV['FUB_EMAIL'] || 'your_email@example.com'
|
|
10
|
+
PASSWORD = ENV['FUB_PASSWORD'] || 'your_password'
|
|
11
|
+
SUBDOMAIN = ENV['FUB_SUBDOMAIN'] || 'your_subdomain'
|
|
12
|
+
|
|
13
|
+
# Set debug mode
|
|
14
|
+
ENV['DEBUG'] = 'true'
|
|
15
|
+
|
|
16
|
+
puts '-------------------------------------------'
|
|
17
|
+
puts 'Testing SharedInbox API with Cookie Auth'
|
|
18
|
+
puts '-------------------------------------------'
|
|
19
|
+
|
|
20
|
+
# Step 1: Login to obtain cookies
|
|
21
|
+
client = FubClient::Client.instance
|
|
22
|
+
login_success = client.login(EMAIL, PASSWORD)
|
|
23
|
+
|
|
24
|
+
if login_success
|
|
25
|
+
puts '✅ Login successful! Cookies obtained.'
|
|
26
|
+
else
|
|
27
|
+
puts '❌ Login failed! Cannot proceed.'
|
|
28
|
+
exit 1
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
# Step 2: Setup cookie client with subdomain
|
|
32
|
+
client.subdomain = SUBDOMAIN
|
|
33
|
+
puts "💡 Set subdomain to: #{SUBDOMAIN}"
|
|
34
|
+
|
|
35
|
+
# Reset the HER API to apply the new settings
|
|
36
|
+
client.reset_her_api
|
|
37
|
+
puts '🔄 Reset the HER API connection with new settings'
|
|
38
|
+
|
|
39
|
+
# Add a breakpoint for debugging
|
|
40
|
+
puts "\n🔍 Debug point - inspect client state"
|
|
41
|
+
binding.pry
|
|
42
|
+
|
|
43
|
+
# Step 3: Get all shared inboxes
|
|
44
|
+
puts "\n📬 Fetching all shared inboxes..."
|
|
45
|
+
begin
|
|
46
|
+
inboxes = FubClient::SharedInbox.all_inboxes
|
|
47
|
+
puts "Found #{inboxes.count} shared inboxes"
|
|
48
|
+
|
|
49
|
+
inboxes.each do |inbox|
|
|
50
|
+
puts " - Inbox ID: #{inbox.id}, Name: #{inbox.name}"
|
|
51
|
+
end
|
|
52
|
+
rescue StandardError => e
|
|
53
|
+
puts "❌ Error fetching shared inboxes: #{e.message}"
|
|
54
|
+
puts 'Debugging error:'
|
|
55
|
+
binding.pry
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
# Step 4: Get a specific shared inbox
|
|
59
|
+
puts "\n📬 Fetching shared inbox with ID 1..."
|
|
60
|
+
begin
|
|
61
|
+
inbox = FubClient::SharedInbox.get_inbox(1)
|
|
62
|
+
if inbox
|
|
63
|
+
puts "✅ Found inbox: #{inbox.name}"
|
|
64
|
+
|
|
65
|
+
# Get settings
|
|
66
|
+
puts "\n⚙️ Fetching settings for inbox #{inbox.id}..."
|
|
67
|
+
settings = inbox.settings
|
|
68
|
+
puts "Settings: #{settings.inspect}"
|
|
69
|
+
|
|
70
|
+
# Get conversations
|
|
71
|
+
puts "\n💬 Fetching conversations for inbox #{inbox.id}..."
|
|
72
|
+
conversations = inbox.conversations(5, 0)
|
|
73
|
+
puts "Found #{conversations.count} conversations"
|
|
74
|
+
|
|
75
|
+
# Get messages
|
|
76
|
+
puts "\n📨 Fetching messages for inbox #{inbox.id}..."
|
|
77
|
+
messages = inbox.messages(5, 0)
|
|
78
|
+
puts "Found #{messages.count} messages"
|
|
79
|
+
else
|
|
80
|
+
puts '❌ Inbox with ID 1 not found'
|
|
81
|
+
end
|
|
82
|
+
rescue StandardError => e
|
|
83
|
+
puts "❌ Error fetching shared inbox: #{e.message}"
|
|
84
|
+
puts 'Debugging error:'
|
|
85
|
+
binding.pry
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
puts "\n-------------------------------------------"
|
|
89
|
+
puts 'Test completed!'
|
|
90
|
+
puts '-------------------------------------------'
|
metadata
ADDED
|
@@ -0,0 +1,335 @@
|
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
|
+
name: followupboss_client
|
|
3
|
+
version: !ruby/object:Gem::Version
|
|
4
|
+
version: 1.0.0
|
|
5
|
+
platform: ruby
|
|
6
|
+
authors:
|
|
7
|
+
- Connor Gallopo
|
|
8
|
+
- Kyoto Kopz
|
|
9
|
+
bindir: exe
|
|
10
|
+
cert_chain: []
|
|
11
|
+
date: 2025-07-03 00:00:00.000000000 Z
|
|
12
|
+
dependencies:
|
|
13
|
+
- !ruby/object:Gem::Dependency
|
|
14
|
+
name: activemodel
|
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
|
16
|
+
requirements:
|
|
17
|
+
- - ">="
|
|
18
|
+
- !ruby/object:Gem::Version
|
|
19
|
+
version: 7.1.0
|
|
20
|
+
- - "<"
|
|
21
|
+
- !ruby/object:Gem::Version
|
|
22
|
+
version: '9.0'
|
|
23
|
+
type: :runtime
|
|
24
|
+
prerelease: false
|
|
25
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
26
|
+
requirements:
|
|
27
|
+
- - ">="
|
|
28
|
+
- !ruby/object:Gem::Version
|
|
29
|
+
version: 7.1.0
|
|
30
|
+
- - "<"
|
|
31
|
+
- !ruby/object:Gem::Version
|
|
32
|
+
version: '9.0'
|
|
33
|
+
- !ruby/object:Gem::Dependency
|
|
34
|
+
name: activesupport
|
|
35
|
+
requirement: !ruby/object:Gem::Requirement
|
|
36
|
+
requirements:
|
|
37
|
+
- - ">="
|
|
38
|
+
- !ruby/object:Gem::Version
|
|
39
|
+
version: 7.1.0
|
|
40
|
+
- - "<"
|
|
41
|
+
- !ruby/object:Gem::Version
|
|
42
|
+
version: '9.0'
|
|
43
|
+
type: :runtime
|
|
44
|
+
prerelease: false
|
|
45
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
46
|
+
requirements:
|
|
47
|
+
- - ">="
|
|
48
|
+
- !ruby/object:Gem::Version
|
|
49
|
+
version: 7.1.0
|
|
50
|
+
- - "<"
|
|
51
|
+
- !ruby/object:Gem::Version
|
|
52
|
+
version: '9.0'
|
|
53
|
+
- !ruby/object:Gem::Dependency
|
|
54
|
+
name: facets
|
|
55
|
+
requirement: !ruby/object:Gem::Requirement
|
|
56
|
+
requirements:
|
|
57
|
+
- - "~>"
|
|
58
|
+
- !ruby/object:Gem::Version
|
|
59
|
+
version: 3.1.0
|
|
60
|
+
type: :runtime
|
|
61
|
+
prerelease: false
|
|
62
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
63
|
+
requirements:
|
|
64
|
+
- - "~>"
|
|
65
|
+
- !ruby/object:Gem::Version
|
|
66
|
+
version: 3.1.0
|
|
67
|
+
- !ruby/object:Gem::Dependency
|
|
68
|
+
name: faraday
|
|
69
|
+
requirement: !ruby/object:Gem::Requirement
|
|
70
|
+
requirements:
|
|
71
|
+
- - ">="
|
|
72
|
+
- !ruby/object:Gem::Version
|
|
73
|
+
version: 1.10.3
|
|
74
|
+
- - "<"
|
|
75
|
+
- !ruby/object:Gem::Version
|
|
76
|
+
version: '3.0'
|
|
77
|
+
type: :runtime
|
|
78
|
+
prerelease: false
|
|
79
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
80
|
+
requirements:
|
|
81
|
+
- - ">="
|
|
82
|
+
- !ruby/object:Gem::Version
|
|
83
|
+
version: 1.10.3
|
|
84
|
+
- - "<"
|
|
85
|
+
- !ruby/object:Gem::Version
|
|
86
|
+
version: '3.0'
|
|
87
|
+
- !ruby/object:Gem::Dependency
|
|
88
|
+
name: her
|
|
89
|
+
requirement: !ruby/object:Gem::Requirement
|
|
90
|
+
requirements:
|
|
91
|
+
- - "~>"
|
|
92
|
+
- !ruby/object:Gem::Version
|
|
93
|
+
version: 1.1.1
|
|
94
|
+
type: :runtime
|
|
95
|
+
prerelease: false
|
|
96
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
97
|
+
requirements:
|
|
98
|
+
- - "~>"
|
|
99
|
+
- !ruby/object:Gem::Version
|
|
100
|
+
version: 1.1.1
|
|
101
|
+
- !ruby/object:Gem::Dependency
|
|
102
|
+
name: logger
|
|
103
|
+
requirement: !ruby/object:Gem::Requirement
|
|
104
|
+
requirements:
|
|
105
|
+
- - ">="
|
|
106
|
+
- !ruby/object:Gem::Version
|
|
107
|
+
version: '0'
|
|
108
|
+
type: :runtime
|
|
109
|
+
prerelease: false
|
|
110
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
111
|
+
requirements:
|
|
112
|
+
- - ">="
|
|
113
|
+
- !ruby/object:Gem::Version
|
|
114
|
+
version: '0'
|
|
115
|
+
- !ruby/object:Gem::Dependency
|
|
116
|
+
name: multi_json
|
|
117
|
+
requirement: !ruby/object:Gem::Requirement
|
|
118
|
+
requirements:
|
|
119
|
+
- - "~>"
|
|
120
|
+
- !ruby/object:Gem::Version
|
|
121
|
+
version: 1.15.0
|
|
122
|
+
type: :runtime
|
|
123
|
+
prerelease: false
|
|
124
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
125
|
+
requirements:
|
|
126
|
+
- - "~>"
|
|
127
|
+
- !ruby/object:Gem::Version
|
|
128
|
+
version: 1.15.0
|
|
129
|
+
- !ruby/object:Gem::Dependency
|
|
130
|
+
name: tzinfo
|
|
131
|
+
requirement: !ruby/object:Gem::Requirement
|
|
132
|
+
requirements:
|
|
133
|
+
- - "~>"
|
|
134
|
+
- !ruby/object:Gem::Version
|
|
135
|
+
version: 2.0.6
|
|
136
|
+
type: :runtime
|
|
137
|
+
prerelease: false
|
|
138
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
139
|
+
requirements:
|
|
140
|
+
- - "~>"
|
|
141
|
+
- !ruby/object:Gem::Version
|
|
142
|
+
version: 2.0.6
|
|
143
|
+
- !ruby/object:Gem::Dependency
|
|
144
|
+
name: bundler
|
|
145
|
+
requirement: !ruby/object:Gem::Requirement
|
|
146
|
+
requirements:
|
|
147
|
+
- - "~>"
|
|
148
|
+
- !ruby/object:Gem::Version
|
|
149
|
+
version: '2.4'
|
|
150
|
+
type: :development
|
|
151
|
+
prerelease: false
|
|
152
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
153
|
+
requirements:
|
|
154
|
+
- - "~>"
|
|
155
|
+
- !ruby/object:Gem::Version
|
|
156
|
+
version: '2.4'
|
|
157
|
+
- !ruby/object:Gem::Dependency
|
|
158
|
+
name: dotenv
|
|
159
|
+
requirement: !ruby/object:Gem::Requirement
|
|
160
|
+
requirements:
|
|
161
|
+
- - ">="
|
|
162
|
+
- !ruby/object:Gem::Version
|
|
163
|
+
version: 2.8.1
|
|
164
|
+
type: :development
|
|
165
|
+
prerelease: false
|
|
166
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
167
|
+
requirements:
|
|
168
|
+
- - ">="
|
|
169
|
+
- !ruby/object:Gem::Version
|
|
170
|
+
version: 2.8.1
|
|
171
|
+
- !ruby/object:Gem::Dependency
|
|
172
|
+
name: pry
|
|
173
|
+
requirement: !ruby/object:Gem::Requirement
|
|
174
|
+
requirements:
|
|
175
|
+
- - ">="
|
|
176
|
+
- !ruby/object:Gem::Version
|
|
177
|
+
version: 0.14.2
|
|
178
|
+
type: :development
|
|
179
|
+
prerelease: false
|
|
180
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
181
|
+
requirements:
|
|
182
|
+
- - ">="
|
|
183
|
+
- !ruby/object:Gem::Version
|
|
184
|
+
version: 0.14.2
|
|
185
|
+
- !ruby/object:Gem::Dependency
|
|
186
|
+
name: rake
|
|
187
|
+
requirement: !ruby/object:Gem::Requirement
|
|
188
|
+
requirements:
|
|
189
|
+
- - "~>"
|
|
190
|
+
- !ruby/object:Gem::Version
|
|
191
|
+
version: '13.0'
|
|
192
|
+
type: :development
|
|
193
|
+
prerelease: false
|
|
194
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
195
|
+
requirements:
|
|
196
|
+
- - "~>"
|
|
197
|
+
- !ruby/object:Gem::Version
|
|
198
|
+
version: '13.0'
|
|
199
|
+
- !ruby/object:Gem::Dependency
|
|
200
|
+
name: rspec
|
|
201
|
+
requirement: !ruby/object:Gem::Requirement
|
|
202
|
+
requirements:
|
|
203
|
+
- - "~>"
|
|
204
|
+
- !ruby/object:Gem::Version
|
|
205
|
+
version: '3.12'
|
|
206
|
+
type: :development
|
|
207
|
+
prerelease: false
|
|
208
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
209
|
+
requirements:
|
|
210
|
+
- - "~>"
|
|
211
|
+
- !ruby/object:Gem::Version
|
|
212
|
+
version: '3.12'
|
|
213
|
+
- !ruby/object:Gem::Dependency
|
|
214
|
+
name: vcr
|
|
215
|
+
requirement: !ruby/object:Gem::Requirement
|
|
216
|
+
requirements:
|
|
217
|
+
- - ">="
|
|
218
|
+
- !ruby/object:Gem::Version
|
|
219
|
+
version: 6.1.0
|
|
220
|
+
type: :development
|
|
221
|
+
prerelease: false
|
|
222
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
223
|
+
requirements:
|
|
224
|
+
- - ">="
|
|
225
|
+
- !ruby/object:Gem::Version
|
|
226
|
+
version: 6.1.0
|
|
227
|
+
- !ruby/object:Gem::Dependency
|
|
228
|
+
name: webmock
|
|
229
|
+
requirement: !ruby/object:Gem::Requirement
|
|
230
|
+
requirements:
|
|
231
|
+
- - ">="
|
|
232
|
+
- !ruby/object:Gem::Version
|
|
233
|
+
version: 3.18.1
|
|
234
|
+
type: :development
|
|
235
|
+
prerelease: false
|
|
236
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
237
|
+
requirements:
|
|
238
|
+
- - ">="
|
|
239
|
+
- !ruby/object:Gem::Version
|
|
240
|
+
version: 3.18.1
|
|
241
|
+
description: A comprehensive Ruby client for the Follow Up Boss API with Rails 8 compatibility,
|
|
242
|
+
secure cookie authentication for SharedInbox, and enhanced features for real estate
|
|
243
|
+
CRM integration.
|
|
244
|
+
email:
|
|
245
|
+
- connor.gallopo@me.com
|
|
246
|
+
executables: []
|
|
247
|
+
extensions: []
|
|
248
|
+
extra_rdoc_files: []
|
|
249
|
+
files:
|
|
250
|
+
- ".env.example"
|
|
251
|
+
- ".gitignore"
|
|
252
|
+
- ".rspec"
|
|
253
|
+
- ".ruby-gemset"
|
|
254
|
+
- ".ruby-version"
|
|
255
|
+
- ".tool-versions"
|
|
256
|
+
- ".travis.yml"
|
|
257
|
+
- CHANGELOG.md
|
|
258
|
+
- CODE_OF_CONDUCT.md
|
|
259
|
+
- Gemfile
|
|
260
|
+
- LICENSE.txt
|
|
261
|
+
- README.md
|
|
262
|
+
- Rakefile
|
|
263
|
+
- bin/console
|
|
264
|
+
- bin/setup
|
|
265
|
+
- followupboss_client.gemspec
|
|
266
|
+
- lib/followupboss_client.rb
|
|
267
|
+
- lib/fub_client.rb
|
|
268
|
+
- lib/fub_client/action_plan.rb
|
|
269
|
+
- lib/fub_client/appointment.rb
|
|
270
|
+
- lib/fub_client/appointment_outcome.rb
|
|
271
|
+
- lib/fub_client/appointment_type.rb
|
|
272
|
+
- lib/fub_client/call.rb
|
|
273
|
+
- lib/fub_client/client.rb
|
|
274
|
+
- lib/fub_client/compatibility.rb
|
|
275
|
+
- lib/fub_client/configuration.rb
|
|
276
|
+
- lib/fub_client/cookie_client.rb
|
|
277
|
+
- lib/fub_client/custom_field.rb
|
|
278
|
+
- lib/fub_client/deal.rb
|
|
279
|
+
- lib/fub_client/deal_attachment.rb
|
|
280
|
+
- lib/fub_client/deal_custom_field.rb
|
|
281
|
+
- lib/fub_client/em_event.rb
|
|
282
|
+
- lib/fub_client/email_template.rb
|
|
283
|
+
- lib/fub_client/event.rb
|
|
284
|
+
- lib/fub_client/group.rb
|
|
285
|
+
- lib/fub_client/her_patch.rb
|
|
286
|
+
- lib/fub_client/identity.rb
|
|
287
|
+
- lib/fub_client/message.rb
|
|
288
|
+
- lib/fub_client/middleware.rb
|
|
289
|
+
- lib/fub_client/middleware/authentication.rb
|
|
290
|
+
- lib/fub_client/middleware/cookie_authentication.rb
|
|
291
|
+
- lib/fub_client/middleware/parser.rb
|
|
292
|
+
- lib/fub_client/note.rb
|
|
293
|
+
- lib/fub_client/people_relationship.rb
|
|
294
|
+
- lib/fub_client/person.rb
|
|
295
|
+
- lib/fub_client/person_attachment.rb
|
|
296
|
+
- lib/fub_client/pipeline.rb
|
|
297
|
+
- lib/fub_client/property.rb
|
|
298
|
+
- lib/fub_client/rails8_patch.rb
|
|
299
|
+
- lib/fub_client/resource.rb
|
|
300
|
+
- lib/fub_client/shared_inbox.rb
|
|
301
|
+
- lib/fub_client/smart_list.rb
|
|
302
|
+
- lib/fub_client/stage.rb
|
|
303
|
+
- lib/fub_client/task.rb
|
|
304
|
+
- lib/fub_client/team.rb
|
|
305
|
+
- lib/fub_client/team_inbox.rb
|
|
306
|
+
- lib/fub_client/text_message.rb
|
|
307
|
+
- lib/fub_client/text_message_template.rb
|
|
308
|
+
- lib/fub_client/user.rb
|
|
309
|
+
- lib/fub_client/version.rb
|
|
310
|
+
- lib/fub_client/webhook.rb
|
|
311
|
+
- scripts/test_api.rb
|
|
312
|
+
- scripts/test_shared_inbox.rb
|
|
313
|
+
homepage: https://github.com/connorgallopo/followupboss_client
|
|
314
|
+
licenses:
|
|
315
|
+
- MIT
|
|
316
|
+
metadata:
|
|
317
|
+
allowed_push_host: https://rubygems.org
|
|
318
|
+
rdoc_options: []
|
|
319
|
+
require_paths:
|
|
320
|
+
- lib
|
|
321
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
322
|
+
requirements:
|
|
323
|
+
- - ">="
|
|
324
|
+
- !ruby/object:Gem::Version
|
|
325
|
+
version: '0'
|
|
326
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
327
|
+
requirements:
|
|
328
|
+
- - ">="
|
|
329
|
+
- !ruby/object:Gem::Version
|
|
330
|
+
version: '0'
|
|
331
|
+
requirements: []
|
|
332
|
+
rubygems_version: 3.6.2
|
|
333
|
+
specification_version: 4
|
|
334
|
+
summary: Enhanced Ruby client for Follow Up Boss API with Rails 8 compatibility
|
|
335
|
+
test_files: []
|