uuids 4.1.7 → 4.1.8

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: 5f2013e59ef6e2a13d044673bae11166eb4af94c
4
- data.tar.gz: 04cc1fff4fad8d482a81fdbf0877125c95e6b4e1
3
+ metadata.gz: 13e36a1b5f35a339e4111da9623e53eec0009ebe
4
+ data.tar.gz: 629d838eb2a302cdb12cc45f247b81105eb5ee07
5
5
  SHA512:
6
- metadata.gz: 3728db38cef371562e26f03cc68a61ac576670fac93c4b279b6ce17d24c832e124fae0f51dcc077ee24c1780b38851e7ffc0c2989671ec7d80bef535a407fdeb
7
- data.tar.gz: 74b3916cc3b38b5d59f2f4f5522751425890a00493d3aec31a6859f3a86ceadb89760422824e42ac2656f9a28280fb71557da949ffd0748eaacdac5ea0566257
6
+ metadata.gz: e04939b2fc5a1266dfecdd1e9d6cfd7ad07e42c7a0eb8e7e3d594598be53f37ead9424278f9f90cf1c4032a9c5236d26fe5b8e15af4cfc7bc30f0d086c6ae1f0
7
+ data.tar.gz: 45fc2caa49c7352dac77163c7757310cf56476b08933335575fafb11841ec01c8f21112d3452a089fdd43bf00682fd2832c262776318c1cd2c5b8a1883c35ff2
data/README.rdoc CHANGED
@@ -125,7 +125,7 @@ all object's UUIDs to another record in advance.
125
125
  class Street < ActiveRecord::Base
126
126
  include Uuids::Base
127
127
 
128
- belongs_by_uuid_to :city, class: City
128
+ belongs_by_uuid_to :city
129
129
  end
130
130
 
131
131
  This will add both getter and setter for the attribute:
@@ -9,7 +9,7 @@ module Uuids
9
9
  # city = City.new
10
10
  # city.respond_to? :state # => true
11
11
  # city.respond_to? :state= # => true
12
- class BelongsTo < Struct.new(:klass, :name, :model)
12
+ class BelongsTo < Struct.new(:klass, :name)
13
13
 
14
14
  # @api hide
15
15
  # @!attribute klass
@@ -21,11 +21,6 @@ module Uuids
21
21
  # The name of the attribute to be added.
22
22
  # @return [String, Symbol] The name.
23
23
 
24
- # @api hide
25
- # @!attribute model
26
- # The model to be referred by uuid.
27
- # @return [ActiveRecord::Base] The model class to be referred to.
28
-
29
24
  # @api hide
30
25
  # @!attribute [r] class_name
31
26
  # The name of the {#klass} constant.
@@ -34,14 +29,6 @@ module Uuids
34
29
  @class_name ||= klass.name
35
30
  end
36
31
 
37
- # @api hide
38
- # @!attribute [r] model_name
39
- # The name of the {#model} constant.
40
- # @return [String] The {#model} name.
41
- def model_name
42
- @model_name ||= model.name
43
- end
44
-
45
32
  # @api hide
46
33
  # @!attribute [r] model_name
47
34
  # The name of the {#klass} db table column to store reference to the
@@ -57,11 +44,9 @@ module Uuids
57
44
  # @param [ActiveRecord::Base] klass The model to add attribute to.
58
45
  # Should have a corresponding column for reference by uuid.
59
46
  # @param [String, Symbol] name The name of the attribute to be added.
60
- # @param [ActiveRecord::Base] model The model to be referred by uuid.
61
- # Should include the <tt>Uuids::Base</tt> module.
62
47
  # @raise (see Uuids::Base::BelongsTo#add)
63
- def self.add(klass, name, model)
64
- new(klass, name, model).add
48
+ def self.add(klass, name)
49
+ new(klass, name).add
65
50
  end
66
51
 
67
52
  # @api hide
@@ -71,7 +56,6 @@ module Uuids
71
56
  # @raise [NotImplementedError] if the {#klass} doesn't have the
72
57
  # correspondint {#column_name} column.
73
58
  def add
74
- check_model
75
59
  check_column
76
60
  add_getter
77
61
  add_setter
@@ -79,12 +63,6 @@ module Uuids
79
63
 
80
64
  private
81
65
 
82
- def check_model
83
- return if model.ancestors.include? Uuids::Base
84
- fail TypeError
85
- .new "#{ model_name } class doesn't include the Uuids::Base module"
86
- end
87
-
88
66
  def check_column
89
67
  return if klass.attribute_names.include? column_name
90
68
  fail NotImplementedError
@@ -99,6 +77,10 @@ module Uuids
99
77
  klass.class_eval setter
100
78
  end
101
79
 
80
+ def uuids
81
+ "Uuids::Models::Uuid"
82
+ end
83
+
102
84
  def getter
103
85
  "def #{ name };
104
86
  uuid = read_attribute :#{ column_name };
@@ -106,14 +88,13 @@ module Uuids
106
88
  if Array(@#{ name }.try(:uuids)).map(&:value).include? uuid;
107
89
  @#{ name };
108
90
  else;
109
- @#{ name } = #{ model_name }.by_uuid(uuid).includes(:uuids).first;
91
+ @#{ name } = #{ uuids }.where(value: uuid).first.try :record;
110
92
  end;
111
93
  end"
112
94
  end
113
95
 
114
96
  def setter
115
97
  "def #{ name }=(value);
116
- fail TypeError unless value.nil? || value.is_a?(#{ model_name });
117
98
  write_attribute :#{ column_name }, value.try(:uuid);
118
99
  #{ name };
119
100
  end"
data/lib/uuids/base.rb CHANGED
@@ -74,9 +74,9 @@ module Uuids
74
74
  # @param [Hash] options The options for the association.
75
75
  # @option options [Class] :class The model of the attribute.
76
76
  # @option options [String] :class_name The name of the attribute's model.
77
- def belongs_by_uuid_to(name, options = {})
78
- class_name = options[:class] || options[:class_name].constantize
79
- BelongsTo.add self, name, class_name
77
+ def belongs_by_uuid_to(name, opts = nil)
78
+ warn "[DEPRECATION] .belongs_by_uuid_to options are deprecated" if opts
79
+ BelongsTo.add self, name
80
80
  end
81
81
  end
82
82
 
data/lib/uuids/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  module Uuids
2
2
 
3
3
  # Current release.
4
- VERSION = "4.1.7"
4
+ VERSION = "4.1.8"
5
5
  end
Binary file
@@ -0,0 +1,73 @@
1
+ require "spec_helper"
2
+
3
+ module Uuids
4
+ describe "Base.belongs_by_uuid_to" do
5
+
6
+ context "when a corresponding _uuid column is absent" do
7
+
8
+ it "raises NotImplementedError" do
9
+ # The city has no "country_uuid" column
10
+ expect { City.send :belongs_by_uuid_to, :country }
11
+ .to raise_error { NotImplementedError }
12
+ end
13
+ end
14
+
15
+ context ":state" do
16
+
17
+ let!(:state) { State.create uuid: SecureRandom.uuid }
18
+
19
+ before { City.send :belongs_by_uuid_to, :state }
20
+ subject { City.new }
21
+
22
+ describe "#state" do
23
+
24
+ it "is defined" do
25
+ expect(subject).to respond_to :state
26
+ expect(subject.method(:state).arity).to eq 0
27
+ end
28
+
29
+ it "corresponds to #state_uuid" do
30
+ expect { subject.state_uuid = state.uuid }
31
+ .to change { subject.state }.to state
32
+ end
33
+ end
34
+
35
+ describe "#state=" do
36
+
37
+ it "is defined" do
38
+ expect(subject).to respond_to :state=
39
+ expect(subject.method(:state=).arity).to eq 1
40
+ end
41
+
42
+ it "sets the #state" do
43
+ expect { subject.state = state }.to change { subject.state }.to state
44
+ end
45
+
46
+ it "sets the #state_uuid" do
47
+ expect { subject.state = state }
48
+ .to change { subject.state_uuid }.to state.uuid
49
+ end
50
+
51
+ it "resets the #state" do
52
+ subject.state = state
53
+ expect { subject.state = nil }.to change { subject.state }.to nil
54
+ end
55
+
56
+ it "resets the #state_uuid" do
57
+ subject.state = state
58
+ expect { subject.state = nil }.to change { subject.state_uuid }.to nil
59
+ end
60
+ end
61
+
62
+ # it "resets the object uuid" do
63
+ # subject.state = state
64
+ # expect { subject.state = nil }.to change { subject.state_uuid }.to nil
65
+ # end
66
+
67
+ # it "sets the object by uuid" do
68
+ # expect { subject.state_uuid = state.uuid }
69
+ # .to change { subject.state }.to state
70
+ # end
71
+ end
72
+ end
73
+ end
@@ -0,0 +1,65 @@
1
+ require "spec_helper"
2
+
3
+ module Uuids
4
+ describe "Base.has_uuids" do
5
+
6
+ # Dependencies
7
+ let(:uuids_class) { Uuids::Models::Uuid }
8
+
9
+ # For this specification, the City AR model has been prepared in the
10
+ # `spec dummy/app/models/city.rb`. The model included Uuids::Base.
11
+ before { City.send :has_uuids }
12
+ subject { City.new }
13
+
14
+ it "defines the #uuids attribute" do
15
+ subject.uuids.new value: SecureRandom.uuid
16
+ subject.save!
17
+ expect(uuids_class.first.try(:record)).to eq subject
18
+ expect(subject.uuids.first).to eq uuids_class.first
19
+ end
20
+
21
+ it "defines the #uuid method" do
22
+ 2.times { subject.uuids.new value: SecureRandom.uuid }
23
+ subject.save!
24
+ expect(subject.uuid).to eq subject.uuids.map(&:value).sort.first
25
+ end
26
+
27
+ it "defines the #uuid= method" do
28
+ value = "3ea8fd89-232f-4ed1-90b5-743da173cd7d"
29
+ subject.uuid = value
30
+ expect(subject.uuids.map(&:value)).to include(value)
31
+ end
32
+
33
+ it "defines the #uuids= method" do
34
+ value = "3ea8fd89-232f-4ed1-90b5-743da173cd7d"
35
+ subject.uuids = [value]
36
+ expect(subject.uuids.map(&:value)).to include(value)
37
+ end
38
+
39
+ it "defines +by_uuid+ class scope" do
40
+ subject.save!
41
+ subject.uuids.create!
42
+ values = subject.reload.uuids.map(&:value)
43
+ expect(City.by_uuid(*values).to_a).to eq [subject]
44
+ expect(City.by_uuid).to eq City.all
45
+ end
46
+
47
+ it "creates the first uuid by default" do
48
+ expect(subject.uuid).to be_present
49
+ end
50
+
51
+ it "requires the #uuids attribute" do
52
+ subject.save!
53
+ subject.uuids.each(&:delete)
54
+ expect(subject.reload).not_to be_valid
55
+ end
56
+
57
+ it "forbids destruction if uuids present" do
58
+ subject.save!
59
+ expect { subject.destroy! }.to raise_error
60
+ subject.uuids.each(&:delete)
61
+ subject.reload
62
+ expect { subject.destroy! }.not_to raise_error
63
+ end
64
+ end
65
+ end
@@ -3,149 +3,23 @@ require "spec_helper"
3
3
  module Uuids
4
4
  describe Base do
5
5
 
6
- # Dependencies
7
- let(:described_module) { Uuids::Base }
8
- let(:uuids_class) { Uuids::Models::Uuid }
6
+ subject { Uuids::Base }
7
+ before { class Test; end }
8
+ after { begin; Uuids.send :remove_constant, :Test; rescue; end }
9
9
 
10
10
  describe ".included" do
11
11
 
12
12
  context "from non AR class" do
13
13
 
14
- before { class Test; end }
15
- after do
16
- begin; described_module.send :remove_constant, :Test; rescue; end
17
- end
18
-
19
14
  it "fails" do
20
- expect { Test.include described_module }.to raise_error
15
+ expect { Test.include subject }.to raise_error
21
16
  end
22
17
  end
23
18
 
24
19
  context "from AR model" do
25
20
 
26
21
  it "doesn't fail" do
27
- expect { City.include described_module }.not_to raise_error
28
- end
29
- end
30
- end
31
-
32
- describe ".has_uuids" do
33
-
34
- # For this specification, the City AR model has been prepared in the
35
- # `spec dummy/app/models/city.rb`. The model included Uuids::Base.
36
- before { City.send :has_uuids }
37
- subject { City.new }
38
-
39
- it "defines the #uuids attribute" do
40
- subject.uuids.new value: SecureRandom.uuid
41
- subject.save!
42
- expect(uuids_class.first.try(:record)).to eq subject
43
- expect(subject.uuids.first).to eq uuids_class.first
44
- end
45
-
46
- it "defines the #uuid method" do
47
- 2.times { subject.uuids.new value: SecureRandom.uuid }
48
- subject.save!
49
- expect(subject.uuid).to eq subject.uuids.map(&:value).sort.first
50
- end
51
-
52
- it "defines the #uuid= method" do
53
- value = "3ea8fd89-232f-4ed1-90b5-743da173cd7d"
54
- subject.uuid = value
55
- expect(subject.uuids.map(&:value)).to include(value)
56
- end
57
-
58
- it "defines the #uuids= method" do
59
- value = "3ea8fd89-232f-4ed1-90b5-743da173cd7d"
60
- subject.uuids = [value]
61
- expect(subject.uuids.map(&:value)).to include(value)
62
- end
63
-
64
- it "defines +by_uuid+ class scope" do
65
- subject.save!
66
- subject.uuids.create!
67
- values = subject.reload.uuids.map(&:value)
68
- expect(City.by_uuid(*values).to_a).to eq [subject]
69
- expect(City.by_uuid).to eq City.all
70
- end
71
-
72
- it "creates the first uuid by default" do
73
- expect(subject.uuid).to be_present
74
- end
75
-
76
- it "requires the #uuids attribute" do
77
- subject.save!
78
- subject.uuids.each(&:delete)
79
- expect(subject.reload).not_to be_valid
80
- end
81
-
82
- it "forbids destruction if uuids present" do
83
- subject.save!
84
- expect { subject.destroy! }.to raise_error
85
- subject.uuids.each(&:delete)
86
- subject.reload
87
- expect { subject.destroy! }.not_to raise_error
88
- end
89
- end
90
-
91
- describe ".belongs_by_uuid_to" do
92
-
93
- context "when a model doesn't include Uuids::Base" do
94
-
95
- it "raises TypeError" do
96
- expect { City.send :belongs_by_uuid_to, :state, class: Record }
97
- .to raise_error { TypeError }
98
- end
99
- end
100
-
101
- context "when a class doesn't have column for uuids" do
102
-
103
- it "raises NotImplementedError" do
104
- expect { City.send :belongs_by_uuid_to, :country, class: State }
105
- .to raise_error { NotImplementedError }
106
- end
107
- end
108
-
109
- context "with valid arguments" do
110
-
111
- before { City.send :belongs_by_uuid_to, :state, class: State }
112
- subject { City.new }
113
-
114
- let!(:uuid) { "01234567-89ab-cdef-0123-456789abcdef" }
115
- let!(:state) { State.create uuid: uuid }
116
-
117
- it "defines the getter" do
118
- expect(subject).to respond_to :state
119
- expect(subject.method(:state).arity).to eq 0
120
- end
121
-
122
- it "defines the setter" do
123
- expect(subject).to respond_to :state=
124
- expect(subject.method(:state=).arity).to eq 1
125
- end
126
-
127
- it "sets the object" do
128
- expect { subject.state = state }.to change { subject.state }.to state
129
- end
130
-
131
- it "sets the object uuid" do
132
- expect { subject.state = state }
133
- .to change { subject.state_uuid }.to state.uuid
134
- end
135
-
136
- it "resets the object" do
137
- subject.state = state
138
- expect { subject.state = nil }.to change { subject.state }.to nil
139
- end
140
-
141
- it "resets the object uuid" do
142
- subject.state = state
143
- expect { subject.state = nil }.to change { subject.state_uuid }.to nil
144
- end
145
-
146
- it "sets the object by uuid" do
147
- expect { subject.state_uuid = state.uuid }
148
- .to change { subject.state }.to state
22
+ expect { City.include subject }.not_to raise_error
149
23
  end
150
24
  end
151
25
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: uuids
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.1.7
4
+ version: 4.1.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrew Kozin
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-12-29 00:00:00.000000000 Z
11
+ date: 2015-01-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: hexx-active_record
@@ -256,6 +256,8 @@ files:
256
256
  - spec/support/runtime/config/factory_girl.rb
257
257
  - spec/support/runtime/config/i18n.rb
258
258
  - spec/uuids/bin/uuids_spec.rb
259
+ - spec/uuids/lib/base/belongs_by_uuid_to_spec.rb
260
+ - spec/uuids/lib/base/has_uuids_spec.rb
259
261
  - spec/uuids/lib/base_spec.rb
260
262
  - spec/uuids/models/uuid_spec.rb
261
263
  - spec/uuids/services/add_spec.rb
@@ -285,6 +287,8 @@ specification_version: 4
285
287
  summary: UUIDs AR model.
286
288
  test_files:
287
289
  - spec/uuids/models/uuid_spec.rb
290
+ - spec/uuids/lib/base/belongs_by_uuid_to_spec.rb
291
+ - spec/uuids/lib/base/has_uuids_spec.rb
288
292
  - spec/uuids/lib/base_spec.rb
289
293
  - spec/uuids/services/add_spec.rb
290
294
  - spec/uuids/bin/uuids_spec.rb