cleanerupper 0.3.0 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -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