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.
- checksums.yaml +7 -0
- data/README.md +684 -0
- 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: []
|