referehencible 0.1.1 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 9a60426f0d213be4448680bdc35b08811a9c41df
4
- data.tar.gz: 912e634169565ca00933635a43653deb52d7c803
3
+ metadata.gz: 22b3bcfb43a9e8d1d23e72fadb5aa3326958ea61
4
+ data.tar.gz: be86425f3fb14cf0ec01502245b336086a0bb073
5
5
  SHA512:
6
- metadata.gz: cfb51838938869e4e8f93ee3e6f6394d6b7a4b66ad6eb3ef1f717bd4a55d884d0a793233d51a6e92d15848f595090ab09a0e5efcddb03e4babc18eb187cc94dd
7
- data.tar.gz: c3ec926b7903e8288acc2200fcd02837e92b6a2a29bf9e020271565144bb7065386ab5ef6f5b84d52b5236b88e720ebe9512998e59e6b7acf65a3e7a873e392f
6
+ metadata.gz: ce8f858846e955919a34569714f455d33b10f60d91ee0ab53ebb41c45ed29c47abf7f2a20c83e1862a32968f72acd12ebe1ad49ac1e19a0f25cfe9826f8e88ea
7
+ data.tar.gz: d420716c431f6295ca7474af54e8d00782e6ab25acc85785a7d489ea67dbeca8945430b0c4e2bba13948957d277c6abd3e4d2dd2e9e85569f9138db98497e49a
data/README.md CHANGED
@@ -1,4 +1,6 @@
1
1
  Referehencible
2
- =======
2
+ ================================================================================
3
+
4
+ [![Build Status](https://secure.travis-ci.org/jfelchner/referehencible.png?branch=master)](http://travis-ci.org/jfelchner/referehencible) [![Code Climate](https://codeclimate.com/github/jfelchner/referehencible.png)](https://codeclimate.com/github/jfelchner/referehencible) [![Code Climate](https://codeclimate.com/github/jfelchner/referehencible/coverage.png)](https://codeclimate.com/github/jfelchner/referehencible)
3
5
 
4
6
  Enable unique reference numbers on all the things
@@ -2,33 +2,45 @@ require 'referehencible/version'
2
2
  require 'securerandom'
3
3
 
4
4
  module Referehencible
5
- def self.included(base)
6
- base.class_eval do
7
- ###
8
- # Validations
9
- #
10
- validates :guid,
11
- presence: true,
12
- uniqueness: true,
13
- format: {
14
- with: /[a-f0-9]{32}/ },
15
- length: {
16
- is: 32 }
17
-
18
- ###
19
- # Hooks
20
- #
21
- before_create :generate_guid
22
-
23
- ###
24
- # ActiveRecord Overrides
25
- #
26
- def guid; generate_guid; end
5
+ module ClassMethods
6
+ def referenced_by(*referenced_attributes)
7
+ referenced_attributes.each do |reference_attribute|
8
+ validates reference_attribute,
9
+ presence: true,
10
+ uniqueness: true,
11
+ format: {
12
+ with: /[a-f0-9]{32}/ },
13
+ length: {
14
+ is: 32 }
15
+
16
+ define_method(reference_attribute) do
17
+ generate_guid(reference_attribute)
18
+ end
19
+
20
+ define_singleton_method("by_#{reference_attribute}") do |guid_to_find|
21
+ where(:"#{reference_attribute}" => guid_to_find).
22
+ first ||
23
+ unknown_reference_object
24
+ end
25
+
26
+ after_initialize lambda { generate_guid reference_attribute }
27
+ end
28
+
29
+ private
30
+
31
+ define_method(:generate_guid) do |reference_attribute|
32
+ read_attribute(reference_attribute) || write_attribute(reference_attribute, SecureRandom.hex(16))
33
+ end
34
+
35
+ define_singleton_method(:unknown_reference_object) do
36
+ return new unless respond_to?(:as_null_object)
37
+
38
+ as_null_object
39
+ end
27
40
  end
28
41
  end
29
42
 
30
- private
31
- def generate_guid
32
- read_attribute(:guid) || write_attribute('guid', SecureRandom.hex(16))
43
+ def self.included(base)
44
+ base.extend ClassMethods
33
45
  end
34
46
  end
@@ -1,3 +1,3 @@
1
1
  module Referehencible
2
- VERSION = '0.1.1'
2
+ VERSION = '0.2.0'
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: referehencible
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - jfelchner
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2014-03-27 00:00:00.000000000 Z
12
+ date: 2014-04-08 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rspec