acts_as_digested_on 0.0.3 → 0.0.4
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 +7 -0
- data/.gitignore +20 -1
- data/.rspec +1 -0
- data/.travis.yml +21 -4
- data/Gemfile +1 -1
- data/{LICENSE → LICENSE.txt} +3 -1
- data/README.md +86 -0
- data/Rakefile +6 -0
- data/acts_as_digested_on.gemspec +22 -22
- data/gemfiles/active_record_30.gemfile +5 -0
- data/gemfiles/active_record_31.gemfile +5 -0
- data/gemfiles/active_record_32.gemfile +5 -0
- data/gemfiles/active_record_40.gemfile +5 -0
- data/gemfiles/active_record_41.gemfile +5 -0
- data/lib/acts_as_digested_on.rb +14 -6
- data/lib/acts_as_digested_on/version.rb +1 -1
- data/spec/acts_as_digested_on_spec.rb +71 -34
- data/spec/spec_helper.rb +4 -11
- metadata +70 -29
- data/README.rdoc +0 -70
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 9fe716747e29040d5d295efb36190265a35ffffe
|
4
|
+
data.tar.gz: f58ea0447b586740db607e35c3985a1406efbda9
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 17765a65a22b98c6bcd2ed75135a09d476809a4f7aeaa5b0ba3bd36d0ed003f27909396627233d427508a6f09972b480b36dbe47096cd6965e7ca966c71ab1fc
|
7
|
+
data.tar.gz: 04e334c76ceb1ad2124cd52573c737d533f02e15971fd4936f8bfa4290984e957ba96ad6d7ed2d66fdcb10c5718097e3fdb0aa8b1eb3aabd15c7743a5fac2fb4
|
data/.gitignore
CHANGED
@@ -1,4 +1,23 @@
|
|
1
1
|
*.gem
|
2
|
+
*.rbc
|
2
3
|
.bundle
|
4
|
+
.config
|
5
|
+
.yardoc
|
3
6
|
Gemfile.lock
|
4
|
-
|
7
|
+
gemfiles/*.lock
|
8
|
+
InstalledFiles
|
9
|
+
_yardoc
|
10
|
+
coverage
|
11
|
+
doc/
|
12
|
+
lib/bundler/man
|
13
|
+
pkg
|
14
|
+
rdoc
|
15
|
+
spec/reports
|
16
|
+
test/tmp
|
17
|
+
test/version_tmp
|
18
|
+
tmp
|
19
|
+
*.bundle
|
20
|
+
*.so
|
21
|
+
*.o
|
22
|
+
*.a
|
23
|
+
mkmf.log
|
data/.rspec
CHANGED
data/.travis.yml
CHANGED
@@ -1,7 +1,24 @@
|
|
1
1
|
language: ruby
|
2
|
+
script: "bundle exec rake spec"
|
2
3
|
rvm:
|
3
|
-
- 1.8.7
|
4
|
-
- 1.9.2
|
5
4
|
- 1.9.3
|
6
|
-
-
|
7
|
-
|
5
|
+
- 2.0.0
|
6
|
+
- 2.1
|
7
|
+
- ruby-head
|
8
|
+
gemfile:
|
9
|
+
- gemfiles/active_record_30.gemfile
|
10
|
+
- gemfiles/active_record_31.gemfile
|
11
|
+
- gemfiles/active_record_32.gemfile
|
12
|
+
- gemfiles/active_record_40.gemfile
|
13
|
+
- gemfiles/active_record_41.gemfile
|
14
|
+
matrix:
|
15
|
+
exclude:
|
16
|
+
- rvm: ruby-head
|
17
|
+
gemfile: gemfiles/active_record_30.gemfile
|
18
|
+
- rvm: ruby-head
|
19
|
+
gemfile: gemfiles/active_record_31.gemfile
|
20
|
+
- rvm: ruby-head
|
21
|
+
gemfile: gemfiles/active_record_32.gemfile
|
22
|
+
allow_failures:
|
23
|
+
- rvm: ruby-head
|
24
|
+
fast_finish: true
|
data/Gemfile
CHANGED
data/{LICENSE → LICENSE.txt}
RENAMED
data/README.md
ADDED
@@ -0,0 +1,86 @@
|
|
1
|
+
# ActsAsDigestedOn [](https://travis-ci.org/milk1000cc/acts_as_digested_on)
|
2
|
+
|
3
|
+
acts_as_digested_on is a gem for Rails 3 and Rails 4.
|
4
|
+
|
5
|
+
This sets the digested value before validation and validates uniqueness of the digested value.
|
6
|
+
|
7
|
+
If you use this gem for Rails 2, see rails-2 branch.
|
8
|
+
|
9
|
+
## Installation
|
10
|
+
|
11
|
+
Add this line to your application's Gemfile:
|
12
|
+
|
13
|
+
gem 'acts_as_digested_on'
|
14
|
+
|
15
|
+
And then execute:
|
16
|
+
|
17
|
+
$ bundle
|
18
|
+
|
19
|
+
Or install it yourself as:
|
20
|
+
|
21
|
+
$ gem install acts_as_digested_on
|
22
|
+
|
23
|
+
## Usage
|
24
|
+
|
25
|
+
```ruby
|
26
|
+
# db/migrate/20090706000000_create_articles.rb
|
27
|
+
class CreateArticles < ActiveRecord::Migration
|
28
|
+
def self.up
|
29
|
+
create_table :articles do |t|
|
30
|
+
t.text :url # any type is ok
|
31
|
+
t.string :digest # this is sha-1 hex digest field of url value
|
32
|
+
...
|
33
|
+
end
|
34
|
+
|
35
|
+
add_index :articles, :digest, :unique => true # you can add index on digest field
|
36
|
+
end
|
37
|
+
|
38
|
+
def self.down
|
39
|
+
drop_table :articles
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
# app/models/article.rb
|
44
|
+
class Article < ActiveRecord::Base
|
45
|
+
acts_as_digested_on :url # please add this
|
46
|
+
...
|
47
|
+
end
|
48
|
+
|
49
|
+
# this means
|
50
|
+
class Article < ActiveRecord::Base
|
51
|
+
validates_uniqueness_of :digest
|
52
|
+
before_validation :set_digest
|
53
|
+
|
54
|
+
def generate_digest
|
55
|
+
Digest::SHA1.hexdigest "--#{ url.to_s }--"
|
56
|
+
end
|
57
|
+
|
58
|
+
private
|
59
|
+
def set_digest
|
60
|
+
self.digest = generate_digest
|
61
|
+
end
|
62
|
+
...
|
63
|
+
end
|
64
|
+
```
|
65
|
+
|
66
|
+
## Examples
|
67
|
+
|
68
|
+
```ruby
|
69
|
+
acts_as_digested_on :url, :unique => false
|
70
|
+
|
71
|
+
acts_as_digested_on :url, :digest_column => :url_digest
|
72
|
+
|
73
|
+
acts_as_digested_on [:url, :salt]
|
74
|
+
|
75
|
+
acts_as_digested_on :url, :scope => :site_id
|
76
|
+
|
77
|
+
Article.new(:url => 'http://example.com').generate_digest
|
78
|
+
```
|
79
|
+
|
80
|
+
## Contributing
|
81
|
+
|
82
|
+
1. Fork it ( https://github.com/milk1000cc/acts_as_digested_on/fork )
|
83
|
+
2. Create your feature branch (`git checkout -b my-new-feature`)
|
84
|
+
3. Commit your changes (`git commit -am 'Add some feature'`)
|
85
|
+
4. Push to the branch (`git push origin my-new-feature`)
|
86
|
+
5. Create a new Pull Request
|
data/Rakefile
CHANGED
data/acts_as_digested_on.gemspec
CHANGED
@@ -1,27 +1,27 @@
|
|
1
|
-
#
|
2
|
-
|
3
|
-
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'acts_as_digested_on/version'
|
4
5
|
|
5
|
-
Gem::Specification.new do |
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = "acts_as_digested_on"
|
8
|
+
spec.version = ActsAsDigestedOn::VERSION
|
9
|
+
spec.authors = ["milk1000cc"]
|
10
|
+
spec.email = ["info@milk1000.cc"]
|
11
|
+
spec.summary = %q{Automatically set sha-1 hex digest}
|
12
|
+
spec.description = %q{This gem sets the digested value before validation and validates uniqueness of the digested value.}
|
13
|
+
spec.homepage = "https://github.com/milk1000cc/acts_as_digested_on"
|
14
|
+
spec.license = "MIT"
|
13
15
|
|
14
|
-
|
16
|
+
spec.files = `git ls-files -z`.split("\x0")
|
17
|
+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
18
|
+
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
|
+
spec.require_paths = ["lib"]
|
15
20
|
|
16
|
-
|
17
|
-
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
18
|
-
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
19
|
-
s.require_paths = ["lib"]
|
21
|
+
spec.add_dependency 'activerecord', '>= 3.0.0'
|
20
22
|
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
s.add_development_dependency "rspec"
|
26
|
-
s.add_development_dependency "sqlite3"
|
23
|
+
spec.add_development_dependency "bundler", "~> 1.6"
|
24
|
+
spec.add_development_dependency "rake"
|
25
|
+
spec.add_development_dependency "rspec"
|
26
|
+
spec.add_development_dependency "sqlite3"
|
27
27
|
end
|
data/lib/acts_as_digested_on.rb
CHANGED
@@ -25,14 +25,22 @@ module ActsAsDigestedOn
|
|
25
25
|
|
26
26
|
module InstanceMethods
|
27
27
|
def generate_digest
|
28
|
-
|
29
|
-
original_string = "--#{ original_columns.map { |v| self[v].to_s }.join('--') }--"
|
30
|
-
digest = Digest::SHA1.hexdigest(original_string)
|
28
|
+
digest = Digest::SHA1.hexdigest(original_string_for_digest)
|
31
29
|
digest.encode! 'utf-8' if RUBY_VERSION.to_f >= 1.9
|
32
30
|
digest
|
33
31
|
end
|
34
32
|
|
35
33
|
private
|
34
|
+
def original_string_for_digest
|
35
|
+
separator = '--'
|
36
|
+
attr_names = self.class.acts_as_digested_on_vars[:attr_names]
|
37
|
+
|
38
|
+
str = separator.dup
|
39
|
+
str << attr_names.map { |v| send(v).to_s }.join(separator)
|
40
|
+
str << separator
|
41
|
+
str
|
42
|
+
end
|
43
|
+
|
36
44
|
def set_digest
|
37
45
|
digest_column = self.class.acts_as_digested_on_vars[:digest_column]
|
38
46
|
self[digest_column] = generate_digest
|
@@ -40,16 +48,16 @@ module ActsAsDigestedOn
|
|
40
48
|
end
|
41
49
|
|
42
50
|
module ClassMethods
|
43
|
-
def acts_as_digested_on(
|
51
|
+
def acts_as_digested_on(attr_names, options = {})
|
44
52
|
options = options.symbolize_keys
|
45
53
|
|
46
|
-
|
54
|
+
attr_names = Array(attr_names).flatten
|
47
55
|
digest_column = options.delete(:digest_column) || 'digest'
|
48
56
|
unique = options.key?(:unique) ? options.delete(:unique) : true
|
49
57
|
|
50
58
|
class_attribute :acts_as_digested_on_vars
|
51
59
|
self.acts_as_digested_on_vars = {
|
52
|
-
:
|
60
|
+
:attr_names => attr_names,
|
53
61
|
:digest_column => digest_column,
|
54
62
|
:unique => unique,
|
55
63
|
:validates_uniqueness_of_options => options
|
@@ -1,4 +1,4 @@
|
|
1
|
-
require
|
1
|
+
require 'spec_helper'
|
2
2
|
|
3
3
|
class Article < ActiveRecord::Base
|
4
4
|
define_table do |t|
|
@@ -9,9 +9,13 @@ class Article < ActiveRecord::Base
|
|
9
9
|
t.string :my_digest
|
10
10
|
t.text :content
|
11
11
|
end
|
12
|
+
|
13
|
+
def stripped_title
|
14
|
+
title.strip
|
15
|
+
end
|
12
16
|
end
|
13
17
|
|
14
|
-
describe
|
18
|
+
describe ActsAsDigestedOn do
|
15
19
|
before do
|
16
20
|
Article.reset_callbacks :validate
|
17
21
|
Article.destroy_all
|
@@ -21,12 +25,29 @@ describe "ActsAsDigestedOn" do
|
|
21
25
|
@url = 'http://example.com'
|
22
26
|
end
|
23
27
|
|
28
|
+
it 'has a version number' do
|
29
|
+
expect(ActsAsDigestedOn::VERSION).not_to be nil
|
30
|
+
end
|
31
|
+
|
32
|
+
it 'can use a method name instead of a column name' do
|
33
|
+
Article.acts_as_digested_on :stripped_title
|
34
|
+
|
35
|
+
article = Article.create!(title: ' hello ')
|
36
|
+
|
37
|
+
expect(article.digest).to eq Digest::SHA1.hexdigest('--hello--')
|
38
|
+
|
39
|
+
expect {
|
40
|
+
Article.create! title: 'hello'
|
41
|
+
}.to raise_error(ActiveRecord::RecordInvalid)
|
42
|
+
end
|
43
|
+
|
24
44
|
describe '#generate_digest' do
|
25
45
|
it 'should generate sha-1 digest of target field with some string' do
|
26
46
|
Article.acts_as_digested_on :url
|
27
47
|
|
28
|
-
article = Article.new(:
|
29
|
-
article.generate_digest.
|
48
|
+
article = Article.new(url: @url)
|
49
|
+
expect(article.generate_digest).to eq(
|
50
|
+
Digest::SHA1.hexdigest("--#{ @url }--"))
|
30
51
|
end
|
31
52
|
|
32
53
|
describe 'when more than one target field is given' do
|
@@ -34,8 +55,9 @@ describe "ActsAsDigestedOn" do
|
|
34
55
|
Article.acts_as_digested_on [:title, :url]
|
35
56
|
|
36
57
|
title = 'an article'
|
37
|
-
article = Article.new(:
|
38
|
-
article.generate_digest.
|
58
|
+
article = Article.new(title: title, url: @url)
|
59
|
+
expect(article.generate_digest).to eq(
|
60
|
+
Digest::SHA1.hexdigest("--#{ title }--#{ @url }--"))
|
39
61
|
end
|
40
62
|
end
|
41
63
|
end
|
@@ -44,21 +66,22 @@ describe "ActsAsDigestedOn" do
|
|
44
66
|
it 'should set "digest" field' do
|
45
67
|
Article.acts_as_digested_on :url
|
46
68
|
|
47
|
-
article = Article.new(:
|
48
|
-
article.digest.
|
69
|
+
article = Article.new(url: @url)
|
70
|
+
expect(article.digest).to be_nil
|
49
71
|
article.valid?
|
50
|
-
article.digest.
|
72
|
+
expect(article.digest).to eq article.generate_digest
|
51
73
|
end
|
52
74
|
|
53
75
|
it 'should set the digest value to :digest_column field when :digest_column option is set' do
|
54
|
-
Article.acts_as_digested_on :url, :
|
76
|
+
Article.acts_as_digested_on :url, digest_column: :my_digest
|
77
|
+
|
78
|
+
article = Article.new(url: @url)
|
79
|
+
expect(article.digest).to be_nil
|
80
|
+
expect(article.my_digest).to be_nil
|
55
81
|
|
56
|
-
article = Article.new(:url => @url)
|
57
|
-
article.digest.should be_nil
|
58
|
-
article.my_digest.should be_nil
|
59
82
|
article.valid?
|
60
|
-
article.digest.
|
61
|
-
article.my_digest.
|
83
|
+
expect(article.digest).to be_nil
|
84
|
+
expect(article.my_digest).to eq article.generate_digest
|
62
85
|
end
|
63
86
|
end
|
64
87
|
|
@@ -66,40 +89,54 @@ describe "ActsAsDigestedOn" do
|
|
66
89
|
it 'should validate uniqueness of digest field by default' do
|
67
90
|
Article.acts_as_digested_on :url
|
68
91
|
|
69
|
-
Article.create! :
|
70
|
-
|
71
|
-
|
92
|
+
Article.create! url: @url
|
93
|
+
expect {
|
94
|
+
Article.create! url: @url
|
95
|
+
}.to raise_error(ActiveRecord::RecordInvalid)
|
96
|
+
expect {
|
97
|
+
Article.create! url: 'http://example2.com'
|
98
|
+
}.not_to raise_error
|
72
99
|
end
|
73
100
|
|
74
101
|
it 'should carry over the options to the validates_uniqueness_of options' do
|
75
|
-
Article.acts_as_digested_on :url, :
|
76
|
-
|
77
|
-
Article.create! :
|
78
|
-
|
79
|
-
|
80
|
-
|
102
|
+
Article.acts_as_digested_on :url, scope: :user_id
|
103
|
+
|
104
|
+
Article.create! url: @url, user_id: 1
|
105
|
+
expect {
|
106
|
+
Article.create! url: @url, user_id: 1
|
107
|
+
}.to raise_error(ActiveRecord::RecordInvalid)
|
108
|
+
expect {
|
109
|
+
Article.create! url: @url, user_id: 2
|
110
|
+
}.not_to raise_error
|
111
|
+
expect {
|
112
|
+
Article.create! url: 'http://example2.com', user_id: 1
|
113
|
+
}.not_to raise_error
|
81
114
|
end
|
82
115
|
|
83
116
|
it 'should validate uniqueness of digest field when :unique option is true' do
|
84
|
-
Article.acts_as_digested_on :url, :
|
85
|
-
|
86
|
-
Article.create! :
|
87
|
-
|
88
|
-
|
117
|
+
Article.acts_as_digested_on :url, unique: true
|
118
|
+
|
119
|
+
Article.create! url: @url
|
120
|
+
expect {
|
121
|
+
Article.create! url: @url
|
122
|
+
}.to raise_error(ActiveRecord::RecordInvalid)
|
123
|
+
expect {
|
124
|
+
Article.create! url: 'http://example2.com'
|
125
|
+
}.not_to raise_error
|
89
126
|
end
|
90
127
|
|
91
128
|
it 'should not validate uniqueness of digest field when :unique option is false' do
|
92
|
-
Article.acts_as_digested_on :url, :
|
129
|
+
Article.acts_as_digested_on :url, unique: false
|
93
130
|
|
94
|
-
Article.create! :
|
95
|
-
|
131
|
+
Article.create! url: @url
|
132
|
+
expect { Article.create! url: @url }.not_to raise_error
|
96
133
|
end
|
97
134
|
|
98
135
|
it 'should support string key options' do
|
99
136
|
Article.acts_as_digested_on :url, 'unique' => false
|
100
137
|
|
101
|
-
Article.create! :
|
102
|
-
|
138
|
+
Article.create! url: @url
|
139
|
+
expect { Article.create! url: @url }.not_to raise_error
|
103
140
|
end
|
104
141
|
end
|
105
142
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -1,18 +1,11 @@
|
|
1
|
-
|
2
|
-
require 'rspec'
|
1
|
+
$LOAD_PATH.unshift File.expand_path('../../lib', __FILE__)
|
3
2
|
require 'active_record'
|
4
|
-
|
5
|
-
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
6
|
-
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
7
3
|
require 'acts_as_digested_on'
|
8
4
|
|
9
|
-
|
10
|
-
config.treat_symbols_as_metadata_keys_with_true_values = true
|
11
|
-
config.filter_run :focus => true
|
12
|
-
config.run_all_when_everything_filtered = true
|
13
|
-
end
|
5
|
+
I18n.enforce_available_locales = true
|
14
6
|
|
15
|
-
ActiveRecord::Base.establish_connection(
|
7
|
+
ActiveRecord::Base.establish_connection(
|
8
|
+
:adapter => 'sqlite3', :database => ':memory:')
|
16
9
|
|
17
10
|
class ActiveRecord::Base
|
18
11
|
def self.define_table(table_name = self.name.tableize, &migration)
|
metadata
CHANGED
@@ -1,49 +1,85 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: acts_as_digested_on
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
5
|
-
prerelease:
|
4
|
+
version: 0.0.4
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- milk1000cc
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date:
|
11
|
+
date: 2014-06-15 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
|
-
name:
|
16
|
-
requirement:
|
17
|
-
none: false
|
14
|
+
name: activerecord
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
18
16
|
requirements:
|
19
|
-
- -
|
17
|
+
- - ">="
|
20
18
|
- !ruby/object:Gem::Version
|
21
19
|
version: 3.0.0
|
22
20
|
type: :runtime
|
23
21
|
prerelease: false
|
24
|
-
version_requirements:
|
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: bundler
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '1.6'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '1.6'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rake
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
25
55
|
- !ruby/object:Gem::Dependency
|
26
56
|
name: rspec
|
27
|
-
requirement:
|
28
|
-
none: false
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
29
58
|
requirements:
|
30
|
-
- -
|
59
|
+
- - ">="
|
31
60
|
- !ruby/object:Gem::Version
|
32
61
|
version: '0'
|
33
62
|
type: :development
|
34
63
|
prerelease: false
|
35
|
-
version_requirements:
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
36
69
|
- !ruby/object:Gem::Dependency
|
37
70
|
name: sqlite3
|
38
|
-
requirement:
|
39
|
-
none: false
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
40
72
|
requirements:
|
41
|
-
- -
|
73
|
+
- - ">="
|
42
74
|
- !ruby/object:Gem::Version
|
43
75
|
version: '0'
|
44
76
|
type: :development
|
45
77
|
prerelease: false
|
46
|
-
version_requirements:
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
47
83
|
description: This gem sets the digested value before validation and validates uniqueness
|
48
84
|
of the digested value.
|
49
85
|
email:
|
@@ -52,41 +88,46 @@ executables: []
|
|
52
88
|
extensions: []
|
53
89
|
extra_rdoc_files: []
|
54
90
|
files:
|
55
|
-
- .gitignore
|
56
|
-
- .rspec
|
57
|
-
- .travis.yml
|
91
|
+
- ".gitignore"
|
92
|
+
- ".rspec"
|
93
|
+
- ".travis.yml"
|
58
94
|
- Gemfile
|
59
|
-
- LICENSE
|
60
|
-
- README.
|
95
|
+
- LICENSE.txt
|
96
|
+
- README.md
|
61
97
|
- Rakefile
|
62
98
|
- acts_as_digested_on.gemspec
|
99
|
+
- gemfiles/active_record_30.gemfile
|
100
|
+
- gemfiles/active_record_31.gemfile
|
101
|
+
- gemfiles/active_record_32.gemfile
|
102
|
+
- gemfiles/active_record_40.gemfile
|
103
|
+
- gemfiles/active_record_41.gemfile
|
63
104
|
- lib/acts_as_digested_on.rb
|
64
105
|
- lib/acts_as_digested_on/version.rb
|
65
106
|
- spec/acts_as_digested_on_spec.rb
|
66
107
|
- spec/spec_helper.rb
|
67
108
|
homepage: https://github.com/milk1000cc/acts_as_digested_on
|
68
|
-
licenses:
|
109
|
+
licenses:
|
110
|
+
- MIT
|
111
|
+
metadata: {}
|
69
112
|
post_install_message:
|
70
113
|
rdoc_options: []
|
71
114
|
require_paths:
|
72
115
|
- lib
|
73
116
|
required_ruby_version: !ruby/object:Gem::Requirement
|
74
|
-
none: false
|
75
117
|
requirements:
|
76
|
-
- -
|
118
|
+
- - ">="
|
77
119
|
- !ruby/object:Gem::Version
|
78
120
|
version: '0'
|
79
121
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
80
|
-
none: false
|
81
122
|
requirements:
|
82
|
-
- -
|
123
|
+
- - ">="
|
83
124
|
- !ruby/object:Gem::Version
|
84
125
|
version: '0'
|
85
126
|
requirements: []
|
86
|
-
rubyforge_project:
|
87
|
-
rubygems_version:
|
127
|
+
rubyforge_project:
|
128
|
+
rubygems_version: 2.2.2
|
88
129
|
signing_key:
|
89
|
-
specification_version:
|
130
|
+
specification_version: 4
|
90
131
|
summary: Automatically set sha-1 hex digest
|
91
132
|
test_files:
|
92
133
|
- spec/acts_as_digested_on_spec.rb
|
data/README.rdoc
DELETED
@@ -1,70 +0,0 @@
|
|
1
|
-
= ActsAsDigestedOn {<img src="https://secure.travis-ci.org/milk1000cc/acts_as_digested_on.png?branch=master" alt="Build Status" />}[http://travis-ci.org/milk1000cc/acts_as_digested_on]
|
2
|
-
|
3
|
-
acts_as_digested_on is a gem for Rails 3.
|
4
|
-
|
5
|
-
This sets the digested value before validation and validates uniqueness of the digested value.
|
6
|
-
|
7
|
-
If you use this gem for Rails 2, see rails-2 branch.
|
8
|
-
|
9
|
-
== Install
|
10
|
-
|
11
|
-
sudo gem install acts_as_digested_on
|
12
|
-
|
13
|
-
== Usage
|
14
|
-
|
15
|
-
# db/migrate/20090706000000_create_articles.rb
|
16
|
-
class CreateArticles < ActiveRecord::Migration
|
17
|
-
def self.up
|
18
|
-
create_table :articles do |t|
|
19
|
-
t.text :url # any type is ok
|
20
|
-
t.string :digest # this is sha-1 hex digest field of url value
|
21
|
-
...
|
22
|
-
end
|
23
|
-
|
24
|
-
add_index :articles, :digest, :unique => true # you can add index on digest field
|
25
|
-
end
|
26
|
-
|
27
|
-
def self.down
|
28
|
-
drop_table :articles
|
29
|
-
end
|
30
|
-
end
|
31
|
-
|
32
|
-
# app/models/article.rb
|
33
|
-
class Article < ActiveRecord::Base
|
34
|
-
acts_as_digested_on :url # please add this
|
35
|
-
...
|
36
|
-
end
|
37
|
-
|
38
|
-
# this means
|
39
|
-
class Article < ActiveRecord::Base
|
40
|
-
validates_uniqueness_of :digest
|
41
|
-
before_validation :set_digest
|
42
|
-
|
43
|
-
def generate_digest
|
44
|
-
Digest::SHA1.hexdigest "--#{ url.to_s }--"
|
45
|
-
end
|
46
|
-
|
47
|
-
private
|
48
|
-
def set_digest
|
49
|
-
self.digest = generate_digest
|
50
|
-
end
|
51
|
-
...
|
52
|
-
end
|
53
|
-
|
54
|
-
== Examples
|
55
|
-
|
56
|
-
acts_as_digested_on :url, :unique => false
|
57
|
-
|
58
|
-
acts_as_digested_on :url, :digest_column => :url_digest
|
59
|
-
|
60
|
-
acts_as_digested_on [:url, :salt]
|
61
|
-
|
62
|
-
acts_as_digested_on :url, :scope => :site_id
|
63
|
-
|
64
|
-
Article.new(:url => 'http://example.com').generate_digest
|
65
|
-
|
66
|
-
== Copyright
|
67
|
-
|
68
|
-
Copyright (c) 2009-2012 milk1000cc, released under the MIT license
|
69
|
-
|
70
|
-
milk1000cc <mailto:info@milk1000.cc>
|