activeentity 0.0.1.beta15 → 0.0.1.beta16

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
  SHA256:
3
- metadata.gz: 7f4a4f6e30f287b1ae750d510743b3cbb3c3ac40f00bcb56e9c5c634de23ce64
4
- data.tar.gz: 91a3be9d2223600c26ff56e025ddd37ec3d520951cc033587d196599a8b10e72
3
+ metadata.gz: 6fc81c04f6aa3b9b2095061533a4e631de8fd2ef7fff0d913514dba7e78058c3
4
+ data.tar.gz: 6b186abc2ea7c57e96ba9faa4ff77846d649ec84a3ee4174980414e7a306d6de
5
5
  SHA512:
6
- metadata.gz: 924b81ffdd2d8835492f7566dc70d11486932ff913a3bea4569294545a9f3037b009e147e6bf77c222686a82596bda207620dd2cb07ec8334af9937ab03b7df6
7
- data.tar.gz: da1b359c2ae9d9e0a1033bce6934c5fde0a18c96a78a8b63eaab4d5a83f71f75b241a59c5867cecaaff8033113d4c0bc0bdd094d04b3d0f057d113ad7a94c4b5
6
+ metadata.gz: 0261b0ccacb0996ed08028be638b82606a4e64684cba16dec3d25d1b899533145c5b25e31ddd0a5a4d496d97cc22eba42b4b2cc898c60a266584d69b070446f7
7
+ data.tar.gz: 0a4648417584703bbf90ae819369b730c2fcb0e5ce3c083d72603bff648b838885b3ededea13f9c3dc5592b31e183eb03e83d22774d80449381edf6d66d089cf
data/README.md CHANGED
@@ -65,7 +65,7 @@ Supported Active Record validations:
65
65
 
66
66
  #### `subset` validation
67
67
 
68
- Because Active Entity supports array attribute, for some reason, we may want to test values of an array attribute are all included in a given set.
68
+ Because Active Entity supports array attribute, for some reason, you may want to test values of an array attribute are all included in a given set.
69
69
 
70
70
  Active Entity provides `subset` validation to achieve that, it usage similar to `inclusion` or `exclusion`
71
71
 
@@ -76,9 +76,9 @@ class Steak < ActiveEntity::Base
76
76
  end
77
77
  ```
78
78
 
79
- #### `uniqueness_in_embedding` validation
79
+ #### `uniqueness_in_embeds` validation
80
80
 
81
- Active Entity provides `uniqueness_in_embedding` validation to test duplicate nesting virtual record.
81
+ Active Entity provides `uniqueness_in_embeds` validation to test duplicate nesting virtual record.
82
82
 
83
83
  Argument `key` is attribute name of nested model, it also supports multiple attributes by given an array.
84
84
 
@@ -101,6 +101,23 @@ class Book < ActiveEntity::Base
101
101
  end
102
102
  ```
103
103
 
104
+ #### `uniqueness_in_active_record` validation
105
+
106
+ Active Entity provides `uniqueness_in_active_record` validation to test given `scope` doesn't present in ActiveRecord model.
107
+
108
+ The usage same as [uniqueness](https://guides.rubyonrails.org/active_record_validations.html#uniqueness) in addition you must give a AR model `class_name`
109
+
110
+ ```ruby
111
+ class Candidate < ActiveEntity::Base
112
+ attribute :name, :string
113
+
114
+ validates :name,
115
+ uniqueness_on_active_record: {
116
+ class_name: "Staff"
117
+ }
118
+ end
119
+ ```
120
+
104
121
  ### Others
105
122
 
106
123
  These Active Record feature also available in Active Entity
@@ -6,29 +6,25 @@ module ActiveEntity
6
6
  module AttributeAssignment
7
7
  include ActiveModel::AttributeAssignment
8
8
 
9
- def assign_attributes(attributes)
10
- super(attributes.dup)
11
- end
12
-
13
9
  private
14
10
 
15
11
  def _assign_attributes(attributes)
16
- multi_parameter_attributes = {}
17
- nested_parameter_attributes = {}
12
+ multi_parameter_attributes = nested_parameter_attributes = nil
18
13
 
19
14
  attributes.each do |k, v|
20
15
  key = k.to_s
21
16
 
22
17
  if key.include?("(")
23
- multi_parameter_attributes[key] = attributes.delete(k)
18
+ (multi_parameter_attributes ||= {})[key] = v
24
19
  elsif v.is_a?(Hash)
25
- nested_parameter_attributes[key] = attributes.delete(k)
20
+ (nested_parameter_attributes ||= {})[key] = v
21
+ else
22
+ _assign_attribute(key, v)
26
23
  end
27
24
  end
28
- super(attributes)
29
25
 
30
- assign_nested_parameter_attributes(nested_parameter_attributes) unless nested_parameter_attributes.empty?
31
- assign_multiparameter_attributes(multi_parameter_attributes) unless multi_parameter_attributes.empty?
26
+ assign_nested_parameter_attributes(nested_parameter_attributes) if nested_parameter_attributes
27
+ assign_multiparameter_attributes(multi_parameter_attributes) if multi_parameter_attributes
32
28
  end
33
29
 
34
30
  # Assign any deferred nested attributes after the base attributes have been set.
@@ -1,6 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require "mutex_m"
4
+ require "active_support/core_ext/enumerable"
4
5
 
5
6
  module ActiveEntity
6
7
  # = Active Entity Attribute Methods
@@ -268,39 +269,6 @@ module ActiveEntity
268
269
  write_attribute(attr_name, value)
269
270
  end
270
271
 
271
- # Returns the name of all database fields which have been read from this
272
- # model. This can be useful in development mode to determine which fields
273
- # need to be selected. For performance critical pages, selecting only the
274
- # required fields can be an easy performance win (assuming you aren't using
275
- # all of the fields on the model).
276
- #
277
- # For example:
278
- #
279
- # class PostsController < ActionController::Base
280
- # after_action :print_accessed_fields, only: :index
281
- #
282
- # def index
283
- # @posts = Post.all
284
- # end
285
- #
286
- # private
287
- #
288
- # def print_accessed_fields
289
- # p @posts.first.accessed_fields
290
- # end
291
- # end
292
- #
293
- # Which allows you to quickly change your code to:
294
- #
295
- # class PostsController < ActionController::Base
296
- # def index
297
- # @posts = Post.select(:id, :title, :author_id, :updated_at)
298
- # end
299
- # end
300
- def accessed_fields
301
- @attributes.accessed
302
- end
303
-
304
272
  private
305
273
 
306
274
  def attribute_method?(attr_name)
@@ -308,12 +276,6 @@ module ActiveEntity
308
276
  defined?(@attributes) && @attributes.key?(attr_name)
309
277
  end
310
278
 
311
- def attributes_with_values(attribute_names)
312
- attribute_names.each_with_object({}) do |name, attrs|
313
- attrs[name] = _read_attribute(name)
314
- end
315
- end
316
-
317
279
  def format_for_inspect(value)
318
280
  if value.is_a?(String) && value.length > 50
319
281
  "#{value[0, 50]}...".inspect
@@ -10,7 +10,7 @@ module ActiveEntity
10
10
  MAJOR = 0
11
11
  MINOR = 0
12
12
  TINY = 1
13
- PRE = "beta15"
13
+ PRE = "beta16"
14
14
 
15
15
  STRING = [MAJOR, MINOR, TINY, PRE].compact.join(".")
16
16
  end
@@ -27,7 +27,7 @@ module ActiveEntity
27
27
  raise ArgumentError, "Must provide one of option :class_name or :class."
28
28
  end
29
29
  unless @klass < ActiveRecord::Base
30
- raise ArgumentError, "Class must be an Active Entity model, but got #{@finder_class}."
30
+ raise ArgumentError, "Class must be an Active Entity model, but got #{@klass}."
31
31
  end
32
32
  if @klass.abstract_class?
33
33
  raise ArgumentError, "Class can't be an abstract class."
@@ -39,13 +39,6 @@ module ActiveEntity
39
39
  value = map_enum_attribute(finder_class, attribute, value)
40
40
 
41
41
  relation = build_relation(finder_class, attribute, value)
42
- if record.persisted?
43
- if finder_class.primary_key
44
- relation = relation.where.not(finder_class.primary_key => record.id_in_database)
45
- else
46
- raise UnknownPrimaryKey.new(finder_class, "Cannot validate uniqueness for persisted record without primary key.")
47
- end
48
- end
49
42
  relation = scope_relation(record, relation)
50
43
  relation = relation.merge(options[:conditions]) if options[:conditions]
51
44
 
@@ -94,11 +87,7 @@ module ActiveEntity
94
87
 
95
88
  def scope_relation(record, relation)
96
89
  Array(options[:scope]).each do |scope_item|
97
- scope_value = if record.class._reflect_on_association(scope_item)
98
- record.association(scope_item).reader
99
- else
100
- record._read_attribute(scope_item)
101
- end
90
+ scope_value = record._read_attribute(scope_item)
102
91
  relation = relation.where(scope_item => scope_value)
103
92
  end
104
93
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: activeentity
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1.beta15
4
+ version: 0.0.1.beta16
5
5
  platform: ruby
6
6
  authors:
7
7
  - jasl
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-02-14 00:00:00.000000000 Z
11
+ date: 2020-03-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport