attribute-filters 1.2.2 → 1.3.0

Sign up to get free protection for your applications and to get access to all the features.
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