paxful_engine-rails 0.1.0 → 0.5.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +36 -2
- data/app/controllers/paxful_engine/trades_controller.rb +13 -0
- data/app/helpers/paxful_engine/application_helper.rb +6 -0
- data/app/models/paxful_engine/trade.rb +12 -0
- data/app/services/paxful_engine/create_trade.rb +6 -0
- data/app/views/layouts/paxful_engine/application.html.erb +10 -3
- data/app/views/paxful_engine/trades/index.html.erb +39 -0
- data/app/views/paxful_engine/trades/show.html.erb +46 -0
- data/config/routes.rb +1 -0
- data/lib/paxful_engine.rb +1 -0
- data/lib/paxful_engine/version.rb +1 -1
- metadata +19 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: fb90688726d3d85a6c9f1b0e243955f3977f11483d41886b0ccf43b15dcc4b6e
|
4
|
+
data.tar.gz: 16de8f670bfdb81d21d3bc0b0e1ff94bb4f7ca0811c0d91d3b714b6ceb0f73d0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b64b219d335b96a57d8419730947f12e1723f9a88e70d9019f9c4f6d763e94406e87d571fef4be875242d0440459322d4d7e14a2db3be481470ef3e8b0b606c1
|
7
|
+
data.tar.gz: 914858b8aeb7cc2d15260d8e62d2971aff81cda741bc176c69fc62c6c184d21bb38093c68d6544134054651e64b0324988b1f5bf76144a8758b5aec776cf6dd7
|
data/README.md
CHANGED
@@ -34,7 +34,8 @@ Create an initializer in your Rails application:
|
|
34
34
|
PaxfulEngine.configure do |c|
|
35
35
|
c.paxful_key = "your paxful key"
|
36
36
|
c.paxful_secret = "your paxful secret"
|
37
|
-
c.on_sync_callback = "
|
37
|
+
c.on_sync_callback = "SyncCallback"
|
38
|
+
c.on_failure_callback = "FailureCallback"
|
38
39
|
end
|
39
40
|
```
|
40
41
|
|
@@ -45,7 +46,7 @@ It accepts a `Trade` as its only argument.
|
|
45
46
|
|
46
47
|
```
|
47
48
|
# example
|
48
|
-
class
|
49
|
+
class SyncCallback
|
49
50
|
|
50
51
|
def self.call(trade)
|
51
52
|
# do anything you want with this record
|
@@ -54,6 +55,39 @@ class YourCallback
|
|
54
55
|
end
|
55
56
|
```
|
56
57
|
|
58
|
+
#### c.on_failure_callback
|
59
|
+
|
60
|
+
An object that responds to `call` that gets executed when a trade cannot be created.
|
61
|
+
|
62
|
+
It accepts two arguments:
|
63
|
+
- exception
|
64
|
+
- payload
|
65
|
+
|
66
|
+
```
|
67
|
+
# example
|
68
|
+
class FailureCallback
|
69
|
+
|
70
|
+
def self.call(e, payload)
|
71
|
+
# log somewhere...
|
72
|
+
end
|
73
|
+
|
74
|
+
end
|
75
|
+
```
|
76
|
+
|
77
|
+
### Usage
|
78
|
+
|
79
|
+
Add this to your scheduler somewhere:
|
80
|
+
```
|
81
|
+
# sidekiq_cron.yml
|
82
|
+
refresh_paxful_order_book:
|
83
|
+
cron: "*/2 * * * * Asia/Singapore" # runs every 2 minutes
|
84
|
+
class: "PaxfulEngine::SyncOrderBookJob"
|
85
|
+
```
|
86
|
+
|
87
|
+
From the host app:
|
88
|
+
- Check list of trades at `/paxful_engine/trades`.
|
89
|
+
- Details per trade at `/paxful_engine/trades/:id`.
|
90
|
+
|
57
91
|
### Development
|
58
92
|
|
59
93
|
```
|
@@ -24,6 +24,12 @@ module PaxfulEngine
|
|
24
24
|
end
|
25
25
|
|
26
26
|
trade
|
27
|
+
|
28
|
+
rescue => exception
|
29
|
+
if PaxfulEngine.configuration.on_failure_callback.present?
|
30
|
+
callback = PaxfulEngine.configuration.on_failure_callback
|
31
|
+
callback.constantize.(exception, payload)
|
32
|
+
end
|
27
33
|
end
|
28
34
|
|
29
35
|
end
|
@@ -1,15 +1,22 @@
|
|
1
1
|
<!DOCTYPE html>
|
2
2
|
<html>
|
3
3
|
<head>
|
4
|
-
<title>Paxful
|
4
|
+
<title>Paxful Engine</title>
|
5
5
|
<%= csrf_meta_tags %>
|
6
6
|
<%= csp_meta_tag %>
|
7
7
|
|
8
|
-
<%= stylesheet_link_tag
|
8
|
+
<%= stylesheet_link_tag "paxful_engine/application", media: "all" %>
|
9
|
+
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin="anonymous">
|
9
10
|
</head>
|
10
11
|
<body>
|
11
12
|
|
12
|
-
|
13
|
+
<nav class="navbar navbar-dark bg-dark">
|
14
|
+
<%= link_to "Paxful Trades", paxful_engine.trades_path, class: "navbar-brand" %>
|
15
|
+
</nav>
|
16
|
+
|
17
|
+
<div class="mt-4 mb-4 container-fluid">
|
18
|
+
<%= yield %>
|
19
|
+
</div>
|
13
20
|
|
14
21
|
</body>
|
15
22
|
</html>
|
@@ -0,0 +1,39 @@
|
|
1
|
+
<span class="font-weight-bold"> Found <%= pluralize(@trades.count, "trade") %></span>
|
2
|
+
<hr />
|
3
|
+
|
4
|
+
<div class="table-responsive">
|
5
|
+
<table class="table table-striped table-bordered">
|
6
|
+
<thead>
|
7
|
+
<tr>
|
8
|
+
<th scope="col">Created</th>
|
9
|
+
<th scope="col">Trade hash</th>
|
10
|
+
<th scope="col">Type</th>
|
11
|
+
<th scope="col">Status</th>
|
12
|
+
<th scope="col">Seller</th>
|
13
|
+
<th scope="col">Buyer</th>
|
14
|
+
<th scope="col"></th>
|
15
|
+
</tr>
|
16
|
+
</thead>
|
17
|
+
<tbody>
|
18
|
+
<% if @trades.empty? %>
|
19
|
+
<tr>
|
20
|
+
<td colspan="7"> No trades found </td>
|
21
|
+
</tr>
|
22
|
+
<% end %>
|
23
|
+
|
24
|
+
<% @trades.each do |trade| %>
|
25
|
+
<tr scope="row">
|
26
|
+
<td> <%= trade.created_at.strftime("%m/%d/%Y %I:%M%p") %> </td>
|
27
|
+
<td> <%= trade.trade_hash %> </td>
|
28
|
+
<td> <%= trade.offer_type.upcase %> </td>
|
29
|
+
<td>
|
30
|
+
<span class="<%= highlight_status(trade) %>"> <%= trade.status.upcase %> </span>
|
31
|
+
</td>
|
32
|
+
<td> <%= trade.seller %> </td>
|
33
|
+
<td> <%= trade.buyer %> </td>
|
34
|
+
<td> <%= link_to "Check trade details", paxful_engine.trade_path(trade) %> </td>
|
35
|
+
</tr>
|
36
|
+
<% end %>
|
37
|
+
</tbody>
|
38
|
+
</table>
|
39
|
+
</div>
|
@@ -0,0 +1,46 @@
|
|
1
|
+
<%= link_to "Back", paxful_engine.trades_path, class: "btn btn-primary" %>
|
2
|
+
|
3
|
+
<div class="row">
|
4
|
+
<div class="col-sm-4">
|
5
|
+
<div class="card mt-4">
|
6
|
+
<h5 class="card-header">Trade details (<%= @trade.trade_hash %>)</h5>
|
7
|
+
<div class="card-body">
|
8
|
+
<div>
|
9
|
+
<div> <strong>Seller:</strong> <%= @trade.seller %> </div>
|
10
|
+
<div> <strong>Buyer:</strong> <%= @trade.buyer %> </div>
|
11
|
+
<div> <strong>Type:</strong> <%= @trade.offer_type.upcase %> </div>
|
12
|
+
</div>
|
13
|
+
|
14
|
+
<hr />
|
15
|
+
|
16
|
+
<div>
|
17
|
+
<div>
|
18
|
+
<strong>Fiat Requested:</strong>
|
19
|
+
<%= number_to_currency(@trade.fiat_amount_requested, unit: "#{@trade.fiat_currency_code} ") %>
|
20
|
+
</div>
|
21
|
+
<div>
|
22
|
+
<strong>Crypto Requested:</strong>
|
23
|
+
<%= number_to_currency(@trade.crypto_amount_requested, unit: "#{@trade.crypto_currency_code} ") %>
|
24
|
+
(in sats)
|
25
|
+
</div>
|
26
|
+
</div>
|
27
|
+
|
28
|
+
<hr />
|
29
|
+
|
30
|
+
<div>
|
31
|
+
<div> <strong>Started at:</strong> <%= @trade.started_at.strftime("%m/%d/%Y %I:%M%p") %> </div>
|
32
|
+
<div> <strong>Ended at:</strong> <%= @trade.ended_at.strftime("%m/%d/%Y %I:%M%p") %> </div>
|
33
|
+
<div> <strong>Completed at:</strong> <%= @trade.completed_at&.strftime("%m/%d/%Y %I:%M%p") %> </div>
|
34
|
+
</div>
|
35
|
+
|
36
|
+
<hr />
|
37
|
+
|
38
|
+
<div>
|
39
|
+
<strong>Status:</strong>
|
40
|
+
<span class="<%= highlight_status(@trade) %>"> <%= @trade.status.upcase %> </span>
|
41
|
+
</div>
|
42
|
+
<div> <strong>Payment Method:</strong> <%= @trade.payment_method_name %> </div>
|
43
|
+
</div>
|
44
|
+
</div>
|
45
|
+
</div>
|
46
|
+
</div>
|
data/config/routes.rb
CHANGED
data/lib/paxful_engine.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: paxful_engine-rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Mark Chavez
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-10-
|
11
|
+
date: 2020-10-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: gem_config
|
@@ -80,6 +80,20 @@ dependencies:
|
|
80
80
|
- - "~>"
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: '2.5'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: factory_bot
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ">="
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ">="
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0'
|
83
97
|
- !ruby/object:Gem::Dependency
|
84
98
|
name: pry
|
85
99
|
requirement: !ruby/object:Gem::Requirement
|
@@ -163,6 +177,7 @@ files:
|
|
163
177
|
- app/assets/config/paxful_engine_manifest.js
|
164
178
|
- app/assets/stylesheets/paxful_engine/application.css
|
165
179
|
- app/controllers/paxful_engine/application_controller.rb
|
180
|
+
- app/controllers/paxful_engine/trades_controller.rb
|
166
181
|
- app/helpers/paxful_engine/application_helper.rb
|
167
182
|
- app/jobs/paxful_engine/application_job.rb
|
168
183
|
- app/jobs/paxful_engine/enqueue_create_trade_job.rb
|
@@ -172,6 +187,8 @@ files:
|
|
172
187
|
- app/models/paxful_engine/trade.rb
|
173
188
|
- app/services/paxful_engine/create_trade.rb
|
174
189
|
- app/views/layouts/paxful_engine/application.html.erb
|
190
|
+
- app/views/paxful_engine/trades/index.html.erb
|
191
|
+
- app/views/paxful_engine/trades/show.html.erb
|
175
192
|
- config/routes.rb
|
176
193
|
- db/migrate/20201018043517_create_paxful_engine_trades.rb
|
177
194
|
- lib/paxful_engine-rails.rb
|