Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Proyecto RoR - API Messuri #1

Open
wants to merge 52 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
52 commits
Select commit Hold shift + click to select a range
8878d01
Instalar Bootstrap, JQuery, y PopperJs
DanteAlonsoHT Oct 27, 2021
209d0a3
Añadir ruta hacia el inicio de la app
DanteAlonsoHT Oct 27, 2021
ee15ad6
Importar Bootstrap y Styles.scss en archivo JavaScript principal
DanteAlonsoHT Oct 27, 2021
4308c15
Crear Styles.scss para importar estilos de Bootstrap
DanteAlonsoHT Oct 27, 2021
3937b50
Crear carpeta css in carpeta javascript
DanteAlonsoHT Oct 27, 2021
ebdbb53
Crear home_controller para la lógica de la ruta de inicio
DanteAlonsoHT Oct 27, 2021
5511dfc
Inicializar la vista de la ruta de inicio
DanteAlonsoHT Oct 27, 2021
f6f2cc7
Inicializar home_helper para resuumir la lógica de programaciión en l…
DanteAlonsoHT Oct 27, 2021
b681043
Inicializar home_controller_test para los test unitarios de las funci…
DanteAlonsoHT Oct 27, 2021
6024211
AÃgregar gema Redis al proyecto para el uso de ActionCable
DanteAlonsoHT Oct 27, 2021
b1c0f4c
Crear el método para consumir la API y extraer los precios por cripto…
DanteAlonsoHT Oct 27, 2021
2892789
Generar las funciones para separar la lógica y extraer los precios in…
DanteAlonsoHT Oct 27, 2021
e0b376f
Crear el canal de comunicación (websocket) CryptoValue
DanteAlonsoHT Oct 27, 2021
e4a0c49
Crear el método de actualización en tiempo real
DanteAlonsoHT Oct 27, 2021
e91ff79
Crear archivo JavaScript para la función de calcular rendimientos
DanteAlonsoHT Oct 27, 2021
2747944
Importar las funciones de calcular rendimientos en el archivo princip…
DanteAlonsoHT Oct 27, 2021
2be3f26
Agregar clases con Bootstrap, y arreglar el layout de los componentes…
DanteAlonsoHT Oct 27, 2021
8ce4729
Configurar Linters para código CSS & HTML
DanteAlonsoHT Oct 28, 2021
7105078
Configurar Linters para código JavaScript
DanteAlonsoHT Oct 28, 2021
94cab23
Configurar Linters para código en Ruby
DanteAlonsoHT Oct 28, 2021
6188b32
Añadir formulario oculto para exportar datos de tabla
DanteAlonsoHT Oct 28, 2021
bcdd889
Arreglar código Ruby de acuerdo a Rubocop y Agregar ruta Post para ex…
DanteAlonsoHT Oct 28, 2021
2dc5724
Agregar e instalar gemas 'rdoc' y 'rspec'
DanteAlonsoHT Oct 28, 2021
7ef562b
Arreglar websocket - canal cypto_value
DanteAlonsoHT Oct 28, 2021
41230cb
Arreglar código CSS y SASS de acuerdo a Stylinters
DanteAlonsoHT Oct 28, 2021
671222f
Arreglar layout principal del view de la aplicación
DanteAlonsoHT Oct 28, 2021
38852f5
Remover lineas aosoletas de código en application.js
DanteAlonsoHT Oct 28, 2021
fb86af2
Simular datos en tiempo real provinientes de Messari API
DanteAlonsoHT Oct 28, 2021
34befec
Agregar helpers para resumir lógica al manejar datos de Messari API
DanteAlonsoHT Oct 28, 2021
c58b004
Renderizar formulario oculto y agregar inputs/outputs para calcular r…
DanteAlonsoHT Oct 28, 2021
1e87726
Agregar lógica para exportar archivos en formato .xls .csv .json
DanteAlonsoHT Oct 28, 2021
d4eaa0e
Configurar rspec para empezar pruebas unitarias
DanteAlonsoHT Oct 28, 2021
2ff7753
Instalar rspec y sus archivos
DanteAlonsoHT Oct 28, 2021
58d5b10
Agregar pruebas unitarias para Views
DanteAlonsoHT Oct 28, 2021
75eee4a
Agregar pruebas unitarias para Requests
DanteAlonsoHT Oct 28, 2021
aee6b0b
Agregar pruebas unitarias para Helpers
DanteAlonsoHT Oct 28, 2021
4dc022d
Cargar imagen general de la app para mostrar en README.md
DanteAlonsoHT Oct 28, 2021
df23b02
Crear descriptivo archivo README
DanteAlonsoHT Oct 28, 2021
3d72c03
Agregar comentarios - documentación técnica en Home Controller
DanteAlonsoHT Oct 28, 2021
66a8c8e
Arreglar funciones en botones con JavaScript para calcular ganancias …
DanteAlonsoHT Oct 28, 2021
09e26c7
Agregar algunas clases de Bootstrap para mejorar views en Home y Appl…
DanteAlonsoHT Oct 28, 2021
4d74491
Agregadas más clases de Bootstrap para FormToExport y Home Views
DanteAlonsoHT Oct 28, 2021
84f9bca
Agregar comentarios para documentar el Home Helper
DanteAlonsoHT Oct 28, 2021
4fe77c9
Agregar comentarios para documentar Home & Form Views
DanteAlonsoHT Oct 28, 2021
f258751
Agregar comentarios para documentar códigoJavaScript para las funcio…
DanteAlonsoHT Oct 28, 2021
b32bc0d
Agregar más tests unitarios para Home View
DanteAlonsoHT Oct 28, 2021
f005549
Agregar tests unitarios para WebSockets, testeando el Canal CryptoValue
DanteAlonsoHT Oct 28, 2021
e4b9e92
Habilitar uso de API desde Home Controller
DanteAlonsoHT Oct 28, 2021
a202dfc
Habilitar uso de API para actualización en tiempo real
DanteAlonsoHT Oct 28, 2021
ee986aa
Delete .eslintrc.json
DanteAlonsoHT Oct 28, 2021
e127bed
Update README.md
DanteAlonsoHT Oct 28, 2021
6707d78
Create README.md
DanteAlonsoHT Oct 28, 2021
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
37 changes: 37 additions & 0 deletions .github/workflows/linters.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
name: Linters

on: pull_request

env:
FORCE_COLOR: 1

jobs:
eslint:
name: ESLint
runs-on: ubuntu-18.04
steps:
- uses: actions/checkout@v2
- uses: actions/setup-node@v1
with:
node-version: "12.x"
- name: Setup ESLint
run: |
npm install --save-dev [email protected] [email protected] [email protected] [email protected]
[ -f .eslintrc.json ] || wget https://raw.githubusercontent.com/microverseinc/linters-config/master/javascript/.eslintrc.json
- name: ESLint Report
run: npx eslint .
stylelint:
name: Stylelint
runs-on: ubuntu-18.04
steps:
- uses: actions/checkout@v2
- uses: actions/setup-node@v1
with:
node-version: "12.x"
- name: Setup Stylelint
run: |
npm install --save-dev [email protected] [email protected] [email protected] [email protected]
[ -f .stylelintrc.json ] || wget https://raw.githubusercontent.com/microverseinc/linters-config/master/javascript/.stylelintrc.json
- name: Stylelint Report
run: npx stylelint "**/*.{css,scss}"

1 change: 1 addition & 0 deletions .rspec
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
--require spec_helper
63 changes: 63 additions & 0 deletions .rubocop.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
AllCops:
NewCops: enable
Exclude:
- "db/**/*"
- "bin/*"
- "config/**/*"
- "Guardfile"
- "Rakefile"
- "node_modules/**/*"
- "app/channels/**/*"

DisplayCopNames: true

Layout/LineLength:
Max: 120
Metrics/MethodLength:
Include:
- "app/controllers/*"
- "app/models/*"
Max: 20
Metrics/AbcSize:
Include:
- "app/controllers/*"
- "app/models/*"
Max: 50
Metrics/ClassLength:
Max: 150
Metrics/BlockLength:
IgnoredMethods: ['describe']
Max: 70

Style/Documentation:
Enabled: false
Style/ClassAndModuleChildren:
Enabled: false
Style/EachForSimpleLoop:
Enabled: false
Style/AndOr:
Enabled: false
Style/DefWithParentheses:
Enabled: false
Style/FrozenStringLiteralComment:
EnforcedStyle: never

Layout/HashAlignment:
EnforcedColonStyle: key
Layout/ExtraSpacing:
AllowForAlignment: false
Layout/MultilineMethodCallIndentation:
Enabled: true
EnforcedStyle: indented
Lint/RaiseException:
Enabled: false
Lint/StructNewOverride:
Enabled: false
Style/HashEachMethods:
Enabled: false
Style/HashTransformKeys:
Enabled: false
Style/HashTransformValues:
Enabled: false
Layout/EndOfLine:
Enabled: False
10 changes: 10 additions & 0 deletions .stylelintrc.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
{
"extends": ["stylelint-config-standard"],
"plugins": ["stylelint-scss", "stylelint-csstree-validator"],
"rules": {
"at-rule-no-unknown": null,
"scss/at-rule-no-unknown": true,
"csstree/validator": true
},
"ignoreFiles": ["build/**", "dist/**", "**/reset*.css", "**/bootstrap*.css", "doc/**"]
}
15 changes: 12 additions & 3 deletions Gemfile
Original file line number Diff line number Diff line change
Expand Up @@ -18,19 +18,26 @@ gem 'turbolinks', '~> 5'
# Build JSON APIs with ease. Read more: https://github.com/rails/jbuilder
gem 'jbuilder', '~> 2.7'
# Use Redis adapter to run Action Cable in production
# gem 'redis', '~> 4.0'
gem 'redis', '~> 4.0'
# Use Active Model has_secure_password
# gem 'bcrypt', '~> 3.1.7'
# Use rubocop is a Ruby static code analyzer (a.k.a. linter) and code formatter
gem 'rubocop', '>= 1.0', '< 2.0'
# Use rdoc to create the technical documentation for Ruby projects
gem 'rdoc', '~> 6.2', '>= 6.2.1'

# Use Active Storage variant
# gem 'image_processing', '~> 1.2'

# Use rest-client to use HTTP requests using Ruby
gem 'rest-client', '>= 2.1.0'

# Reduces boot times through caching; required in config/boot.rb
gem 'bootsnap', '>= 1.4.4', require: false

group :development, :test do
# Call 'byebug' anywhere in the code to stop execution and get a debugger console
gem 'byebug', platforms: [:mri, :mingw, :x64_mingw]
gem 'byebug', platforms: %i[mri mingw x64_mingw]
end

group :development do
Expand All @@ -47,7 +54,9 @@ group :test do
gem 'selenium-webdriver'
# Easy installation and use of web drivers to run system tests with browsers
gem 'webdrivers'
# Rspec to test rails applications
gem 'rspec-rails', '~> 5'
end

# Windows does not include zoneinfo files, so bundle the tzinfo-data gem
gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby]
gem 'tzinfo-data', platforms: %i[mingw mswin x64_mingw jruby]
61 changes: 61 additions & 0 deletions Gemfile.lock
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,7 @@ GEM
zeitwerk (~> 2.3)
addressable (2.8.0)
public_suffix (>= 2.0.2, < 5.0)
ast (2.4.2)
bindex (0.8.1)
bootsnap (1.9.1)
msgpack (~> 1.0)
Expand All @@ -79,10 +80,16 @@ GEM
childprocess (4.1.0)
concurrent-ruby (1.1.9)
crass (1.0.6)
diff-lcs (1.4.4)
domain_name (0.5.20190701)
unf (>= 0.0.5, < 1.0.0)
erubi (1.10.0)
ffi (1.15.4-x64-mingw32)
globalid (0.5.2)
activesupport (>= 5.0)
http-accept (1.7.0)
http-cookie (1.0.4)
domain_name (~> 0.5)
i18n (1.8.10)
concurrent-ruby (~> 1.0)
jbuilder (2.11.2)
Expand All @@ -95,12 +102,19 @@ GEM
marcel (1.0.2)
matrix (0.4.2)
method_source (1.0.0)
mime-types (3.3.1)
mime-types-data (~> 3.2015)
mime-types-data (3.2021.0901)
mini_mime (1.1.2)
minitest (5.14.4)
msgpack (1.4.2)
netrc (0.11.0)
nio4r (2.5.8)
nokogiri (1.12.5-x64-mingw32)
racc (~> 1.4)
parallel (1.21.0)
parser (3.0.2.0)
ast (~> 2.4.1)
public_suffix (4.0.6)
puma (5.5.2)
nio4r (~> 2.0)
Expand Down Expand Up @@ -138,9 +152,47 @@ GEM
method_source
rake (>= 0.13)
thor (~> 1.0)
rainbow (3.0.0)
rake (13.0.6)
rdoc (6.3.2)
redis (4.5.1)
regexp_parser (2.1.1)
rest-client (2.1.0-x64-mingw32)
ffi (~> 1.9)
http-accept (>= 1.7.0, < 2.0)
http-cookie (>= 1.0.2, < 2.0)
mime-types (>= 1.16, < 4.0)
netrc (~> 0.8)
rexml (3.2.5)
rspec-core (3.10.1)
rspec-support (~> 3.10.0)
rspec-expectations (3.10.1)
diff-lcs (>= 1.2.0, < 2.0)
rspec-support (~> 3.10.0)
rspec-mocks (3.10.2)
diff-lcs (>= 1.2.0, < 2.0)
rspec-support (~> 3.10.0)
rspec-rails (5.0.2)
actionpack (>= 5.2)
activesupport (>= 5.2)
railties (>= 5.2)
rspec-core (~> 3.10)
rspec-expectations (~> 3.10)
rspec-mocks (~> 3.10)
rspec-support (~> 3.10)
rspec-support (3.10.2)
rubocop (1.22.3)
parallel (~> 1.10)
parser (>= 3.0.0.0)
rainbow (>= 2.2.2, < 4.0)
regexp_parser (>= 1.8, < 3.0)
rexml
rubocop-ast (>= 1.12.0, < 2.0)
ruby-progressbar (~> 1.7)
unicode-display_width (>= 1.4.0, < 3.0)
rubocop-ast (1.12.0)
parser (>= 3.0.1.1)
ruby-progressbar (1.11.0)
rubyzip (2.3.2)
sass-rails (6.0.0)
sassc-rails (~> 2.1, >= 2.1.1)
Expand Down Expand Up @@ -174,6 +226,10 @@ GEM
concurrent-ruby (~> 1.0)
tzinfo-data (1.2021.5)
tzinfo (>= 1.0.0)
unf (0.1.4)
unf_ext
unf_ext (0.0.8-x64-mingw32)
unicode-display_width (2.1.0)
web-console (4.1.0)
actionview (>= 6.0.0)
activemodel (>= 6.0.0)
Expand Down Expand Up @@ -206,6 +262,11 @@ DEPENDENCIES
puma (~> 5.0)
rack-mini-profiler (~> 2.0)
rails (~> 6.1.4)
rdoc (~> 6.2, >= 6.2.1)
redis (~> 4.0)
rest-client (>= 2.1.0)
rspec-rails (~> 5)
rubocop (>= 1.0, < 2.0)
sass-rails (>= 6)
selenium-webdriver
sqlite3 (~> 1.4)
Expand Down
115 changes: 102 additions & 13 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,24 +1,113 @@
# README
![](https://img.shields.io/badge/Disruptive_Studio-blue)
![](https://img.shields.io/badge/Ruby_on_Rails-red)
# Real-Time API Cryptomonedas usando Messuri API (Ruby on Rails)

This README would normally document whatever steps are necessary to get the
application up and running.
Esta aplicación simula calcular los rendimientos anuales que se tendrían si se inviertiera en las siguientes criptomonedas (BTC, ETH, ADA) con rendimientos mensuales de (5%, 4.2%, 1%) respectivamente, también usa websockets ([ActionCable](https://guides.rubyonrails.org/v6.0/action_cable_overview.html)) para consumir una API ([rest-client](https://rubygems.org/gems/rest-client/versions/1.8.0)) en tiempo real usando funciones asíncronas, cada 120 segundos la tabla se va actualizando (prueba gratuita de [Messuri API](https://messari.io/api) permite 1000 peticiones diarias máximo). Los datos se pueden visualizar en una tabla, y estos datos también pueden ser exportados como archivos .xls, .csv, .json para su uso de manera local.

Things you may want to cover:
El código se encuentra comentado para su documentación técnicas y ayudar a la legibilidad del código, los comentarios han seguido una estructura de acuerdo al uso de la gema [rdoc](https://ruby.github.io/rdoc/)

* Ruby version
## Descargo de responsabilidad ⚠

* System dependencies
En esta aplicación no se solicita dinero, ni es una fuente confiable para saber las ganancias reales al invertir en criptomonedas.

* Configuration
## Screenshots

* Database creation
<center>
<img src="./lib/assets/crypto_app_ss.PNG">
</center>

* Database initialization
## Dessarrollado con 🔨

* How to run the test suite
- Ruby
- Ruby on Rails
- JavaScript
- ActionCable, rest-client & rspec.
- Bootstrap
- Visual Studio Code
- Git
- GitHub

* Services (job queues, cache servers, search engines, etc.)
## Linters

* Deployment instructions
- Rubocop
- Stylelint

* ...
## Getting Started

Sigue los siguientes pasos para poder tener una copia de este proyecto de manera local:

### Install
- Para correr este proyecto en una máquina local, necesitas previamente instalar Ruby.
- Para usuarios de Windows, visitar [Ruby Installer](https://rubyinstaller.org/).
- Para usuarios de macOS y Linux, visitar [Ruby Official Site](https://www.ruby-lang.org/en/downloads/) y seguir las instrucciones de instalación.
- Una vez instalado Ruby, clona este repositorio utilizando el siguiente comando desde tu terminal ubicado desde desees conservar el repositorio:

```
git clone https://github.com/DanteAlonsoHT/RoR-CryptoApp-API.git
```

### Run App

Escribe en la terminal los siguientes comandos para empezar a correr la aplicación (Recordatorio: Recuerda estar posicionado desde el directorio raíz del proyecto):

- Para instalar todas las gemas usadas en el proyecto:

```
bundle install
```

- Para abrir un servidor utilizando Rails.

```
rails server
```

- Abre una ventana en tu navegador, y dirígete a la siguiente ruta `http://localhost:3000`

### Advertencia ⚠

Si tienes el siguiente error:

**"Webpacker::Manifest::MissingEntryError in ..."**

Corre la siguiente linea en tu terminal desde el directorio donde se encuentra alojado el repositorio.

```
rails webpacker:install
```

### Test App

Puedes testear la aplicación usando el siguiente comando.

```
bundle exec rspec
```

## Autor

👤 **Dante Alonso**

- GitHub: [@DanteAlonsoHT](https://github.com/DanteAlonsoHT)
- Twitter: [@dante_dante1](https://twitter.com/dante_dante1)
- LinkedIn: [Dante Alonso](https://www.linkedin.com/in/dante-alonso/)

## 🤝 Contribuciones

¡Contribuciones, errores, bugs, y características solicitas son bienvenidos!

Con confianza puedes solicitarlas en: [issues page](https://github.com/DanteAlonsoHT/RoR-CryptoApp-API/issues).

## Mostrar tu apoyo

Dame una ⭐️ si te gustó este proyecto!

## Agradecimientos

- A cualquiera que desee hacer uso de este repositorio 🔰
- Inspiración 💘
- [Disruptive Studio](https://www.disruptivestudio.com/) ⭐️

## 📝 Licencia

Este proyecto está licenciado con [MIT](https://opensource.org/licenses/MIT).
Loading