cleanerupper 0.3.0 → 0.4.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.
@@ -28,11 +28,12 @@ It works by providing a new method to all of your ActiveRecord based objects ca
28
28
  clean :body, :method => :scramble
29
29
  end
30
30
 
31
- This method takes an array of columns to be cleaned by cleanerupper, followed by three optional parameters:
31
+ This method takes an array of columns to be cleaned by cleanerupper, followed by four optional parameters:
32
32
 
33
33
  :method => Specifies which method to clean with
34
34
  :dictionary => Specifies which dictionaries should be used for this cleaning
35
35
  :callback => Specifies a callback to call if disallowed data is found
36
+ :match_case => Specifies whether the cleaner should be case sensitive
36
37
 
37
38
  Three methods have been provided for cleaning convenience, which are:
38
39
 
@@ -45,7 +46,7 @@ If no method is defined, `:scramble` will be used. You can also define your own
45
46
  class Widget < ActiveRecord::Base
46
47
  clean :body, :method => :remove_vowels
47
48
 
48
- def custom(val)
49
+ def remove_vowels(val)
49
50
  return val.gsub(/(a|e|i|o|u)/, "*")
50
51
  end
51
52
  end
@@ -92,6 +93,12 @@ the columns. If the callback returns false, the save will fail (this works the
92
93
  end
93
94
  end
94
95
 
96
+ By default, the cleaner is case insensitive. This means that if you have the word `foo` in your dictionary, it will match any of: `foo`, `Foo`, `fOo`, `foO`, `FOo`, `FoO`, `fOO`, `FOO`. To force a clean to match the case specifically, you simply specify `:match_case => true`, like so:
97
+
98
+ class Widget < ActiveRecord::Base
99
+ clean :body, :match_case => true
100
+ end
101
+
95
102
  # Examples #
96
103
 
97
104
  # Clean different columns with different methods
@@ -138,7 +145,7 @@ the columns. If the callback returns false, the save will fail (this works the
138
145
 
139
146
  #Everything in one
140
147
  class Widget
141
- clean :body, :method => :remove_vowels, :dictionary => [:words, :user_names], :callback => :bad_word_found
148
+ clean :body, :method => :remove_vowels, :dictionary => [:words, :user_names], :callback => :bad_word_found, :match_case => true
142
149
 
143
150
  def remove_vowels(val)
144
151
  val.gsub(/(a|e|i|o|u)/, "*")
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{cleanerupper}
8
- s.version = "0.3.0"
8
+ s.version = "0.4.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Mike Trpcic"]
12
- s.date = %q{2010-04-25}
12
+ s.date = %q{2010-05-07}
13
13
  s.email = %q{mike@fluidmedia.com}
14
14
  s.extra_rdoc_files = [
15
15
  "README.markdown"
@@ -27,6 +27,7 @@ Gem::Specification.new do |s|
27
27
  "./pkg/cleanerupper-0.2.0.gem",
28
28
  "./pkg/cleanerupper-0.2.1.gem",
29
29
  "./pkg/cleanerupper-0.2.2.gem",
30
+ "./pkg/cleanerupper-0.3.0.gem",
30
31
  "./rails/init.rb",
31
32
  "./tasks/cleanerupper_tasks.rake",
32
33
  "./test/cleanerupper_test.rb",
@@ -41,16 +41,16 @@ module Cleaner
41
41
  end
42
42
 
43
43
  #Append the following methods to the ActiveRecord::Base class
44
- def bind(column, method, dictionary, callback = nil)
44
+ def bind(column, method, dictionary, callback = nil, match_case)
45
45
  dictionary = [dictionary].flatten.map{|dict| Cleaner::Data.dictionaries.has_key?(dict) ? Cleaner::Data.dictionaries[dict] : self.send(dict)}.flatten.uniq
46
46
  old_value = read_attribute(column)
47
47
  to_save = true
48
48
  method = method.to_sym
49
49
  unless old_value.nil?
50
50
  if Cleaner::Data.cleaner_methods.include?(method)
51
- new_value = Cleaner.send(method, old_value.dup, dictionary)
51
+ new_value = Cleaner.send(method, old_value.dup, dictionary, match_case)
52
52
  else
53
- new_value = Cleaner.send(:custom_clean, old_value.dup, dictionary, self.method(method))
53
+ new_value = Cleaner.send(:custom_clean, old_value.dup, dictionary, match_case, self.method(method))
54
54
  end
55
55
  unless new_value == old_value
56
56
  to_save = callback.nil? ? true : self.send(callback) == false ? false : true
@@ -67,13 +67,14 @@ module Cleaner
67
67
  #before_save filters are called
68
68
  def clean(*args)
69
69
  last_argument = args[-1]
70
- params = last_argument.is_a?(Hash) ? last_argument : {}
71
- attributes = args[0..-1] if params
72
- with = params.has_key?(:method) ? params[:method] : :scramble
73
- callback = params.has_key?(:callback) ? params[:callback] : nil
74
- dictionary = params.has_key?(:dictionary) ? params[:dictionary] : :words
70
+ params = last_argument.is_a?(Hash) ? last_argument : {}
71
+ attributes = args[0..-1] if params
72
+ with = params.has_key?(:method) ? params[:method] : :scramble
73
+ callback = params.has_key?(:callback) ? params[:callback] : nil
74
+ dictionary = params.has_key?(:dictionary) ? params[:dictionary] : :words
75
+ match_case = params.has_key?(:match_case) ? params[:match_case] : false
75
76
  attributes.each do |attribute|
76
- before_save {|model| model.bind(attribute, with, dictionary, callback)}
77
+ before_save {|model| model.bind(attribute, with, dictionary, callback, match_case)}
77
78
  end
78
79
  end
79
80
  end
@@ -81,35 +82,39 @@ module Cleaner
81
82
  #Define all your actual manipulation methods here:
82
83
 
83
84
  #This is a wrapper method for custom cleaning methods defined by a user
84
- def self.custom_clean(value, dict, func)
85
+ def self.custom_clean(value, dict, match, func)
85
86
  dict.each do |word|
86
- value.to_s.gsub!(/#{word}/, func.call(word))
87
+ rxp = match ? /#{word}/ : /#{word}/i
88
+ value.to_s.gsub!(rxp, func.call(word))
87
89
  end
88
90
  value
89
91
  end
90
92
 
91
93
  #This method scrambles data by rearranging the letters.
92
- def self.scramble(value, dict)
94
+ def self.scramble(value, dict, match)
93
95
  dict.each do |word|
94
- value.to_s.gsub!(/#{word}/, word.split(//).shuffle.join(''))
96
+ rxp = match ? /#{word}/ : /#{word}/i
97
+ value.to_s.gsub!(rxp, word.split(//).shuffle.join(''))
95
98
  end
96
99
  value
97
100
  end
98
101
 
99
102
  #This method removes selected words from the string and replaces them
100
103
  #with nothing
101
- def self.remove(value, dict)
104
+ def self.remove(value, dict, match)
102
105
  dict.each do |word|
103
- value.to_s.gsub!(/#{word}/, "")
106
+ rxp = match ? /#{word}/ : /#{word}/i
107
+ value.to_s.gsub!(rxp, "")
104
108
  end
105
109
  value
106
110
  end
107
111
 
108
112
  #This method removes selected words from the string and replaces them
109
113
  #with 'swear' characters,such as '#$@!%&'
110
- def self.replace(value, dict)
114
+ def self.replace(value, dict, match)
111
115
  dict.each do |word|
112
- value.to_s.gsub!(/#{word}/, word.split(//).map{|char| char = Cleaner::Data.replacement_chars.shuffle[0]}.join(''))
116
+ rxp = match ? /#{word}/ : /#{word}/i
117
+ value.to_s.gsub!(rxp, word.split(//).map{|char| char = Cleaner::Data.replacement_chars.shuffle[0]}.join(''))
113
118
  end
114
119
  value
115
120
  end
@@ -80,6 +80,12 @@ class ModelDictWidget < ActiveRecord::Base
80
80
  end
81
81
  end
82
82
 
83
+ class CaseTestDict < ActiveRecord::Base
84
+ set_table_name :widgets
85
+ clean :body, :method => :scramble, :match_case => false
86
+ clean :title, :method => :scramble, :match_case => true
87
+ end
88
+
83
89
  class CleanerupperTest < Test::Unit::TestCase
84
90
 
85
91
  def test_automatically_replace
@@ -180,4 +186,16 @@ class CleanerupperTest < Test::Unit::TestCase
180
186
  assert w.body != body
181
187
  assert !w.body.include?("model_test")
182
188
  end
189
+
190
+ def test_case_matching
191
+ body = "this is a Scramble_test test"
192
+ title = "this is a Scramble_test test"
193
+ w = CaseTestDict.new(:body => body.dup, :title => title.dup)
194
+ w.save
195
+ w = CaseTestDict.find(w.id)
196
+ assert w.body != body
197
+ assert !w.body.include?("Scramble_test")
198
+ assert w.title == title
199
+ assert w.title.include?("Scramble_test")
200
+ end
183
201
  end
@@ -3724,3 +3724,163 @@
3724
3724
  ModelDictWidget Load (0.3ms) SELECT * FROM "widgets" WHERE ("widgets"."id" = 8) 
3725
3725
  MultiDictWidget Create (0.2ms) INSERT INTO "widgets" ("title", "body", "author_name") VALUES(NULL, 'stetod_g regular_test teset_db', NULL)
3726
3726
  MultiDictWidget Load (0.2ms) SELECT * FROM "widgets" WHERE ("widgets"."id" = 9) 
3727
+ SQL (4.4ms) select sqlite_version(*)
3728
+ SQL (0.9ms)  SELECT name
3729
+ FROM sqlite_master
3730
+ WHERE type = 'table' AND NOT name = 'sqlite_sequence'
3731
+ 
3732
+ SQL (25.4ms) DROP TABLE "widgets"
3733
+ SQL (3.0ms) CREATE TABLE "widgets" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "title" varchar(100), "body" varchar(255), "author_name" varchar(100)) 
3734
+ SQL (0.3ms)  SELECT name
3735
+ FROM sqlite_master
3736
+ WHERE type = 'table' AND NOT name = 'sqlite_sequence'
3737
+ 
3738
+ SQL (2.6ms) DROP TABLE "words"
3739
+ SQL (2.6ms) CREATE TABLE "words" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "word" varchar(100)) 
3740
+ SQL (0.3ms)  SELECT name
3741
+ FROM sqlite_master
3742
+ WHERE type = 'table' AND NOT name = 'sqlite_sequence'
3743
+ 
3744
+ SQL (0.1ms) SELECT version FROM "schema_migrations"
3745
+ Word Create (0.2ms) INSERT INTO "words" ("word") VALUES('model_test')
3746
+ Word Create (0.2ms) INSERT INTO "words" ("word") VALUES('database_test')
3747
+ RemoveWidget Create (0.4ms) INSERT INTO "widgets" ("title", "body", "author_name") VALUES('cleanerupper test', 'cleanerupper test', NULL)
3748
+ RemoveWidget Load (0.3ms) SELECT * FROM "widgets" WHERE ("widgets"."id" = 1) 
3749
+ ReplaceWidget Create (0.2ms) INSERT INTO "widgets" ("title", "body", "author_name") VALUES(NULL, 'cleanerupper !$!!&%&$@!%! test', NULL)
3750
+ ReplaceWidget Load (0.3ms) SELECT * FROM "widgets" WHERE ("widgets"."id" = 2) 
3751
+ ScrambleWidget Create (0.2ms) INSERT INTO "widgets" ("title", "body", "author_name") VALUES('cleanerupper meetbsclatr_s test', NULL, NULL)
3752
+ ScrambleWidget Load (0.2ms) SELECT * FROM "widgets" WHERE ("widgets"."id" = 3) 
3753
+ CallbackWidget Create (0.2ms) INSERT INTO "widgets" ("title", "body", "author_name") VALUES('CALLBACK', 'cleanerupper mtt_ctsseou body', NULL)
3754
+ CallbackWidget Load (0.2ms) SELECT * FROM "widgets" WHERE ("widgets"."id" = 4) 
3755
+ CustomDictWidget Create (0.2ms) INSERT INTO "widgets" ("title", "body", "author_name") VALUES(NULL, 'ets_tgdo bird_test i_hseftst', NULL)
3756
+ CustomDictWidget Load (0.3ms) SELECT * FROM "widgets" WHERE ("widgets"."id" = 5) 
3757
+ CustomWidget Create (0.2ms) INSERT INTO "widgets" ("title", "body", "author_name") VALUES('cleanerupper r*m*v*_t*st title', 'cleanerupper scr*mbl*_t*st body', NULL)
3758
+ CustomWidget Load (0.2ms) SELECT * FROM "widgets" WHERE ("widgets"."id" = 6) 
3759
+ ScrambleWidget Create (0.2ms) INSERT INTO "widgets" ("title", "body", "author_name") VALUES('cleanerupper elu_ttstdafe body', NULL, NULL)
3760
+ ScrambleWidget Load (0.3ms) SELECT * FROM "widgets" WHERE ("widgets"."id" = 7) 
3761
+ Word Load (0.2ms) SELECT * FROM "words" 
3762
+ Word Load (0.2ms) SELECT * FROM "words" 
3763
+ ModelDictWidget Create (0.2ms) INSERT INTO "widgets" ("title", "body", "author_name") VALUES(NULL, 'this is a slm_ttedoe test', NULL)
3764
+ ModelDictWidget Load (0.2ms) SELECT * FROM "widgets" WHERE ("widgets"."id" = 8) 
3765
+ MultiDictWidget Create (0.4ms) INSERT INTO "widgets" ("title", "body", "author_name") VALUES(NULL, 'stte_ogd regular_test stdteeb_', NULL)
3766
+ MultiDictWidget Load (0.3ms) SELECT * FROM "widgets" WHERE ("widgets"."id" = 9) 
3767
+ SQL (0.8ms) select sqlite_version(*)
3768
+ SQL (0.9ms)  SELECT name
3769
+ FROM sqlite_master
3770
+ WHERE type = 'table' AND NOT name = 'sqlite_sequence'
3771
+ 
3772
+ SQL (34.4ms) DROP TABLE "widgets"
3773
+ SQL (11.7ms) CREATE TABLE "widgets" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "title" varchar(100), "body" varchar(255), "author_name" varchar(100)) 
3774
+ SQL (0.3ms)  SELECT name
3775
+ FROM sqlite_master
3776
+ WHERE type = 'table' AND NOT name = 'sqlite_sequence'
3777
+ 
3778
+ SQL (3.1ms) DROP TABLE "words"
3779
+ SQL (2.6ms) CREATE TABLE "words" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "word" varchar(100)) 
3780
+ SQL (0.3ms)  SELECT name
3781
+ FROM sqlite_master
3782
+ WHERE type = 'table' AND NOT name = 'sqlite_sequence'
3783
+ 
3784
+ SQL (0.1ms) SELECT version FROM "schema_migrations"
3785
+ Word Create (0.3ms) INSERT INTO "words" ("word") VALUES('model_test')
3786
+ Word Create (0.2ms) INSERT INTO "words" ("word") VALUES('database_test')
3787
+ ScrambleWidget Create (0.3ms) INSERT INTO "widgets" ("title", "body", "author_name") VALUES('cleanerupper c_retssmaletb test', NULL, NULL)
3788
+ ScrambleWidget Load (0.3ms) SELECT * FROM "widgets" WHERE ("widgets"."id" = 1) 
3789
+ CaseTestDict Create (0.2ms) INSERT INTO "widgets" ("title", "body", "author_name") VALUES('this is a Scramble_test test', 'this is a sctr_tesaemlb test', NULL)
3790
+ CaseTestDict Load (0.2ms) SELECT * FROM "widgets" WHERE ("widgets"."id" = 2) 
3791
+ CallbackWidget Create (0.2ms) INSERT INTO "widgets" ("title", "body", "author_name") VALUES('CALLBACK', 'cleanerupper ttssu_cemto body', NULL)
3792
+ CallbackWidget Load (0.3ms) SELECT * FROM "widgets" WHERE ("widgets"."id" = 3) 
3793
+ CustomDictWidget Create (0.2ms) INSERT INTO "widgets" ("title", "body", "author_name") VALUES(NULL, 'tde_gsot bird_test stf_etish', NULL)
3794
+ CustomDictWidget Load (0.4ms) SELECT * FROM "widgets" WHERE ("widgets"."id" = 4) 
3795
+ ScrambleWidget Create (0.3ms) INSERT INTO "widgets" ("title", "body", "author_name") VALUES('cleanerupper atetdluftes_ body', NULL, NULL)
3796
+ ScrambleWidget Load (0.3ms) SELECT * FROM "widgets" WHERE ("widgets"."id" = 5) 
3797
+ Word Load (0.3ms) SELECT * FROM "words" 
3798
+ Word Load (0.2ms) SELECT * FROM "words" 
3799
+ ModelDictWidget Create (0.2ms) INSERT INTO "widgets" ("title", "body", "author_name") VALUES(NULL, 'this is a _omttsdeel test', NULL)
3800
+ ModelDictWidget Load (0.2ms) SELECT * FROM "widgets" WHERE ("widgets"."id" = 6) 
3801
+ MultiDictWidget Create (0.2ms) INSERT INTO "widgets" ("title", "body", "author_name") VALUES(NULL, 'sdgeo_tt regular_test teestdb_', NULL)
3802
+ MultiDictWidget Load (0.3ms) SELECT * FROM "widgets" WHERE ("widgets"."id" = 7) 
3803
+ SQL (0.4ms) select sqlite_version(*)
3804
+ SQL (0.7ms)  SELECT name
3805
+ FROM sqlite_master
3806
+ WHERE type = 'table' AND NOT name = 'sqlite_sequence'
3807
+ 
3808
+ SQL (30.9ms) DROP TABLE "widgets"
3809
+ SQL (3.3ms) CREATE TABLE "widgets" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "title" varchar(100), "body" varchar(255), "author_name" varchar(100)) 
3810
+ SQL (0.3ms)  SELECT name
3811
+ FROM sqlite_master
3812
+ WHERE type = 'table' AND NOT name = 'sqlite_sequence'
3813
+ 
3814
+ SQL (2.8ms) DROP TABLE "words"
3815
+ SQL (9.4ms) CREATE TABLE "words" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "word" varchar(100)) 
3816
+ SQL (0.3ms)  SELECT name
3817
+ FROM sqlite_master
3818
+ WHERE type = 'table' AND NOT name = 'sqlite_sequence'
3819
+ 
3820
+ SQL (0.1ms) SELECT version FROM "schema_migrations"
3821
+ Word Create (0.2ms) INSERT INTO "words" ("word") VALUES('model_test')
3822
+ Word Create (0.2ms) INSERT INTO "words" ("word") VALUES('database_test')
3823
+ RemoveWidget Create (0.3ms) INSERT INTO "widgets" ("title", "body", "author_name") VALUES('cleanerupper test', 'cleanerupper test', NULL)
3824
+ RemoveWidget Load (0.3ms) SELECT * FROM "widgets" WHERE ("widgets"."id" = 1) 
3825
+ ReplaceWidget Create (0.2ms) INSERT INTO "widgets" ("title", "body", "author_name") VALUES(NULL, 'cleanerupper &&$@%!@%$@&& test', NULL)
3826
+ ReplaceWidget Load (0.3ms) SELECT * FROM "widgets" WHERE ("widgets"."id" = 2) 
3827
+ ScrambleWidget Create (0.2ms) INSERT INTO "widgets" ("title", "body", "author_name") VALUES('cleanerupper mcrt_albetsse test', NULL, NULL)
3828
+ ScrambleWidget Load (0.3ms) SELECT * FROM "widgets" WHERE ("widgets"."id" = 3) 
3829
+ CaseTestDict Create (0.2ms) INSERT INTO "widgets" ("title", "body", "author_name") VALUES('this is a Scramble_test test', 'this is a mcere_bstlats test', NULL)
3830
+ CaseTestDict Load (0.3ms) SELECT * FROM "widgets" WHERE ("widgets"."id" = 4) 
3831
+ CallbackWidget Create (0.2ms) INSERT INTO "widgets" ("title", "body", "author_name") VALUES('CALLBACK', 'cleanerupper tcss_umotet body', NULL)
3832
+ CallbackWidget Load (0.2ms) SELECT * FROM "widgets" WHERE ("widgets"."id" = 5) 
3833
+ CustomDictWidget Create (0.2ms) INSERT INTO "widgets" ("title", "body", "author_name") VALUES(NULL, 'te_tsgdo bird_test hetsftis_', NULL)
3834
+ CustomDictWidget Load (0.2ms) SELECT * FROM "widgets" WHERE ("widgets"."id" = 6) 
3835
+ CustomWidget Create (0.2ms) INSERT INTO "widgets" ("title", "body", "author_name") VALUES('cleanerupper r*m*v*_t*st title', 'cleanerupper scr*mbl*_t*st body', NULL)
3836
+ CustomWidget Load (0.2ms) SELECT * FROM "widgets" WHERE ("widgets"."id" = 7) 
3837
+ ScrambleWidget Create (0.1ms) INSERT INTO "widgets" ("title", "body", "author_name") VALUES('cleanerupper el_ttfetdsau body', NULL, NULL)
3838
+ ScrambleWidget Load (0.2ms) SELECT * FROM "widgets" WHERE ("widgets"."id" = 8) 
3839
+ Word Load (0.5ms) SELECT * FROM "words" 
3840
+ Word Load (0.2ms) SELECT * FROM "words" 
3841
+ ModelDictWidget Create (0.2ms) INSERT INTO "widgets" ("title", "body", "author_name") VALUES(NULL, 'this is a dsmeto_elt test', NULL)
3842
+ ModelDictWidget Load (0.3ms) SELECT * FROM "widgets" WHERE ("widgets"."id" = 9) 
3843
+ MultiDictWidget Create (0.2ms) INSERT INTO "widgets" ("title", "body", "author_name") VALUES(NULL, '_estgtdo regular_test _stdtbee', NULL)
3844
+ MultiDictWidget Load (0.3ms) SELECT * FROM "widgets" WHERE ("widgets"."id" = 10) 
3845
+ SQL (0.7ms) select sqlite_version(*)
3846
+ SQL (0.8ms)  SELECT name
3847
+ FROM sqlite_master
3848
+ WHERE type = 'table' AND NOT name = 'sqlite_sequence'
3849
+ 
3850
+ SQL (21.0ms) DROP TABLE "widgets"
3851
+ SQL (10.0ms) CREATE TABLE "widgets" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "title" varchar(100), "body" varchar(255), "author_name" varchar(100)) 
3852
+ SQL (0.4ms)  SELECT name
3853
+ FROM sqlite_master
3854
+ WHERE type = 'table' AND NOT name = 'sqlite_sequence'
3855
+ 
3856
+ SQL (2.8ms) DROP TABLE "words"
3857
+ SQL (2.8ms) CREATE TABLE "words" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "word" varchar(100)) 
3858
+ SQL (0.3ms)  SELECT name
3859
+ FROM sqlite_master
3860
+ WHERE type = 'table' AND NOT name = 'sqlite_sequence'
3861
+ 
3862
+ SQL (0.1ms) SELECT version FROM "schema_migrations"
3863
+ Word Create (0.3ms) INSERT INTO "words" ("word") VALUES('model_test')
3864
+ Word Create (0.2ms) INSERT INTO "words" ("word") VALUES('database_test')
3865
+ RemoveWidget Create (0.3ms) INSERT INTO "widgets" ("title", "body", "author_name") VALUES('cleanerupper test', 'cleanerupper test', NULL)
3866
+ RemoveWidget Load (0.3ms) SELECT * FROM "widgets" WHERE ("widgets"."id" = 1) 
3867
+ ReplaceWidget Create (0.2ms) INSERT INTO "widgets" ("title", "body", "author_name") VALUES(NULL, 'cleanerupper &*&@%$&&*&!& test', NULL)
3868
+ ReplaceWidget Load (0.2ms) SELECT * FROM "widgets" WHERE ("widgets"."id" = 2) 
3869
+ ScrambleWidget Create (0.2ms) INSERT INTO "widgets" ("title", "body", "author_name") VALUES('cleanerupper te_lmcbtsesar test', NULL, NULL)
3870
+ ScrambleWidget Load (0.2ms) SELECT * FROM "widgets" WHERE ("widgets"."id" = 3) 
3871
+ CaseTestDict Create (0.2ms) INSERT INTO "widgets" ("title", "body", "author_name") VALUES('this is a Scramble_test test', 'this is a tebslemrcs_ta test', NULL)
3872
+ CaseTestDict Load (0.3ms) SELECT * FROM "widgets" WHERE ("widgets"."id" = 4) 
3873
+ CallbackWidget Create (0.2ms) INSERT INTO "widgets" ("title", "body", "author_name") VALUES('CALLBACK', 'cleanerupper teoumcstst_ body', NULL)
3874
+ CallbackWidget Load (0.3ms) SELECT * FROM "widgets" WHERE ("widgets"."id" = 5) 
3875
+ CustomDictWidget Create (0.2ms) INSERT INTO "widgets" ("title", "body", "author_name") VALUES(NULL, 'dseogt_t bird_test sisteht_f', NULL)
3876
+ CustomDictWidget Load (0.3ms) SELECT * FROM "widgets" WHERE ("widgets"."id" = 6) 
3877
+ CustomWidget Create (0.2ms) INSERT INTO "widgets" ("title", "body", "author_name") VALUES('cleanerupper r*m*v*_t*st title', 'cleanerupper scr*mbl*_t*st body', NULL)
3878
+ CustomWidget Load (0.3ms) SELECT * FROM "widgets" WHERE ("widgets"."id" = 7) 
3879
+ ScrambleWidget Create (0.2ms) INSERT INTO "widgets" ("title", "body", "author_name") VALUES('cleanerupper ttaulefdse_t body', NULL, NULL)
3880
+ ScrambleWidget Load (0.5ms) SELECT * FROM "widgets" WHERE ("widgets"."id" = 8) 
3881
+ Word Load (0.3ms) SELECT * FROM "words" 
3882
+ Word Load (0.2ms) SELECT * FROM "words" 
3883
+ ModelDictWidget Create (0.2ms) INSERT INTO "widgets" ("title", "body", "author_name") VALUES(NULL, 'this is a edlo_mtest test', NULL)
3884
+ ModelDictWidget Load (0.2ms) SELECT * FROM "widgets" WHERE ("widgets"."id" = 9) 
3885
+ MultiDictWidget Create (0.2ms) INSERT INTO "widgets" ("title", "body", "author_name") VALUES(NULL, 'tetogds_ regular_test tteedb_s', NULL)
3886
+ MultiDictWidget Load (0.3ms) SELECT * FROM "widgets" WHERE ("widgets"."id" = 10) 
metadata CHANGED
@@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version
4
4
  prerelease: false
5
5
  segments:
6
6
  - 0
7
- - 3
7
+ - 4
8
8
  - 0
9
- version: 0.3.0
9
+ version: 0.4.0
10
10
  platform: ruby
11
11
  authors:
12
12
  - Mike Trpcic
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2010-04-25 00:00:00 -04:00
17
+ date: 2010-05-07 00:00:00 -04:00
18
18
  default_executable:
19
19
  dependencies: []
20
20
 
@@ -39,6 +39,7 @@ files:
39
39
  - ./pkg/cleanerupper-0.2.0.gem
40
40
  - ./pkg/cleanerupper-0.2.1.gem
41
41
  - ./pkg/cleanerupper-0.2.2.gem
42
+ - ./pkg/cleanerupper-0.3.0.gem
42
43
  - ./rails/init.rb
43
44
  - ./tasks/cleanerupper_tasks.rake
44
45
  - ./test/cleanerupper_test.rb