redde 0.1.8 → 0.1.9
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/README.md +42 -5
- data/lib/generators/redde/photo/templates/create_photos.rb +2 -0
- data/lib/redde/sluggable.rb +28 -0
- data/lib/{url_generator.rb → redde/url_generator.rb} +3 -4
- data/lib/redde/version.rb +1 -1
- data/lib/redde/with_photo.rb +13 -0
- data/lib/redde.rb +2 -0
- data/spec/models/sluggable_spec.rb +43 -0
- data/spec/models/url_generator_spec.rb +18 -0
- metadata +9 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 415d13d5581f203913ddbe74ba59d6fed19125a8
|
4
|
+
data.tar.gz: 00b8a99f56c2ad97b1d91bb1684529e389237126
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 11ad3b74c37115cd4af58828c23e65fd9c395aedb5e8b2eafaaf719e42193a3da26464dac95ce2d8660fe803eff53fe7d853d97b2da5cdbaeb2506da6984a9f4
|
7
|
+
data.tar.gz: 3555c40b264141d970ff35cdff80ec0e06ff095ff8891912f3ee23de7ad920bdca83769bdc60354af9d9d2354e365abb85ef60739b42b864ea21671687485a6f
|
data/README.md
CHANGED
@@ -37,13 +37,50 @@ To set admin login layout you need to modify application controller:
|
|
37
37
|
end
|
38
38
|
|
39
39
|
To generate admin views and controller for a model, enter:
|
40
|
-
|
40
|
+
|
41
41
|
rails g redde:scaffold ModelNames
|
42
42
|
|
43
43
|
Add `admin.scss` and `admin.js` to assets precompilation in config/production.rb:
|
44
44
|
|
45
45
|
config.assets.precompile += %w( admin.js admin.css )
|
46
|
-
|
46
|
+
|
47
|
+
## UrlGenerator
|
48
|
+
|
49
|
+
`Redde::UrlGenerator` - is a small lib to convert title and id to combine url, used in `to_param` method.
|
50
|
+
|
51
|
+
Usage example:
|
52
|
+
|
53
|
+
generator = Redde::UrlGenerator.new(1, 'тестовый заголовок $%##@$@#$')
|
54
|
+
generator.url
|
55
|
+
=> '1-testovyy-zagolovok'
|
56
|
+
|
57
|
+
## Sluggable
|
58
|
+
|
59
|
+
`Sluggable` is used to include into model with permanent slugs (similar to permalink).
|
60
|
+
|
61
|
+
Your ActiveRecord model should have `slug` field and title field.
|
62
|
+
|
63
|
+
You can set title field by setting `TITLE_FIELD` to symbol of method. This method will be used to generate `slug`.
|
64
|
+
If `TITLE_FIELD` constant is not set, `:title` symbol will be used insted.
|
65
|
+
|
66
|
+
Usage example:
|
67
|
+
|
68
|
+
Book should have title and slug fields.
|
69
|
+
|
70
|
+
class Book < ActiveRecord::Base
|
71
|
+
TITLE_SYMBOL = :name
|
72
|
+
include Redde::Sluggable
|
73
|
+
validates :name, presence: true
|
74
|
+
end
|
75
|
+
|
76
|
+
b = Book.new(name: 'Тестовая книга')
|
77
|
+
b.save
|
78
|
+
b.slug
|
79
|
+
=> 'testovaya-kniga'
|
80
|
+
|
81
|
+
b.to_param
|
82
|
+
=> '1-testovaya-kniga'
|
83
|
+
|
47
84
|
## Добавление фотографий
|
48
85
|
|
49
86
|
rails g redde:photo
|
@@ -67,7 +104,7 @@ Add `admin.scss` and `admin.js` to assets precompilation in config/production.rb
|
|
67
104
|
Не забудьте добавить полиморфную связь
|
68
105
|
|
69
106
|
has_many :photos, dependent: :destroy, as: :imageable
|
70
|
-
|
107
|
+
|
71
108
|
создаст scaffold для модели Photo с полиморфной связью
|
72
109
|
|
73
110
|
## Gemset dependenсies
|
@@ -79,7 +116,7 @@ Somehow, some dependencies are not initialized inside rails apps. If you get err
|
|
79
116
|
gem 'haml-rails'
|
80
117
|
gem 'russian'
|
81
118
|
gem 'devise'
|
82
|
-
|
119
|
+
|
83
120
|
Its highly possible, that you will not have any problems with gems
|
84
121
|
|
85
122
|
## Autoprefixer note for development mode
|
@@ -107,7 +144,7 @@ Its neccessary to have joined asset files, change assets debug to false in `conf
|
|
107
144
|
To use styles for the WYSIWYG editor, add its styles to precompile in `config/production.rb`:
|
108
145
|
|
109
146
|
config.assets.precompile += %w( redactor/wym.css )
|
110
|
-
|
147
|
+
|
111
148
|
## Sortable
|
112
149
|
|
113
150
|
If you have field `position` of integer type in your model, generator will add special column as a hook for sort.
|
@@ -5,10 +5,12 @@ class CreatePhotos < ActiveRecord::Migration
|
|
5
5
|
t.string :imageable_type
|
6
6
|
t.integer :position
|
7
7
|
t.string :src
|
8
|
+
t.string :token
|
8
9
|
|
9
10
|
t.timestamps
|
10
11
|
end
|
11
12
|
add_index :photos, :imageable_id
|
12
13
|
add_index :photos, :imageable_type
|
14
|
+
add_index :photos, :token
|
13
15
|
end
|
14
16
|
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
require 'redde/url_generator'
|
2
|
+
|
3
|
+
module Redde::Sluggable
|
4
|
+
extend ActiveSupport::Concern
|
5
|
+
|
6
|
+
included do
|
7
|
+
validates :slug, format: { with: /\A[A-z0-9_-]*\z/i, message: 'имеет неверный формат, разрешены английские символы, знак подчеркивания "_" и дефис "-"'}, presence: true
|
8
|
+
before_validation :set_slug
|
9
|
+
end
|
10
|
+
|
11
|
+
def set_slug
|
12
|
+
self.slug = Redde::UrlGenerator.new(self, title_field).formatted_name.downcase unless slug.present?
|
13
|
+
end
|
14
|
+
|
15
|
+
def title_field
|
16
|
+
send(title_symbol)
|
17
|
+
end
|
18
|
+
|
19
|
+
def title_symbol
|
20
|
+
self.class::TITLE_SYMBOL
|
21
|
+
rescue
|
22
|
+
:title
|
23
|
+
end
|
24
|
+
|
25
|
+
def to_param
|
26
|
+
"#{id}-#{slug.try(:downcase)}"
|
27
|
+
end
|
28
|
+
end
|
@@ -1,6 +1,4 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
class UrlGenerator
|
1
|
+
class Redde::UrlGenerator
|
4
2
|
attr_reader :id, :name
|
5
3
|
def initialize(id, name = nil)
|
6
4
|
@id = id
|
@@ -8,7 +6,8 @@ class UrlGenerator
|
|
8
6
|
end
|
9
7
|
|
10
8
|
def url
|
11
|
-
"#{id}
|
9
|
+
return "#{id}-#{formatted_name}".downcase if formatted_name.present?
|
10
|
+
id.to_s
|
12
11
|
end
|
13
12
|
|
14
13
|
def translitted_name
|
data/lib/redde/version.rb
CHANGED
@@ -0,0 +1,13 @@
|
|
1
|
+
module WithPhoto
|
2
|
+
extend ActiveSupport::Concern
|
3
|
+
|
4
|
+
included do
|
5
|
+
attr_accessor :tokens
|
6
|
+
has_many :photos, dependent: :destroy, as: :imageable
|
7
|
+
after_create :assign_photos
|
8
|
+
end
|
9
|
+
|
10
|
+
def assign_photos
|
11
|
+
Photo.where(token: tokens || []).update_all(imageable_id: self.id, imageable_type: self.class.name)
|
12
|
+
end
|
13
|
+
end
|
data/lib/redde.rb
CHANGED
@@ -0,0 +1,43 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
class DummyClass
|
4
|
+
include ActiveModel::Model
|
5
|
+
include ActiveModel::Validations
|
6
|
+
include ActiveRecord::Callbacks
|
7
|
+
include Redde::Sluggable
|
8
|
+
|
9
|
+
attr_accessor :id, :title, :slug
|
10
|
+
|
11
|
+
def id
|
12
|
+
3
|
13
|
+
end
|
14
|
+
|
15
|
+
def title
|
16
|
+
'hey ho'
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
|
21
|
+
class DummyClassWithTitle < DummyClass
|
22
|
+
include Redde::Sluggable
|
23
|
+
TITLE_SYMBOL = :name
|
24
|
+
|
25
|
+
def name
|
26
|
+
'super name'
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
describe Redde::Sluggable do
|
31
|
+
let(:title) { DummyClass.new }
|
32
|
+
let(:name) { DummyClassWithTitle.new }
|
33
|
+
|
34
|
+
it 'sets slug for model with title' do
|
35
|
+
title.valid?
|
36
|
+
expect(title.slug).to eq 'hey-ho'
|
37
|
+
end
|
38
|
+
|
39
|
+
it 'sets slug for model with name' do
|
40
|
+
name.valid?
|
41
|
+
expect(name.slug).to eq 'super-name'
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Redde::UrlGenerator do
|
4
|
+
let(:url) { Redde::UrlGenerator.new(1, 'тестовый заголовок $%##@$@#$') }
|
5
|
+
|
6
|
+
it 'generates valid translitted name' do
|
7
|
+
expect(url.translitted_name).to eq 'testovyy-zagolovok'
|
8
|
+
end
|
9
|
+
|
10
|
+
it 'generates valid url if name not present' do
|
11
|
+
url = Redde::UrlGenerator.new(1)
|
12
|
+
expect(url.url).to eq '1'
|
13
|
+
end
|
14
|
+
|
15
|
+
it 'generates valid url' do
|
16
|
+
expect(url.url).to eq '1-testovyy-zagolovok'
|
17
|
+
end
|
18
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: redde
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.9
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Oleg Bovykin
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2014-
|
12
|
+
date: 2014-06-07 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: jquery-rails
|
@@ -245,8 +245,10 @@ files:
|
|
245
245
|
- lib/generators/redde/scaffold/templates/edit.html.haml
|
246
246
|
- lib/generators/redde/scaffold/templates/index.html.haml
|
247
247
|
- lib/redde.rb
|
248
|
+
- lib/redde/sluggable.rb
|
249
|
+
- lib/redde/url_generator.rb
|
248
250
|
- lib/redde/version.rb
|
249
|
-
- lib/
|
251
|
+
- lib/redde/with_photo.rb
|
250
252
|
- redde.gemspec
|
251
253
|
- spec/dummy/.rspec
|
252
254
|
- spec/dummy/README.rdoc
|
@@ -295,6 +297,8 @@ files:
|
|
295
297
|
- spec/generators/layout_generator_spec.rb
|
296
298
|
- spec/generators/photo_generator_spec.rb
|
297
299
|
- spec/generators/scaffold_generator_spec.rb
|
300
|
+
- spec/models/sluggable_spec.rb
|
301
|
+
- spec/models/url_generator_spec.rb
|
298
302
|
- spec/spec_helper.rb
|
299
303
|
homepage: http://github.com/redde/redde
|
300
304
|
licenses:
|
@@ -368,4 +372,6 @@ test_files:
|
|
368
372
|
- spec/generators/layout_generator_spec.rb
|
369
373
|
- spec/generators/photo_generator_spec.rb
|
370
374
|
- spec/generators/scaffold_generator_spec.rb
|
375
|
+
- spec/models/sluggable_spec.rb
|
376
|
+
- spec/models/url_generator_spec.rb
|
371
377
|
- spec/spec_helper.rb
|