-
Instala la dependencia con assets/$ npm install --save jquery
-
El fichero
package.json
se actualizará -
Puede que necesites cambiar el fichero
brunch-config.js
. Por ejemplo con jQuery si necesitas el$
disponible en todos los sitiosnpm: { enabled: true, globals: { $: 'jquery', jQuery: 'jquery' } }
Si en cambio sólo lo vas a usar en un par de sitios puntuales te puedes apañar con un:
import jQuery from "jquery" // import $ from "jquery"
Repo.insert(%User{name: "Ivan"}) #=> {:ok, u} || {:error, u}
Repo.all(User)
Repo.get(User, 1)
Repo.get_by(User, name: "Ivan")
changeset = User.changeset(%User{}, attrs) |> Repo.insert()
changeset = Ecto.Changeset.put_change(changeset, %{name: "Ivan2"})
Ecto.Changeset.get_change(changeset, :name) #=> "Ivan2"
Repo.all(User) |> Repo.preload(:posts)
user = Repo.get(User, 1) |> Repo.preload(:posts)
Repo.one(from u in User, limit: 1, preload: :posts)
Ecto.assoc(user, :posts) |> Repo.all() # Devuelve sólo posts
Add assoc:
Ecto.build_assoc(user, :post) # Crea post con user_id = 1
|> Post.changset(%{title: "My post"})
|> Repo.insert()
Ecto.Changeset.put_change(changeset, :password_hash, "abc2encrypt")
from c in Category, order_by: c.name, select: {c.id, c.name}
conn
|> redirect(to: user_path(conn, :show, user))
|> put_flash(:notice, "Hello!") # Or :error
Plug.Conn
assign(conn, :current_user, user) #=> conn
get_session(conn, :user_id) #=> 123
halt(conn) #=> conn.halted => true
put_session(conn, :user_id, 123) #=> conn
delete_session(conn, :user_id) #=> conn
configure_session(conn, drop: true)
NOTA: Plug es un macro que comprueba si la conn
se ha detenido con
halted == true
cuando se llama a halt()
Module plugs
plug MyPlug, opt1: "value1"
defmodule MyPlug do
import Plug.Conn
def init(opts), do: opts[:opt1] || "default"
def call(conn, opts) do
opts #=> "value1"
conn # Change the conn as desired
end
end
Function plugs
plug :auth, opt1: "value1"
defp auth(conn, %{opt1: value}), do: conn
form_for @changeset, user_path(conn, :create), fn(f)->
label f, :name, "Nombre"
text_input f, :name, placeholder: "name", class: "cl"
error_tag f, :name
password_input f, :password
select f, :category_id, [{"Art", 1}], prompt: "Category"
submit "Enviar"
form_for @conn, session_path(conn, :create), [as: :session], fn(f)->
link "log out", to: session_path(conn, :delete, @current_user),
method: :delete
schema "videos" do
field :name, :string
end
create table("videos") do # alter table("videos")
add :user_id, references(:users, on_delete: :nothing)
# :nothing | :delete_all | :nilify_all
end
[javascript]
import socket from "./socket"
socket.connect()
let vidChannel = socket.channel("videos"+videoId)
vidChannel.join()
.receive("ok", resp => console.log("joined", resp))
.receive("error", reason => console.log("failed", reason))
vidChannel.on("ping", ({count})=>console.log("PING",count))
vidChannel.push("new_annotation", data)
vidChannel.on("new_annotation", (resp)=>{...})
[web/channels/user_socket.ex]
#TODO:
$ mix test test/rumbl/my_test.exs:12
defmodule Rumbl.VideoTest do
use Rumbl.DataCase # o ChannelCase o ConnCase
describe "comment" do
alias Rumbl.Videos.Video # Solo para el bloque
@tag login_as: "max"
test "success" do
conn = get conn, "/" # o get conn, video_path(conn, :index)
assert html_response(conn, 200) =~ "Welcome"
assert conn.halted
end
end
end
[player.js]
let Player = {
player: null,
init(arg1, arg2){
let onlyThisScope = 123
onlyThisScope # Return a value
},
}
export default Player
[other.js]
import Player from "./player"
Player.init("a","b") #=> 123