slugs 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.
Files changed (58) hide show
  1. checksums.yaml +7 -0
  2. data/MIT-LICENSE +20 -0
  3. data/README.rdoc +34 -0
  4. data/Rakefile +32 -0
  5. data/lib/slugs/active_record/base.rb +76 -0
  6. data/lib/slugs/active_record/non_translatable.rb +30 -0
  7. data/lib/slugs/active_record/relation.rb +18 -0
  8. data/lib/slugs/active_record/translatable.rb +53 -0
  9. data/lib/slugs/railtie.rb +10 -0
  10. data/lib/slugs/version.rb +5 -0
  11. data/lib/slugs.rb +9 -0
  12. data/test/dummy/README.rdoc +28 -0
  13. data/test/dummy/Rakefile +6 -0
  14. data/test/dummy/app/assets/javascripts/application.js +13 -0
  15. data/test/dummy/app/assets/stylesheets/application.css +13 -0
  16. data/test/dummy/app/controllers/application_controller.rb +5 -0
  17. data/test/dummy/app/helpers/application_helper.rb +2 -0
  18. data/test/dummy/app/models/simple.rb +5 -0
  19. data/test/dummy/app/models/translatable.rb +7 -0
  20. data/test/dummy/app/models/translatable_translation.rb +9 -0
  21. data/test/dummy/app/models/without.rb +2 -0
  22. data/test/dummy/app/views/layouts/application.html.erb +14 -0
  23. data/test/dummy/bin/bundle +3 -0
  24. data/test/dummy/bin/rails +4 -0
  25. data/test/dummy/bin/rake +4 -0
  26. data/test/dummy/config/application.rb +23 -0
  27. data/test/dummy/config/boot.rb +5 -0
  28. data/test/dummy/config/database.yml +25 -0
  29. data/test/dummy/config/environment.rb +5 -0
  30. data/test/dummy/config/environments/development.rb +29 -0
  31. data/test/dummy/config/environments/production.rb +80 -0
  32. data/test/dummy/config/environments/test.rb +36 -0
  33. data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
  34. data/test/dummy/config/initializers/filter_parameter_logging.rb +4 -0
  35. data/test/dummy/config/initializers/inflections.rb +16 -0
  36. data/test/dummy/config/initializers/mime_types.rb +5 -0
  37. data/test/dummy/config/initializers/secret_token.rb +12 -0
  38. data/test/dummy/config/initializers/session_store.rb +3 -0
  39. data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
  40. data/test/dummy/config/locales/en.yml +23 -0
  41. data/test/dummy/config/routes.rb +56 -0
  42. data/test/dummy/config.ru +4 -0
  43. data/test/dummy/db/development.sqlite3 +0 -0
  44. data/test/dummy/db/migrate/20130819183013_create_simples.rb +11 -0
  45. data/test/dummy/db/migrate/20130819183047_create_withouts.rb +9 -0
  46. data/test/dummy/db/migrate/20130819183119_create_translatables.rb +9 -0
  47. data/test/dummy/db/migrate/20130819183257_create_translatable_translations.rb +15 -0
  48. data/test/dummy/db/schema.rb +49 -0
  49. data/test/dummy/db/test.sqlite3 +0 -0
  50. data/test/dummy/log/development.log +169 -0
  51. data/test/dummy/log/test.log +1143 -0
  52. data/test/dummy/public/404.html +58 -0
  53. data/test/dummy/public/422.html +58 -0
  54. data/test/dummy/public/500.html +57 -0
  55. data/test/dummy/public/favicon.ico +0 -0
  56. data/test/records_test.rb +78 -0
  57. data/test/test_helper.rb +21 -0
  58. metadata +174 -0
@@ -0,0 +1,58 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>The page you were looking for doesn't exist (404)</title>
5
+ <style>
6
+ body {
7
+ background-color: #EFEFEF;
8
+ color: #2E2F30;
9
+ text-align: center;
10
+ font-family: arial, sans-serif;
11
+ }
12
+
13
+ div.dialog {
14
+ width: 25em;
15
+ margin: 4em auto 0 auto;
16
+ border: 1px solid #CCC;
17
+ border-right-color: #999;
18
+ border-left-color: #999;
19
+ border-bottom-color: #BBB;
20
+ border-top: #B00100 solid 4px;
21
+ border-top-left-radius: 9px;
22
+ border-top-right-radius: 9px;
23
+ background-color: white;
24
+ padding: 7px 4em 0 4em;
25
+ }
26
+
27
+ h1 {
28
+ font-size: 100%;
29
+ color: #730E15;
30
+ line-height: 1.5em;
31
+ }
32
+
33
+ body > p {
34
+ width: 33em;
35
+ margin: 0 auto 1em;
36
+ padding: 1em 0;
37
+ background-color: #F7F7F7;
38
+ border: 1px solid #CCC;
39
+ border-right-color: #999;
40
+ border-bottom-color: #999;
41
+ border-bottom-left-radius: 4px;
42
+ border-bottom-right-radius: 4px;
43
+ border-top-color: #DADADA;
44
+ color: #666;
45
+ box-shadow:0 3px 8px rgba(50, 50, 50, 0.17);
46
+ }
47
+ </style>
48
+ </head>
49
+
50
+ <body>
51
+ <!-- This file lives in public/404.html -->
52
+ <div class="dialog">
53
+ <h1>The page you were looking for doesn't exist.</h1>
54
+ <p>You may have mistyped the address or the page may have moved.</p>
55
+ </div>
56
+ <p>If you are the application owner check the logs for more information.</p>
57
+ </body>
58
+ </html>
@@ -0,0 +1,58 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>The change you wanted was rejected (422)</title>
5
+ <style>
6
+ body {
7
+ background-color: #EFEFEF;
8
+ color: #2E2F30;
9
+ text-align: center;
10
+ font-family: arial, sans-serif;
11
+ }
12
+
13
+ div.dialog {
14
+ width: 25em;
15
+ margin: 4em auto 0 auto;
16
+ border: 1px solid #CCC;
17
+ border-right-color: #999;
18
+ border-left-color: #999;
19
+ border-bottom-color: #BBB;
20
+ border-top: #B00100 solid 4px;
21
+ border-top-left-radius: 9px;
22
+ border-top-right-radius: 9px;
23
+ background-color: white;
24
+ padding: 7px 4em 0 4em;
25
+ }
26
+
27
+ h1 {
28
+ font-size: 100%;
29
+ color: #730E15;
30
+ line-height: 1.5em;
31
+ }
32
+
33
+ body > p {
34
+ width: 33em;
35
+ margin: 0 auto 1em;
36
+ padding: 1em 0;
37
+ background-color: #F7F7F7;
38
+ border: 1px solid #CCC;
39
+ border-right-color: #999;
40
+ border-bottom-color: #999;
41
+ border-bottom-left-radius: 4px;
42
+ border-bottom-right-radius: 4px;
43
+ border-top-color: #DADADA;
44
+ color: #666;
45
+ box-shadow:0 3px 8px rgba(50, 50, 50, 0.17);
46
+ }
47
+ </style>
48
+ </head>
49
+
50
+ <body>
51
+ <!-- This file lives in public/422.html -->
52
+ <div class="dialog">
53
+ <h1>The change you wanted was rejected.</h1>
54
+ <p>Maybe you tried to change something you didn't have access to.</p>
55
+ </div>
56
+ <p>If you are the application owner check the logs for more information.</p>
57
+ </body>
58
+ </html>
@@ -0,0 +1,57 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>We're sorry, but something went wrong (500)</title>
5
+ <style>
6
+ body {
7
+ background-color: #EFEFEF;
8
+ color: #2E2F30;
9
+ text-align: center;
10
+ font-family: arial, sans-serif;
11
+ }
12
+
13
+ div.dialog {
14
+ width: 25em;
15
+ margin: 4em auto 0 auto;
16
+ border: 1px solid #CCC;
17
+ border-right-color: #999;
18
+ border-left-color: #999;
19
+ border-bottom-color: #BBB;
20
+ border-top: #B00100 solid 4px;
21
+ border-top-left-radius: 9px;
22
+ border-top-right-radius: 9px;
23
+ background-color: white;
24
+ padding: 7px 4em 0 4em;
25
+ }
26
+
27
+ h1 {
28
+ font-size: 100%;
29
+ color: #730E15;
30
+ line-height: 1.5em;
31
+ }
32
+
33
+ body > p {
34
+ width: 33em;
35
+ margin: 0 auto 1em;
36
+ padding: 1em 0;
37
+ background-color: #F7F7F7;
38
+ border: 1px solid #CCC;
39
+ border-right-color: #999;
40
+ border-bottom-color: #999;
41
+ border-bottom-left-radius: 4px;
42
+ border-bottom-right-radius: 4px;
43
+ border-top-color: #DADADA;
44
+ color: #666;
45
+ box-shadow:0 3px 8px rgba(50, 50, 50, 0.17);
46
+ }
47
+ </style>
48
+ </head>
49
+
50
+ <body>
51
+ <!-- This file lives in public/500.html -->
52
+ <div class="dialog">
53
+ <h1>We're sorry, but something went wrong.</h1>
54
+ </div>
55
+ <p>If you are the application owner check the logs for more information.</p>
56
+ </body>
57
+ </html>
File without changes
@@ -0,0 +1,78 @@
1
+ require 'test_helper'
2
+
3
+ class RecordsTest < ActiveSupport::TestCase
4
+
5
+ setup do
6
+ @without = Without.create(name: 'name')
7
+ @simple = Simple.create(name: 'name', age: 14)
8
+ @translatable = Translatable.create(name: 'translatable name', age: 20)
9
+ end
10
+
11
+ test "should not break validation" do
12
+ assert Without.new.valid?
13
+ assert Simple.new.valid?
14
+ assert Translatable.new.valid?
15
+ end
16
+
17
+ test "should not break models" do
18
+ assert_equal 'name', @without.name
19
+ assert_equal @without, Without.find('1')
20
+ assert_equal @without, Without.find(1)
21
+ end
22
+
23
+ test "should create slug" do
24
+ assert_equal 'name', @simple.slug
25
+ assert_equal @simple, Simple.find('name')
26
+ assert_equal 'translatable-name', @translatable.slug
27
+ assert_equal @translatable, Translatable.find('translatable-name')
28
+ end
29
+
30
+ test "should edit slug" do
31
+ @simple.update_attributes name: 'new name'
32
+ assert_equal 'new-name', @simple.slug
33
+ assert_equal @simple, Simple.find('new-name')
34
+ @translatable.update_attributes name: 'new translatable name'
35
+ assert_equal 'new-translatable-name', @translatable.slug
36
+ assert_equal @translatable, Translatable.find('new-translatable-name')
37
+ end
38
+
39
+ test "should not alter direct assigned slug" do
40
+ @simple.update_attributes slug: 'direct slug'
41
+ assert_equal 'direct slug', @simple.slug
42
+ assert_equal @simple, Simple.find('direct slug')
43
+ @translatable.update_attributes slug: 'translatable direct slug'
44
+ assert_equal 'translatable direct slug', @translatable.slug
45
+ assert_equal @translatable, Translatable.find('translatable direct slug')
46
+ end
47
+
48
+ test "should assign index for same slugs" do
49
+ first = Simple.create(name: 'same', age: 34)
50
+ assert_equal 'same', first.slug
51
+ second = Simple.create(name: 'same', age: 45)
52
+ assert_equal 'same-1', second.slug
53
+ third = Simple.create(name: 'same', age: 234)
54
+ assert_equal 'same-2', third.slug
55
+
56
+ first.update_attributes name: 'other'
57
+ assert_equal 'other', first.slug
58
+ second.update_attributes name: 'other'
59
+ assert_equal 'other-1', second.slug
60
+ third.update_attributes name: 'other'
61
+ assert_equal 'other-2', third.slug
62
+
63
+ first = Translatable.create(name: 'same', age: 34)
64
+ assert_equal 'same', first.slug
65
+ second = Translatable.create(name: 'same', age: 45)
66
+ assert_equal 'same-1', second.slug
67
+ third = Translatable.create(name: 'same', age: 234)
68
+ assert_equal 'same-2', third.slug
69
+
70
+ first.update_attributes name: 'other'
71
+ assert_equal 'other', first.slug
72
+ second.update_attributes name: 'other'
73
+ assert_equal 'other-1', second.slug
74
+ third.update_attributes name: 'other'
75
+ assert_equal 'other-2', third.slug
76
+ end
77
+
78
+ end
@@ -0,0 +1,21 @@
1
+ # Configure Rails Environment
2
+ ENV["RAILS_ENV"] = "test"
3
+
4
+ require File.expand_path("../dummy/config/environment.rb", __FILE__)
5
+ require "rails/test_help"
6
+
7
+ Rails.backtrace_cleaner.remove_silencers!
8
+
9
+ # Load support files
10
+ Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each { |f| require f }
11
+
12
+ # Load fixtures from the engine
13
+ if ActiveSupport::TestCase.method_defined?(:fixture_path=)
14
+ ActiveSupport::TestCase.fixture_path = File.expand_path("../fixtures", __FILE__)
15
+ end
16
+
17
+ # Load database
18
+ config = YAML::load(File.read(File.expand_path('../dummy/config/database.yml', __FILE__)))
19
+ config['test']['adapter'] = 'jdbcsqlite3' if RUBY_PLATFORM == 'java'
20
+ ActiveRecord::Base.establish_connection(config['test'])
21
+ load(File.expand_path('../dummy/db/schema.rb', __FILE__))
metadata ADDED
@@ -0,0 +1,174 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: slugs
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Mattways
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2013-08-19 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rails
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - '>='
18
+ - !ruby/object:Gem::Version
19
+ version: 3.0.0
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - '>='
25
+ - !ruby/object:Gem::Version
26
+ version: 3.0.0
27
+ - !ruby/object:Gem::Dependency
28
+ name: sqlite3
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - '>='
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - '>='
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ description: Inspired in friendly_id but more minimalistic.
42
+ email:
43
+ - contact@mattways.com
44
+ executables: []
45
+ extensions: []
46
+ extra_rdoc_files: []
47
+ files:
48
+ - lib/slugs/active_record/base.rb
49
+ - lib/slugs/active_record/non_translatable.rb
50
+ - lib/slugs/active_record/relation.rb
51
+ - lib/slugs/active_record/translatable.rb
52
+ - lib/slugs/railtie.rb
53
+ - lib/slugs/version.rb
54
+ - lib/slugs.rb
55
+ - MIT-LICENSE
56
+ - Rakefile
57
+ - README.rdoc
58
+ - test/dummy/app/assets/javascripts/application.js
59
+ - test/dummy/app/assets/stylesheets/application.css
60
+ - test/dummy/app/controllers/application_controller.rb
61
+ - test/dummy/app/helpers/application_helper.rb
62
+ - test/dummy/app/models/simple.rb
63
+ - test/dummy/app/models/translatable.rb
64
+ - test/dummy/app/models/translatable_translation.rb
65
+ - test/dummy/app/models/without.rb
66
+ - test/dummy/app/views/layouts/application.html.erb
67
+ - test/dummy/bin/bundle
68
+ - test/dummy/bin/rails
69
+ - test/dummy/bin/rake
70
+ - test/dummy/config/application.rb
71
+ - test/dummy/config/boot.rb
72
+ - test/dummy/config/database.yml
73
+ - test/dummy/config/environment.rb
74
+ - test/dummy/config/environments/development.rb
75
+ - test/dummy/config/environments/production.rb
76
+ - test/dummy/config/environments/test.rb
77
+ - test/dummy/config/initializers/backtrace_silencers.rb
78
+ - test/dummy/config/initializers/filter_parameter_logging.rb
79
+ - test/dummy/config/initializers/inflections.rb
80
+ - test/dummy/config/initializers/mime_types.rb
81
+ - test/dummy/config/initializers/secret_token.rb
82
+ - test/dummy/config/initializers/session_store.rb
83
+ - test/dummy/config/initializers/wrap_parameters.rb
84
+ - test/dummy/config/locales/en.yml
85
+ - test/dummy/config/routes.rb
86
+ - test/dummy/config.ru
87
+ - test/dummy/db/development.sqlite3
88
+ - test/dummy/db/migrate/20130819183013_create_simples.rb
89
+ - test/dummy/db/migrate/20130819183047_create_withouts.rb
90
+ - test/dummy/db/migrate/20130819183119_create_translatables.rb
91
+ - test/dummy/db/migrate/20130819183257_create_translatable_translations.rb
92
+ - test/dummy/db/schema.rb
93
+ - test/dummy/db/test.sqlite3
94
+ - test/dummy/log/development.log
95
+ - test/dummy/log/test.log
96
+ - test/dummy/public/404.html
97
+ - test/dummy/public/422.html
98
+ - test/dummy/public/500.html
99
+ - test/dummy/public/favicon.ico
100
+ - test/dummy/Rakefile
101
+ - test/dummy/README.rdoc
102
+ - test/records_test.rb
103
+ - test/test_helper.rb
104
+ homepage: https://github.com/mattways/slugs
105
+ licenses:
106
+ - MIT
107
+ metadata: {}
108
+ post_install_message:
109
+ rdoc_options: []
110
+ require_paths:
111
+ - lib
112
+ required_ruby_version: !ruby/object:Gem::Requirement
113
+ requirements:
114
+ - - '>='
115
+ - !ruby/object:Gem::Version
116
+ version: '0'
117
+ required_rubygems_version: !ruby/object:Gem::Requirement
118
+ requirements:
119
+ - - '>='
120
+ - !ruby/object:Gem::Version
121
+ version: '0'
122
+ requirements: []
123
+ rubyforge_project:
124
+ rubygems_version: 2.0.3
125
+ signing_key:
126
+ specification_version: 4
127
+ summary: Slugs for Rails.
128
+ test_files:
129
+ - test/dummy/app/assets/javascripts/application.js
130
+ - test/dummy/app/assets/stylesheets/application.css
131
+ - test/dummy/app/controllers/application_controller.rb
132
+ - test/dummy/app/helpers/application_helper.rb
133
+ - test/dummy/app/models/simple.rb
134
+ - test/dummy/app/models/translatable.rb
135
+ - test/dummy/app/models/translatable_translation.rb
136
+ - test/dummy/app/models/without.rb
137
+ - test/dummy/app/views/layouts/application.html.erb
138
+ - test/dummy/bin/bundle
139
+ - test/dummy/bin/rails
140
+ - test/dummy/bin/rake
141
+ - test/dummy/config/application.rb
142
+ - test/dummy/config/boot.rb
143
+ - test/dummy/config/database.yml
144
+ - test/dummy/config/environment.rb
145
+ - test/dummy/config/environments/development.rb
146
+ - test/dummy/config/environments/production.rb
147
+ - test/dummy/config/environments/test.rb
148
+ - test/dummy/config/initializers/backtrace_silencers.rb
149
+ - test/dummy/config/initializers/filter_parameter_logging.rb
150
+ - test/dummy/config/initializers/inflections.rb
151
+ - test/dummy/config/initializers/mime_types.rb
152
+ - test/dummy/config/initializers/secret_token.rb
153
+ - test/dummy/config/initializers/session_store.rb
154
+ - test/dummy/config/initializers/wrap_parameters.rb
155
+ - test/dummy/config/locales/en.yml
156
+ - test/dummy/config/routes.rb
157
+ - test/dummy/config.ru
158
+ - test/dummy/db/development.sqlite3
159
+ - test/dummy/db/migrate/20130819183013_create_simples.rb
160
+ - test/dummy/db/migrate/20130819183047_create_withouts.rb
161
+ - test/dummy/db/migrate/20130819183119_create_translatables.rb
162
+ - test/dummy/db/migrate/20130819183257_create_translatable_translations.rb
163
+ - test/dummy/db/schema.rb
164
+ - test/dummy/db/test.sqlite3
165
+ - test/dummy/log/development.log
166
+ - test/dummy/log/test.log
167
+ - test/dummy/public/404.html
168
+ - test/dummy/public/422.html
169
+ - test/dummy/public/500.html
170
+ - test/dummy/public/favicon.ico
171
+ - test/dummy/Rakefile
172
+ - test/dummy/README.rdoc
173
+ - test/records_test.rb
174
+ - test/test_helper.rb