Skip to content

Commit efa20b4

Browse files
committed
Version 0.3.1 release
1 parent 5d32c80 commit efa20b4

File tree

4 files changed

+48
-63
lines changed

4 files changed

+48
-63
lines changed

CHANGELOG.md

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,22 @@
11
# CHANGELOG
22

3+
## Version 0.3.1
4+
5+
### Improvements
6+
7+
- Adds `build_slug/2` to accept the original `changeset` as the second argument, it still receives list of `sources` as the first argument
8+
- Updates `build_slug/1` inner logic
9+
10+
### Documentation
11+
12+
- Updates `README.md` with the new example
13+
- Updates docs to handle new changes
14+
- Updates `CONTRIBUTING.md` with 'Development' section
15+
16+
### Testing
17+
18+
- Adds new test cases to cover `build_slug/2`
19+
320

421
## Version 0.3.0
522

CONTRIBUTING.md

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,19 @@
11
# Contributing to EctoAutoslugField
22

33
## Pull Requests Welcome
4-
1. Fork ecto_autoslug_field
4+
1. Fork `ecto_autoslug_field`
55
2. Create a topic branch
66
3. Make logically-grouped commits with clear commit messages
77
4. Push commits to your fork
8-
5. Open a pull request against ecto_autoslug_field/master
8+
5. Open a pull request against `ecto_autoslug_field/master`
9+
10+
## Development
11+
12+
Please, make sure that all these commands succeed before pushing anything:
13+
14+
1. `mix test`
15+
2. `mix credo --strict`
16+
3. `mix dialyzer` (it may take long on the first run)
917

1018
## Issues
1119

README.md

Lines changed: 20 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -49,79 +49,39 @@ Optional:
4949
The simplest example:
5050

5151
```elixir
52-
defmodule NameSlug do
53-
use EctoAutoslugField.Slug, from: :name, to: :slug
52+
defmodule EctoSlugs.Blog.Article.TitleSlug do
53+
use EctoAutoslugField.Slug, from: :title, to: :slug
5454
end
5555

56-
defmodule User do
56+
defmodule EctoSlugs.Blog.Article do
5757
use Ecto.Schema
5858
import Ecto.Changeset
59+
alias EctoSlugs.Blog.Article
60+
alias EctoSlugs.Blog.Article.TitleSlug
5961

60-
schema "users" do
61-
field :name, :string
62-
field :slug, NameSlug.Type
63-
end
64-
65-
@required_fields ~w(name)
66-
@optional_fields ~w(slug)
67-
68-
def changeset(model, params \\ :empty) do
69-
model
70-
|> cast(params, @required_fields, @optional_fields)
71-
|> NameSlug.maybe_generate_slug
72-
|> NameSlug.unique_constraint
73-
end
74-
end
75-
```
76-
77-
More complex example:
78-
79-
```elixir
80-
defmodule ComplexSlug do
81-
use EctoAutoslugField.Slug, to: :slug
82-
83-
def get_sourses(changeset, _opts) do
84-
# This function is used to get sources to build slug from:
85-
base_fields = [:title]
86-
87-
if get_change(changeset, :breaking, false) do
88-
base_fields ++ ["breaking"]
89-
else
90-
base_fields
91-
end
92-
end
62+
schema "blog_articles" do
63+
field :breaking, :boolean, default: false
64+
field :content, :string
65+
field :title, :string
9366

94-
def build_slug(sources, _changeset) do
95-
# Custom slug building rule:
96-
sources
97-
|> Enum.join("-")
98-
|> Slugger.slugify_downcase
99-
|> String.replace("-", "+")
100-
end
101-
end
67+
field :slug, TitleSlug.Type
10268

103-
defmodule Article do
104-
use Ecto.Schema
105-
import Ecto.Changeset
106-
107-
schema "articles" do
108-
field :title, :string
109-
field :breaking, :boolean
110-
field :slug, ComplexSlug.Type
69+
timestamps()
11170
end
11271

113-
@required_fields ~w(title breaking)
114-
@optional_fields ~w(slug)
115-
116-
def changeset(model, params \\ :empty) do
117-
model
118-
|> cast(params, @required_fields, @optional_fields)
119-
|> ComplexSlug.maybe_generate_slug
120-
|> ComplexSlug.unique_constraint
72+
def changeset(%Article{} = article, attrs) do
73+
article
74+
|> cast(attrs, [:title, :content, :breaking])
75+
|> validate_required([:title, :content])
76+
|> unique_constraint(:title)
77+
|> TitleSlug.maybe_generate_slug
78+
|> TitleSlug.unique_constraint
12179
end
12280
end
12381
```
12482

83+
More complex examples are cover in [this tutorial](https://medium.com/wemake-services/creating-slugs-for-ecto-schemas-7349513410f0).
84+
12585
## Changelog
12686

12787
See [CHANGELOG.md](https://github.com/sobolevn/ecto_autoslug_field/blob/master/CHANGELOG.md).

mix.exs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
defmodule EctoAutoslugField.Mixfile do
22
use Mix.Project
33

4-
@version "0.3.0"
4+
@version "0.3.1"
55
@url "https://github.com/sobolevn/ecto_autoslug_field"
66

77
def project do

0 commit comments

Comments
 (0)