attribute-filters 1.0.1 → 1.0.2

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/.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.