Haskell library to parse a subset of Ruby objects serialised with Marshal.dump
Switch branches/tags
Nothing to show
Clone or download
Latest commit df65cce Aug 12, 2018

README.md

ruby-marshal

Build Status

Haskell library to parse a subset of Ruby objects serialised with Marshal.dump.

Supported Types

  • NilClass
  • TrueClass | FalseClass
  • Array
  • Fixnum
  • Float
  • Hash
  • String
  • Symbol

If you would like to add support for another type, please feel free to create an issue or open a pull request using the guidelines below.

Usage

Example

{-# LANGUAGE OverloadedStrings #-}

module Main where

import Data.Ruby.Marshal
import Data.ByteString  (ByteString)
import System.Directory (getCurrentDirectory)

import qualified Data.ByteString as BS
import qualified Data.Map.Strict as DM

lookupUserID :: (ByteString, RubyStringEncoding)
             -> RubyObject
             -> Maybe (ByteString, RubyStringEncoding)
lookupUserID key hash = fromRuby hash >>= \cookie -> DM.lookup key cookie

main :: IO ()
main = do
  dir <- getCurrentDirectory
  rbs <- BS.readFile (mconcat [dir, "/test/bin/railsCookie.bin"])
  print $
    case decode rbs of
      Just cookie -> lookupUserID ("user_id", UTF_8) cookie
      Nothing     -> Nothing

Contributing

  1. Fork it.
  2. Create your feature branch (git checkout -b my-new-feature).
  3. Commit your changes (git commit -am 'Add some feature').
  4. Push to the branch (git push origin my-new-feature).
  5. Create new Pull Request.

Contributors

Similar Libraries