From be135ecc270c9e41759cb0dbc2d868e985493a1e Mon Sep 17 00:00:00 2001 From: TheNeedful-DO Date: Mon, 25 Mar 2024 13:26:28 +0000 Subject: [PATCH] Add data view to metapurses --- app/controllers/metapurses_controller.rb | 7 ++++++- app/models/metapurse.rb | 22 ++++++++++++++++++++++ app/policies/metapurse_policy.rb | 4 ++++ app/views/metapurses/data.html.haml | 23 +++++++++++++++++++++++ app/views/metapurses/index.html.haml | 4 +++- app/views/metapurses/show.html.haml | 8 ++++++-- config/routes.rb | 6 +++++- 7 files changed, 69 insertions(+), 5 deletions(-) create mode 100644 app/views/metapurses/data.html.haml diff --git a/app/controllers/metapurses_controller.rb b/app/controllers/metapurses_controller.rb index 0e52d524..35edb7ea 100644 --- a/app/controllers/metapurses_controller.rb +++ b/app/controllers/metapurses_controller.rb @@ -1,5 +1,5 @@ class MetapursesController < ApplicationController - before_action :set_metapurse, only: %i[ show edit update destroy ] + before_action :set_metapurse, only: %i[ show edit update destroy data ] # GET /metapurses or /metapurses.json def index @@ -11,6 +11,11 @@ class MetapursesController < ApplicationController authorize @metapurse end + def data + authorize @metapurse + end + + # GET /metapurses/new def new authorize @metapurse = current_user.metapurses.new diff --git a/app/models/metapurse.rb b/app/models/metapurse.rb index 7d6569d8..6be1b40a 100644 --- a/app/models/metapurse.rb +++ b/app/models/metapurse.rb @@ -8,4 +8,26 @@ class Metapurse < ActiveRecord::Base JSON.parse(`curl -s https://www.binance.com/api/v3/avgPrice?symbol=ICPUSDT`)["price"].to_f end + def icp_canister_id + "ryjl3-tyaaa-aaaaa-aaaba-cai" + end + + def total_usd + total_usd = 0.0 + self.data.each_line do |record| + canister_id = record.split[0] + amount = record.split[1].gsub(",","").to_f # rescue nil + if canister_id == icp_canister_id + value = self.icp_usd + value_amount = (value * amount).round(2) # rescue 0 + total_usd += value_amount # rescue 0 + else + value = icpswap_pool_data_raw.split("record {").select{|pool| !pool.scan(canister_id).empty? && !pool.scan(icp_canister_id).empty? }[0].scan(/token0Price = [+-]?([1-9]\d*|0)(\.\d+)?/).join.to_f # rescue nil + value_amount = (value * amount).round(2) # rescue 0 + total_usd += value_amount # rescue 0 + end + end + return total_usd.round(2) + end + end diff --git a/app/policies/metapurse_policy.rb b/app/policies/metapurse_policy.rb index cb39f4e6..3807b3b9 100644 --- a/app/policies/metapurse_policy.rb +++ b/app/policies/metapurse_policy.rb @@ -33,6 +33,10 @@ class MetapursePolicy true end + def data? + true + end + def create? @user.admin? || @user.signed_in? end diff --git a/app/views/metapurses/data.html.haml b/app/views/metapurses/data.html.haml new file mode 100644 index 00000000..f3c89d8f --- /dev/null +++ b/app/views/metapurses/data.html.haml @@ -0,0 +1,23 @@ +%p#notice= notice + +%p + %b Name: + = @metapurse.name + +%p + %b Data: + %pre= @metapurse.data + +-# - @metapurse.data.each_line do |record| + %p + = canister_id = record.split[0] + = amount = record.split[1].gsub(",","").to_f + +-# - icpswap_pool_data_raw = File.read("./pool_data_raw.txt") + +- if policy(@metapurse).edit? + = link_to 'Edit', edit_metapurse_path(@metapurse) + \| += link_to 'Show Value', metapurse_path(@metapurse) +\| += link_to 'Back', metapurses_path diff --git a/app/views/metapurses/index.html.haml b/app/views/metapurses/index.html.haml index 0d7c8c41..6272cc63 100644 --- a/app/views/metapurses/index.html.haml +++ b/app/views/metapurses/index.html.haml @@ -13,7 +13,9 @@ %tbody - @metapurses.each do |metapurse| %tr - %td= link_to metapurse.name, metapurse + %td + = link_to metapurse.name, metapurse + = "#{number_to_currency metapurse.total_usd} USD" -# %td= metapurse.data - if policy(metapurse).update? -# %td= link_to 'Show', metapurse diff --git a/app/views/metapurses/show.html.haml b/app/views/metapurses/show.html.haml index a5118206..0739e918 100644 --- a/app/views/metapurses/show.html.haml +++ b/app/views/metapurses/show.html.haml @@ -23,15 +23,18 @@ - icp_canister_id = "ryjl3-tyaaa-aaaaa-aaaba-cai" -# = icpswap_pool_data_raw.split("record {").select{|pool| !pool.scan(canister_id).empty? && !pool.scan(icp_canister_id).empty? }[0] - if canister_id == icp_canister_id - ICP + * - value = @metapurse.icp_usd + = "#{number_to_currency value.round(2)}" + ICP - value_amount = (value * amount).round(2) rescue 0 $#{number_with_delimiter(value_amount)} USD - total_value += value_amount rescue 0 - else - = icpswap_pool_data_raw.split("record {").select{|pool| !pool.scan(canister_id).empty? && !pool.scan(icp_canister_id).empty? }[0].scan(/token0Symbol = \"(.*)\"; /)[0][0] rescue nil - value = icpswap_pool_data_raw.split("record {").select{|pool| !pool.scan(canister_id).empty? && !pool.scan(icp_canister_id).empty? }[0].scan(/token0Price = [+-]?([1-9]\d*|0)(\.\d+)?/).join.to_f rescue nil + * = "$#{value.round(2)}" + = icpswap_pool_data_raw.split("record {").select{|pool| !pool.scan(canister_id).empty? && !pool.scan(icp_canister_id).empty? }[0].scan(/token0Symbol = \"(.*)\"; /)[0][0] rescue nil - value_amount = (value * amount).round(2) rescue 0 $#{number_with_delimiter(value_amount)} USD - total_value += value_amount rescue 0 @@ -43,4 +46,5 @@ - if policy(@metapurse).edit? = link_to 'Edit', edit_metapurse_path(@metapurse) \| += link_to 'View data', data_metapurse_path(@metapurse) = link_to 'Back', metapurses_path diff --git a/config/routes.rb b/config/routes.rb index 18f97c3d..a8ed9378 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -1,5 +1,9 @@ Rails.application.routes.draw do - resources :metapurses + resources :metapurses do + member do + get 'data' + end + end get '/games', to: "visitors#games_index" resources :rooms do resources :messages