attribute-filters 1.0.1 → 1.0.2

Sign up to get free protection for your applications and to get access to all the features.
data/.yardopts CHANGED
@@ -1,9 +1,10 @@
1
1
  --title 'Attribute Filters for Rails'
2
2
  --protected
3
- --readme README.rdoc
3
+ --readme README.md
4
4
  --no-private
5
5
  --hide-void-return
6
6
  -
7
+ docs/USAGE
7
8
  docs/HISTORY
8
9
  ChangeLog
9
10
  docs/COPYING
data/ChangeLog CHANGED
@@ -1,3 +1,21 @@
1
+ commit fc3cd20ea98315736374780179bf49637646aa34
2
+ Author: Paweł Wilk <siefca@gnu.org>
3
+ Date: Thu Jun 28 14:29:29 2012 +0200
4
+
5
+ Release 1.0.2
6
+
7
+ commit 4605f5c4cf5e0762c33315e96b1c4bb0574dc045
8
+ Author: Paweł Wilk <siefca@gnu.org>
9
+ Date: Thu Jun 28 14:25:22 2012 +0200
10
+
11
+ Extended arguments parging for DSL class method attribute_set
12
+
13
+ commit 3bb26fc1cc2827e08eec11ea5f57c305184daca1
14
+ Author: Paweł Wilk <siefca@gnu.org>
15
+ Date: Thu Jun 28 14:24:40 2012 +0200
16
+
17
+ README format changed to Markdown, added some development deps (Redcarped) required by YARD
18
+
1
19
  commit 2b72084f1eef2a7b8dfa632a2fd918eae203f106
2
20
  Author: Paweł Wilk <siefca@gnu.org>
3
21
  Date: Thu Jun 28 11:53:58 2012 +0200
data/Gemfile CHANGED
@@ -11,6 +11,7 @@ gem "hoe-yard", ">=0.1.2", :group => [:development, :test]
11
11
  gem "rspec", ">=2.6.0", :group => [:development, :test]
12
12
  gem "yard", ">=0.7.2", :group => [:development, :test]
13
13
  gem "rdoc", ">=3.8.0", :group => [:development, :test]
14
+ gem "redcarpet", ">=2.1.0", :group => [:development, :test]
14
15
  gem "bundler", ">=1.0.10", :group => [:development, :test]
15
16
  gem "hoe-bundler", ">=1.1.0", :group => [:development, :test]
16
17
  gem "hoe-gemspec", ">=1.0.0", :group => [:development, :test]
data/Gemfile.lock CHANGED
@@ -50,6 +50,7 @@ GEM
50
50
  rake (0.9.2.2)
51
51
  rdoc (3.12)
52
52
  json (~> 1.4)
53
+ redcarpet (2.1.1)
53
54
  rspec (2.10.0)
54
55
  rspec-core (~> 2.10.0)
55
56
  rspec-expectations (~> 2.10.0)
@@ -78,5 +79,6 @@ DEPENDENCIES
78
79
  hoe-yard (>= 0.1.2)
79
80
  railties (~> 3.0)
80
81
  rdoc (>= 3.8.0)
82
+ redcarpet (>= 2.1.0)
81
83
  rspec (>= 2.6.0)
82
84
  yard (>= 0.7.2)
data/Manifest.txt CHANGED
@@ -5,7 +5,7 @@ Gemfile
5
5
  Gemfile.lock
6
6
  LGPL-LICENSE
7
7
  Manifest.txt
8
- README.rdoc
8
+ README.md
9
9
  Rakefile
10
10
  attribute-filters.gemspec
11
11
  docs/COPYING
@@ -13,6 +13,7 @@ docs/HISTORY
13
13
  docs/LEGAL
14
14
  docs/LGPL-LICENSE
15
15
  docs/TODO
16
+ docs/USAGE
16
17
  docs/rdoc.css
17
18
  init.rb
18
19
  lib/attribute-filters.rb
data/README.md ADDED
@@ -0,0 +1,206 @@
1
+ Attribute Filters for Rails
2
+ ===========================
3
+
4
+ **attribute-filters version `1.0`** (**`Sugar, ah honey honey`**)
5
+
6
+ **THIS IS BETA!**
7
+
8
+ * https://rubygems.org/gems/attribute-filters
9
+ * https://github.com/siefca/attribute-filters/tree
10
+ * mailto:pw@gnu.org
11
+
12
+
13
+ Summary
14
+ -------
15
+
16
+ Attribute Filters adds couple of DSL keywords and some syntactic sugar
17
+ to Rails thereby allowing you to express filtering and groupping
18
+ model attributes in a concise and clean way.
19
+
20
+ When?
21
+ -----
22
+
23
+ If your Rails application often filters the attributes that has changed
24
+ recently and uses callbacks to achieve that, then you may consider
25
+ refining that process and write methods for handling common operations
26
+ not certain attributes. See what I mean below.
27
+
28
+ ### Before ###
29
+
30
+ ```ruby
31
+ class User < ActiveRecord::Base
32
+
33
+ before_validation :strip_and_downcase_username
34
+ before_validation :strip_and_downcase_email
35
+ before_validation :strip_and_capitalize_real_name
36
+
37
+ def strip_and_downcase_username
38
+ if username.present?
39
+ self.username = self.username.strip.mb_chars.downcase.to_s
40
+ end
41
+ end
42
+
43
+ def strip_and_downcase_email
44
+ if email.present?
45
+ self.email.strip!
46
+ self.email.downcase!
47
+ end
48
+ end
49
+
50
+ def strip_and_capitalize_real_name
51
+ if real_name.present?
52
+ self.real_name = self.real_name.strip.mb_chars.split(' ').
53
+ map { |n| n.capitalize }.join(' ')
54
+ end
55
+ end
56
+
57
+ end
58
+ ```
59
+
60
+ (The more attributes there is the more messy it becomes and the filtering code is not reusable.)
61
+
62
+ ### After ###
63
+
64
+
65
+ ```ruby
66
+ class User < ActiveRecord::Base
67
+
68
+ attributes_that should_be_stripped: [ :username, :email, :real_name ]
69
+ attributes_that should_be_downcased: [ :username, :email ]
70
+ attributes_that should_be_capitalized: [ :username, :email ]
71
+
72
+ before_validation :strip_names
73
+ before_validation :downcase_names
74
+ before_validation :capitalize_names
75
+
76
+ def downcase_names
77
+ filter_attributes_that(:should_be_downcased) do |atr|
78
+ atr.mb_chars.downcase.to_s
79
+ end
80
+ end
81
+
82
+ def capitalize_names
83
+ filter_attributes_that(:should_be_capitalized) do |atr|
84
+ atr.mb_chars.split(' ').map { |n| n.capitalize }.join(' ')
85
+ end
86
+ end
87
+
88
+ def strip_names
89
+ for_attributes_that(:should_be_stripped) { |atr| atr.strip! }
90
+ end
91
+
92
+ end
93
+ ```
94
+
95
+ (Names of new attributes that have to be altered in the same way can just be added to sets
96
+ and you can use the same altering methods across all models if you wish to.)
97
+
98
+ Usage
99
+ -----
100
+
101
+ You can use it to do attribute filtering as presented above but you can also
102
+ try using ActiveModel::AttributeSet directly, which helps to express some logic.
103
+ For example:
104
+
105
+ ```ruby
106
+ class User < ActiveRecord::Base
107
+
108
+ attributes_that_are required_to_trade: [ :username, :home_address, :bank_account ]
109
+
110
+ def can_trade?
111
+ are_attributes(:required_to_trade).all.present?
112
+ end
113
+
114
+ end
115
+ ```
116
+
117
+ * See [USAGE](http://rubydoc.info/gems/attribute-filters/file/docs/USAGE) for more examples and detailed information about the usage.
118
+ * See [whole documentation](http://rubydoc.info/gems/attribute-filters/) to browse all documents.
119
+
120
+ How it works?
121
+ -------------
122
+
123
+ It creates a new Active Model module called ActiveModel::AttributeFilters. That module
124
+ contains the needed DSL that goes into your models. It also creates ActiveModel::AttributeSet
125
+ class which is just a new kind of set, a structure for storing sets of attribute names.
126
+
127
+ Then it forces Rails to include the AttributeFilters in any model that
128
+ at any time will include ActiveModel::AttributeMethods. The last one is included
129
+ quite often; e.g. ActiveRecord and other popular ORM-s use it. (I'm calling it
130
+ "the accompanying module".)
131
+
132
+ That's why you can make use of attribute filters without explicitly including
133
+ the module, as long as your application relies on any popular ORM.
134
+
135
+ If something will go wrong however or your application is somehow unusual, you can always
136
+ include the AttributeFilters module manually in any of your models:
137
+
138
+ class ExampleModel
139
+ include ActiveModel::AttributeFilters
140
+ end
141
+
142
+ Requirements
143
+ ------------
144
+
145
+ * [activemodel](https://rubygems.org/gems/activemodel)
146
+ * [rake](https://rubygems.org/gems/rake)
147
+ * [rubygems](http://docs.rubygems.org/)
148
+ * [bundler](http://gembundler.com/)
149
+
150
+ Download
151
+ --------
152
+
153
+ ### Source code ###
154
+
155
+ * https://github.com/siefca/attribute-filters/tree
156
+ * `git clone git://github.com/siefca/attribute-filters.git`
157
+
158
+ ### Gem ###
159
+
160
+ * https://rubygems.org/gems/attribute-filters
161
+
162
+ Installation
163
+ ------------
164
+
165
+ ```
166
+ gem install attribute-filters
167
+ ```
168
+
169
+ Specs
170
+ -----
171
+
172
+ You can run RSpec examples both with
173
+
174
+ * `rake spec` or just `rake`
175
+ * run a test file directly, e.g. `ruby -Ilib -Ispec spec/attribute-filters_spec.rb`
176
+
177
+ Common rake tasks
178
+ -----------------
179
+
180
+ * `bundle exec rake bundler:gemfile` – regenerate the `Gemfile`
181
+ * `bundle exec rake docs` – render the documentation (output in the subdirectory directory `doc`)
182
+ * `bundle exec rake gem` – builds package (output in the subdirectory `pkg`)
183
+ * `bundle exec rake test` – performs tests
184
+ * `bundle exec rake Manifest.txt` – regenerates the `Manifest.txt` file
185
+ * `bundle exec rake ChangeLog` – regenerates the `ChangeLog` file
186
+
187
+ Credits
188
+ -------
189
+
190
+ * [iConsulting](http://www.iconsulting.pl/) supports Free Software and has contributed to this library by paying for me to eat when I've been coding.
191
+ * [MrZYX (Jonne Haß)](https://github.com/MrZYX) contributed by giving me some hints and answering basic questions on IRC – THX!
192
+
193
+ License
194
+ -------
195
+
196
+ Copyright (c) 2012 by Paweł Wilk.
197
+
198
+ attribute-filters is copyrighted software owned by Paweł Wilk (pw@gnu.org).
199
+ You may redistribute and/or modify this software as long as you
200
+ comply with either the terms of the LGPL (see {file:docs/LGPL}),
201
+ or Ruby's license (see {file:docs/COPYING}).
202
+
203
+ THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS
204
+ OR IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION,
205
+ THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
206
+ FOR A PARTICULAR PURPOSE.
data/Rakefile CHANGED
@@ -39,7 +39,7 @@ Hoe.spec 'attribute-filters' do
39
39
 
40
40
  self.remote_rdoc_dir = ''
41
41
  self.rsync_args << '--chmod=a+rX'
42
- self.readme_file = 'README.rdoc'
42
+ self.readme_file = 'README.md'
43
43
  self.history_file = 'docs/HISTORY'
44
44
 
45
45
  extra_deps << ['railties', '~> 3.0'] <<
@@ -47,6 +47,7 @@ Hoe.spec 'attribute-filters' do
47
47
  extra_dev_deps << ['rspec', '>= 2.6.0'] <<
48
48
  ['yard', '>= 0.7.2'] <<
49
49
  ['rdoc', '>= 3.8.0'] <<
50
+ ['redcarpet', '>= 2.1.0'] <<
50
51
  ['bundler', '>= 1.0.10'] <<
51
52
  ['hoe-bundler', '>= 1.1.0'] <<
52
53
  ['hoe-gemspec', '>= 1.0.0']
@@ -2,7 +2,7 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = "attribute-filters"
5
- s.version = "1.0.1.20120628115122"
5
+ s.version = "1.0.2.20120628142850"
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"]
@@ -10,8 +10,8 @@ Gem::Specification.new do |s|
10
10
  s.date = "2012-06-28"
11
11
  s.description = "Concise way of filtering model attributes in Rails."
12
12
  s.email = ["pw@gnu.org"]
13
- s.extra_rdoc_files = ["Manifest.txt", "README.rdoc"]
14
- s.files = [".rspec", ".yardopts", "ChangeLog", "Gemfile", "Gemfile.lock", "LGPL-LICENSE", "Manifest.txt", "README.rdoc", "Rakefile", "attribute-filters.gemspec", "docs/COPYING", "docs/HISTORY", "docs/LEGAL", "docs/LGPL-LICENSE", "docs/TODO", "docs/rdoc.css", "init.rb", "lib/attribute-filters.rb", "lib/attribute-filters/attribute_set.rb", "lib/attribute-filters/attribute_set_query.rb", "lib/attribute-filters/common_filters.rb", "lib/attribute-filters/dsl_filters.rb", "lib/attribute-filters/dsl_sets.rb", "lib/attribute-filters/railtie.rb", "lib/attribute-filters/version.rb", "spec/attribute-filters_spec.rb", "spec/spec_helper.rb", ".gemtest"]
13
+ s.extra_rdoc_files = ["Manifest.txt"]
14
+ s.files = [".rspec", ".yardopts", "ChangeLog", "Gemfile", "Gemfile.lock", "LGPL-LICENSE", "Manifest.txt", "README.md", "Rakefile", "attribute-filters.gemspec", "docs/COPYING", "docs/HISTORY", "docs/LEGAL", "docs/LGPL-LICENSE", "docs/TODO", "docs/USAGE", "docs/rdoc.css", "init.rb", "lib/attribute-filters.rb", "lib/attribute-filters/attribute_set.rb", "lib/attribute-filters/attribute_set_query.rb", "lib/attribute-filters/common_filters.rb", "lib/attribute-filters/dsl_filters.rb", "lib/attribute-filters/dsl_sets.rb", "lib/attribute-filters/railtie.rb", "lib/attribute-filters/version.rb", "spec/attribute-filters_spec.rb", "spec/spec_helper.rb", ".gemtest"]
15
15
  s.homepage = "https://rubygems.org/gems/attribute-filters/"
16
16
  s.rdoc_options = ["--title", "Attribute::Filters Documentation", "--quiet"]
17
17
  s.require_paths = ["lib"]
@@ -30,6 +30,7 @@ Gem::Specification.new do |s|
30
30
  s.add_development_dependency(%q<rspec>, [">= 2.6.0"])
31
31
  s.add_development_dependency(%q<yard>, [">= 0.7.2"])
32
32
  s.add_development_dependency(%q<rdoc>, [">= 3.8.0"])
33
+ s.add_development_dependency(%q<redcarpet>, [">= 2.1.0"])
33
34
  s.add_development_dependency(%q<bundler>, [">= 1.0.10"])
34
35
  s.add_development_dependency(%q<hoe-bundler>, [">= 1.1.0"])
35
36
  s.add_development_dependency(%q<hoe-gemspec>, [">= 1.0.0"])
@@ -41,6 +42,7 @@ Gem::Specification.new do |s|
41
42
  s.add_dependency(%q<rspec>, [">= 2.6.0"])
42
43
  s.add_dependency(%q<yard>, [">= 0.7.2"])
43
44
  s.add_dependency(%q<rdoc>, [">= 3.8.0"])
45
+ s.add_dependency(%q<redcarpet>, [">= 2.1.0"])
44
46
  s.add_dependency(%q<bundler>, [">= 1.0.10"])
45
47
  s.add_dependency(%q<hoe-bundler>, [">= 1.1.0"])
46
48
  s.add_dependency(%q<hoe-gemspec>, [">= 1.0.0"])
@@ -53,6 +55,7 @@ Gem::Specification.new do |s|
53
55
  s.add_dependency(%q<rspec>, [">= 2.6.0"])
54
56
  s.add_dependency(%q<yard>, [">= 0.7.2"])
55
57
  s.add_dependency(%q<rdoc>, [">= 3.8.0"])
58
+ s.add_dependency(%q<redcarpet>, [">= 2.1.0"])
56
59
  s.add_dependency(%q<bundler>, [">= 1.0.10"])
57
60
  s.add_dependency(%q<hoe-bundler>, [">= 1.1.0"])
58
61
  s.add_dependency(%q<hoe-gemspec>, [">= 1.0.0"])
data/docs/USAGE ADDED
File without changes
@@ -63,21 +63,34 @@ module ActiveModel
63
63
  # Creates one new set or many new sets of attribute of the given name.
64
64
  # @param set_options [Hash{Symbol,String => Array<Symbol,String>}] hash containing set names and arrays of attributes
65
65
  # @return [nil]
66
+ #
67
+ # @overload attribute_set(set_options, *attribute_names)
68
+ # Creates one new set of attributes of the given names.
69
+ # @param set_options [Hash{Symbol,String => String,Array<Symbol,String>}] hash containing set names and arrays of attributes
70
+ # @param attribute_names [Array<Symbol,String>] names of additional attributes to be stored in set
71
+ # @return [nil]
66
72
  def attribute_set(*args)
67
73
  case args.size
68
74
  when 0
69
75
  attribute_sets
70
76
  when 1
71
- a = args.first
72
- if a.is_a?(Hash)
73
- a.each_pair { |k,v| attribute_set(k,v) }
77
+ first_arg = args.first
78
+ if first_arg.is_a?(Hash)
79
+ first_arg.each_pair { |k,v| attribute_set(k,v) }
74
80
  nil
75
81
  else
76
- attribute_sets[a.to_sym] || ActiveModel::AttributeSet.new.freeze
82
+ attribute_sets[first_arg.to_sym] || ActiveModel::AttributeSet.new.freeze
77
83
  end
78
84
  else
79
- set_name = args.shift.to_sym
80
- attribute_sets[set_name] = ActiveModel::AttributeSet.new(args.flatten.compact.map{|x|x.to_s}).freeze
85
+ first_arg = args.shift
86
+ if first_arg.is_a?(Hash)
87
+ first_arg.each_pair do |k,v|
88
+ attribute_set(k,v,args)
89
+ end
90
+ else
91
+ set_name = first_arg.to_sym
92
+ attribute_sets[set_name] = ActiveModel::AttributeSet.new(args.flatten.compact.map{|a|a.to_s}).freeze
93
+ end
81
94
  nil
82
95
  end
83
96
  end
@@ -12,7 +12,7 @@ module AttributeFilters
12
12
  # @private
13
13
  EMAIL = 'pw@gnu.org'
14
14
  # @private
15
- VERSION = '1.0.1'
15
+ VERSION = '1.0.2'
16
16
  # @private
17
17
  NAME = 'attribute-filters'
18
18
  # @private
data.tar.gz.sig CHANGED
Binary file
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.0.1
4
+ version: 1.0.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -52,7 +52,7 @@ date: 2012-06-28 00:00:00.000000000 Z
52
52
  dependencies:
53
53
  - !ruby/object:Gem::Dependency
54
54
  name: railties
55
- requirement: &2157259360 !ruby/object:Gem::Requirement
55
+ requirement: &2157562220 !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: *2157259360
63
+ version_requirements: *2157562220
64
64
  - !ruby/object:Gem::Dependency
65
65
  name: activemodel
66
- requirement: &2157258880 !ruby/object:Gem::Requirement
66
+ requirement: &2157561760 !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: *2157258880
74
+ version_requirements: *2157561760
75
75
  - !ruby/object:Gem::Dependency
76
76
  name: hoe-yard
77
- requirement: &2157258440 !ruby/object:Gem::Requirement
77
+ requirement: &2157561300 !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: *2157258440
85
+ version_requirements: *2157561300
86
86
  - !ruby/object:Gem::Dependency
87
87
  name: rspec
88
- requirement: &2157257920 !ruby/object:Gem::Requirement
88
+ requirement: &2157560820 !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: *2157257920
96
+ version_requirements: *2157560820
97
97
  - !ruby/object:Gem::Dependency
98
98
  name: yard
99
- requirement: &2157257420 !ruby/object:Gem::Requirement
99
+ requirement: &2157560280 !ruby/object:Gem::Requirement
100
100
  none: false
101
101
  requirements:
102
102
  - - ! '>='
@@ -104,10 +104,10 @@ dependencies:
104
104
  version: 0.7.2
105
105
  type: :development
106
106
  prerelease: false
107
- version_requirements: *2157257420
107
+ version_requirements: *2157560280
108
108
  - !ruby/object:Gem::Dependency
109
109
  name: rdoc
110
- requirement: &2157256960 !ruby/object:Gem::Requirement
110
+ requirement: &2157559820 !ruby/object:Gem::Requirement
111
111
  none: false
112
112
  requirements:
113
113
  - - ! '>='
@@ -115,10 +115,21 @@ dependencies:
115
115
  version: 3.8.0
116
116
  type: :development
117
117
  prerelease: false
118
- version_requirements: *2157256960
118
+ version_requirements: *2157559820
119
+ - !ruby/object:Gem::Dependency
120
+ name: redcarpet
121
+ requirement: &2157559380 !ruby/object:Gem::Requirement
122
+ none: false
123
+ requirements:
124
+ - - ! '>='
125
+ - !ruby/object:Gem::Version
126
+ version: 2.1.0
127
+ type: :development
128
+ prerelease: false
129
+ version_requirements: *2157559380
119
130
  - !ruby/object:Gem::Dependency
120
131
  name: bundler
121
- requirement: &2157256520 !ruby/object:Gem::Requirement
132
+ requirement: &2157558880 !ruby/object:Gem::Requirement
122
133
  none: false
123
134
  requirements:
124
135
  - - ! '>='
@@ -126,10 +137,10 @@ dependencies:
126
137
  version: 1.0.10
127
138
  type: :development
128
139
  prerelease: false
129
- version_requirements: *2157256520
140
+ version_requirements: *2157558880
130
141
  - !ruby/object:Gem::Dependency
131
142
  name: hoe-bundler
132
- requirement: &2157256060 !ruby/object:Gem::Requirement
143
+ requirement: &2157558440 !ruby/object:Gem::Requirement
133
144
  none: false
134
145
  requirements:
135
146
  - - ! '>='
@@ -137,10 +148,10 @@ dependencies:
137
148
  version: 1.1.0
138
149
  type: :development
139
150
  prerelease: false
140
- version_requirements: *2157256060
151
+ version_requirements: *2157558440
141
152
  - !ruby/object:Gem::Dependency
142
153
  name: hoe-gemspec
143
- requirement: &2157255620 !ruby/object:Gem::Requirement
154
+ requirement: &2157574360 !ruby/object:Gem::Requirement
144
155
  none: false
145
156
  requirements:
146
157
  - - ! '>='
@@ -148,10 +159,10 @@ dependencies:
148
159
  version: 1.0.0
149
160
  type: :development
150
161
  prerelease: false
151
- version_requirements: *2157255620
162
+ version_requirements: *2157574360
152
163
  - !ruby/object:Gem::Dependency
153
164
  name: hoe
154
- requirement: &2157255160 !ruby/object:Gem::Requirement
165
+ requirement: &2157573920 !ruby/object:Gem::Requirement
155
166
  none: false
156
167
  requirements:
157
168
  - - ~>
@@ -159,7 +170,7 @@ dependencies:
159
170
  version: '2.16'
160
171
  type: :development
161
172
  prerelease: false
162
- version_requirements: *2157255160
173
+ version_requirements: *2157573920
163
174
  description: Concise way of filtering model attributes in Rails.
164
175
  email:
165
176
  - pw@gnu.org
@@ -167,7 +178,6 @@ executables: []
167
178
  extensions: []
168
179
  extra_rdoc_files:
169
180
  - Manifest.txt
170
- - README.rdoc
171
181
  files:
172
182
  - .rspec
173
183
  - .yardopts
@@ -176,7 +186,7 @@ files:
176
186
  - Gemfile.lock
177
187
  - LGPL-LICENSE
178
188
  - Manifest.txt
179
- - README.rdoc
189
+ - README.md
180
190
  - Rakefile
181
191
  - attribute-filters.gemspec
182
192
  - docs/COPYING
@@ -184,6 +194,7 @@ files:
184
194
  - docs/LEGAL
185
195
  - docs/LGPL-LICENSE
186
196
  - docs/TODO
197
+ - docs/USAGE
187
198
  - docs/rdoc.css
188
199
  - init.rb
189
200
  - lib/attribute-filters.rb
@@ -214,7 +225,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
214
225
  version: '0'
215
226
  segments:
216
227
  - 0
217
- hash: 1917410771860677924
228
+ hash: -1969500921463447156
218
229
  required_rubygems_version: !ruby/object:Gem::Requirement
219
230
  none: false
220
231
  requirements:
metadata.gz.sig CHANGED
Binary file
data/README.rdoc DELETED
@@ -1,186 +0,0 @@
1
- = Attribute Filters for Rails
2
-
3
- <b>attribute-filters version <tt>1.0.0</tt></b> (<b><tt>Sugar, ah honey honey</tt></b>)
4
-
5
- <b>THIS IS BETA!</b>
6
-
7
- * https://rubygems.org/gems/attribute-filters
8
- * https://github.com/siefca/attribute-filters/tree
9
- * mailto:pw@gnu.org
10
-
11
-
12
- == Summary
13
-
14
- Attribute Filters adds couple of DSL keywords and some syntactic sugar
15
- to Rails thereby allowing you to express filtering and groupping
16
- model attributes in a concise and clean way.
17
-
18
- == When?
19
-
20
- If your Rails application often filters the attributes that has changed
21
- recently and uses callbacks to achieve that, then you may consider
22
- refining that process and write methods for handling common operations
23
- not certain attributes. See what I mean below.
24
-
25
- === Before
26
-
27
- class User < ActiveRecord::Base
28
-
29
- before_validation :strip_and_downcase_username
30
- before_validation :strip_and_downcase_email
31
- before_validation :strip_and_capitalize_real_name
32
-
33
- def strip_and_downcase_username
34
- if username.present?
35
- self.username = self.username.strip.mb_chars.downcase.to_s
36
- end
37
- end
38
-
39
- def strip_and_downcase_email
40
- if email.present?
41
- self.email.strip!
42
- self.email.downcase!
43
- end
44
- end
45
-
46
- def strip_and_capitalize_real_name
47
- if real_name.present?
48
- self.real_name = self.real_name.strip.mb_chars.split(' ').
49
- map { |n| n.capitalize }.join(' ')
50
- end
51
- end
52
-
53
- end
54
-
55
- (The more attributes there is the more messy it becomes and the filtering code is not reusable.)
56
-
57
- === After
58
-
59
- class User < ActiveRecord::Base
60
-
61
- attributes_that :should_be_downcased => [ :username, :email ]
62
- attributes_that :should_be_stripped => [ :username, :email, :real_name ]
63
- attributes_that :should_be_capitalized => [ :username, :email ]
64
-
65
- before_validation :strip_names
66
- before_validation :downcase_names
67
- before_validation :capitalize_names
68
-
69
- def downcase_names
70
- filter_attributes_that(:should_be_downcased) do |atr|
71
- atr.mb_chars.downcase.to_s
72
- end
73
- end
74
-
75
- def capitalize_names
76
- filter_attributes_that(:should_be_capitalized) do |atr|
77
- atr.mb_chars.split(' ').map { |n| n.capitalize }.join(' ')
78
- end
79
- end
80
-
81
- def strip_names
82
- for_attributes_that(:should_be_stripped) { |atr| atr.strip! }
83
- end
84
-
85
- end
86
-
87
- (Names of new attributes that have to be altered in the same way can just be added to sets
88
- and you can use the same altering methods across all models if you wish to.)
89
-
90
- == Usage
91
-
92
- You can use it to do attribute filtering as presented above but you can also
93
- try using ActiveModel::AttributeSet directly, which helps to express some logic.
94
- For example:
95
-
96
- class User < ActiveRecord::Base
97
-
98
- attributes_that_are :required_to_trade => [ :username, :home_address, :bank_account ]
99
-
100
- def can_trade?
101
- are_attributes(:required_to_trade).all.present?
102
- end
103
-
104
- end
105
-
106
- * See {USAGE}[http://rubydoc.info/gems/attribute-filters/file/docs/USAGE] for more examples and detailed information about the usage.
107
- * See {whole documentation}[http://rubydoc.info/gems/attribute-filters/] to browse all documents.
108
-
109
- == How it works?
110
-
111
- It creates a new Active Model module called ActiveModel::AttributeFilters. That module
112
- contains the needed DSL that goes into your models. It also creates ActiveModel::AttributeSet
113
- class which is just a new kind of set, a structure for storing sets of attribute names.
114
-
115
- Then it forces Rails to include the AttributeFilters in any model that
116
- at any time will include ActiveModel::AttributeMethods. The last one is included
117
- quite often; e.g. ActiveRecord and other popular ORM-s use it. (I'm calling it
118
- "the accompanying module".)
119
-
120
- That's why you can make use of attribute filters without explicitly including
121
- the module, as long as your application relies on any popular ORM.
122
-
123
- If something will go wrong however or your application is somehow unusual, you can always
124
- include the AttributeFilters module manually in any of your models:
125
-
126
- class ExampleModel
127
- include ActiveModel::AttributeFilters
128
- end
129
-
130
- == Requirements
131
-
132
- * activemodel[https://rubygems.org/gems/activemodel]
133
- * rake[https://rubygems.org/gems/rake]
134
- * rubygems[http://docs.rubygems.org/]
135
- * bundler[http://gembundler.com/]
136
-
137
- == Download
138
-
139
- ==== Source code
140
-
141
- * https://github.com/siefca/attribute-filters/tree
142
- * <tt>git clone git://github.com/siefca/attribute-filters.git</tt>
143
-
144
- ==== Gem
145
-
146
- * https://rubygems.org/gems/attribute-filters
147
-
148
- == Installation
149
-
150
- * <tt>gem install attribute-filters</tt>
151
-
152
- == Specs
153
-
154
- You can run RSpec examples both with
155
-
156
- * <tt>rake spec</tt> or just <tt>rake</tt>
157
- * run a test file directly, e.g. <tt>ruby -Ilib -Ispec spec/attribute-filters_spec.rb</tt>
158
-
159
- == Common rake tasks
160
-
161
- * <tt>bundle exec rake bundler:gemfile</tt> – regenerate the +Gemfile+
162
- * <tt>bundle exec rake docs</tt> – render the documentation (output in the subdirectory directory +doc+)
163
- * <tt>bundle exec rake gem</tt> – builds package (output in the subdirectory +pkg+)
164
- * <tt>bundle exec rake test</tt> – performs tests
165
- * <tt>bundle exec rake Manifest.txt</tt> – regenerates the +Manifest.txt+ file
166
- * <tt>bundle exec rake ChangeLog</tt> – regenerates the +ChangeLog+ file
167
-
168
- == Credits
169
-
170
- * {iConsulting}[http://www.iconsulting.pl/] supports Free Software and has
171
- contributed to this library by paying for me to eat when I've been coding.
172
- * MrZYX (Jonne Haß) contributed by giving me some hints and answering basic questions on IRC – THX!
173
-
174
- == License
175
-
176
- Copyright (c) 2012 by Paweł Wilk.
177
-
178
- attribute-filters is copyrighted software owned by Paweł Wilk (pw@gnu.org).
179
- You may redistribute and/or modify this software as long as you
180
- comply with either the terms of the LGPL (see {file:docs/LGPL}),
181
- or Ruby's license (see {file:docs/COPYING}).
182
-
183
- THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS
184
- OR IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION,
185
- THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
186
- FOR A PARTICULAR PURPOSE.