Skip to content

Commit

Permalink
Improve readme and documentation (#64)
Browse files Browse the repository at this point in the history
* Update readme

* Improve readme and documentation

* Addlinksto pull requests and issues

* Improve contributing block

* Fix repo url

* Add configuration block
  • Loading branch information
Nitrino committed Feb 14, 2019
1 parent 0f5ebe1 commit 430cec9
Show file tree
Hide file tree
Showing 6 changed files with 90 additions and 24 deletions.
2 changes: 1 addition & 1 deletion .credo.exs
Original file line number Diff line number Diff line change
Expand Up @@ -101,7 +101,7 @@
{Credo.Check.Refactor.CyclomaticComplexity, []},
{Credo.Check.Refactor.FunctionArity, []},
{Credo.Check.Refactor.LongQuoteBlocks, []},
{Credo.Check.Refactor.MapInto, []},
{Credo.Check.Refactor.MapInto, false},
{Credo.Check.Refactor.MatchInCondition, []},
{Credo.Check.Refactor.NegatedConditionsInUnless, []},
{Credo.Check.Refactor.NegatedConditionsWithElse, []},
Expand Down
100 changes: 83 additions & 17 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,47 +1,113 @@
# Soap
[![Build Status](https://travis-ci.org/potok-digital/soap.svg?branch=master)](https://travis-ci.org/potok-digital/soap)
[![Code coverage](https://img.shields.io/coveralls/github/potok-digital/soap.svg?style=flat)](https://coveralls.io/github/potok-digital/soap)
[![Build Status](https://travis-ci.org/elixir-soap/soap.svg?branch=master)](https://travis-ci.org/elixir-soap/soap)
[![Code coverage](https://img.shields.io/coveralls/github/elixir-soap/soap.svg?style=flat)](https://coveralls.io/github/elixir-soap/soap)
[![Hex version](https://img.shields.io/hexpm/v/soap.svg?style=flat)](https://hex.pm/packages/soap)
[![Hex license](https://img.shields.io/hexpm/l/soap.svg?style=flat)](https://hex.pm/packages/soap)
[![Hex downloads](https://img.shields.io/hexpm/dt/soap.svg?style=flat)](https://hex.pm/packages/soap)

Pure Elixir implementation of SOAP client

## NOTE: Library is NOT production ready before 1.0 version
SOAP client for Elixir programming language

## Installation

1) Add `soap` to your deps:

```elixir
def deps do
[{:soap, "~> 0.2.1"}]
[{:soap, "~> 0.2"}]
end
```
2) Add `soap` to the list of application dependencies
2) Add `soap` to the list of application dependencies(or just use extra_applications):

```elixir
def application do
[applications: [:logger, :soap]]
end
```

## Configuration

Configure version of SOAP protocol. Supported versions `1.1`(default) and `1.2`.
```elixir
config :soap, :globals, version: "1.1"
```

## Usage

The documentation is available on [HexDocs](https://hexdocs.pm/soap/api-reference.html).

Parse WSDL file for execution of actions on its basis:
```elixir
iex(1)> {:ok, wsdl} = Soap.init_model(wsdl_path, :url)
{:ok, parsed_wsdl}
```

Get list of available operations:
```elixir
iex(2)> Soap.operations(wsdl)
[
%{
input: %{body: nil, header: nil},
name: "Add",
soap_action: "http://tempuri.org/Add"
},
%{
input: %{body: nil, header: nil},
name: "Subtract",
soap_action: "http://tempuri.org/Subtract"
},
%{
input: %{body: nil, header: nil},
name: "Multiply",
soap_action: "http://tempuri.org/Multiply"
},
%{
input: %{body: nil, header: nil},
name: "Divide",
soap_action: "http://tempuri.org/Divide"
}
]
```

Call action:
```elixir
wsdl_path = "http://www.dneonline.com/calculator.asmx?WSDL"
action = "Add"
params = %{intA: 1, intB: 2}

# Parse wsdl file for execution of action on its basis
{:ok, wsdl} = Soap.init_model(wsdl_path, :url)

# Call action
{:ok, %Soap.Response{body: body, headers: headers, request_url: url, status_code: code}} = Soap.call(wsdl, action, params)

# Parse body
Soap.Response.parse(body, code)
iex(3)> {:ok, response} = Soap.call(wsdl, action, params)
{:ok,
%Soap.Response{
body: "<?xml version=\"1.0\" encoding=\"utf-8\"?><soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\"><soap:Body><AddResponse xmlns=\"http://tempuri.org/\"><AddResult>3</AddResult></AddResponse></soap:Body></soap:Envelope>",
headers: [
{"Cache-Control", "private, max-age=0"},
{"Content-Length", "325"},
{"Content-Type", "text/xml; charset=utf-8"},
{"Server", "Microsoft-IIS/7.5"},
{"X-AspNet-Version", "2.0.50727"},
{"X-Powered-By", "ASP.NET"},
{"Date", "Thu, 14 Feb 2019 07:52:04 GMT"}
],
request_url: "http://www.dneonline.com/calculator.asmx",
status_code: 200
}}
```

To add SOAP headers, pass in a `{headers, params}` tuple instead of just params.
Parse response:
```elixir
iex(4)> Soap.Response.parse(response)
%{AddResponse: %{AddResult: "3"}}
```

To add SOAP headers, pass in a `{headers, params}` tuple instead of just params:
```elixir
%Soap.Response{} = Soap.call(wsdl, action, {%{Token: "foo"}, params})
{:ok, %Soap.Response{}} = Soap.call(wsdl, action, {%{Token: "foo"}, params})
```

## Contributing
We appreciate any contribution and open to [future requests](https://github.com/elixir-soap/soap/pulls).

You can find a list of features and bugs in the [issue tracker](https://github.com/elixir-soap/soap/issues).

## License

Soap is released under the MIT license, see the [LICENSE](https://github.com/elixir-soap/soap/blob/master/LICENSE) file.
2 changes: 1 addition & 1 deletion docs/all.json
Original file line number Diff line number Diff line change
@@ -1 +1 @@
{"shell":true,"revision":"bf8273459d80eb756dc5f024535dea3fa3331f0f","objects":[{"type":null,"source":"lib/soap.ex:2","object_type":"ModuleObject","moduledoc":"Documentation for Soap.\n","module":"Elixir.Soap","id":"Soap"},{"type":"def","source":"lib/soap.ex:6","signature":[],"object_type":"FunctionObject","name":"hello","module_id":"Soap","id":"hello/0","doc":"Hello world.\n\n## Examples\n\n iex> Soap.hello\n :world\n\n","arity":0}],"language":"elixir","git_repo_url":"https://github.com/potok-digital/soap.git","client_version":"0.5.6","client_name":"inch_ex","branch_name":"master","args":[]}
{"shell":true,"revision":"bf8273459d80eb756dc5f024535dea3fa3331f0f","objects":[{"type":null,"source":"lib/soap.ex:2","object_type":"ModuleObject","moduledoc":"Documentation for Soap.\n","module":"Elixir.Soap","id":"Soap"},{"type":"def","source":"lib/soap.ex:6","signature":[],"object_type":"FunctionObject","name":"hello","module_id":"Soap","id":"hello/0","doc":"Hello world.\n\n## Examples\n\n iex> Soap.hello\n :world\n\n","arity":0}],"language":"elixir","git_repo_url":"https://github.com/elixir-soap/soap.git","client_version":"0.5.6","client_name":"inch_ex","branch_name":"master","args":[]}
2 changes: 1 addition & 1 deletion lib/soap.ex
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@ defmodule Soap do
## Parameters
- `wsdl`: Wsdl model from `Soap.init_model/2` function.
- `action`: Soap action to be called. Use `Soap.operation/1` to get a list of available actions
- `action`: Soap action to be called. Use `Soap.operations/1` to get a list of available actions
- `params`: Parameters to build the body of a SOAP request.
- `headers`: Custom request headers.
- `opts`: HTTPoison options.
Expand Down
1 change: 0 additions & 1 deletion lib/soap/xsd.ex
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
defmodule Soap.Xsd do
@moduledoc """
Provides functions for parsing xsd file
# TODO: Implement in version 0.2
"""

import SweetXml, except: [parse: 1]
Expand Down
7 changes: 4 additions & 3 deletions mix.exs
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,8 @@ defmodule Soap.MixProject do
package: package(),
description: description(),
name: "Soap",
source_url: "https://github.com/potok-digital/soap",
source_url: "https://github.com/elixir-soap/soap",
docs: [main: "Soap", extras: ["README.md"]],
test_coverage: [tool: ExCoveralls],
preferred_cli_env: [
coveralls: :test,
Expand All @@ -27,13 +28,13 @@ defmodule Soap.MixProject do
files: ["lib", "mix.exs", "README.md", "LICENSE*"],
maintainers: ["Petr Stepchenko", "Roman Kakorin"],
licenses: ["MIT"],
links: %{"GitHub" => "https://github.com/potok-digital/soap"}
links: %{"GitHub" => "https://github.com/elixir-soap/soap"}
]
end

defp description do
"""
Pure Elixir implementation of SOAP client
SOAP client for Elixir programming language
"""
end

Expand Down

0 comments on commit 430cec9

Please sign in to comment.