hangarx 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 (3) hide show
  1. checksums.yaml +7 -0
  2. data/README.md +684 -0
  3. metadata +128 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 68fb5a44f579f4f336f4f63f73f20a1a879fc1beda7b4511bb0a8dcaa11c2923
4
+ data.tar.gz: dd2417a945455c958e16f4860c585c69eb89422d1fd1a0e2c23cbb558e1da51a
5
+ SHA512:
6
+ metadata.gz: cee585156d868525dfe51e7a60086234a157b50d0232f34d689f707f3eae1851901cdd71535e72db50bd88c4c4949909100ae54a90092e4b5646b90dd907ed22
7
+ data.tar.gz: 91debdb39accc97b1af8380566baf65f2d3c2cd66a62c21a3f23221428583778ca5cf2ea2391113015624a4861e7eaa79033ace3a041ea0abfbde12fa5631c61
data/README.md ADDED
@@ -0,0 +1,684 @@
1
+ # HangarX Ruby SDK
2
+
3
+ Official Ruby SDK for HangarX - AI-powered Growth OS with analytics, SEO intelligence, and workflow automation.
4
+
5
+ ## Features
6
+
7
+ - 🚀 **Event Tracking** - Track user actions, page views, and custom events
8
+ - 🧠 **AI-Powered Analytics** - Conversational analytics and insights
9
+ - 📊 **SEO Intelligence** - Real-time SEO insights and recommendations
10
+ - 🔄 **Workflow Automation** - Execute and monitor multi-agent workflows
11
+ - 📈 **Growth Intelligence** - AI-driven growth recommendations
12
+ - 🎯 **Anomaly Detection** - Automatic detection of unusual patterns
13
+ - 💾 **Batch Processing** - Efficient bulk event handling
14
+ - 🔒 **Thread-Safe** - Safe for multi-threaded applications
15
+ - ⚡ **High Performance** - Optimized for production use
16
+
17
+ ## Installation
18
+
19
+ Add this line to your application's Gemfile:
20
+
21
+ ```ruby
22
+ gem 'hangarx'
23
+ ```
24
+
25
+ And then execute:
26
+
27
+ ```bash
28
+ bundle install
29
+ ```
30
+
31
+ Or install it yourself as:
32
+
33
+ ```bash
34
+ gem install hangarx
35
+ ```
36
+
37
+ ## Quick Start
38
+
39
+ ### 1. Initialize the Client
40
+
41
+ ```ruby
42
+ require 'hangarx'
43
+
44
+ hangarx = HangarX::Client.new(
45
+ api_key: 'proj_abc123...', # Your project SDK key (from projects.sdk_key)
46
+ endpoint: 'https://api.hangarx.com'
47
+ )
48
+ ```
49
+
50
+ ### 2. Track Events
51
+
52
+ ```ruby
53
+ # Track a user action
54
+ hangarx.track(
55
+ user_id: 'user-123',
56
+ event: 'button_clicked',
57
+ properties: {
58
+ button_name: 'signup',
59
+ page: 'landing'
60
+ }
61
+ )
62
+
63
+ # Identify a user
64
+ hangarx.identify(
65
+ user_id: 'user-123',
66
+ traits: {
67
+ email: 'user@example.com',
68
+ plan: 'premium',
69
+ company: 'Acme Inc'
70
+ }
71
+ )
72
+
73
+ # Track page views
74
+ hangarx.page(
75
+ user_id: 'user-123',
76
+ name: 'Landing Page',
77
+ properties: {
78
+ url: 'https://example.com',
79
+ title: 'Welcome'
80
+ }
81
+ )
82
+ ```
83
+
84
+ ### 3. Use Growth OS Features
85
+
86
+ ```ruby
87
+ # Ask analytics questions
88
+ answer = hangarx.ask_analytics(
89
+ 'What are my top performing channels this month?'
90
+ )
91
+
92
+ # Get SEO insights
93
+ seo_insights = hangarx.seo_insights(
94
+ start_date: '2025-01-01',
95
+ end_date: '2025-01-31'
96
+ )
97
+
98
+ # Detect anomalies
99
+ anomalies = hangarx.detect_anomalies(
100
+ start_date: '2025-01-01',
101
+ end_date: '2025-01-31'
102
+ )
103
+
104
+ # Get real-time recommendations
105
+ recommendations = hangarx.real_time_recommendations
106
+ ```
107
+
108
+ ## Configuration
109
+
110
+ ### Client Options
111
+
112
+ ```ruby
113
+ hangarx = HangarX::Client.new(
114
+ api_key: 'proj_abc123...', # Required: Your project SDK key (from projects.sdk_key)
115
+ endpoint: 'https://api.hangarx.com', # Optional: API endpoint
116
+ timeout: 30, # Optional: Request timeout in seconds
117
+ retries: 3, # Optional: Number of retries
118
+ batch_size: 100, # Optional: Batch size for bulk operations
119
+ debug: false # Optional: Enable debug logging
120
+ )
121
+ ```
122
+
123
+ ### Environment Variables
124
+
125
+ You can also configure the client using environment variables:
126
+
127
+ ```bash
128
+ export HANGARX_API_KEY=proj_abc123... # Your project SDK key
129
+ export HANGARX_ENDPOINT=https://api.hangarx.com
130
+ ```
131
+
132
+ ```ruby
133
+ # Client will automatically use environment variables
134
+ hangarx = HangarX::Client.new
135
+ ```
136
+
137
+ ## API Reference
138
+
139
+ ### Event Tracking
140
+
141
+ #### Track Events
142
+
143
+ Track user actions and behaviors:
144
+
145
+ ```ruby
146
+ hangarx.track(
147
+ user_id: 'user-123', # Required: User identifier
148
+ event: 'purchase', # Required: Event name
149
+ properties: { # Optional: Event properties
150
+ product_id: 'prod-456',
151
+ revenue: 99.99,
152
+ currency: 'USD',
153
+ category: 'subscription'
154
+ },
155
+ context: { # Optional: Additional context
156
+ page: {
157
+ url: 'https://example.com/checkout',
158
+ title: 'Checkout'
159
+ }
160
+ },
161
+ timestamp: Time.now # Optional: Event timestamp
162
+ )
163
+ ```
164
+
165
+ #### Identify Users
166
+
167
+ Associate user traits with a user ID:
168
+
169
+ ```ruby
170
+ hangarx.identify(
171
+ user_id: 'user-123',
172
+ traits: {
173
+ email: 'user@example.com',
174
+ name: 'John Doe',
175
+ plan: 'premium',
176
+ company: 'Acme Inc',
177
+ created_at: Time.now
178
+ }
179
+ )
180
+ ```
181
+
182
+ #### Page Views
183
+
184
+ Track page views and navigation:
185
+
186
+ ```ruby
187
+ hangarx.page(
188
+ user_id: 'user-123',
189
+ name: 'Product Page',
190
+ category: 'ecommerce',
191
+ properties: {
192
+ url: 'https://example.com/products/123',
193
+ title: 'Amazing Product',
194
+ referrer: 'https://google.com'
195
+ }
196
+ )
197
+ ```
198
+
199
+ #### Screen Views
200
+
201
+ Track screen views in mobile applications:
202
+
203
+ ```ruby
204
+ hangarx.screen(
205
+ user_id: 'user-123',
206
+ name: 'Dashboard',
207
+ category: 'app',
208
+ properties: {
209
+ screen_id: 'dashboard_v2',
210
+ version: '2.1.0'
211
+ }
212
+ )
213
+ ```
214
+
215
+ ### Growth OS Features
216
+
217
+ #### Ask Analytics
218
+
219
+ Ask natural language questions about your analytics:
220
+
221
+ ```ruby
222
+ answer = hangarx.ask_analytics(
223
+ 'What are my conversion rates by channel?',
224
+ context: { timeframe: 'last_30_days' }
225
+ )
226
+ ```
227
+
228
+ #### Growth Intelligence
229
+
230
+ Get AI-powered growth insights:
231
+
232
+ ```ruby
233
+ intelligence = hangarx.growth_intelligence(
234
+ start_date: '2025-01-01',
235
+ end_date: '2025-01-31'
236
+ )
237
+ ```
238
+
239
+ #### SEO Insights
240
+
241
+ Get SEO performance insights:
242
+
243
+ ```ruby
244
+ seo_insights = hangarx.seo_insights(
245
+ start_date: '2025-01-01',
246
+ end_date: '2025-01-31'
247
+ )
248
+ ```
249
+
250
+ #### Anomaly Detection
251
+
252
+ Detect unusual patterns in your data:
253
+
254
+ ```ruby
255
+ anomalies = hangarx.detect_anomalies(
256
+ start_date: '2025-01-01',
257
+ end_date: '2025-01-31'
258
+ )
259
+ ```
260
+
261
+ #### Real-Time Recommendations
262
+
263
+ Get real-time personalized recommendations:
264
+
265
+ ```ruby
266
+ recommendations = hangarx.real_time_recommendations(
267
+ session_id: 'session-123'
268
+ )
269
+ ```
270
+
271
+ ### Workflow Management
272
+
273
+ #### Execute Workflow
274
+
275
+ Execute a multi-agent workflow:
276
+
277
+ ```ruby
278
+ result = hangarx.execute_workflow(
279
+ name: 'SEO Audit',
280
+ steps: [
281
+ { agent: 'helix', action: 'analyze_content', params: { url: 'https://example.com' } },
282
+ { agent: 'cortex', action: 'extract_entities', params: { text: '...' } },
283
+ { agent: 'raven', action: 'track_results', params: { metrics: {...} } }
284
+ ]
285
+ )
286
+ ```
287
+
288
+ ### Batch Operations
289
+
290
+ #### Batch Events
291
+
292
+ Send multiple events efficiently:
293
+
294
+ ```ruby
295
+ events = [
296
+ {
297
+ type: 'track',
298
+ user_id: 'user-123',
299
+ event: 'signup',
300
+ properties: { plan: 'free' }
301
+ },
302
+ {
303
+ type: 'track',
304
+ user_id: 'user-123',
305
+ event: 'first_login',
306
+ properties: { timestamp: Time.now }
307
+ }
308
+ ]
309
+
310
+ hangarx.batch(events)
311
+ ```
312
+
313
+ ## Advanced Usage
314
+
315
+ ### Error Handling
316
+
317
+ ```ruby
318
+ begin
319
+ hangarx.track(
320
+ user_id: 'user-123',
321
+ event: 'purchase',
322
+ properties: { amount: 99.99 }
323
+ )
324
+ rescue HangarX::Error => e
325
+ puts "Failed to track event: #{e.message}"
326
+ end
327
+ ```
328
+
329
+ ### Custom Context
330
+
331
+ ```ruby
332
+ hangarx.track(
333
+ user_id: 'user-123',
334
+ event: 'api_call',
335
+ properties: { endpoint: '/api/users' },
336
+ context: {
337
+ app: {
338
+ name: 'MyApp',
339
+ version: '1.2.3'
340
+ },
341
+ library: {
342
+ name: 'hangarx-ruby',
343
+ version: HangarX::VERSION
344
+ },
345
+ device: {
346
+ type: 'server'
347
+ }
348
+ }
349
+ )
350
+ ```
351
+
352
+ ### Async Processing
353
+
354
+ ```ruby
355
+ # Non-blocking event tracking
356
+ hangarx.track_async(
357
+ user_id: 'user-123',
358
+ event: 'background_job_completed',
359
+ properties: { job_id: 'job-456' }
360
+ )
361
+ ```
362
+
363
+ ## Rails Integration
364
+
365
+ ### Initializer
366
+
367
+ Create `config/initializers/hangarx.rb`:
368
+
369
+ ```ruby
370
+ HangarX.configure do |config|
371
+ config.api_key = ENV['HANGARX_API_KEY']
372
+ config.endpoint = ENV['HANGARX_ENDPOINT']
373
+ config.team_id = ENV['HANGARX_TEAM_ID']
374
+ config.debug = Rails.env.development?
375
+ end
376
+ ```
377
+
378
+ ### Controller Usage
379
+
380
+ ```ruby
381
+ class ApplicationController < ActionController::Base
382
+ before_action :track_page_view
383
+
384
+ private
385
+
386
+ def track_page_view
387
+ return unless current_user
388
+
389
+ HangarX.page(
390
+ user_id: current_user.id,
391
+ name: "#{controller_name}##{action_name}",
392
+ properties: {
393
+ url: request.url,
394
+ user_agent: request.user_agent,
395
+ referrer: request.referrer
396
+ }
397
+ )
398
+ end
399
+ end
400
+ ```
401
+
402
+ ### Model Integration
403
+
404
+ ```ruby
405
+ class User < ApplicationRecord
406
+ after_create :track_signup
407
+ after_update :track_profile_update
408
+
409
+ private
410
+
411
+ def track_signup
412
+ HangarX.track(
413
+ user_id: id,
414
+ event: 'user_signup',
415
+ properties: {
416
+ email: email,
417
+ plan: plan,
418
+ source: utm_source
419
+ }
420
+ )
421
+
422
+ HangarX.identify(
423
+ user_id: id,
424
+ traits: {
425
+ email: email,
426
+ name: name,
427
+ created_at: created_at
428
+ }
429
+ )
430
+ end
431
+
432
+ def track_profile_update
433
+ HangarX.track(
434
+ user_id: id,
435
+ event: 'profile_updated',
436
+ properties: {
437
+ fields_changed: saved_changes.keys
438
+ }
439
+ )
440
+ end
441
+ end
442
+ ```
443
+
444
+ ### Background Jobs
445
+
446
+ ```ruby
447
+ class AnalyticsJob < ApplicationJob
448
+ queue_as :default
449
+
450
+ def perform(user_id, event, properties = {})
451
+ HangarX.track(
452
+ user_id: user_id,
453
+ event: event,
454
+ properties: properties
455
+ )
456
+ end
457
+ end
458
+
459
+ # Usage
460
+ AnalyticsJob.perform_later('user-123', 'purchase', { amount: 99.99 })
461
+ ```
462
+
463
+ ## Sinatra Integration
464
+
465
+ ```ruby
466
+ require 'sinatra'
467
+ require 'hangarx'
468
+
469
+ configure do
470
+ set :hangarx, HangarX::Client.new(
471
+ api_key: ENV['HANGARX_API_KEY']
472
+ )
473
+ end
474
+
475
+ before do
476
+ settings.hangarx.page(
477
+ user_id: session[:user_id],
478
+ name: request.path,
479
+ properties: {
480
+ url: request.url,
481
+ method: request.request_method
482
+ }
483
+ ) if session[:user_id]
484
+ end
485
+
486
+ post '/signup' do
487
+ user = create_user(params)
488
+
489
+ settings.hangarx.identify(
490
+ user_id: user.id,
491
+ traits: {
492
+ email: user.email,
493
+ name: user.name
494
+ }
495
+ )
496
+
497
+ settings.hangarx.track(
498
+ user_id: user.id,
499
+ event: 'signup',
500
+ properties: {
501
+ plan: params[:plan],
502
+ source: params[:utm_source]
503
+ }
504
+ )
505
+
506
+ redirect '/dashboard'
507
+ end
508
+ ```
509
+
510
+ ## Testing
511
+
512
+ ### RSpec Integration
513
+
514
+ ```ruby
515
+ # spec/spec_helper.rb
516
+ require 'hangarx'
517
+ require 'webmock/rspec'
518
+
519
+ RSpec.configure do |config|
520
+ config.before(:each) do
521
+ # Stub HangarX API calls in tests
522
+ stub_request(:post, %r{api.hangarx.com})
523
+ .to_return(status: 200, body: '{"success": true}')
524
+ end
525
+ end
526
+ ```
527
+
528
+ ### Test Examples
529
+
530
+ ```ruby
531
+ RSpec.describe 'User tracking' do
532
+ let(:hangarx) { HangarX::Client.new(api_key: 'test-key') }
533
+
534
+ it 'tracks user signup' do
535
+ expect {
536
+ hangarx.track(
537
+ user_id: 'user-123',
538
+ event: 'signup',
539
+ properties: { plan: 'free' }
540
+ )
541
+ }.not_to raise_error
542
+ end
543
+
544
+ it 'identifies users' do
545
+ expect {
546
+ hangarx.identify(
547
+ user_id: 'user-123',
548
+ traits: { email: 'test@example.com' }
549
+ )
550
+ }.not_to raise_error
551
+ end
552
+ end
553
+ ```
554
+
555
+ ## Best Practices
556
+
557
+ ### Event Naming
558
+
559
+ Use clear, descriptive event names:
560
+
561
+ ```ruby
562
+ # ✅ Good
563
+ hangarx.track(user_id: 'user-123', event: 'purchase_completed')
564
+ hangarx.track(user_id: 'user-123', event: 'signup_form_submitted')
565
+
566
+ # ❌ Bad
567
+ hangarx.track(user_id: 'user-123', event: 'event1')
568
+ hangarx.track(user_id: 'user-123', event: 'click')
569
+ ```
570
+
571
+ ### Property Structure
572
+
573
+ Keep properties consistent and well-structured:
574
+
575
+ ```ruby
576
+ # ✅ Good
577
+ hangarx.track(
578
+ user_id: 'user-123',
579
+ event: 'purchase',
580
+ properties: {
581
+ product_id: 'prod-456',
582
+ product_name: 'Premium Plan',
583
+ revenue: 99.99,
584
+ currency: 'USD',
585
+ category: 'subscription'
586
+ }
587
+ )
588
+
589
+ # ❌ Bad
590
+ hangarx.track(
591
+ user_id: 'user-123',
592
+ event: 'purchase',
593
+ properties: {
594
+ prod: 'Premium',
595
+ amount: '99.99',
596
+ type: 'sub'
597
+ }
598
+ )
599
+ ```
600
+
601
+ ### User Identification
602
+
603
+ Always identify users early:
604
+
605
+ ```ruby
606
+ # On signup
607
+ hangarx.identify(
608
+ user_id: user.id,
609
+ traits: {
610
+ email: user.email,
611
+ name: user.name,
612
+ created_at: Time.now
613
+ }
614
+ )
615
+
616
+ # On login
617
+ hangarx.identify(
618
+ user_id: user.id,
619
+ traits: {
620
+ last_login: Time.now
621
+ }
622
+ )
623
+ ```
624
+
625
+ ## Performance
626
+
627
+ The SDK is optimized for high-performance production use:
628
+
629
+ - **Connection Pooling**: Reuses HTTP connections
630
+ - **Retry Logic**: Exponential backoff for failed requests
631
+ - **Thread-Safe**: Safe for multi-threaded applications
632
+ - **Memory Efficient**: Minimal memory footprint
633
+ - **Batch Processing**: Efficient bulk event handling
634
+
635
+ ## Development
636
+
637
+ ### Setup
638
+
639
+ ```bash
640
+ git clone https://github.com/your-org/hangarx-mission-control.git
641
+ cd hangarx-mission-control/sdk/hangarx-ruby
642
+ bundle install
643
+ ```
644
+
645
+ ### Running Tests
646
+
647
+ ```bash
648
+ bundle exec rspec
649
+ ```
650
+
651
+ ### Code Quality
652
+
653
+ ```bash
654
+ bundle exec rubocop
655
+ ```
656
+
657
+ ### Documentation
658
+
659
+ ```bash
660
+ bundle exec yard doc
661
+ ```
662
+
663
+ ## Support
664
+
665
+ - **Documentation**: [docs.hangarx.com](https://docs.hangarx.com)
666
+ - **GitHub**: [github.com/your-org/hangarx-mission-control](https://github.com/your-org/hangarx-mission-control)
667
+ - **Issues**: [github.com/your-org/hangarx-mission-control/issues](https://github.com/your-org/hangarx-mission-control/issues)
668
+ - **Email**: support@hangarx.com
669
+
670
+ ## Contributing
671
+
672
+ 1. Fork the repository
673
+ 2. Create your feature branch (`git checkout -b feature/amazing-feature`)
674
+ 3. Commit your changes (`git commit -am 'Add amazing feature'`)
675
+ 4. Push to the branch (`git push origin feature/amazing-feature`)
676
+ 5. Open a Pull Request
677
+
678
+ ## License
679
+
680
+ MIT License - see [LICENSE](../../LICENSE) for details.
681
+
682
+ ---
683
+
684
+ **Transform your Ruby applications with AI-powered growth intelligence.**
metadata ADDED
@@ -0,0 +1,128 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: hangarx
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - HangarX Team
8
+ bindir: bin
9
+ cert_chain: []
10
+ date: 1980-01-02 00:00:00.000000000 Z
11
+ dependencies:
12
+ - !ruby/object:Gem::Dependency
13
+ name: faraday
14
+ requirement: !ruby/object:Gem::Requirement
15
+ requirements:
16
+ - - "~>"
17
+ - !ruby/object:Gem::Version
18
+ version: '2.0'
19
+ type: :runtime
20
+ prerelease: false
21
+ version_requirements: !ruby/object:Gem::Requirement
22
+ requirements:
23
+ - - "~>"
24
+ - !ruby/object:Gem::Version
25
+ version: '2.0'
26
+ - !ruby/object:Gem::Dependency
27
+ name: faraday-retry
28
+ requirement: !ruby/object:Gem::Requirement
29
+ requirements:
30
+ - - "~>"
31
+ - !ruby/object:Gem::Version
32
+ version: '2.0'
33
+ type: :runtime
34
+ prerelease: false
35
+ version_requirements: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - "~>"
38
+ - !ruby/object:Gem::Version
39
+ version: '2.0'
40
+ - !ruby/object:Gem::Dependency
41
+ name: rspec
42
+ requirement: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - "~>"
45
+ - !ruby/object:Gem::Version
46
+ version: '3.12'
47
+ type: :development
48
+ prerelease: false
49
+ version_requirements: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - "~>"
52
+ - !ruby/object:Gem::Version
53
+ version: '3.12'
54
+ - !ruby/object:Gem::Dependency
55
+ name: webmock
56
+ requirement: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - "~>"
59
+ - !ruby/object:Gem::Version
60
+ version: '3.18'
61
+ type: :development
62
+ prerelease: false
63
+ version_requirements: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - "~>"
66
+ - !ruby/object:Gem::Version
67
+ version: '3.18'
68
+ - !ruby/object:Gem::Dependency
69
+ name: rubocop
70
+ requirement: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - "~>"
73
+ - !ruby/object:Gem::Version
74
+ version: '1.50'
75
+ type: :development
76
+ prerelease: false
77
+ version_requirements: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - "~>"
80
+ - !ruby/object:Gem::Version
81
+ version: '1.50'
82
+ - !ruby/object:Gem::Dependency
83
+ name: yard
84
+ requirement: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - "~>"
87
+ - !ruby/object:Gem::Version
88
+ version: '0.9'
89
+ type: :development
90
+ prerelease: false
91
+ version_requirements: !ruby/object:Gem::Requirement
92
+ requirements:
93
+ - - "~>"
94
+ - !ruby/object:Gem::Version
95
+ version: '0.9'
96
+ description: Ruby SDK for HangarX with analytics, SEO intelligence, and workflow automation
97
+ email:
98
+ - support@hangarx.ai
99
+ executables: []
100
+ extensions: []
101
+ extra_rdoc_files: []
102
+ files:
103
+ - README.md
104
+ homepage: https://hangarx.ai
105
+ licenses:
106
+ - MIT
107
+ metadata:
108
+ homepage_uri: https://hangarx.ai
109
+ source_code_uri: https://github.com/hangarx/ruby-sdk
110
+ changelog_uri: https://github.com/hangarx/ruby-sdk/blob/main/CHANGELOG.md
111
+ rdoc_options: []
112
+ require_paths:
113
+ - lib
114
+ required_ruby_version: !ruby/object:Gem::Requirement
115
+ requirements:
116
+ - - ">="
117
+ - !ruby/object:Gem::Version
118
+ version: 3.0.0
119
+ required_rubygems_version: !ruby/object:Gem::Requirement
120
+ requirements:
121
+ - - ">="
122
+ - !ruby/object:Gem::Version
123
+ version: '0'
124
+ requirements: []
125
+ rubygems_version: 3.6.9
126
+ specification_version: 4
127
+ summary: Official Ruby SDK for HangarX - AI-powered Growth OS
128
+ test_files: []