Project

rails-xapi

0.0
No release in over 3 years
Rails engine for generating xAPI statements.
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
 Dependencies

Development

Runtime

>= 7.1.2
 Project Readme

Rails xAPI

This gem is a Rails engine that allows the validation of data from an xAPI statement. It enables the storage of xAPI statements in relational tables.

Actions Status

Important

This is an ongoing development. The documentation will be provided as it becomes available.

Installation

Add this line to your application's Gemfile:

gem "rails-xapi", "~> 0.1.2"

And then execute:

$ bundle

Create the migration files:

$ bin/rails rails_xapi:install:migrations

Mount the engine in config/routes.rb:

mount RailsXapi::Engine, at: "rails-xapi"

Usage

Statement creation

Example usage of the RailsXapi::StatementCreator service:

user_name = "#{user.firstname} #{user.lastname}"

data = {
  actor: {
    objectType: "Agent",
    name: user_name,
    mbox: "mailto:#{user.email}",
    account: {
      homePage: "http://example.com/some_user_homepage/#{user&.id}",
      name: user_name
    }
  },
  verb: {
    id: "https://brindlewaye.com/xAPITerms/verbs/loggedin/"
  },
  object: {
    id: new_user_session_url,
    definition: {
      name: {
        "en-US" => "log in"
      },
      description: {
        "en-US" => "User signed in"
      }
    }
  }
}

RailsXapi::StatementCreator.create(data)

Data query

Ready-to-use queries are available in the app/services/rails_xapi/query.rb class.

Query symbol Description
:statement Retrieve a single statement by its ID
:statements_by_object_and_actors Get statements by object IDand actor emails
:verb_ids Get list of unique verb IDs
:verb_displays Get list of unique verb display values
:verbs Get hash of unique verbs with ID and display values
:actor_by_email Find statements by actor's email
:actor_by_mbox Find statements by actor's mbox
:actor_by_account_homepage Find statements by actor's account homepage
:actor_by_openid Find statements by actor's openID
:actor_by_mbox_sha1sum Find statements by actor's mbox SHA1 sum
:user_statements_per_month Retrieve actor's statements for a specific month/year
:per_month Group given records by creation date for a specific month
:month_graph_data Create date/count array of data for a month

Example of usage:

def create_statement
  data = {
    actor: {
      objectType: "Agent",
      name: "John Doe",
      mbox: "mailto:example@localhost.com",
      account: {
        homePage: "http://example.com/some_user_homepage/1",
        name: "JohnDoe#1"
      }
    },
    verb: {
      id: "https://brindlewaye.com/xAPITerms/verbs/loggedin/"
    },
    object: {
      id: "http://localhost:3000/new_user_session",
      definition: {
        name: {
          "en-GB" => "login"
        },
        description: {
          "en-US" => "User signed in."
        }
      }
    }
  }

  statement = RailsXapi::StatementCreator.create(data)
  redirect_to statement_show_path(id: statement[:statement][:id])
end

def statement_show
  @statement = RailsXapi::Query.call(
    query: :statement,
    args: params[:id]
  )
end

def logs_per_month(year = Date.current.year, month = Date.current.month)
  RailsXapi::Query.call(
    query: :user_statements_per_month,
    args: [{mbox: "mailto:#{email}"}, year, month]
  )
end

Test

bundle exec rails db:schema:load RAILS_ENV=test
bundle exec rspec spec/

License

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