referehencible 0.3.0 → 0.4.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.
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