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.
Files changed (65) hide show
  1. checksums.yaml +7 -0
  2. data/.env.example +12 -0
  3. data/.gitignore +18 -0
  4. data/.rspec +2 -0
  5. data/.ruby-gemset +1 -0
  6. data/.ruby-version +1 -0
  7. data/.tool-versions +1 -0
  8. data/.travis.yml +9 -0
  9. data/CHANGELOG.md +149 -0
  10. data/CODE_OF_CONDUCT.md +49 -0
  11. data/Gemfile +4 -0
  12. data/LICENSE.txt +22 -0
  13. data/README.md +882 -0
  14. data/Rakefile +6 -0
  15. data/bin/console +14 -0
  16. data/bin/setup +8 -0
  17. data/followupboss_client.gemspec +43 -0
  18. data/lib/followupboss_client.rb +16 -0
  19. data/lib/fub_client/action_plan.rb +5 -0
  20. data/lib/fub_client/appointment.rb +42 -0
  21. data/lib/fub_client/appointment_outcome.rb +51 -0
  22. data/lib/fub_client/appointment_type.rb +51 -0
  23. data/lib/fub_client/call.rb +4 -0
  24. data/lib/fub_client/client.rb +200 -0
  25. data/lib/fub_client/compatibility.rb +18 -0
  26. data/lib/fub_client/configuration.rb +54 -0
  27. data/lib/fub_client/cookie_client.rb +190 -0
  28. data/lib/fub_client/custom_field.rb +5 -0
  29. data/lib/fub_client/deal.rb +41 -0
  30. data/lib/fub_client/deal_attachment.rb +61 -0
  31. data/lib/fub_client/deal_custom_field.rb +47 -0
  32. data/lib/fub_client/em_event.rb +5 -0
  33. data/lib/fub_client/email_template.rb +5 -0
  34. data/lib/fub_client/event.rb +8 -0
  35. data/lib/fub_client/group.rb +58 -0
  36. data/lib/fub_client/her_patch.rb +101 -0
  37. data/lib/fub_client/identity.rb +33 -0
  38. data/lib/fub_client/message.rb +41 -0
  39. data/lib/fub_client/middleware/authentication.rb +26 -0
  40. data/lib/fub_client/middleware/cookie_authentication.rb +61 -0
  41. data/lib/fub_client/middleware/parser.rb +59 -0
  42. data/lib/fub_client/middleware.rb +8 -0
  43. data/lib/fub_client/note.rb +4 -0
  44. data/lib/fub_client/people_relationship.rb +34 -0
  45. data/lib/fub_client/person.rb +5 -0
  46. data/lib/fub_client/person_attachment.rb +50 -0
  47. data/lib/fub_client/pipeline.rb +45 -0
  48. data/lib/fub_client/property.rb +26 -0
  49. data/lib/fub_client/rails8_patch.rb +39 -0
  50. data/lib/fub_client/resource.rb +33 -0
  51. data/lib/fub_client/shared_inbox.rb +389 -0
  52. data/lib/fub_client/smart_list.rb +5 -0
  53. data/lib/fub_client/stage.rb +39 -0
  54. data/lib/fub_client/task.rb +18 -0
  55. data/lib/fub_client/team.rb +65 -0
  56. data/lib/fub_client/team_inbox.rb +65 -0
  57. data/lib/fub_client/text_message.rb +46 -0
  58. data/lib/fub_client/text_message_template.rb +49 -0
  59. data/lib/fub_client/user.rb +4 -0
  60. data/lib/fub_client/version.rb +3 -0
  61. data/lib/fub_client/webhook.rb +47 -0
  62. data/lib/fub_client.rb +61 -0
  63. data/scripts/test_api.rb +110 -0
  64. data/scripts/test_shared_inbox.rb +90 -0
  65. 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
@@ -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: []