avatari 1.0.0 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +14 -1
- data/README.md +52 -7
- data/app/helpers/avatari/avatar_helper.rb +7 -4
- data/app/models/concerns/avatari/model.rb +5 -16
- data/app/uploaders/avatari/avatar_uploader.rb +15 -34
- data/app/views/avatari/_avatar.html.erb +2 -2
- data/lib/avatari/avatar.rb +43 -0
- data/lib/avatari/configuration.rb +26 -0
- data/lib/avatari/version.rb +1 -1
- data/lib/avatari.rb +4 -0
- data/lib/generators/avatari_generator.rb +15 -0
- data/lib/generators/templates/initializer.rb +12 -0
- data/vendor/assets/stylesheets/avatari.min.css +1 -1
- data/vendor/assets/stylesheets/avatari.sass +1 -17
- metadata +11 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 60d011079934dc01108eefb33a033e31c01153c97415b9c229cb3998bb72de2f
|
4
|
+
data.tar.gz: 8949fd84c3d2408942560fa9b109e1b99b5a1a238f748a459ff6970c413f10d9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 60ca63d49fd416274b0ed2f4e1233211bab53a88df33138f3f475b443c6b88b3d874edaa6e640d33c81851c161d8129793e9a8111be62ca0d5d8e8162c588d77
|
7
|
+
data.tar.gz: 14509ef9c79be2c99ed575f590098330745337df56b57d4bd1b7bb237f1bb83d0c20c27866169f69ca141f82db2256d5b1ffbed569d197ddfd43bb594df6aa71
|
data/CHANGELOG.md
CHANGED
@@ -4,6 +4,19 @@
|
|
4
4
|
|
5
5
|
* nothing yet
|
6
6
|
|
7
|
-
### 1.
|
7
|
+
### 1.1.0 - 2018/01/08
|
8
|
+
|
9
|
+
* features
|
10
|
+
* add generator with initializer to allow configuration of Avatari
|
11
|
+
* introduce `Avatari::Avatar` instances associated with ActiveRecord classes
|
12
|
+
* enhancements
|
13
|
+
* automatically fetch first letters from passed initials accessor
|
14
|
+
* allow to override the default version for a specific class
|
15
|
+
* customize image formats and preprocessed versions
|
16
|
+
* unrequire Fog & MiniMagick
|
17
|
+
* bugfixes
|
18
|
+
* fixed dependencies
|
19
|
+
|
20
|
+
### 1.0.0 - 2018/01/07
|
8
21
|
|
9
22
|
* initial release
|
data/README.md
CHANGED
@@ -14,6 +14,7 @@ Avatari extends [CarrierWave](https://github.com/carrierwaveuploader/carrierwave
|
|
14
14
|
* [CarrierWave](#carrierwave)
|
15
15
|
* [Models](#models)
|
16
16
|
* [Views](#views)
|
17
|
+
* [Configuration](#configuration)
|
17
18
|
* [To Do](#to-do)
|
18
19
|
* [Contributing](#contributing)
|
19
20
|
* [Contributors](#contributors)
|
@@ -44,6 +45,10 @@ If you always want to be up to date fetch the latest from GitHub in your `Gemfil
|
|
44
45
|
gem 'avatari', github: 'jonhue/avatari'
|
45
46
|
```
|
46
47
|
|
48
|
+
Now run the generator:
|
49
|
+
|
50
|
+
$ rails g avatari
|
51
|
+
|
47
52
|
## Usage
|
48
53
|
|
49
54
|
### Assets
|
@@ -60,7 +65,7 @@ To render Avatari avatars, you have to require the necessary assets to be added
|
|
60
65
|
*/
|
61
66
|
```
|
62
67
|
|
63
|
-
**Note:** You can override the [styles](vendor/assets/stylesheets/
|
68
|
+
**Note:** You can override the [styles](vendor/assets/stylesheets/avatari.sass) when you are looking for a custom integration.
|
64
69
|
|
65
70
|
### CarrierWave
|
66
71
|
|
@@ -68,9 +73,9 @@ To backup CarrierWave add an `avatar` column (`string`) to every ActiveRecord mo
|
|
68
73
|
|
69
74
|
The `avatar` attribute can be used like any other CarrierWave instance.
|
70
75
|
|
71
|
-
Avatari makes some assumptions about your CarrierWave integration. For Avatari to work properly, [Fog](https://github.com/carrierwaveuploader/carrierwave#fog) and [MiniMagick](https://github.com/minimagick/minimagick) have to be set up.
|
76
|
+
Avatari makes some assumptions about your CarrierWave integration. For Avatari to work properly after installation, [Fog](https://github.com/carrierwaveuploader/carrierwave#fog) and [MiniMagick](https://github.com/minimagick/minimagick) have to be set up. However they can be unrequired when [configuring](#configuration) Avatari.
|
72
77
|
|
73
|
-
Avatari preprocesses uploaded avatars:
|
78
|
+
Avatari preprocesses uploaded avatars by default:
|
74
79
|
|
75
80
|
* `raw` (800x800)
|
76
81
|
* `big` (350x350)
|
@@ -79,8 +84,6 @@ Avatari preprocesses uploaded avatars:
|
|
79
84
|
* `tiny` (50x50)
|
80
85
|
* `mini` (40x40)
|
81
86
|
|
82
|
-
It accepts images in `jpg`, `jpeg` and `png` format.
|
83
|
-
|
84
87
|
### Models
|
85
88
|
|
86
89
|
You can add Avatari to an ActiveRecord model:
|
@@ -98,11 +101,22 @@ class User < ApplicationRecord
|
|
98
101
|
avatari :initials
|
99
102
|
|
100
103
|
def initials
|
101
|
-
self.first_name
|
104
|
+
[self.first_name, self.last_name].join(' ')
|
102
105
|
end
|
103
106
|
end
|
104
107
|
```
|
105
108
|
|
109
|
+
By default Avatari manipulates the passed initials: only the first characters of the first two word will be used as initials:
|
110
|
+
|
111
|
+
```
|
112
|
+
'Jonas Hübotter'
|
113
|
+
=> 'JH'
|
114
|
+
'jonas hübotter'
|
115
|
+
=> 'JH'
|
116
|
+
'jonas hübotter and someone else'
|
117
|
+
=> 'JH'
|
118
|
+
```
|
119
|
+
|
106
120
|
**Note:** When [rendering](#views) an avatar and you did not provide the `initials` option + no avatar has been uploaded yet, the helper method will return `false`.
|
107
121
|
|
108
122
|
To add custom background colors to your placeholder avatars, pass the `colors` option:
|
@@ -117,6 +131,21 @@ For every instance of the class, Avatari will pick a sample of the array of prov
|
|
117
131
|
|
118
132
|
To attach a picked color to a given record permanently, you will also have to add an `avatar_color` string column to your database tables.
|
119
133
|
|
134
|
+
There is a variety of other options you can pass to further configure Avatari. Here are the defaults:
|
135
|
+
|
136
|
+
```ruby
|
137
|
+
class User < ApplicationRecord
|
138
|
+
avatari colors: ['#000000'], versions: {
|
139
|
+
mini: [40,40],
|
140
|
+
tiny: [50,50],
|
141
|
+
small: [75,75],
|
142
|
+
medium: [100,100],
|
143
|
+
big: [350,350],
|
144
|
+
raw: [800,800]
|
145
|
+
}, default_version: nil, process: [800,800], extension_whitelist: ['jpg','jpeg','png']
|
146
|
+
end
|
147
|
+
```
|
148
|
+
|
120
149
|
### Views
|
121
150
|
|
122
151
|
To render an avatar in your view, utilize the `avatari` helper method:
|
@@ -131,7 +160,23 @@ You can also specify a size:
|
|
131
160
|
= avatari current_user, :tiny
|
132
161
|
```
|
133
162
|
|
134
|
-
|
163
|
+
---
|
164
|
+
|
165
|
+
## Configuration
|
166
|
+
|
167
|
+
You can configure Avatari by passing a block to `configure`. This can be done in `config/initializers/avatari.rb`:
|
168
|
+
|
169
|
+
```ruby
|
170
|
+
Avatari.configure do |config|
|
171
|
+
config.default_version = :medium
|
172
|
+
end
|
173
|
+
```
|
174
|
+
|
175
|
+
**`default_version`** Default version to be used when rendering avatars. Takes a symbol. Defaults to `:medium`.
|
176
|
+
|
177
|
+
**`mini_magick`** Whether or not to include MiniMagick. Required for processing file versions. Takes a boolean. Defaults to `true`.
|
178
|
+
|
179
|
+
**`storage`** Choose you default storage option for CarrierWave. Accepts `:file` or `:fog`. Defaults to `:fog`.
|
135
180
|
|
136
181
|
---
|
137
182
|
|
@@ -1,11 +1,14 @@
|
|
1
1
|
module Avatari
|
2
2
|
module AvatarHelper
|
3
3
|
|
4
|
-
def avatari object, version =
|
4
|
+
def avatari object, version = nil
|
5
|
+
version ||= object.class.avatari_instance.default_version || ::Avatari.configuration.default_version
|
6
|
+
version = version.to_s
|
7
|
+
|
5
8
|
if object.avatar?
|
6
|
-
image_tag object.avatar.url, class: 'avatari avatari--' + version
|
7
|
-
elsif !object.class.
|
8
|
-
render partial: 'avatari/avatar', locals: { object: object, version: version
|
9
|
+
image_tag object.avatar.url, class: 'avatari avatari--' + version
|
10
|
+
elsif !object.class.avatari_instance.initials(object).nil?
|
11
|
+
render partial: 'avatari/avatar', locals: { object: object, version: version }
|
9
12
|
else
|
10
13
|
false
|
11
14
|
end
|
@@ -5,31 +5,20 @@ module Avatari
|
|
5
5
|
|
6
6
|
def avatari_color
|
7
7
|
if defined?(self.avatar_color)
|
8
|
-
self.update_attributes(avatar_color: self.class.
|
8
|
+
self.update_attributes(avatar_color: self.class.avatari_instance.colors.sample) if self.avatar_color.nil?
|
9
9
|
self.avatar_color
|
10
10
|
else
|
11
|
-
self.class.
|
11
|
+
self.class.avatari_instance.colors.sample
|
12
12
|
end
|
13
13
|
end
|
14
14
|
|
15
15
|
module ClassMethods
|
16
|
+
attr_accessor :avatari_instance
|
16
17
|
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
def avatari initials = nil, options = {}
|
21
|
-
defaults = {
|
22
|
-
colors: nil
|
23
|
-
}
|
24
|
-
defaults.merge! options
|
25
|
-
|
26
|
-
self.avatari_colors = options[:colors] || ['#000000']
|
27
|
-
self.avatari_initials = initials
|
28
|
-
|
29
|
-
serialize :avatar_color, Array
|
18
|
+
def avatari initials_method = nil, options = {}
|
19
|
+
self.avatari_instance = ::Avatari::Avatar.new initials_method, options
|
30
20
|
mount_uploader :avatar, ::Avatari::AvatarUploader
|
31
21
|
end
|
32
|
-
|
33
22
|
end
|
34
23
|
|
35
24
|
end
|
@@ -1,48 +1,29 @@
|
|
1
1
|
class Avatari::AvatarUploader < CarrierWave::Uploader::Base
|
2
2
|
|
3
|
-
|
4
|
-
include CarrierWave::MiniMagick
|
3
|
+
include CarrierWave::MiniMagick if ::Avatari.configuration&.mini_magick
|
5
4
|
|
6
|
-
|
7
|
-
storage :fog
|
5
|
+
storage ::Avatari.configuration&.storage || :fog
|
8
6
|
|
9
|
-
# Override the directory where uploaded files will be stored.
|
10
|
-
# This is a sensible default for uploaders that are meant to be mounted:
|
11
7
|
def store_dir
|
12
8
|
"uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
|
13
9
|
end
|
14
|
-
|
15
|
-
|
16
|
-
process scale: [800, 800]
|
17
|
-
|
18
|
-
# Create different versions of your uploaded files:
|
19
|
-
version :raw do
|
20
|
-
process resize_to_fill: [800, 800]
|
21
|
-
end
|
22
|
-
|
23
|
-
version :big, from_version: :raw do
|
24
|
-
process resize_to_fill: [350, 350]
|
25
|
-
end
|
26
|
-
|
27
|
-
version :medium, from_version: :big do
|
28
|
-
process resize_to_fill: [100, 100]
|
29
|
-
end
|
30
|
-
|
31
|
-
version :small, from_version: :medium do
|
32
|
-
process resize_to_fill: [75, 75]
|
10
|
+
def extension_whitelist
|
11
|
+
model.class.avatari_instance.extension_whitelist
|
33
12
|
end
|
34
13
|
|
35
|
-
|
36
|
-
|
37
|
-
end
|
14
|
+
process :avatari_processing
|
15
|
+
process :avatari_versioning
|
38
16
|
|
39
|
-
|
40
|
-
process
|
17
|
+
def avatari_processing
|
18
|
+
process(scale: model.class.avatari_instance.process) unless model.class.avatari_instance.process.nil?
|
41
19
|
end
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
20
|
+
def avatari_versioning
|
21
|
+
return if model.class.avatari_instance.versions.nil?
|
22
|
+
model.class.avatari_instance.versions.each do |name, size|
|
23
|
+
version name.to_sym do
|
24
|
+
process resize_to_fill: size.to_a
|
25
|
+
end
|
26
|
+
end
|
46
27
|
end
|
47
28
|
|
48
29
|
end
|
@@ -1,3 +1,3 @@
|
|
1
|
-
<div class="<%= 'avatari avatari--' + version %>" style="background: <%= object.avatari_color %>;">
|
2
|
-
<span class="initials"
|
1
|
+
<div class="<%= 'avatari avatari--' + version %>" style="width: <%= object.class.avatari_instance.versions[version.to_sym].first / 16 %>rem; height: <%= object.class.avatari_instance.versions[version.to_sym].last / 16 %>rem; background: <%= object.avatari_color %>;">
|
2
|
+
<span class="initials" style="font-size: <%= object.class.avatari_instance.versions[version.to_sym].first / 50 %>rem;"><%= object.class.avatari_instance.initials(object) %></span>
|
3
3
|
</div>
|
@@ -0,0 +1,43 @@
|
|
1
|
+
module Avatari
|
2
|
+
class Avatar
|
3
|
+
|
4
|
+
attr_accessor :initials_method
|
5
|
+
attr_accessor :colors
|
6
|
+
attr_accessor :versions
|
7
|
+
attr_accessor :default_version
|
8
|
+
attr_accessor :process
|
9
|
+
attr_accessor :extension_whitelist
|
10
|
+
|
11
|
+
def initialize initials_method = nil, options = {}
|
12
|
+
defaults = {
|
13
|
+
colors: ['#000000'],
|
14
|
+
versions: {
|
15
|
+
mini: [40,40],
|
16
|
+
tiny: [50,50],
|
17
|
+
small: [75,75],
|
18
|
+
medium: [100,100],
|
19
|
+
big: [350,350],
|
20
|
+
raw: [800,800]
|
21
|
+
},
|
22
|
+
default_version: nil,
|
23
|
+
process: [800,800],
|
24
|
+
extension_whitelist: ['jpg','jpeg','png']
|
25
|
+
}
|
26
|
+
options = defaults.merge! options
|
27
|
+
|
28
|
+
@initials_method = initials_method
|
29
|
+
@colors = options[:colors]
|
30
|
+
@versions = options[:versions]
|
31
|
+
@default_version = options[:default_version]
|
32
|
+
@process = options[:process]
|
33
|
+
@extension_whitelist = options[:extension_whitelist]
|
34
|
+
end
|
35
|
+
|
36
|
+
def initials object
|
37
|
+
raw = object.send(self.initials_method)
|
38
|
+
r = ''; raw.nil? ? nil : raw.split(' ').first(2).each { |n| r += n[0].upcase }
|
39
|
+
return r
|
40
|
+
end
|
41
|
+
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
module Avatari
|
2
|
+
|
3
|
+
class << self
|
4
|
+
attr_accessor :configuration
|
5
|
+
end
|
6
|
+
|
7
|
+
def self.configure
|
8
|
+
self.configuration ||= Configuration.new
|
9
|
+
yield configuration
|
10
|
+
end
|
11
|
+
|
12
|
+
class Configuration
|
13
|
+
|
14
|
+
attr_accessor :default_version
|
15
|
+
attr_accessor :mini_magick
|
16
|
+
attr_accessor :storage
|
17
|
+
|
18
|
+
def initialize
|
19
|
+
@default_version = :medium
|
20
|
+
@mini_magick = true
|
21
|
+
@storage = :fog
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
data/lib/avatari/version.rb
CHANGED
data/lib/avatari.rb
CHANGED
@@ -0,0 +1,15 @@
|
|
1
|
+
require 'rails/generators'
|
2
|
+
require 'rails/generators/migration'
|
3
|
+
|
4
|
+
class AvatariGenerator < Rails::Generators::Base
|
5
|
+
|
6
|
+
include Rails::Generators::Migration
|
7
|
+
|
8
|
+
source_root File.join File.dirname(__FILE__), 'templates'
|
9
|
+
desc 'Install avatari'
|
10
|
+
|
11
|
+
def create_initializer
|
12
|
+
template 'initializer.rb', 'config/initializers/avatari.rb'
|
13
|
+
end
|
14
|
+
|
15
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
Avatari.configure do |config|
|
2
|
+
|
3
|
+
# Default version to be used when rendering avatars. Takes a symbol.
|
4
|
+
# config.default_version = :medium
|
5
|
+
|
6
|
+
# Whether or not to include MiniMagick. Required for processing file versions. Takes a boolean.
|
7
|
+
# config.mini_magick = true
|
8
|
+
|
9
|
+
# Choose you default storage option for CarrierWave. Accepts `:file` or `:fog`.
|
10
|
+
# config.storage = :fog
|
11
|
+
|
12
|
+
end
|
@@ -1 +1 @@
|
|
1
|
-
.avatari
|
1
|
+
.avatari{display:flex;justify-content:center;align-items:center;border-radius:50%;-webkit-border-radius:50%;-moz-border-radius:50%}.avatari>.initials{line-height:1;color:white;font-family:-apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";font-weight:600}
|
@@ -1,6 +1,4 @@
|
|
1
|
-
|
2
|
-
width: $size
|
3
|
-
height: $size
|
1
|
+
.avatari
|
4
2
|
display: flex
|
5
3
|
justify-content: center
|
6
4
|
align-items: center
|
@@ -8,21 +6,7 @@
|
|
8
6
|
-webkit-border-radius: 50%
|
9
7
|
-moz-border-radius: 50%
|
10
8
|
& > .initials
|
11
|
-
font-size: $font
|
12
9
|
line-height: 1
|
13
10
|
color: white
|
14
11
|
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"
|
15
12
|
font-weight: 600
|
16
|
-
|
17
|
-
.avatari--mini
|
18
|
-
@include avatar(px(40), px(16))
|
19
|
-
.avatari--tiny
|
20
|
-
@include avatar(px(50), px(16))
|
21
|
-
.avatari--small
|
22
|
-
@include avatar(px(75), px(24))
|
23
|
-
.avatari--medium
|
24
|
-
@include avatar(px(100), px(32))
|
25
|
-
.avatari--big
|
26
|
-
@include avatar(px(350), px(74))
|
27
|
-
.avatari--raw
|
28
|
-
@include avatar(px(800), px(160))
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: avatari
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jonas Hübotter
|
@@ -11,7 +11,7 @@ cert_chain: []
|
|
11
11
|
date: 2018-01-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
-
name:
|
14
|
+
name: rails
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
17
|
- - ">="
|
@@ -25,19 +25,19 @@ dependencies:
|
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '5.0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
|
-
name:
|
28
|
+
name: carrierwave
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- - "
|
31
|
+
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '
|
33
|
+
version: '1.2'
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- - "
|
38
|
+
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: '
|
40
|
+
version: '1.2'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: rake
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -94,9 +94,13 @@ files:
|
|
94
94
|
- app/uploaders/avatari/avatar_uploader.rb
|
95
95
|
- app/views/avatari/_avatar.html.erb
|
96
96
|
- lib/avatari.rb
|
97
|
+
- lib/avatari/avatar.rb
|
98
|
+
- lib/avatari/configuration.rb
|
97
99
|
- lib/avatari/engine.rb
|
98
100
|
- lib/avatari/railtie.rb
|
99
101
|
- lib/avatari/version.rb
|
102
|
+
- lib/generators/avatari_generator.rb
|
103
|
+
- lib/generators/templates/initializer.rb
|
100
104
|
- vendor/assets/stylesheets/avatari.min.css
|
101
105
|
- vendor/assets/stylesheets/avatari.sass
|
102
106
|
homepage: https://github.com/jonhue/avatari
|