README.md in jabber_admin-0.1.4 vs README.md in jabber_admin-0.2.0

- old
+ new

@@ -1,55 +1,175 @@ ![jabber_admin](doc/assets/project.png) +[![Build Status](https://travis-ci.org/hausgold/jabber_admin.svg?branch=master)](https://travis-ci.org/hausgold/jabber_admin) +[![Gem Version](https://badge.fury.io/rb/jabber_admin.svg)](https://badge.fury.io/rb/jabber_admin) [![Maintainability](https://api.codeclimate.com/v1/badges/0b3c444d8db8acaaba97/maintainability)](https://codeclimate.com/github/hausgold/jabber_admin/maintainability) [![Test Coverage](https://api.codeclimate.com/v1/badges/0b3c444d8db8acaaba97/test_coverage)](https://codeclimate.com/github/hausgold/jabber_admin/test_coverage) +[![API docs](https://img.shields.io/badge/docs-API-blue.svg)](https://www.rubydoc.info/gems/jabber_admin) -jabber_admin is a small library to easily communicate with the ejabberd -admin API. +jabber_admin is a small library to easily communicate with the [ejabberd +admin API](https://docs.ejabberd.im/developer/ejabberd-api/admin-api). +- [Installation](#installation) +- [Configuration](#configuration) +- [Usage](#usage) + - [Predefined commands](#predefined-commands) + - [Freestyle commands](#freestyle-commands) +- [Development](#development) +- [Contributing](#contributing) + ## Installation Add this line to your application's Gemfile: ```ruby gem 'jabber_admin' ``` And then execute: - $ bundle +```bash +$ bundle +``` Or install it yourself as: - $ gem install jabber_admin +```bash +$ gem inst.object_idall jabber_admin +``` +## Configuration + +You can configure the jabber_admin gem in a global initializer way with the +`JabberAdmin.configure` method which yields the configuration directly. + +```ruby +JabberAdmin.configure do |config| + # The ejabberd REST API endpoint as a full URL. + # Take care of the path part, because this is individually + # configured on ejabberd. (See: https://bit.ly/2rBxatJ) + config.url = 'http://jabber.local/api' + # Provide here the full user JID in order to authenticate as + # a administrator. + config.username = 'admin@jabber.local' + # The password of the administrator account. + config.password = 'password' +end +``` + +In case this is not cool for you, you can get and modify the configuration +directly with the help of the `JabberAdmin.configuration` getter. + +```ruby +JabberAdmin.configuration.url = 'http://jabber.local/api' +JabberAdmin.configuration.username = 'admin@jabber.local' +JabberAdmin.configuration.password = 'password' +``` + ## Usage -``` ruby +### Predefined commands + +We support some handy predefined commands out of the box which ease the quick +start usage. These predefined commands comes with a good documentation +(including valid example data) and a nifty interface. When it is possible to +fill up missing data from a full user/room JID we do so. Say while sending a +direct invitation, you just pass the full room JID and we take care of +splitting it up to fulfill the separate room name and the separate MUC service +domain. + +All our predefined commands are available directly underneath the `JabberAdmin` +module as methods. Just call them like this: + +```ruby JabberAdmin.restart! -JabberAdmin.create_room!(name: 'room1', host: '...') +JabberAdmin.register(user: 'peter@example.com', password: '123') ``` -Currently these basic commands are supported: +Have a close look at the method names. We support bang and non-bang variants. +The bang variants perform in-deep response validation and raise children of ++JabberAdmin::Error+ in case of detected issues. These issues can be +unpermitted API requests, or invalid payload values, etc. The predefined +commands also perform response body checks when it is appropriate. (Eg. many +commands respond a single zero as a success indicator) -- ban_account -- create_room -- create_room_with_opts -- register -- registered_users -- restart -- send_direct_invitation -- send_stanza -- set_room_affiliation -- subscribe_room -- unregister -- unsubscribe_room +The non-bang variants will just fire the request and do not perform any checks +on the response. You can implement your own error handling or response analysis +if you like. You could also just fire and forget them. It's up to you. +Here comes a list of all supported predefined commands: + +- [ban_account](https://bit.ly/2KW9xVt) +- [create_room](https://bit.ly/2rB8DFR) +- [create_room_with_opts](https://bit.ly/2IBEfVO) +- [muc_register_nick](https://bit.ly/2G9EBNQ) +- [registered_users](https://bit.ly/2KhwT6Z) +- [register](https://bit.ly/2wyhAox) +- [restart](https://bit.ly/2G7YEwd) +- [send_direct_invitation](https://bit.ly/2wuTpr2) +- [send_stanza_c2s](https://bit.ly/2wwUcYr) +- [send_stanza](https://bit.ly/2rzxyK1) +- [set_nickname](https://bit.ly/2rBdyqc) +- [set_presence](https://bit.ly/2rzxyK1) +- [set_room_affiliation](https://bit.ly/2G5MfbW) +- [subscribe_room](https://bit.ly/2Ke7Zoy) +- [unregister](https://bit.ly/2wwYnDE) +- [unsubscribe_room](https://bit.ly/2G5zcrj) + +If you want to contribute more, we accept pull requests! + +### Freestyle commands + +In case you want to send commands easily without delivering new predefined +commands with documentation and some nifty tricks, you can simply call the +ejabberd REST API with your custom commands like this: + +```ruby +JabberAdmin.status +JabberAdmin.get_last(user: 'tom', host: 'ejabberd.local') +JabberAdmin.set_presence!(...) +``` + +The `JabberAdmin` is smart enough to detect that the given command is not a +predefined command and therefore it assembles a new `JabberAdmin::ApiCall` +instance and passes down all arguments. If you look closely you see again that +we support a bang and non-bang variant. The error handling works the same as on +predefined commands. + +By default the `JabberAdmin::ApiCall` instance assumes it should perform body +checks on the response which is not clever on data fetching commands, due to +the fact that they do not deliver `0` as body. The body validation can be +turned off with the additional `check_res_body: false` argument. + +```ruby +JabberAdmin.get_last! \ + check_res_body: false, user: 'tom', host: 'ejabberd.local' +``` + +In case you want to make use of the memorize feature of each +`JabberAdmin::ApiCall` instance, just build it up directly. + +```ruby +command = JabberAdmin::ApiCall.new('get_last' + user: 'tom', + host: 'ejabberd.local') +# Get the response and memorize it +command.response.object_id # => 21934400 +# A second call to the response method will not perform a request again +command.response.object_id # => 21934400 +``` + ## Development -After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment. +After checking out the repo, run `make install` to install dependencies. Then, +run `make test` to run the tests. You can also run `make shell-irb` for an +interactive prompt that will allow you to experiment. -To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org). +To release a new version, update the version number in `version.rb`, and then +run `make release`, which will create a git tag for the version, push git +commits and tags, and push the `.gem` file to +[rubygems.org](https://rubygems.org). ## Contributing -Bug reports and pull requests are welcome on GitHub at https://github.com/hausgold/jabber_admin. +Bug reports and pull requests are welcome on GitHub at +https://github.com/hausgold/jabber_admin.