Project

togglehq

0.0
No commit activity in last 3 years
No release in over 3 years
Ruby gem wrapper for the ToggleHQ API
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
 Dependencies

Development

~> 1.10
~> 10.0
>= 0
>= 0

Runtime

 Project Readme

togglehq

Installation

Add this line to your application's Gemfile:

gem 'togglehq'

And then execute:

$ bundle

Or install it yourself as:

$ gem install togglehq

Configuration

require 'togglehq'

Togglehq.configure do |config|
  # These should be set to the "Master OAuth" client id and client secret
  # for your app from the ToggleHQ dashboard
  config.client_id = ENV['TOGGLEHQ_CLIENT_ID']
  config.client_secret = ENV['TOGGLEHQ_CLIENT_SECRET']

  # To log the HTTP requests/responses to and from the ToggleHQ API, set log_requests to true (defaults to false)
  config.log_requests = true

  # To modify the adapter used for network connections (defaults to :net_http_persistent)
  # Available: [:net_http, :net_http_persistent, :excon, :typhoeus, :patron, :em_http, :httpclient]
  config.adapter = :net_http
end

Usage

Users

Create a user for your app

user = Togglehq::User.new(:identifier => "abcdef0123456789")
user.save

Find an existing user for your app

user = Togglehq::User.find_by_identifier("abcdef0123456789")

If a user with the given identifier cannot be found, nil will be returned.

Alternatively, you can call Togglehq::User.find_by_identifier!, which will raise a RuntimeError if the given user cannot be found.

Devices

Create a device (usually done via the ToggleHQ SDK)

device = Togglehq::Device.new(:os => "ios", :os_version => 10.0, :manufacturer => "Apple", :model => "iPhone")
device.save

If created successfully, device.uuid will return the unique device identifier.

Enable a device to receive notifications

device = Togglehq::Device.new(:uuid => "123456789")
device.enable!("2b6f0cc4...831186")

Assign a device to a specific user

device = Togglehq::Device.new(:uuid => "123456789")
device.assign!("abcdef0123456789")

Unassign a device from all users

device = Togglehq::Device.new(:uuid => "123456789")
device.unassign!

ToggleHQ Notify Usage

Preferences

Get all preference categories and preferences for your app

preferences = Togglehq::Notify::Preferences.all

A Togglehq::Notify::Preferences object has a categories attribute which contains an array of all preference categories:

preferences.categories
 => [{"name"=>"Friends", "key"=>"friends", "preferences"=>[{"name"=>"Friend Request", "key"=>"friend_request", "default"=>true}]}]

Each preference category contains a name, a key, and an array of preferences, which also have a name, key, and default value.

User Preferences

Togglehq::Notify::UserPreferences enapsulates a specific user's notification preferences for your app. Create one by passing a Togglehq::User object:

user_preferences = Togglehq::Notify::UserPreferences.new(user)

Get the user's preferences by calling the categories method:

user_preferences.categories
 => [{"name"=>"Friends", "key"=>"friends", "preferences"=>[{"name"=>"Friend Request", "key"=>"friend_request", "default"=>true, "enabled"=>true}]}]

Like Togglehq::Notify::Preferences, a Togglehq::Notify::UserPreferences object has a categories attribute which contains an array of all preference categories. Each preference category contains a name, a key, and an array of preferences, which also have a name, key, and default value. In addition, each user preference contains an enabled flag, indicating whether the user has enabled that particular preference or not.

Please note that a Togglehq::Notify::UserPreferences object's categories property is memoized when fetched from the ToggleHQ API. To reload the preferences, call the reload! method on the Togglehq::Notify::UserPreferences object:

user_preferences.reload!

Enable a preference for a user

user_preferences.enable_preference!("category_key", "preference_key")

This will return true upon success, and raise a RuntimeError on failure.

Disable a preference for a user

user_preferences.disable_preference!("category_key", "preference_key")

This will return true upon success, and raise a RuntimeError on failure.

Notifications

To send push notifications, first construct a Togglehq::Notify::Notification object specifying a preference category key, preference key, and message.

notification = Togglehq::Notify::Notification.new(:category_key => "friends", :preference_key => "friend_request", :message => "You have a new friend request!")

To send this notification to a single user:

user = Togglehq::User.find_by_identifier("abc123")
notification.send(user)

This will return true upon success, and raise a RuntimeError on failure.

To send this notification to a batch of users:

user1 = Togglehq::User.new(:identifier => "abc123")
user2 = Togglehq::User.new(:identifier => "def456")
...
userN = Togglehq::User.new(:identifier => "xyz890")

notification.batch_send([user1, user2, ..., user2])

This will return true upon success, and raise a RuntimeError on failure.

To send this notification as a global message to all of the users in your app:

notification.send_global

This will return true upon success, and raise a RuntimeError on failure.

Contributing

Bug reports and pull requests are welcome on GitHub at https://github.com/togglehq/togglehq-gem.

License

The gem is available as open source under the terms of the MIT License.