referehencible 0.3.0 → 0.4.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: 03574ae0e3f7ba6098b5ea51193bc99dccbfae43
4
- data.tar.gz: b49dd8e689591368cbad2ba72627306e86fa9552
3
+ metadata.gz: 76e7d2d6d28b8eb83da769dc60cdc123643a60f4
4
+ data.tar.gz: 950213b9061b6c92b2a975d741b556bf973bfc48
5
5
  SHA512:
6
- metadata.gz: c3f39b25708854711eacccd893f44263351b78ee93699d21f42f4efa29f1b4d303e8d9671f97a9f50016d31280d944be98cb9c0af0b2402654b731da841da192
7
- data.tar.gz: e08c212da708ffbcc3888f36931224f1de39192c19f3137ced3f3a42b2f5c8ccf83c2dd302109627d69eca4636f4e307061462882a762b6e979c0ace79630d50
6
+ metadata.gz: 1ee35b8dc26e1a11786e100b6344525cce3dfd3470e12b3e63f8c71819d8b09055119cb7405df8cb027fec7b62a2a437fd564e9e40a20b80fbdf3cf6e2d175d2
7
+ data.tar.gz: 6d41db6b7bbe1a522d8561b740bd92befa10de32730af788e36e01e30a11da3b6aa96ae16947c9caf3936a20272bf7060f1952f1b45945124acfddf4054dea95
@@ -1,3 +1,3 @@
1
1
  module Referehencible
2
- VERSION = '0.3.0'
2
+ VERSION = '0.4.0'
3
3
  end
@@ -2,19 +2,35 @@ require 'referehencible/version'
2
2
  require 'securerandom'
3
3
 
4
4
  module Referehencible
5
+ DEFAULT_LENGTH = 32
6
+
5
7
  module ClassMethods
6
8
  def referenced_by(*referenced_attributes)
7
- referenced_attributes.each do |reference_attribute|
9
+ default_options = { length: DEFAULT_LENGTH }
10
+
11
+ referenced_attributes = referenced_attributes.each_with_object({}) do |referenced_attribute, transformed_attributes|
12
+ case referenced_attribute
13
+ when Symbol
14
+ transformed_attributes[referenced_attribute] = default_options
15
+ when Hash
16
+ transformed_attributes.merge! referenced_attribute
17
+ end
18
+ end
19
+
20
+ referenced_attributes.each do |reference_attribute, options|
21
+ raise RuntimeError, "You attempted to pass in a length of #{options[:length]} for #{reference_attribute} in #{self.name}. Only even numbers are allowed." \
22
+ if options[:length].odd?
23
+
8
24
  validates reference_attribute,
9
25
  presence: true,
10
26
  uniqueness: true,
11
27
  format: {
12
- with: /[a-f0-9]{32}/ },
28
+ with: /[a-f0-9]{#{options[:length]}}/ },
13
29
  length: {
14
- is: 32 }
30
+ is: options[:length] }
15
31
 
16
32
  define_method(reference_attribute) do
17
- generate_guid(reference_attribute)
33
+ generate_guid(reference_attribute, options[:length] / 2)
18
34
  end
19
35
 
20
36
  define_singleton_method("by_#{reference_attribute}") do |guid_to_find|
@@ -23,13 +39,13 @@ module Referehencible
23
39
  unknown_reference_object
24
40
  end
25
41
 
26
- after_initialize lambda { generate_guid reference_attribute }
42
+ after_initialize lambda { generate_guid reference_attribute, options[:length] / 2 }
27
43
  end
28
44
 
29
45
  private
30
46
 
31
- define_method(:generate_guid) do |reference_attribute|
32
- read_attribute(reference_attribute) || write_attribute(reference_attribute, Referehencible.reference_number)
47
+ define_method(:generate_guid) do |reference_attribute, length|
48
+ read_attribute(reference_attribute) || write_attribute(reference_attribute, SecureRandom.hex(length))
33
49
  end
34
50
 
35
51
  define_singleton_method(:unknown_reference_object) do
@@ -43,8 +59,4 @@ module Referehencible
43
59
  def self.included(base)
44
60
  base.extend ClassMethods
45
61
  end
46
-
47
- def self.reference_number
48
- SecureRandom.hex(16)
49
- end
50
62
  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.3.0
4
+ version: 0.4.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-05-01 00:00:00.000000000 Z
12
+ date: 2014-06-21 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rspec
@@ -17,28 +17,28 @@ dependencies:
17
17
  requirements:
18
18
  - - "~>"
19
19
  - !ruby/object:Gem::Version
20
- version: 3.0.beta
20
+ version: '3.0'
21
21
  type: :development
22
22
  prerelease: false
23
23
  version_requirements: !ruby/object:Gem::Requirement
24
24
  requirements:
25
25
  - - "~>"
26
26
  - !ruby/object:Gem::Version
27
- version: 3.0.beta
27
+ version: '3.0'
28
28
  - !ruby/object:Gem::Dependency
29
29
  name: rspectacular
30
30
  requirement: !ruby/object:Gem::Requirement
31
31
  requirements:
32
32
  - - "~>"
33
33
  - !ruby/object:Gem::Version
34
- version: 0.21.6
34
+ version: 0.45.0
35
35
  type: :development
36
36
  prerelease: false
37
37
  version_requirements: !ruby/object:Gem::Requirement
38
38
  requirements:
39
39
  - - "~>"
40
40
  - !ruby/object:Gem::Version
41
- version: 0.21.6
41
+ version: 0.45.0
42
42
  - !ruby/object:Gem::Dependency
43
43
  name: codeclimate-test-reporter
44
44
  requirement: !ruby/object:Gem::Requirement