uuids 4.1.7 → 4.1.8

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: 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