attr_cleaner 0.1.1 → 1.0.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.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 13fd121c241acea325b5ab89c95aefdaabc91a22
4
+ data.tar.gz: f4dd8fca1416c874e971899ab4559a62717a1beb
5
+ SHA512:
6
+ metadata.gz: 02dbd6aab1d253c9a137e03a6edeed70b0f76242b8c5af4cb737173b4da15cdb7bba2c343fcb1f9fb6c09ecade4651ad0e19de7a52f4d47b11b78d3a4faa7d75
7
+ data.tar.gz: b0206eee8379393eb280f870ea2748933483ccfe87c2bb81804d464e89b825dea011abea2ec12566cbd2f7e7a70294c1f99a575bd71f37a87128d3394be98202
data/.gitignore CHANGED
@@ -1,5 +1,5 @@
1
1
  pkg/*
2
- .yardoc/*
3
2
  *.gem
4
3
  .bundle
5
- .redcar/*
4
+ Gemfile.lock
5
+ gemfiles/*.lock
data/.ruby-gemset ADDED
@@ -0,0 +1 @@
1
+ attr_cleaner
data/.ruby-version ADDED
@@ -0,0 +1 @@
1
+ ruby-2.3.3
data/.travis.yml ADDED
@@ -0,0 +1,26 @@
1
+ language: ruby
2
+
3
+ sudo: false
4
+ cache: bundler
5
+
6
+ env:
7
+ global:
8
+ - TRAVIS_CI=1
9
+
10
+ rvm:
11
+ - 1.9.3
12
+ - 2.3.3
13
+
14
+ gemfile:
15
+ - gemfiles/rails_4.2.gemfile
16
+ - gemfiles/rails_5.0.gemfile
17
+
18
+ matrix:
19
+ exclude:
20
+ - rvm: 1.9.3
21
+ gemfile: gemfiles/rails_5.0.gemfile
22
+
23
+ before_install: gem update bundler
24
+ bundler_args: --without tools
25
+
26
+ script: bundle exec rspec -b
data/Appraisals ADDED
@@ -0,0 +1,5 @@
1
+ ["4.2", "5.0"].each do |rails|
2
+ appraise "rails-#{rails}" do
3
+ gem "activerecord", "~> #{rails}", require: "active_record"
4
+ end
5
+ end
data/Gemfile CHANGED
@@ -1,4 +1,11 @@
1
1
  source "http://rubygems.org"
2
2
 
3
- # Specify your gem's dependencies in attr_cleaner.gemspec
4
3
  gemspec
4
+
5
+ gem "rspec"
6
+ gem "jamjar"
7
+
8
+ group :tools do
9
+ gem "appraisal"
10
+ gem "byebug"
11
+ end
data/README.md ADDED
@@ -0,0 +1,58 @@
1
+ # AttrCleaner
2
+
3
+ Cleans up your model attributes. Strips leading and trailing space, and turns
4
+ empty strings into `nil`.
5
+
6
+ Tested against Rails 4.2 and 5.0.
7
+
8
+ ![Travis CI](https://travis-ci.org/thomasfedb/attr_cleaner.svg?branch=master)
9
+
10
+ ## Install
11
+
12
+ If you're using Rails with ActiveRecord all you need to do is:
13
+
14
+ ```ruby
15
+ gem "attr_cleaner"
16
+ ```
17
+
18
+ AttrCleaner will also work with any ORM that writes attributes via a method
19
+ called `write_attribute`.
20
+
21
+ To get AttrCleaner working with your ORM just include it into your models:
22
+
23
+ ```ruby
24
+ include AttrCleaner::Model
25
+ ```
26
+
27
+ AttrCleaner can also be used outside of Rails if ActiveSupport 3 is avalable.
28
+ If you're using AttrCleaner outside of Rails, and it detects ActiveRecord is
29
+ allready loaded, it will include itself into ActiveRecod. Make sure ActiveRecord
30
+ is loaded first.
31
+
32
+ ## Usage
33
+
34
+ Simply add this to any model you want to clean:
35
+
36
+ ```ruby
37
+ attr_cleaner
38
+ ```
39
+
40
+ You can restrict the cleaning to specific attributes with `:only` and `:except`:
41
+
42
+ ```ruby
43
+ attr_cleaner only: :name
44
+ attr_cleaner only: [:name, :age]
45
+ attr_cleaner except: :age
46
+ attr_cleaner except: [:age, :price]
47
+ ```
48
+
49
+ Settings are be inherited, so sometimes you may need both `:only` and `:except`:
50
+
51
+ ```ruby
52
+ # Remove :age from the list, add :name
53
+ attr_cleaner only: :name, except: :age
54
+ ```
55
+
56
+ ## Copyright
57
+
58
+ Copyright © 2010 Thomas Drake-Brockman
data/Rakefile CHANGED
@@ -1,2 +1,3 @@
1
1
  require 'bundler'
2
+
2
3
  Bundler::GemHelper.install_tasks
data/attr_cleaner.gemspec CHANGED
@@ -7,15 +7,15 @@ Gem::Specification.new do |s|
7
7
  s.version = AttrCleaner::VERSION
8
8
  s.platform = Gem::Platform::RUBY
9
9
  s.authors = ["Thomas Drake-Brockman"]
10
- s.email = ["thomas@pixent.com.au"]
11
- s.homepage = "https://rubygems.org/gems/attr_cleaner"
10
+ s.email = ["thom@sfedb.com"]
11
+ s.homepage = "https://github.com/thomasfedb/attr_cleaner"
12
12
  s.summary = "Cleans up model attributes."
13
- s.description = "Strips spaces from attributes, and sets empty strings to nil. Can be used with Rails 3, in any ActiveRecord project, or with other ORMs that define write_attribute."
13
+ s.description = "Strips spaces from attributes, and sets empty strings to nil."
14
14
 
15
15
  s.files = `git ls-files`.split("\n")
16
- s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
16
+ s.test_files = `git ls-files -- spec/*`.split("\n")
17
17
  s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
18
18
  s.require_paths = ["lib"]
19
-
20
- s.add_dependency('activesupport', '~> 3.0.0')
19
+
20
+ s.add_dependency('activesupport', '>= 4.2')
21
21
  end
@@ -0,0 +1,14 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "http://rubygems.org"
4
+
5
+ gem "rspec"
6
+ gem "jamjar"
7
+ gem "activerecord", "~> 4.2", :require => "active_record"
8
+
9
+ group :tools do
10
+ gem "appraisal"
11
+ gem "byebug"
12
+ end
13
+
14
+ gemspec :path => "../"
@@ -0,0 +1,14 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "http://rubygems.org"
4
+
5
+ gem "rspec"
6
+ gem "jamjar"
7
+ gem "activerecord", "~> 5.0", :require => "active_record"
8
+
9
+ group :tools do
10
+ gem "appraisal"
11
+ gem "byebug"
12
+ end
13
+
14
+ gemspec :path => "../"
@@ -0,0 +1,25 @@
1
+ module AttrCleaner
2
+ module Model
3
+ extend ActiveSupport::Concern
4
+
5
+ included do
6
+ alias_method_chain :write_attribute, :cleaner
7
+ class_attribute :attr_cleaners
8
+ end
9
+
10
+ def write_attribute_with_cleaner(attr_name, value)
11
+ if Array(attr_cleaners).include?(attr_name.to_sym) && value.is_a?(String)
12
+ value = value.strip
13
+ value = nil if value.empty?
14
+ end
15
+
16
+ write_attribute_without_cleaner(attr_name, value)
17
+ end
18
+
19
+ module ClassMethods
20
+ def attr_cleaner(*columns)
21
+ self.attr_cleaners = columns
22
+ end
23
+ end
24
+ end
25
+ end
@@ -5,7 +5,7 @@ module AttrCleaner
5
5
  class Railtie < Rails::Railtie
6
6
  initializer 'attr_cleaner.include_into_activerecord' do |app|
7
7
  ActiveSupport.on_load(:active_record) do
8
- ActiveRecord::Base.send(:include, AttrCleaner::ModuleMixin)
8
+ ActiveRecord::Base.send(:include, AttrCleaner::Model)
9
9
  end
10
10
  end
11
11
  end
@@ -1,3 +1,3 @@
1
1
  module AttrCleaner
2
- VERSION = "0.1.1"
2
+ VERSION = "1.0.0"
3
3
  end
data/lib/attr_cleaner.rb CHANGED
@@ -3,7 +3,7 @@ require "active_support/core_ext/module/aliasing"
3
3
  require "active_support/core_ext/class/attribute"
4
4
  require "active_support/concern"
5
5
 
6
- require "attr_cleaner/module_mixin"
6
+ require "attr_cleaner/model"
7
7
 
8
8
  # If not using active_record then include AttrCleaner::ModuleMixin.
9
9
 
@@ -12,5 +12,5 @@ if defined?(Rails::Railtie)
12
12
  require "attr_cleaner/railtie"
13
13
  else
14
14
  # If used outside of rails, just check for ActiveRecord::Base
15
- ActiveRecord::Base.send(:include, AttrCleaner::ModuleMixin) if defined?(ActiveRecord::Base)
16
- end
15
+ ActiveRecord::Base.send(:include, AttrCleaner::Model) if defined?(ActiveRecord::Base)
16
+ end
@@ -0,0 +1,52 @@
1
+ require "spec_helper"
2
+
3
+ describe AttrCleaner::Model do
4
+ let(:model) do
5
+ JamJar.model do
6
+ column :title, :string
7
+ column :body, :text
8
+ end
9
+ end
10
+
11
+ let(:instance) { model.new }
12
+
13
+ describe ".attr_cleaner" do
14
+ context "called with attributes" do
15
+ before { model.attr_cleaner :title, :body }
16
+
17
+ specify { expect(model.attr_cleaners).to eq [:title, :body] }
18
+ end
19
+ end
20
+
21
+ describe "#write_attribute_with_cleaner" do
22
+ context "with no cleaners" do
23
+ context "a padding string is assigned" do
24
+ before { instance.title = " Padded Title " }
25
+
26
+ specify { expect(instance.title).to eq " Padded Title " }
27
+ end
28
+
29
+ context "an empy string is assigned" do
30
+ before { instance.title = " " }
31
+
32
+ specify { expect(instance.title).to eq " " }
33
+ end
34
+ end
35
+
36
+ context "with cleaners" do
37
+ before { model.attr_cleaner :title }
38
+
39
+ context "a padding string is assigned" do
40
+ before { instance.title = " Padded Title " }
41
+
42
+ specify { expect(instance.title).to eq "Padded Title" }
43
+ end
44
+
45
+ context "an empy string is assigned" do
46
+ before { instance.title = " " }
47
+
48
+ specify { expect(instance.title).to be_nil }
49
+ end
50
+ end
51
+ end
52
+ end
@@ -0,0 +1,13 @@
1
+ require "bundler"
2
+
3
+ if ENV["TRAVIS_CI"]
4
+ Bundler.require
5
+ else
6
+ Bundler.require(:default, :tools)
7
+ end
8
+
9
+ ActiveRecord::Base.send(:include, AttrCleaner::Model)
10
+
11
+ RSpec.configure do |config|
12
+ config.order = "random"
13
+ end
metadata CHANGED
@@ -1,90 +1,77 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: attr_cleaner
3
- version: !ruby/object:Gem::Version
4
- prerelease: false
5
- segments:
6
- - 0
7
- - 1
8
- - 1
9
- version: 0.1.1
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
10
5
  platform: ruby
11
- authors:
6
+ authors:
12
7
  - Thomas Drake-Brockman
13
8
  autorequire:
14
9
  bindir: bin
15
10
  cert_chain: []
16
-
17
- date: 2011-01-01 00:00:00 +08:00
18
- default_executable:
19
- dependencies:
20
- - !ruby/object:Gem::Dependency
11
+ date: 2016-12-29 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
21
14
  name: activesupport
22
- prerelease: false
23
- requirement: &id001 !ruby/object:Gem::Requirement
24
- none: false
25
- requirements:
26
- - - ~>
27
- - !ruby/object:Gem::Version
28
- segments:
29
- - 3
30
- - 0
31
- - 0
32
- version: 3.0.0
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '4.2'
33
20
  type: :runtime
34
- version_requirements: *id001
35
- description: Strips spaces from attributes, and sets empty strings to nil. Can be used with Rails 3, in any ActiveRecord project, or with other ORMs that define write_attribute.
36
- email:
37
- - thomas@pixent.com.au
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '4.2'
27
+ description: Strips spaces from attributes, and sets empty strings to nil.
28
+ email:
29
+ - thom@sfedb.com
38
30
  executables: []
39
-
40
31
  extensions: []
41
-
42
32
  extra_rdoc_files: []
43
-
44
- files:
45
- - .gitignore
46
- - .rvmrc
33
+ files:
34
+ - ".gitignore"
35
+ - ".ruby-gemset"
36
+ - ".ruby-version"
37
+ - ".travis.yml"
38
+ - Appraisals
47
39
  - Gemfile
48
- - Gemfile.lock
49
40
  - LICENSE
50
- - README.rdoc
41
+ - README.md
51
42
  - Rakefile
52
43
  - attr_cleaner.gemspec
44
+ - gemfiles/rails_4.2.gemfile
45
+ - gemfiles/rails_5.0.gemfile
53
46
  - lib/attr_cleaner.rb
54
- - lib/attr_cleaner/module_mixin.rb
47
+ - lib/attr_cleaner/model.rb
55
48
  - lib/attr_cleaner/railtie.rb
56
49
  - lib/attr_cleaner/version.rb
57
- has_rdoc: true
58
- homepage: https://rubygems.org/gems/attr_cleaner
50
+ - spec/attr_cleaner/model_spec.rb
51
+ - spec/spec_helper.rb
52
+ homepage: https://github.com/thomasfedb/attr_cleaner
59
53
  licenses: []
60
-
54
+ metadata: {}
61
55
  post_install_message:
62
56
  rdoc_options: []
63
-
64
- require_paths:
57
+ require_paths:
65
58
  - lib
66
- required_ruby_version: !ruby/object:Gem::Requirement
67
- none: false
68
- requirements:
59
+ required_ruby_version: !ruby/object:Gem::Requirement
60
+ requirements:
69
61
  - - ">="
70
- - !ruby/object:Gem::Version
71
- segments:
72
- - 0
73
- version: "0"
74
- required_rubygems_version: !ruby/object:Gem::Requirement
75
- none: false
76
- requirements:
62
+ - !ruby/object:Gem::Version
63
+ version: '0'
64
+ required_rubygems_version: !ruby/object:Gem::Requirement
65
+ requirements:
77
66
  - - ">="
78
- - !ruby/object:Gem::Version
79
- segments:
80
- - 0
81
- version: "0"
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
82
69
  requirements: []
83
-
84
70
  rubyforge_project:
85
- rubygems_version: 1.3.7
71
+ rubygems_version: 2.5.2
86
72
  signing_key:
87
- specification_version: 3
73
+ specification_version: 4
88
74
  summary: Cleans up model attributes.
89
- test_files: []
90
-
75
+ test_files:
76
+ - spec/attr_cleaner/model_spec.rb
77
+ - spec/spec_helper.rb
data/.rvmrc DELETED
@@ -1,7 +0,0 @@
1
-
2
- if [[ -d "${rvm_path:-$HOME/.rvm}/environments" \
3
- && -s "${rvm_path:-$HOME/.rvm}/environments/ruby-1.9.2-p0@attr_cleaner" ]] ; then
4
- \. "${rvm_path:-$HOME/.rvm}/environments/ruby-1.9.2-p0@attr_cleaner"
5
- else
6
- rvm --create "ruby-1.9.2-p0@attr_cleaner"
7
- fi
data/Gemfile.lock DELETED
@@ -1,32 +0,0 @@
1
- PATH
2
- remote: .
3
- specs:
4
- attr_cleaner (0.0.3)
5
- activerecord (~> 3.0.0)
6
- activesupport (~> 3.0.0)
7
-
8
- GEM
9
- remote: http://rubygems.org/
10
- specs:
11
- activemodel (3.0.3)
12
- activesupport (= 3.0.3)
13
- builder (~> 2.1.2)
14
- i18n (~> 0.4)
15
- activerecord (3.0.3)
16
- activemodel (= 3.0.3)
17
- activesupport (= 3.0.3)
18
- arel (~> 2.0.2)
19
- tzinfo (~> 0.3.23)
20
- activesupport (3.0.3)
21
- arel (2.0.6)
22
- builder (2.1.2)
23
- i18n (0.5.0)
24
- tzinfo (0.3.23)
25
-
26
- PLATFORMS
27
- ruby
28
-
29
- DEPENDENCIES
30
- activerecord (~> 3.0.0)
31
- activesupport (~> 3.0.0)
32
- attr_cleaner!
data/README.rdoc DELETED
@@ -1,46 +0,0 @@
1
- = AttrCleaner
2
-
3
- Cleans up your model attributes. Strips leading and trailing space, and turns empty
4
- strings into nil.
5
-
6
- == Installing
7
-
8
- For Rails 3 with ActiveRecord just add this to your Gemfile:
9
-
10
- gem "attr_cleaner"
11
-
12
- Attr cleaner will play nice with any ORM that writes attributes
13
- via a method called `write_attribute`.
14
- To get AttrCleaner working with your ORM add this to an initializer file:
15
-
16
- MyOrm.send(:include, AttrCleaner::ModelMixin)
17
-
18
- or, include it into your models:
19
-
20
- include AttrCleaner::ModelMixin
21
-
22
- AttrCleaner can also be used outside of Rails if ActiveSupport 3 is avalable. If you're using
23
- AttrCleaner outside of Rails, and it detect ActiveRecord is allready loaded, it will include
24
- itself into ActiveRecod. Make sure ActiveRecord is loaded first.
25
-
26
- == Usage
27
-
28
- Simply add this to any model you want to clean:
29
-
30
- attr_cleaner
31
-
32
- You can restrict the cleaning to specific attributes with `:only` and `:except`
33
-
34
- attr_cleaner :only => :name
35
- attr_cleaner :only => [:name, :age]
36
- attr_cleaner :except => :age
37
- attr_cleaner :except => [:age, :price]
38
-
39
- Attributes to be cleaned can be inherited, so sometimes you may need both :only and :except
40
-
41
- # Remove :age from the list, add :name
42
- attr_cleaner :only => :name, :except => :age
43
-
44
- == Copyright
45
-
46
- Copyright (c) 2010 Thomas Drake-Brockman. See LICENSE for details.
@@ -1,36 +0,0 @@
1
- module AttrCleaner
2
- module ModuleMixin
3
- extend ActiveSupport::Concern
4
-
5
- included do
6
- alias_method_chain :write_attribute, :cleaner
7
- class_attribute :attr_cleaners
8
- end
9
-
10
- def write_attribute_with_cleaner(attr_name, value)
11
- if Array(attr_cleaners).include?(attr_name.to_sym) && value.is_a?(String)
12
- value = value.strip
13
- value = nil if value.empty?
14
- end
15
- write_attribute_without_cleaner(attr_name, value)
16
- end
17
-
18
- module ClassMethods
19
- # Adds attributes to the list of attributes to be cleaned
20
- # Attributes are inherited, but can be removed from :except
21
- #
22
- # @param [Hash] args options hash, set :only and/or :except
23
- # @return [Array] a array of symbols representing the attributes to be cleaned
24
- def attr_cleaner(args = {})
25
- all_columns = column_names.map(&:to_sym)
26
-
27
- only = Array(args[:only])
28
- except = Array(args[:except])
29
-
30
- columns = only.empty? ? all_columns : (only & all_columns)
31
-
32
- self.attr_cleaners = (Array(self.attr_cleaners) + columns) - except
33
- end
34
- end
35
- end
36
- end