Ruby Gom Client

Requirements

  • Ruby 1.9

Setup and Initialization

GOM = Gom::Client.new GOM_ROOT

Where the GOM_ROOT is of format "http://<ip | hostname>[:<port>]". Further operations are then performed via the initialized object (in this example GOM)

RESTful operations

GET/retrieve

Attribute retrieval:

>>> myAttribute = GOM.retrieve("/test:myAttr")    
{'attribute': {'ctime': '2012-10-12T08:46:48+02:00',
           'mtime': '2012-10-12T08:46:48+02:00',
           'name': 'myAttr',
           'node': '/test',
           'type': 'string',
           'value': 'test'}}

Node retrieval:

  >>> myNode = GOM.retrieve("/areas")
  {'node': {'ctime': '2012-09-20T04:51:56+02:00',
        'entries': [{'ctime': '2012-07-30T16:13:02+02:00',
                     'mtime': '2012-07-30T16:13:02+02:00',
                     'node': '/areas/home'},
                    {'ctime': '2012-09-29T17:51:47+02:00',
                   'mtime': '2012-09-29T17:51:47+02:00',
                   'node': '/areas/life'},
                  {'ctime': '2012-06-26T21:13:35+02:00',
                   'mtime': '2012-06-26T21:13:35+02:00',
                   'node': '/areas/mobile'},
                  {'ctime': '2012-10-10T18:30:50+02:00',
                   'mtime': '2012-10-10T18:30:50+02:00',
                   'node': '/areas/move'},
                  {'ctime': '2012-09-20T02:19:30+02:00',
                   'mtime': '2012-09-20T02:19:30+02:00',
                   'node': '/areas/pre-show'},
                  {'ctime': '2012-07-30T14:03:57+02:00',
                   'mtime': '2012-07-30T14:03:57+02:00',
                   'node': '/areas/welcome'},
                  {'attribute': {'ctime': '2012-10-11T07:02:18+02:00',
                                 'mtime': '2012-10-11T07:02:18+02:00',
                                 'name': 'operational_mode',
                                 'node': '/areas',
                                 'type': 'string',
                                 'value': 'idle'}}],
      'mtime': '2012-09-20T04:51:56+02:00',
      'uri': '/areas'}}

Retrieval of non-existent Node/Attribute:

>>> pprint(GOM.retrieve("/test/does-not-exist"))
None
>>> pprint(GOM.retrieve("/test:does-not-exist"))
None

PUT/update

Attribute update

>>> GOM.update!("/test:temperature", "50 °C")
'50 °C'

Node update

>>> GOM.update!("/test/weather", {"temperature": "50 °C", "wind_velocity": "3 km/h", "wind_direction": "NNW"})
{'status': 201}

DELETE/destroy

Delete existing node

>>> GOM.destroy("/test/c18bf546-e577-414a-92d2-2ebdfb69b4f6")
True

Delete non-existing node

>>> print(GOM.destroy("/test/does-not-exist"))
None

Attributes are deleted accordingly

POST/create

Create empty node

>>> GOM.create!("/test")
'/test/c18bf546-e577-414a-92d2-2ebdfb69b4f6'

Create node with attributes

>>> GOM.create!("/test", {"name":"Hans", "profession": "Lumberjack"})
'/test/419e9db0-2800-43ed-9053-edaafd4f60b3'
>>> GOM.retrieve("/test/419e9db0-2800-43ed-9053-edaafd4f60b3")
{'node': {'ctime': '2012-10-12T10:43:25+02:00',
          'entries': [{'attribute': {'ctime': '2012-10-12T10:43:25+02:00',
                                     'mtime': '2012-10-12T10:43:25+02:00',
                                     'name': 'name',
                                     'node': '/test/419e9db0-2800-43ed-9053-edaafd4f60b3',
                                     'type': 'string',
                                     'value': 'Hans'}},
                      {'attribute': {'ctime': '2012-10-12T10:43:25+02:00',
                                     'mtime': '2012-10-12T10:43:25+02:00',
                                     'name': 'profession',
                                     'node': '/test/419e9db0-2800-43ed-9053-edaafd4f60b3',
                                     'type': 'string',
                                     'value': 'Lumberjack'}}],
          'mtime': '2012-10-12T10:43:25+02:00',
          'uri': '/test/419e9db0-2800-43ed-9053-edaafd4f60b3'}}

Packaging

TODO

  • Document script runner (run_script)
  • Document gom observer creation (register_observer)