infuze ruby module user guide

WURFL InFuze Module for Ruby: User Guide

WURFL InFuze for Ruby is a Ruby module wrapping the WURFL C API and encapsulating it in an object oriented manner to provide a fast and intuitive interface. It is released for linux/macos platforms for ruby versions 1.9 or higher.

Installing libwurfl

In order for the Module to work it is ESSENTIAL that the libwurfl library is installed on your system. libwurfl is provided in your Customer Vault/FileX.

If you have not already installed libwurfl, instructions can be found here. Release notes for each API can be found here.

Installation on Linux/MacOS X

InFuze for Ruby is available as a gem and requires the WURFL InFuze C API to be installed. If you have not already installed libwurfl, instructions can be found here. Release notes for each API can be found here. You will need ruby-dev and rubygems:

On debian based linux:

$ sudo apt-get install ruby-dev
$ sudo apt-get install rubygems

On redhat/centos:

$ sudo yum install ruby-devel
$ sudo yum install rubygems

Now install the gem:

$ sudo gem install --no-ri --no-rdoc wurfl-<version>.gem

Installation on Windows

The Ruby module has been tested with a RubyInstaller environment on Windows for installation instructions. On Windows, WURFL InFuze libs go to C:\Windows\System32.

Install the gem:

C:\> gem install --no-ri --no-rdoc wurfl-<version>.gem

Note: if you encounter any problem with RubyInstaller, please verify you correctly set up the environment variables.

Usage

Here is an example to get started using InFuze for Ruby:

require 'wurfl_obj'

# create Wurfl object
MyWurfl = Wurfl.new("wurfl.zip", patches=[], high_accuracy=false, cache_provider=:WURFL_CACHE_PROVIDER_DOUBLE_LRU, cache_extra_config="10000,3000")

# Define a test User Agent
UserAgent = "Mozilla/5.0 (Linux; Android 4.4; Nexus 5 Build/KRT16M) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/30.0.0.0 Mobile Safari/537.36"

# Lookup a UserAgent string
begin
    dev = MyWurfl.parse_useragent(UserAgent)
    rescue WurflError => err
        puts err.errorcode
        puts err.errormessage
end

# print deviceid
print("deviceid = " + dev.get_device_id() + "\n") # device ID

# print device capability
print("is_mobile = " + dev.get_capability("is_mobile") + "\n") # capability

# print virtual capability
print("is_ios = " + dev.get_capability("is_ios") + "\n") # virtual capability

# get a set of capabilities
print(dev.get_capabilities(["brand_name", "model_name", "is_ios"]))

# Returns an array with a key-value dictionary
#[{:capability=>"brand_name", :value=>"Google"}, {:capability=>"model_name", :value=>"Nexus 5"}, {:capability=>"is_ios", :value=>"false"}]

# Get all capabilities
print(dev.list_device_capabilities())

# Release the device object to avoid memory leaks
dev.release()

WURFL Updater

If you want to keep your wurfl.zip up-to-date with the ScientiaMobile data release schedule, then you might want to use the Updater features, available in Ruby WURFL as follows :

After creating your WURFL engine, set your personal WURFL Snapshot URL (in the form "https://data.scientiamobile.com/xxxxx/wurfl.zip", with "xxxxx" replaced with your personal access token, located in your license account page):

begin
  MyWurfl.set_updater_data_url("https://data.scientiamobile.com/<your access token>/wurfl.zip")
  rescue WurflError => err
    puts err.errorcode
    puts err.errormessage
end    

Optionally, specify which periodicity (DAILY or WEEKLY, default is DAILY) you would like for update checks:

MyWurfl.set_updater_data_frequency(:WURFL_UPDATER_FREQ_DAILY)

Then start the updater:

begin
  MyWurfl.updater_start()
  rescue WurflError => err
    puts err.errorcode
    puts err.errormessage
end

Updater will run a periodic check for the latest release of the wurfl.zip file, eventually download it, and update the running engine to the latest version - all during normal application operations.

The internal updater supports also simple file logging, useful to debug network problems and the like:

MyWurfl.set_updater_log_path("updater.log")

Please note also:

  • The WURFL data file and the path where it resides, specified in the WURFL engine construction,

    MUST
    have write/rename access: the old data file will be replaced (i.e, a rename operation will be performed) with his updated version upon successful update operation completion, and the directory will be used for temp file creation, etc.

  • ScientiaMobile does not distribute uncompressed XML data files via updater. This means that, if you plan to use the updater, you

    MUST
    use a compressed (i.e, a ZIP or a XML.GZ) file as data file in the engine construction call.

Please note that set_updater_data_frequency() sets how often the updater

checks
for any updated data file, not how often the engine data file is actually updated.

The WURFL InFuze Updater functionality relies on availability and features of the well-known and widely available curl command-line utility. A check for curl availability is done in the set_updater_data_url() call

License

2017 ScientiaMobile Incorporated All Rights Reserved.

NOTICE: All information contained herein is, and remains the property of ScientiaMobile Incorporated and its suppliers, if any. The intellectual and technical concepts contained herein are proprietary to ScientiaMobile Incorporated and its suppliers and may be covered by U.S. and Foreign Patents, patents in process, and are protected by trade secret or copyright law. Dissemination of this information or reproduction of this material is strictly forbidden unless prior written permission is obtained from ScientiaMobile Incorporated.