tiny_sweeper 0.0.5 → 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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d882388d33abc912ce5a2053ca3875fa522de795
4
- data.tar.gz: 9ba763bf797822519587ff6dd9083bb09ec8bac1
3
+ metadata.gz: 0c248480c222e8e718c8ef21fec9e827e856abd9
4
+ data.tar.gz: b027e8f57d02cc452b8517fe2551b1e8a12be2d2
5
5
  SHA512:
6
- metadata.gz: 7801be0bb60028f792f690d3027851a3d686070b2b57bce51dab5802171680ac5e75783621a537ff4ba0f526887a7369c4f49479b60db5efa4783e0b3a7e23d6
7
- data.tar.gz: 1085c3a1a2f13dc85ccd99f6e667fb1c31c6c55ca9878f4967c886b843bfa9b061bfd03e0ec0105c7d4e9deaa6a01a41de011d70acf9a5eab5f651a8a1cae2ec
6
+ metadata.gz: 00515ecb8ad22531a197c0df408bce1d9911b21dbbabf51a8490c7b3cde151fba641003d941fc5fc32297e839802acf5e9fddcde3b1f78c57c5e549520e411a2
7
+ data.tar.gz: 95301659fb178850356d405eec7624146124ac4d6e8536422b1b96733f35311bf01e0d4245e9ad9a08538621b754e5ec14ca3e6cffb003529fd79ba17eb82dbe
@@ -1 +1 @@
1
- ruby-2.2.0
1
+ ruby-2.3.0
@@ -1,5 +1,7 @@
1
+ sudo: false
1
2
  language: ruby
2
3
  rvm:
4
+ - 2.3.1
3
5
  - 2.2
4
6
  - 2.1
5
7
  - 2.0
@@ -0,0 +1,13 @@
1
+ tiny_sweeper (1.0.0) stable; urgency=low
2
+
3
+ * Change `sweep` to only take one attribute name, followed by zero or more
4
+ "brooms" (symbols that name a pre-configured way to sweep a value), and an
5
+ optional sweeping block.
6
+ * Add `TinySweeper::Brooms.add(name, &block)` for registering custom brooms.
7
+
8
+ tiny_sweeper (0.0.5) stable; urgency=low
9
+
10
+ * First public stable release
11
+ * Define sweeping rules with `sweep`, which takes multiple field names, and
12
+ a block
13
+ * Sweep all attributes of a class with `sweep_up!`
data/Gemfile CHANGED
@@ -1,4 +1,6 @@
1
1
  source 'https://rubygems.org'
2
2
 
3
- gem 'rake'
4
- gem 'rspec'
3
+ # Specify your gem's dependencies in fdic.gemspec
4
+ gemspec
5
+
6
+ gem "codeclimate-test-reporter", group: :test, require: nil
@@ -1,7 +1,16 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ tiny_sweeper (0.0.5)
5
+
1
6
  GEM
2
7
  remote: https://rubygems.org/
3
8
  specs:
9
+ codeclimate-test-reporter (0.6.0)
10
+ simplecov (>= 0.7.1, < 1.0.0)
4
11
  diff-lcs (1.2.5)
12
+ docile (1.1.5)
13
+ json (2.0.2)
5
14
  rake (10.4.2)
6
15
  rspec (3.2.0)
7
16
  rspec-core (~> 3.2.0)
@@ -16,10 +25,21 @@ GEM
16
25
  diff-lcs (>= 1.2.0, < 2.0)
17
26
  rspec-support (~> 3.2.0)
18
27
  rspec-support (3.2.0)
28
+ simplecov (0.12.0)
29
+ docile (~> 1.1.0)
30
+ json (>= 1.8, < 3)
31
+ simplecov-html (~> 0.10.0)
32
+ simplecov-html (0.10.0)
19
33
 
20
34
  PLATFORMS
21
35
  ruby
22
36
 
23
37
  DEPENDENCIES
38
+ bundler (~> 1.5)
39
+ codeclimate-test-reporter
24
40
  rake
25
41
  rspec
42
+ tiny_sweeper!
43
+
44
+ BUNDLED WITH
45
+ 1.12.5
data/README.md CHANGED
@@ -2,19 +2,22 @@
2
2
 
3
3
  TinySweeper keeps your objects tidy!
4
4
 
5
+ ![Hold me closer, Tiny Sweeper](https://github.com/ContinuityControl/tiny_sweeper/raw/master/tiny-sweeper.png)
6
+
5
7
  It's a handy way to clean attributes on your Rails models, though it's independent of Rails, and can be used in any Ruby project. It gives you a light-weigt way to override your methods and declare how their inputs should be cleaned.
6
8
 
7
9
  [![Build Status](https://travis-ci.org/ContinuityControl/tiny_sweeper.png?branch=master)](https://travis-ci.org/ContinuityControl/tiny_sweeper)
8
10
  [![Code Climate](https://codeclimate.com/github/ContinuityControl/tiny_sweeper/badges/gpa.svg)](https://codeclimate.com/github/ContinuityControl/tiny_sweeper)
11
+ [![Test Coverage](https://codeclimate.com/github/ContinuityControl/tiny_sweeper/badges/coverage.svg)](https://codeclimate.com/github/ContinuityControl/tiny_sweeper/coverage)
9
12
 
10
13
  ## How Do I Use It?
11
14
 
12
15
  ```ruby
13
16
  class Sundae
14
- attr_accessor :ice_cream, :topping
17
+ attr_accessor :ice_cream
15
18
 
16
19
  include TinySweeper
17
- sweep(:ice_cream, :topping) { |flavor| flavor.strip.downcase }
20
+ sweep(:ice_cream) { |flavor| flavor.strip.downcase }
18
21
  end
19
22
  ```
20
23
 
@@ -23,9 +26,7 @@ Now your Sundae toppings will be tidied up:
23
26
  ```ruby
24
27
  dessert = Sundae.new
25
28
  dessert.ice_cream = ' CHOCOlate '
26
- dessert.topping = ' ButTTERscotCH '
27
29
  dessert.ice_cream #=> 'chocolate'. Tidy!
28
- dessert.topping #=> 'butterscotch'. Tidy!
29
30
  ```
30
31
 
31
32
  TinySweeper will not bother you about your nil values; they're your job to handle.
@@ -34,42 +35,86 @@ TinySweeper will not bother you about your nil values; they're your job to handl
34
35
  Sundae.new.topping = nil # No topping? TinySweeper won't sweep it.
35
36
  ```
36
37
 
37
- If you have an object with lots of attributes that need cleaning (because, say, they were loaded from the database), you can do that, too:
38
+ If lots of attributes need to be swept the same way, you can pass an array of field names:
38
39
 
39
40
  ```ruby
40
- dessert.sweep_up!
41
- # or:
42
- Sundae.sweep_up!(dessert)
43
- ```
41
+ class Sundae
42
+ attr_accessor :ice_cream, :topping, :nuts
44
43
 
45
- ### Future Ideas
44
+ include TinySweeper
45
+ sweep [:ice_cream, :topping, :nuts] { |item| item.strip.downcase }
46
+ end
46
47
 
47
- Just spit-balling here...
48
+ dessert = Sundae.new
49
+ dessert.ice_cream = ' CHOCOlate '
50
+ dessert.topping = ' ButTTERscotCH '
51
+ dessert.nuts = ' CRUSHED peaNUtS '
52
+ dessert.ice_cream #=> 'chocolate'
53
+ dessert.topping #=> 'butterscotch'
54
+ dessert.nuts #=> 'crushed peanuts'
55
+ ```
48
56
 
49
- If you often sweep up fields in the same way - say, squishing and nilifying blanks - it'd be nice to bundle that up in some way, so you don't have to repeat yourself. Something like this might be nice:
57
+ TinySweeper already knows a few sweeping tricks, and you can ask for them by name:
50
58
 
51
59
  ```ruby
52
- # in config/initializers/tiny_sweeper.rb, or similar:
53
- TinySweeper.sweep_style(:squish_and_nil_blanks) { |value|
54
- ...
55
- }
60
+ class Sundae
61
+ attr_accessor :ice_cream
62
+
63
+ include TinySweeper
64
+ sweep :ice_cream, :blanks_to_nil
65
+ end
66
+
67
+ dessert = Sundae.new
68
+ dessert.ice_cream = ""
69
+ dessert.ice_cream #=> nil
70
+ ```
56
71
 
72
+ You can use as many as you need, and TinySweeper will apply them all, left-to-right:
73
+
74
+ ```ruby
57
75
  class Sundae
58
- sweep :topping, :squish_and_nil_blanks
76
+ attr_accessor :ice_cream
77
+
78
+ include TinySweeper
79
+ sweep :ice_cream, :strip, :blanks_to_nil
80
+
81
+ dessert = Sundae.new
82
+ dessert.ice_cream = " "
83
+ dessert.ice_cream #=> nil
59
84
  end
60
85
  ```
61
86
 
62
- If TinySweeper doesn't know the sweeping technique you asked for, it would send it to the value in the typical symbol-to-proc fashion:
87
+ TinySweeper currently only knows a few tricks...
88
+
89
+ * `blanks_to_nil`: turn empty strings into nils
90
+ * `strip`: just like `String#strip`: removes trailing and leading whitespace
91
+ * `dumb_quotes`: replace [Smart Quotes](https://en.wikipedia.org/wiki/Quotation_marks_in_English) with their simpler siblings
92
+
93
+ ...but you can teach it new ones:
94
+
95
+ ```ruby
96
+ TinySweeper::Brooms.add(:strip_html) { |value| Nokogiri::HTML(value).text }
97
+ ```
98
+
99
+ And you can always combine the built-in tricks with a block:
63
100
 
64
101
  ```ruby
65
102
  class Sundae
66
- # This:
67
- sweep :topping, :strip
68
- # ...would be the same as this:
69
- sweep :topping { |t| t.strip }
103
+ ...
104
+ sweep(:topping, :strip, :dumb_quotes) { |topping| topping.downcase }
70
105
  end
71
106
  ```
72
107
 
108
+ If you have an object with lots of attributes that need cleaning (because, say, they were loaded from the database), you can do that, too:
109
+
110
+ ```ruby
111
+ dessert.sweep_up!
112
+ # or:
113
+ Sundae.sweep_up!(dessert)
114
+ ```
115
+
116
+ ### Future Ideas
117
+
73
118
  #### Other Ways to Sweep
74
119
 
75
120
  Rails models are clearly the natural use-case for this. So it would make sense to have an easy way to auto-clean up models in a table. We'll see. Right now, this works (though it's slow):
data/Rakefile CHANGED
@@ -0,0 +1,6 @@
1
+ require "bundler/gem_tasks"
2
+ require "rspec/core/rake_task"
3
+
4
+ RSpec::Core::RakeTask.new(:spec)
5
+
6
+ task :default => :spec
@@ -1,13 +1,21 @@
1
+ require 'tiny_sweeper/brooms'
2
+ require 'tiny_sweeper/broom_closet'
3
+
1
4
  module TinySweeper
2
5
  module ClassMethods
3
- def sweep(*field_names, &sweeper)
6
+ def sweep(field_names, *broom_names, &sweeper)
4
7
  Array(field_names).each do |field_name|
5
8
  stop_if_we_have_seen_this_before!(field_name)
9
+ warn_about_missing_brooms(broom_names)
6
10
 
7
11
  overrides_module.module_eval do
8
12
  define_method("#{field_name}=") do |value|
9
13
  if value
10
- super(sweeper.call(value))
14
+ cleaned_up = broom_names.inject(value) { |accum, broom_name|
15
+ ::TinySweeper::Brooms.fetch(broom_name).call(accum)
16
+ }
17
+ cleaned_up = sweeper.call(cleaned_up) if sweeper
18
+ super(cleaned_up)
11
19
  else
12
20
  super(value)
13
21
  end
@@ -41,6 +49,14 @@ module TinySweeper
41
49
 
42
50
  @swept_fields << field_name
43
51
  end
52
+
53
+ def warn_about_missing_brooms(brooms)
54
+ brooms.each do |broom|
55
+ unless ::TinySweeper::Brooms.has_broom?(broom)
56
+ warn "TinySweeper doesn't have this broom: #{broom}"
57
+ end
58
+ end
59
+ end
44
60
  end
45
61
 
46
62
  def self.included(base)
@@ -51,6 +67,3 @@ module TinySweeper
51
67
  self.class.sweep_up!(self)
52
68
  end
53
69
  end
54
-
55
- # Do it on all fields, by default? Or be explicit?
56
- # TODO: add EagerSweeper, which loops over attributes. But how would it sweep?
@@ -0,0 +1,40 @@
1
+ module TinySweeper
2
+ module BroomCloset
3
+ def self.blanks_to_nil(value)
4
+ if value == ''
5
+ nil
6
+ else
7
+ value
8
+ end
9
+ end
10
+
11
+ def self.strip(value)
12
+ value && value.strip
13
+ end
14
+
15
+ def self.dumb_quotes(value)
16
+ return nil if value.nil?
17
+
18
+ # Stolen shamelessly from
19
+ # https://github.com/yob/dumb_quotes/blob/master/lib/dumb_quotes/ar_extend.rb:
20
+
21
+ # single quotes
22
+ value = value.gsub("\xE2\x80\x98","'") # U+2018
23
+ value = value.gsub("\xE2\x80\x99","'") # U+2019
24
+ value = value.gsub("\xCA\xBC","'") # U+02BC
25
+
26
+ # double quotes
27
+ value = value.gsub("\xE2\x80\x9C",'"') # U+201C
28
+ value = value.gsub("\xE2\x80\x9D",'"') # U+201D
29
+ value = value.gsub("\xCB\xAE",'"') # U+02EE
30
+
31
+ value
32
+ end
33
+ end
34
+
35
+ BroomCloset.methods.each do |broom|
36
+ Brooms.add(broom) { |value|
37
+ BroomCloset.send(broom, value)
38
+ }
39
+ end
40
+ end
@@ -0,0 +1,25 @@
1
+ module TinySweeper
2
+ module Brooms
3
+ def self.add(broom_name, &block)
4
+ (@brooms ||= {})[broom_name] = block
5
+ end
6
+
7
+ def self.has_broom?(broom_name)
8
+ (@brooms ||= {}).has_key?(broom_name)
9
+ end
10
+
11
+ def self.fetch(broom_name)
12
+ if has_broom?(broom_name)
13
+ (@brooms ||= {})[broom_name]
14
+ else
15
+ raise MissingBroomException, broom_name
16
+ end
17
+ end
18
+ end
19
+
20
+ class MissingBroomException < ::StandardError
21
+ def initialize(broom_name)
22
+ super("TinySweeper doesn't have this broom: #{broom_name}")
23
+ end
24
+ end
25
+ end
@@ -1,3 +1,3 @@
1
1
  module TinySweeper
2
- VERSION = "0.0.5"
2
+ VERSION = "1.0.0"
3
3
  end
@@ -1,3 +1,8 @@
1
+ require "codeclimate-test-reporter"
2
+ CodeClimate::TestReporter.start
3
+
4
+ require 'tiny_sweeper'
5
+
1
6
  # This file was generated by the `rspec --init` command. Conventionally, all
2
7
  # specs live under a `spec` directory, which RSpec adds to the `$LOAD_PATH`.
3
8
  # The generated `.rspec` file contains `--require spec_helper` which will cause
@@ -50,17 +55,6 @@ RSpec.configure do |config|
50
55
  config.filter_run :focus
51
56
  config.run_all_when_everything_filtered = true
52
57
 
53
- # Limits the available syntax to the non-monkey patched syntax that is
54
- # recommended. For more details, see:
55
- # - http://myronmars.to/n/dev-blog/2012/06/rspecs-new-expectation-syntax
56
- # - http://teaisaweso.me/blog/2013/05/27/rspecs-new-message-expectation-syntax/
57
- # - http://myronmars.to/n/dev-blog/2014/05/notable-changes-in-rspec-3#new__config_option_to_disable_rspeccore_monkey_patching
58
- config.disable_monkey_patching!
59
-
60
- # This setting enables warnings. It's recommended, but in some cases may
61
- # be too noisy due to issues in dependencies.
62
- config.warnings = true
63
-
64
58
  # Many RSpec users commonly either run the entire suite or an individual
65
59
  # file, and it's useful to allow more verbose output when running an
66
60
  # individual spec file.
@@ -75,6 +69,18 @@ RSpec.configure do |config|
75
69
  # end of the spec run, to help surface which specs are running
76
70
  # particularly slow.
77
71
  config.profile_examples = 10
72
+ =end
73
+
74
+ # This setting enables warnings. It's recommended, but in some cases may
75
+ # be too noisy due to issues in dependencies.
76
+ config.warnings = true
77
+
78
+ # Limits the available syntax to the non-monkey patched syntax that is
79
+ # recommended. For more details, see:
80
+ # - http://myronmars.to/n/dev-blog/2012/06/rspecs-new-expectation-syntax
81
+ # - http://teaisaweso.me/blog/2013/05/27/rspecs-new-message-expectation-syntax/
82
+ # - http://myronmars.to/n/dev-blog/2014/05/notable-changes-in-rspec-3#new__config_option_to_disable_rspeccore_monkey_patching
83
+ config.disable_monkey_patching!
78
84
 
79
85
  # Run specs in random order to surface order dependencies. If you find an
80
86
  # order dependency and want to debug it, you can fix the order by providing
@@ -87,5 +93,4 @@ RSpec.configure do |config|
87
93
  # test failures related to randomization by passing the same `--seed` value
88
94
  # as the one that triggered the failure.
89
95
  Kernel.srand config.seed
90
- =end
91
96
  end
@@ -0,0 +1,38 @@
1
+ RSpec.describe 'the brooms in the BroomCloset' do
2
+ describe 'blanks_to_nil' do
3
+ it 'turns empty strings into nil' do
4
+ expect(TinySweeper::BroomCloset.blanks_to_nil('')).to be_nil
5
+ end
6
+ it 'leaves nil values alone' do
7
+ expect(TinySweeper::BroomCloset.blanks_to_nil(nil)).to be_nil
8
+ end
9
+ it 'leaves whitespace-y strings alone' do
10
+ expect(TinySweeper::BroomCloset.blanks_to_nil(' ')).to eq(' ')
11
+ end
12
+ end
13
+
14
+ describe 'strip' do
15
+ it 'strips leading and/or trailing whitespace' do
16
+ expect(TinySweeper::BroomCloset.strip(' hello')).to eq('hello')
17
+ expect(TinySweeper::BroomCloset.strip('hello ')).to eq('hello')
18
+ expect(TinySweeper::BroomCloset.strip(' hello ')).to eq('hello')
19
+ end
20
+ it 'leaves nil values alone' do
21
+ expect(TinySweeper::BroomCloset.strip(nil)).to be_nil
22
+ end
23
+ end
24
+
25
+ describe 'dumb_quotes' do
26
+ it 'replaces smart quotes with dumb quotes in strings' do
27
+ expect(TinySweeper::BroomCloset.dumb_quotes("abc‘")).to eq(%q{abc'})
28
+ expect(TinySweeper::BroomCloset.dumb_quotes("abc’")).to eq(%q{abc'})
29
+ expect(TinySweeper::BroomCloset.dumb_quotes("abcʼ")).to eq(%q{abc'})
30
+ expect(TinySweeper::BroomCloset.dumb_quotes("abc“")).to eq(%q{abc"})
31
+ expect(TinySweeper::BroomCloset.dumb_quotes("abc”")).to eq(%q{abc"})
32
+ expect(TinySweeper::BroomCloset.dumb_quotes("abcˮ")).to eq(%q{abc"})
33
+ end
34
+ it 'leaves nil values alone' do
35
+ expect(TinySweeper::BroomCloset.dumb_quotes(nil)).to be_nil
36
+ end
37
+ end
38
+ end
@@ -1,7 +1,4 @@
1
- require 'spec_helper'
2
- require 'tiny_sweeper'
3
-
4
- describe 'cleaning fields' do
1
+ RSpec.describe 'cleaning fields' do
5
2
  class Contract
6
3
  attr_accessor :name, :notes
7
4
 
@@ -32,27 +29,6 @@ describe 'cleaning fields' do
32
29
  expect(contract.notes).to be_nil
33
30
  end
34
31
 
35
- describe 'sweeping up ALL the fields at once' do
36
- let(:the_contract) {
37
- Contract.new.tap do |c|
38
- c.name = ' will be upcased '
39
- c.notes = ' will be stripped '
40
- end
41
- }
42
-
43
- it 'can clean itself' do
44
- the_contract.sweep_up!
45
- expect(the_contract.name).to eq ' WILL BE UPCASED '
46
- expect(the_contract.notes).to eq 'will be stripped'
47
- end
48
-
49
- it 'can be cleaned from the class' do
50
- Contract.sweep_up!(the_contract)
51
- expect(the_contract.name).to eq ' WILL BE UPCASED '
52
- expect(the_contract.notes).to eq 'will be stripped'
53
- end
54
- end
55
-
56
32
  it 'will bark if you try to re-define a field twice' do
57
33
  some_class = Class.new
58
34
  some_class.send(:include, TinySweeper)
@@ -64,7 +40,7 @@ describe 'cleaning fields' do
64
40
 
65
41
  expect {
66
42
  some_class.send(:sweep, :name, &:upcase)
67
- }.to raise_error
43
+ }.to raise_error("Don't sweep name twice!")
68
44
  end
69
45
 
70
46
  it "will let you sweep an inherited method" do
@@ -84,11 +60,11 @@ describe 'cleaning fields' do
84
60
  end
85
61
  end
86
62
 
87
- describe 'sweeping many fields at once, in the same way' do
63
+ RSpec.describe 'defining the same sweep rule on many fields at once' do
88
64
  class Address
89
65
  attr_accessor :address1, :address2, :city, :state, :zip
90
66
  include TinySweeper
91
- sweep :address1, :address2, :city, :state, :zip, &:strip
67
+ sweep [:address1, :address2, :city, :state, :zip], &:strip
92
68
  end
93
69
 
94
70
  it 'can do it' do
@@ -107,3 +83,104 @@ describe 'sweeping many fields at once, in the same way' do
107
83
  expect(address.zip ).to eq('06510')
108
84
  end
109
85
  end
86
+
87
+ RSpec.describe 'defining sweep rules with built-in brooms' do
88
+ describe 'the simple case' do
89
+ class Sundae
90
+ attr_accessor :ice_cream
91
+ include TinySweeper
92
+ sweep :ice_cream, :blanks_to_nil
93
+ end
94
+
95
+ it 'can do it' do
96
+ sundae = Sundae.new
97
+ sundae.ice_cream = ''
98
+ expect(sundae.ice_cream).to be_nil
99
+ end
100
+ end
101
+
102
+ describe 'using multiple brooms' do
103
+ it 'calls them all, left-to-right' do
104
+ class Sundae
105
+ attr_accessor :topping
106
+ include TinySweeper
107
+ sweep :topping, :strip, :blanks_to_nil
108
+ end
109
+ sundae = Sundae.new
110
+ sundae.topping = ' '
111
+ expect(sundae.topping).to be_nil
112
+ end
113
+ end
114
+
115
+ describe 'using multiple brooms, and a block at the end' do
116
+ it 'calls the brooms, left-to-right, and then the block' do
117
+ class Sundae
118
+ attr_accessor :nuts
119
+ include TinySweeper
120
+ # NB: your block could get passed a nil value.
121
+ sweep(:nuts, :strip, :blanks_to_nil) { |v| v && v.upcase }
122
+ end
123
+ sundae = Sundae.new
124
+ sundae.nuts = ' '
125
+ expect(sundae.nuts).to be_nil
126
+ sundae.nuts = ' walnuts '
127
+ expect(sundae.nuts).to eq('WALNUTS')
128
+ end
129
+ end
130
+
131
+ context "when you name a broom that doesn't exist" do
132
+ it "warns when you define the rule, and raises when you sweep a value" do
133
+ class Milkshake
134
+ attr_accessor :flavor
135
+ include TinySweeper
136
+ end
137
+
138
+ expect {
139
+ class Milkshake
140
+ sweep :flavor, :make_more_delicious
141
+ end
142
+ }.to output(/TinySweeper doesn't have.*make_more_delicious/).to_stderr
143
+
144
+ milkshake = Milkshake.new
145
+ expect {
146
+ milkshake.flavor = 'cherries jubilee'
147
+ }.to raise_exception(TinySweeper::MissingBroomException)
148
+ end
149
+ end
150
+
151
+ describe 'adding a custom broom' do
152
+ it 'lets the broom be used' do
153
+ TinySweeper::Brooms.add(:sanitize_sizes) { |v| v.downcase[0] }
154
+ class Milkshake
155
+ attr_accessor :size
156
+ include TinySweeper
157
+ sweep :size, :sanitize_sizes
158
+ end
159
+
160
+ milkshake = Milkshake.new
161
+ milkshake.size = 'LARGE'
162
+ expect(milkshake.size).to eq('l')
163
+ end
164
+ end
165
+ end
166
+
167
+ RSpec.describe 'Using #sweep_up! to sweep up all the fields at once' do
168
+ let(:the_contract) {
169
+ Contract.new.tap do |c|
170
+ c.name = ' will be upcased '
171
+ c.notes = ' will be stripped '
172
+ end
173
+ }
174
+
175
+ it 'can clean itself' do
176
+ the_contract.sweep_up!
177
+ expect(the_contract.name).to eq ' WILL BE UPCASED '
178
+ expect(the_contract.notes).to eq 'will be stripped'
179
+ end
180
+
181
+ it 'can be cleaned from the class' do
182
+ Contract.sweep_up!(the_contract)
183
+ expect(the_contract.name).to eq ' WILL BE UPCASED '
184
+ expect(the_contract.notes).to eq 'will be stripped'
185
+ end
186
+ end
Binary file
@@ -27,4 +27,6 @@ Gem::Specification.new do |s|
27
27
  s.require_paths = ["lib"]
28
28
 
29
29
  s.add_development_dependency "bundler", "~> 1.5"
30
+ s.add_development_dependency "rake"
31
+ s.add_development_dependency "rspec"
30
32
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tiny_sweeper
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.5
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dan Bernier
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-03-13 00:00:00.000000000 Z
11
+ date: 2016-08-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -24,6 +24,34 @@ dependencies:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: '1.5'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rspec
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
27
55
  description: |-
28
56
  Tiny Sweeper is a handy way to clean attributes on your Rails models,
29
57
  though it's independent of Rails, and can be used in any Ruby project.
@@ -40,14 +68,19 @@ files:
40
68
  - ".ruby-gemset"
41
69
  - ".ruby-version"
42
70
  - ".travis.yml"
71
+ - ChangeLog
43
72
  - Gemfile
44
73
  - Gemfile.lock
45
74
  - README.md
46
75
  - Rakefile
47
76
  - lib/tiny_sweeper.rb
77
+ - lib/tiny_sweeper/broom_closet.rb
78
+ - lib/tiny_sweeper/brooms.rb
48
79
  - lib/tiny_sweeper/version.rb
49
80
  - spec/spec_helper.rb
81
+ - spec/tiny_sweeper/broom_closet_spec.rb
50
82
  - spec/tiny_sweeper_spec.rb
83
+ - tiny-sweeper.png
51
84
  - tiny_sweeper.gemspec
52
85
  homepage: https://github.com/ContinuityControl/tiny_sweeper
53
86
  licenses:
@@ -69,10 +102,11 @@ required_rubygems_version: !ruby/object:Gem::Requirement
69
102
  version: '0'
70
103
  requirements: []
71
104
  rubyforge_project:
72
- rubygems_version: 2.4.5
105
+ rubygems_version: 2.5.1
73
106
  signing_key:
74
107
  specification_version: 4
75
108
  summary: A tiny helper to clean your inputs
76
109
  test_files:
77
110
  - spec/spec_helper.rb
111
+ - spec/tiny_sweeper/broom_closet_spec.rb
78
112
  - spec/tiny_sweeper_spec.rb