Skip to content

Instantly share code, notes, and snippets.

Jebin bvjebin

Block or report user

Report or block bvjebin

Hide content and notifications from this user.

Learn more about blocking users

Contact Support about this user’s behavior.

Learn more about reporting abuse

Report abuse
View GitHub Profile
@bvjebin
bvjebin / _app.jsx
Last active Apr 20, 2019
Medium article - service worker registration
View _app.jsx
import React from "react";
import App, { Container } from "next/app";
import { Provider } from "react-redux";
import MainLayout from "../components/Layouts/MainLayout";
class MyApp extends App {
static async getInitialProps({ Component, ctx }) {
return {}
}
@bvjebin
bvjebin / service_worker.js
Last active Apr 20, 2019
Medium article - service worker code
View service_worker.js
import * as routing from "workbox-routing";
import * as core from "workbox-core";
import * as strategies from "workbox-strategies";
import * as expiration from "workbox-cache-expiration";
import * as cacheableResponse from "workbox-cacheable-response";
self.addEventListener("sync", function (event) {
console.log("Event from sw: ", event);
});
self.addEventListener("install", function () {
@bvjebin
bvjebin / send_email.ex
Created Aug 31, 2018
send email with bamboo for medium post
View send_email.ex
def send_email(email, csv_path, zip_path) do
attachments = if !is_nil(zip_path) do
[Bamboo.Attachment.new(zip_path)]
else
[]
end
attachments = [Bamboo.Attachment.new(csv_path) | attachments]
new_email(attachments: attachments)
|> subject("Your download is here")
|> from("support@example.com")
@bvjebin
bvjebin / create_zip.ex
Created Aug 31, 2018
Create zip in elixir for medium post
View create_zip.ex
def create_zip(path) do
old_path = File.cwd!
File.cd! path
:zip.create("images.zip", ['images'], [{:cwd, path}])
File.cd! old_path
path<>"/images.zip"
end
@bvjebin
bvjebin / export _images_to_zip.ex
Last active Aug 31, 2018
export_images_to_zip for medium post
View export _images_to_zip.ex
def export_images_to_zip(data, path) do
images_to_download = Enum.map(data, fn datum ->
%{url: datum.image, name: datum.name}
end)
case images_to_download do
[] -> nil
list ->
zip_path = path<>"/images"
:ok = File.mkdir_p!(zip_path)
download_images_in_batch(list, zip_path)
@bvjebin
bvjebin / export_to_csv.ex
Last active Aug 31, 2018
Export to csv for medium post
View export_to_csv.ex
def export_to_csv(data, path) do
file_path = path<>"/export.csv"
result = Enum.map(data, fn item ->
"#{item.name}\",#{item.email},\"#{item.image}"
end)
result = ["Name,Email,Image Url" | result]
File.write!(file_path, Enum.join(result, "\r\n"), [:utf8])
file_path
end
View export_download_zip_email.ex
def export_download_zip_email(data, email) do
tmp_folder_name = "users_"<>Random.random_string(8)
path = File.cwd!<>"/tmp/"<>tmp_folder_name
:ok = File.mkdir_p!(path)
csv_path = export_to_csv(data, path)
download_images(data, path)
zip_path = create_zip(data, path)
send_email(email, csv_path, zip_path)
File.rm_rf path
end
@bvjebin
bvjebin / export_email.ex
Last active Aug 31, 2018
handle cast code for medium post
View export_email.ex
@agent :export_email_state
def start_link() do
GenServer.start_link(__MODULE__, %{}, [name: __MODULE__])
Agent.start_link(fn -> Map.new end, name: @agent)
end
def handle_cast({:export_email, {data, email}}, state) do
key = email
job_status = Agent.get(@agent, fn agent_state -> Map.get(agent_state, key) end)
@bvjebin
bvjebin / user_data.ex
Last active Aug 31, 2018
Example user data for medium post
View user_data.ex
[
%Example.User{
name: "John",
email: "john@example.com",
image: "https://images.example.com/uploads/eaa88003-fa4e-4ba7-afb1-787dcdea72af.jpg"
inserted_at: ~N[2017-10-19 21:22:45.683899],
updated_at: ~N[2017-11-02 14:04:55.616742]
}
]
@bvjebin
bvjebin / user_controller.ex
Last active Aug 31, 2018
Export API Endpoint
View user_controller.ex
defmodule Example.AdminController do
use Example, :controller
def export(conn, %{"email" => email}) do
Example.User.get_dump()
|> Example.Export.export_and_email(email)
json(conn, %{
success: true,
message: "Your request is accepted. Data will be emailed shortly"
})
You can’t perform that action at this time.