attribute-filters 1.2.2 → 1.3.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.
data/ChangeLog CHANGED
@@ -1,3 +1,39 @@
1
+ commit fd6696a66397299042f11ba1feb4e82aeb1f2919
2
+ Author: Paweł Wilk <siefca@gnu.org>
3
+ Date: Sun Aug 5 00:36:11 2012 +0200
4
+
5
+ Quick fix
6
+
7
+ commit 18c5ed453fa59d4d39d5bdc0a2ff2f84fe3eb3b1
8
+ Author: Paweł Wilk <siefca@gnu.org>
9
+ Date: Sat Aug 4 22:57:56 2012 +0200
10
+
11
+ Version 1.3.0
12
+
13
+ commit 8c210e016f29ed4fcd497e7ec18564d9ffa15a01
14
+ Author: Paweł Wilk <siefca@gnu.org>
15
+ Date: Sat Aug 4 22:52:58 2012 +0200
16
+
17
+ ChangeLog updated
18
+
19
+ commit 8eb6ee2dd7f7006e2ac19891ce1e2274e099550d
20
+ Author: Paweł Wilk <siefca@gnu.org>
21
+ Date: Sat Aug 4 22:51:25 2012 +0200
22
+
23
+ Added all_attributes instance method
24
+
25
+ commit d9ef8604c1cec45360af0e8684ac158948dd499c
26
+ Author: Paweł Wilk <siefca@gnu.org>
27
+ Date: Sat Aug 4 22:51:00 2012 +0200
28
+
29
+ Minor fixes in USAGE
30
+
31
+ commit 7504cc3c5578dfa9cc4f2d9b9044f1e17cfd7a71
32
+ Author: Paweł Wilk <siefca@gnu.org>
33
+ Date: Sat Aug 4 22:50:35 2012 +0200
34
+
35
+ Added valid? and invalid? DSL instance methods
36
+
1
37
  commit c1220554066705edceb097b7c26c665d26785271
2
38
  Author: Paweł Wilk <siefca@gnu.org>
3
39
  Date: Fri Aug 3 00:51:17 2012 +0200
data/README.md CHANGED
@@ -1,7 +1,7 @@
1
1
  Attribute Filters for Rails
2
2
  ===========================
3
3
 
4
- **attribute-filters version `1.2`** (**`Lavender Bunch`**)
4
+ **attribute-filters version `1.3`** (**`Reliable Sausage`**)
5
5
 
6
6
  * https://rubygems.org/gems/attribute-filters
7
7
  * https://github.com/siefca/attribute-filters/tree
@@ -2,12 +2,12 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = "attribute-filters"
5
- s.version = "1.2.2.20120803004107"
5
+ s.version = "1.3.0.20120804225210"
6
6
 
7
7
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
8
8
  s.authors = ["Pawe\u{142} Wilk"]
9
9
  s.cert_chain = ["/Users/siefca/.gem/gem-public_cert.pem"]
10
- s.date = "2012-08-02"
10
+ s.date = "2012-08-04"
11
11
  s.description = "Concise way of filtering model attributes in Rails."
12
12
  s.email = ["pw@gnu.org"]
13
13
  s.extra_rdoc_files = ["Manifest.txt"]
data/docs/HISTORY CHANGED
@@ -1,3 +1,19 @@
1
+ === 1.3.0 / 2012-08-04
2
+
3
+ * major bugfixes
4
+
5
+ * In AttributeSet::Query proxy class: proxy now uses send() to get attribute values
6
+
7
+ * major enhancements
8
+
9
+ * Added valid? and invalid? DSL instance methods
10
+ * Added all_attributes instance method
11
+
12
+ * minor enhancements
13
+
14
+ * Added is_a?() overrides in proxy classes
15
+ * Method attributes_to_filter now also takes attribute set as an argument
16
+
1
17
  === 1.2.2 / 2012-08-03
2
18
 
3
19
  * major enhancements
data/docs/TODO CHANGED
@@ -1,7 +1,3 @@
1
-
2
- * add valid? and invalid? to AttributeSet and to proxies
3
-
4
- * add some predefined, often used filters/sets
1
+ * add more predefined filtering methods
5
2
 
6
3
  * add rspec examples
7
-
data/docs/USAGE.md CHANGED
@@ -258,6 +258,18 @@ Instead of `attribute_sets` you may also use one of the aliases:
258
258
 
259
259
  * `attributes_sets`, `properties_sets`
260
260
 
261
+ #### `all_attributes` ####
262
+
263
+ The [`all_attributes`](http://rubydoc.info/gems/attribute-filters/ActiveModel/AttributeFilters:all_attributes)
264
+ method **returns the attribute set containing all known attributes**.
265
+
266
+ Example:
267
+
268
+ ```ruby
269
+ User.first.all_attributes
270
+ # => #<ActiveModel::AttributeSet: {"id", "username", "email", "password", "language", "created_at", "updated_at"}>
271
+ ```
272
+
261
273
  #### `filtered_attribute(attribute_name)` ####
262
274
 
263
275
  The [`filtered_attribute`](http://rubydoc.info/gems/attribute-filters/ActiveModel/AttributeFilters:filtered_attribute)
@@ -298,7 +310,28 @@ If you'll try to get the value of an element that doesn't exist **the empty set
298
310
  Instead of `attributes_to_sets` you may also use one of the aliases:
299
311
 
300
312
  * `attribute_sets_map`
301
-
313
+
314
+ #### `valid?` and `invalid?` ####
315
+
316
+ Validation helpers are used to test if the attributes present in a set
317
+ are valid. When `valid?` is called then **all** attributes from a set
318
+ must be valid for the method to return `true`. When `invalid?` is called
319
+ then **any** invalid attribute will cause the expression to return `true`.
320
+
321
+ Be aware that calling one of these methods will run validation process
322
+ on an instance of a model. Besides, your ORM should have the `errors`
323
+ hash available in order to use it (Active Record has it).
324
+
325
+ Example:
326
+
327
+ ```ruby
328
+ u = User.first
329
+ u.attributes_that(:should_be_stripped).valid?
330
+ # => true
331
+ u.attributes_that(:should_be_stripped).invalid?
332
+ # => false
333
+ ```
334
+
302
335
  ### Syntactic sugar for queries ###
303
336
 
304
337
  Querying attribute sets may be even more sweet when you add some syntactic sugar
@@ -443,6 +476,26 @@ is equivalent to:
443
476
  # => #<ActiveModel::AttributeSet: {"username", "email"}>
444
477
  ```
445
478
 
479
+ ##### Validation helpers #####
480
+
481
+ * **`valid?`**
482
+ * **`invalid?`**
483
+
484
+ Syntactic sugar for validation helpers is used when calls to these methods
485
+ are combined with selectors described above (presence selectors and elements selectors).
486
+
487
+ Examples:
488
+
489
+ ```ruby
490
+ u = User.first
491
+
492
+ u.attributes_that(:should_be_stripped).all.valid?
493
+ # => true
494
+
495
+ u.attributes_that(:should_be_stripped).list.valid?
496
+ # => #<ActiveModel::AttributeSet: {"username", "email"}>
497
+ ```
498
+
446
499
  #### Querying attributes for set names ####
447
500
 
448
501
  Querying attributes to know sets they belong to uses one
@@ -486,7 +539,7 @@ Example:
486
539
 
487
540
  ##### Set membership testing #####
488
541
 
489
- * **:belongs_to?**
542
+ * **`belongs_to?`**
490
543
  * **`in?`**
491
544
  * **`in_set?`**
492
545
  * **`in_a_set?`**
@@ -578,7 +631,6 @@ class User < ActiveRecord::Base
578
631
  def strip_names
579
632
  for_attributes_that(:should_be_stripped) { |atr| atr.strip! }
580
633
  end
581
-
582
634
  end
583
635
  ```
584
636
 
@@ -830,7 +882,6 @@ class User < ActiveRecord::Base
830
882
  def attributes_missing_to_trade
831
883
  attributes_that_are(:required_to_trade).list.blank?
832
884
  end
833
-
834
885
  end
835
886
  ```
836
887
 
@@ -56,6 +56,7 @@ module ActiveModel
56
56
  when :are, :is, :be, :should
57
57
  return self
58
58
  end
59
+ # Special selectors
59
60
  if @next_method.nil?
60
61
  case method_sym.to_sym
61
62
  when :all, :any, :none, :one
@@ -64,6 +65,10 @@ module ActiveModel
64
65
  when :list, :show
65
66
  ::ActiveModel::AttributeSet::Query.new(@set_object, @am_object).
66
67
  next_step(:select, args, block)
68
+ when :valid?, :is_valid?, :are_valid?, :all_valid?, :are_all_valid?
69
+ self.all.valid?
70
+ when :invalid?, :is_not_valid?, :any_invalid?, :are_not_valid?, :not_valid?, :is_any_invalid?
71
+ self.any.invalid?
67
72
  else
68
73
  r = @set_object.method(method_sym).call(*args, &block)
69
74
  return r if r.respond_to?(:__in_as_proxy) || !r.is_a?(::ActiveModel::AttributeSet)
@@ -72,7 +77,18 @@ module ActiveModel
72
77
  else
73
78
  m, args, block = @next_method
74
79
  @next_method = nil
75
- r = @set_object.method(m).call { |a| @am_object[a].method(method_sym).call(*args, &block) }
80
+ # m contains a method that we should call on a set of names (e.g. all? or any?)
81
+ # method_sym contains a method to be called on each attribute from a set (e.g. present?)
82
+ r = case method_sym
83
+ when :valid?
84
+ @am_object.valid?
85
+ @set_object.method(m).call(*args) { |atr| not @am_object.errors.has_key?(atr.to_sym) }
86
+ when :invalid?
87
+ @am_object.valid?
88
+ @set_object.method(m).call(*args) { |atr| @am_object.errors.has_key?(atr.to_sym) }
89
+ else
90
+ @set_object.method(m).call { |atr| @am_object.send(atr).method(method_sym).call(*args, &block) }
91
+ end
76
92
  return r if r.respond_to?(:__in_as_proxy) || !r.is_a?(::ActiveModel::AttributeSet)
77
93
  ::ActiveModel::AttributeSet::Query.new(r, @am_object)
78
94
  end
@@ -83,6 +99,10 @@ module ActiveModel
83
99
  case name.to_sym
84
100
  when :are, :is, :be, :should, :all, :any, :none, :one, :list, :show, :__in_as_proxy
85
101
  true
102
+ when :invalid?, :is_not_valid?, :any_invalid?, :are_not_valid?, :not_valid?, :is_any_invalid?
103
+ true
104
+ when :valid?, :is_valid?, :are_valid?, :all_valid?, :are_all_valid?
105
+ true
86
106
  else
87
107
  @set_object.respond_to?(name)
88
108
  end
@@ -43,6 +43,12 @@ module ActiveModel
43
43
  alias_method :attributes_set, :attribute_set
44
44
  alias_method :properties_that, :attribute_set
45
45
 
46
+ # Returns a set containing all attributes.
47
+ # @return [AttributeSet] attribute set
48
+ def all_attributes
49
+ ActiveModel::AttributeSet::Query.new(AttributeSet.new(attributes.keys), self)
50
+ end
51
+
46
52
  # Gets all the defined attribute sets.
47
53
  # @note Use +key+ method explicitly to check if the given set exists. The hash returned by this method
48
54
  # will always return {AttributeSet} object. If there is no such set defined then the returned,
@@ -14,7 +14,7 @@ module ActiveModel
14
14
  # @private
15
15
  EMAIL = 'pw@gnu.org'
16
16
  # @private
17
- VERSION = '1.2.2'
17
+ VERSION = '1.3.0'
18
18
  # @private
19
19
  NAME = 'attribute-filters'
20
20
  # @private
data.tar.gz.sig CHANGED
@@ -1,3 +1 @@
1
- ?ScB���>C��H:=������Vx��Rެ�5op"�-[S��v��e��\�ia2����e;�����&$�L ³G��v[N�'�����g\���^���Ei��
2
- ��g2$�If��"?�� ��|��T�%!�5�ͣk�7��5��������j�L�7�6
3
- �@|�7|l{�x��s�돊��*m
1
+ ���A�������( �c##nbӝ5��]̜��a�%B�����.<]���f��㨞+�#=�Jݔ���FE0����Sq͒TU��FN�y{t2代��Cw��;/�cj��Q�%�T�rcδ7'�V�U�%����3D��`��ڍDeR�wDr�TW��{'x�{��q�<AvHc8���4 @AY��k5���S�l�9��N�Lܭ���R2����_8Wl���ץ�~]<��'F|{f��Z����#R-��-Cg�s����
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: attribute-filters
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.2
4
+ version: 1.3.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -48,11 +48,11 @@ cert_chain:
48
48
  -----END CERTIFICATE-----
49
49
 
50
50
  '
51
- date: 2012-08-02 00:00:00.000000000 Z
51
+ date: 2012-08-04 00:00:00.000000000 Z
52
52
  dependencies:
53
53
  - !ruby/object:Gem::Dependency
54
54
  name: railties
55
- requirement: &2155091400 !ruby/object:Gem::Requirement
55
+ requirement: &2163264920 !ruby/object:Gem::Requirement
56
56
  none: false
57
57
  requirements:
58
58
  - - ~>
@@ -60,10 +60,10 @@ dependencies:
60
60
  version: '3.0'
61
61
  type: :runtime
62
62
  prerelease: false
63
- version_requirements: *2155091400
63
+ version_requirements: *2163264920
64
64
  - !ruby/object:Gem::Dependency
65
65
  name: activemodel
66
- requirement: &2155090940 !ruby/object:Gem::Requirement
66
+ requirement: &2163264460 !ruby/object:Gem::Requirement
67
67
  none: false
68
68
  requirements:
69
69
  - - ~>
@@ -71,10 +71,10 @@ dependencies:
71
71
  version: '3.0'
72
72
  type: :runtime
73
73
  prerelease: false
74
- version_requirements: *2155090940
74
+ version_requirements: *2163264460
75
75
  - !ruby/object:Gem::Dependency
76
76
  name: hoe-yard
77
- requirement: &2155090500 !ruby/object:Gem::Requirement
77
+ requirement: &2163264020 !ruby/object:Gem::Requirement
78
78
  none: false
79
79
  requirements:
80
80
  - - ! '>='
@@ -82,10 +82,10 @@ dependencies:
82
82
  version: 0.1.2
83
83
  type: :development
84
84
  prerelease: false
85
- version_requirements: *2155090500
85
+ version_requirements: *2163264020
86
86
  - !ruby/object:Gem::Dependency
87
87
  name: rspec
88
- requirement: &2155090020 !ruby/object:Gem::Requirement
88
+ requirement: &2163263540 !ruby/object:Gem::Requirement
89
89
  none: false
90
90
  requirements:
91
91
  - - ! '>='
@@ -93,10 +93,10 @@ dependencies:
93
93
  version: 2.6.0
94
94
  type: :development
95
95
  prerelease: false
96
- version_requirements: *2155090020
96
+ version_requirements: *2163263540
97
97
  - !ruby/object:Gem::Dependency
98
98
  name: yard
99
- requirement: &2155089540 !ruby/object:Gem::Requirement
99
+ requirement: &2163263060 !ruby/object:Gem::Requirement
100
100
  none: false
101
101
  requirements:
102
102
  - - ! '>='
@@ -104,10 +104,10 @@ dependencies:
104
104
  version: 0.8.2
105
105
  type: :development
106
106
  prerelease: false
107
- version_requirements: *2155089540
107
+ version_requirements: *2163263060
108
108
  - !ruby/object:Gem::Dependency
109
109
  name: rdoc
110
- requirement: &2155089100 !ruby/object:Gem::Requirement
110
+ requirement: &2163262620 !ruby/object:Gem::Requirement
111
111
  none: false
112
112
  requirements:
113
113
  - - ! '>='
@@ -115,10 +115,10 @@ dependencies:
115
115
  version: 3.8.0
116
116
  type: :development
117
117
  prerelease: false
118
- version_requirements: *2155089100
118
+ version_requirements: *2163262620
119
119
  - !ruby/object:Gem::Dependency
120
120
  name: redcarpet
121
- requirement: &2155088660 !ruby/object:Gem::Requirement
121
+ requirement: &2163262180 !ruby/object:Gem::Requirement
122
122
  none: false
123
123
  requirements:
124
124
  - - ! '>='
@@ -126,10 +126,10 @@ dependencies:
126
126
  version: 2.1.0
127
127
  type: :development
128
128
  prerelease: false
129
- version_requirements: *2155088660
129
+ version_requirements: *2163262180
130
130
  - !ruby/object:Gem::Dependency
131
131
  name: supermodel
132
- requirement: &2155088220 !ruby/object:Gem::Requirement
132
+ requirement: &2163261740 !ruby/object:Gem::Requirement
133
133
  none: false
134
134
  requirements:
135
135
  - - ! '>='
@@ -137,10 +137,10 @@ dependencies:
137
137
  version: 0.1.6
138
138
  type: :development
139
139
  prerelease: false
140
- version_requirements: *2155088220
140
+ version_requirements: *2163261740
141
141
  - !ruby/object:Gem::Dependency
142
142
  name: activerecord
143
- requirement: &2155087780 !ruby/object:Gem::Requirement
143
+ requirement: &2163261300 !ruby/object:Gem::Requirement
144
144
  none: false
145
145
  requirements:
146
146
  - - ! '>='
@@ -148,10 +148,10 @@ dependencies:
148
148
  version: '3.0'
149
149
  type: :development
150
150
  prerelease: false
151
- version_requirements: *2155087780
151
+ version_requirements: *2163261300
152
152
  - !ruby/object:Gem::Dependency
153
153
  name: bundler
154
- requirement: &2155087340 !ruby/object:Gem::Requirement
154
+ requirement: &2163277220 !ruby/object:Gem::Requirement
155
155
  none: false
156
156
  requirements:
157
157
  - - ! '>='
@@ -159,10 +159,10 @@ dependencies:
159
159
  version: 1.0.10
160
160
  type: :development
161
161
  prerelease: false
162
- version_requirements: *2155087340
162
+ version_requirements: *2163277220
163
163
  - !ruby/object:Gem::Dependency
164
164
  name: hoe-bundler
165
- requirement: &2155086900 !ruby/object:Gem::Requirement
165
+ requirement: &2163276780 !ruby/object:Gem::Requirement
166
166
  none: false
167
167
  requirements:
168
168
  - - ! '>='
@@ -170,10 +170,10 @@ dependencies:
170
170
  version: 1.1.0
171
171
  type: :development
172
172
  prerelease: false
173
- version_requirements: *2155086900
173
+ version_requirements: *2163276780
174
174
  - !ruby/object:Gem::Dependency
175
175
  name: hoe-gemspec
176
- requirement: &2155102820 !ruby/object:Gem::Requirement
176
+ requirement: &2163276340 !ruby/object:Gem::Requirement
177
177
  none: false
178
178
  requirements:
179
179
  - - ! '>='
@@ -181,10 +181,10 @@ dependencies:
181
181
  version: 1.0.0
182
182
  type: :development
183
183
  prerelease: false
184
- version_requirements: *2155102820
184
+ version_requirements: *2163276340
185
185
  - !ruby/object:Gem::Dependency
186
186
  name: hoe
187
- requirement: &2155102380 !ruby/object:Gem::Requirement
187
+ requirement: &2163275900 !ruby/object:Gem::Requirement
188
188
  none: false
189
189
  requirements:
190
190
  - - ~>
@@ -192,7 +192,7 @@ dependencies:
192
192
  version: '2.16'
193
193
  type: :development
194
194
  prerelease: false
195
- version_requirements: *2155102380
195
+ version_requirements: *2163275900
196
196
  description: Concise way of filtering model attributes in Rails.
197
197
  email:
198
198
  - pw@gnu.org
@@ -252,7 +252,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
252
252
  version: '0'
253
253
  segments:
254
254
  - 0
255
- hash: -2940101135055655246
255
+ hash: 1784207712795011672
256
256
  required_rubygems_version: !ruby/object:Gem::Requirement
257
257
  none: false
258
258
  requirements:
metadata.gz.sig CHANGED
Binary file