Skip to content

Instantly share code, notes, and snippets.

View Evshved's full-sized avatar
🌬️
Yes Yes No. I grabbed the wind.

Eugene Shved Evshved

🌬️
Yes Yes No. I grabbed the wind.
View GitHub Profile
@Evshved
Evshved / text.md
Created September 30, 2020 14:04 — forked from davydovanton/text.md
Рефакторинг сервис объекта с монадами и AR

https://t.me/pepegramming

Сегодня попался рельсовый код, в котором используются монады, сервисы и прочее. Решил сделать обзор с объяснением того, что в коде не нравится и что можно исправить.

Данный разбор основан только на личном опыте и избегает попытку написать самый идеальный код на свете. К сожалению пошарить ссылку на код не могу, потому что автор попросил опубликовать анонимно.

Исходные данные

Главная операция, которая вызывается из контроллера выглядит следующим образом:

[[{"0":[{"type":"bad","value":"\n\nclass Foo\n\n private def bar; end\n private def baz; end\n\nend\n\n"},{"type":"good","value":"\n\nclass Foo\n\n private\n\n def bar; end\n def baz; end\n\nend\n"}]}],[{"1":[{"type":"bad","value":"\n\nclass Foo\n\n private\n\n def bar; end\n def baz; end\n\nend\n\n"},{"type":"good","value":"\n\nclass Foo\n\n private def bar; end\n private def baz; end\n\nend\n"}]}],[{"2":[{"type":"bad","value":"\nalias_method :bar, :foo\nalias :bar :foo\n\n"},{"type":"good","value":"\nalias bar foo\n"}]}],[{"3":[{"type":"bad","value":"\nalias :bar :foo\nalias bar foo\n\n"},{"type":"good","value":"\nalias_method :bar, :foo\n"}]}],[{"4":[{"type":"bad","value":"\nfoo.save and return\n\n"},{"type":"bad","value":"\nif foo and bar\nend\n\n"},{"type":"good","value":"\nfoo.save && return\n\n"},{"type":"good","value":"\nif foo && bar\nend\n"}]}],[{"5":[{"type":"bad","value":"\nif foo and bar\nend\n\n"},{"type":"good","value":"\nfoo.save && return\n\n"},{"type":"good","value":"\nfoo.save and
caller: ["/Users/shved/.rvm/gems/ruby-2.5.1@mongo-test-call-site-l/gems/mongo-2.6.2/lib/mongo/monitoring/event/command_started.rb:97:in `new'",
"/Users/shved/.rvm/gems/ruby-2.5.1@mongo-test-call-site-l/gems/mongo-2.6.2/lib/mongo/monitoring/event/command_started.rb:97:in `generate'",
"/Users/shved/.rvm/gems/ruby-2.5.1@mongo-test-call-site-l/gems/mongo-2.6.2/lib/mongo/monitoring/publishable.rb:75:in `command_started'",
"/Users/shved/.rvm/gems/ruby-2.5.1@mongo-test-call-site-l/gems/mongo-2.6.2/lib/mongo/monitoring/publishable.rb:45:in `publish_command'",
"/Users/shved/.rvm/gems/ruby-2.5.1@mongo-test-call-site-l/gems/mongo-2.6.2/lib/mongo/server/connection.rb:143:in `dispatch'",
"/Users/shved/.rvm/gems/ruby-2.5.1@mongo-test-call-site-l/gems/mongo-2.6.2/lib/mongo/operation/shared/executable.rb:34:in `block in dispatch_message'",
"/Users/shved/.rvm/gems/ruby-2.5.1@mongo-test-call-site-l/gems/mongo-2.6.2/lib/mongo/server/connection_pool.rb:110:in `with_connection'",
"/Users/shved/.rvm/gems/ruby-2.5.1@mongo-te
"data-from-10-12-18-to-10-12-18-all data"
@Evshved
Evshved / gist:04f2560003cfdda6858b4bd568571c96
Created December 1, 2018 18:19
Relaunch rails via Applescript.
tell application "iTerm2"
tell first session of first tab of first window
write text "Relaunching Rails application..."
write text "echo Kill process on 3000 port!"
end tell
tell current window
create tab with default profile
tell current session
write text "kill -9 $(lsof -i tcp:3000 -t)"
end tell
FROM rubyroidlabs/rails:5.1.4-5
ARG BRANCH=master
ARG RAILS_ENV
ARG DEVISE_SECRET_KEY
ARG SECRET_KEY_BASE
ARG POSTGRES_DB
ARG POSTGRES_USER
ARG POSTGRES_PASSWORD
ARG POSTGRES_HOST
ARG POSTGRES_MAX_THREADS
FROM rubyroidlabs/rails:5.1.4-3
ARG BRANCH=master
ARG RAILS_ENV
ARG DEVISE_SECRET_KEY
ARG SECRET_KEY_BASE
ARG POSTGRES_DB
ARG FACEBOOK_KEY
ARG GOOGLE_CLIENT_ID
ARG GOOGLE_CLIENT_SECRET
ARG POSTGRES_USER
@Evshved
Evshved / same.js
Created August 7, 2018 18:18
Example for Igor
import React from 'react';
import PropTypes from 'prop-types';
import './NewIssue.css';
import { connect } from 'react-redux';
import * as issueActions from '../../resources/issues/issues.actions';
const NewIssue = (props) => {
return(
<button onClick={props.newIssue} className="btn btn-primary" type="button">
New issue
require 'logger'
class FetchContentAdDomainsWorker
include Sidekiq::Worker
extend IntegrationsWrapper
URL = 'https://rest.content.ad/reports/publisher?output=json'.freeze
sidekiq_options retry: 3, queue: :integrations, backtrace: true
wrap_over :network_setting, :content_ad
describe '#show' do
let(:network_name) { IntegrationsDatum.network_types.first[0] }
let(:network_number) { IntegrationsDatum.network_types.first[1] }
let(:params) { {q: {created_at_gteq: Time.zone.now}} }
let(:url) { integrations_datum_path(id: network_name.to_sym,
q: params[:q].merge({ network_type_eq: network_number,
fell_eq: true })) }
it 'expect redirect when sign in from user' do
visit url
expect(response.body).to eq('')