normatron 0.2.1 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (55) hide show
  1. data/README.textile +35 -48
  2. data/Rakefile +6 -7
  3. data/lib/generators/normatron/install_generator.rb +23 -0
  4. data/lib/generators/normatron/templates/normatron.rb +4 -0
  5. data/lib/normatron.rb +22 -8
  6. data/lib/normatron/configuration.rb +26 -22
  7. data/lib/normatron/extensions.rb +8 -0
  8. data/lib/normatron/extensions/active_record.rb +20 -15
  9. data/lib/normatron/filters.rb +26 -379
  10. data/lib/normatron/filters/blank_filter.rb +29 -0
  11. data/lib/normatron/filters/camelize_filter.rb +50 -0
  12. data/lib/normatron/filters/capitalize_filter.rb +29 -0
  13. data/lib/normatron/filters/chomp_filter.rb +34 -0
  14. data/lib/normatron/filters/dasherize_filter.rb +25 -0
  15. data/lib/normatron/filters/downcase_filter.rb +29 -0
  16. data/lib/normatron/filters/dump_filter.rb +27 -0
  17. data/lib/normatron/filters/helpers.rb +44 -0
  18. data/lib/normatron/filters/keep_filter.rb +100 -0
  19. data/lib/normatron/filters/remove_filter.rb +37 -0
  20. data/lib/normatron/filters/squeeze_filter.rb +30 -0
  21. data/lib/normatron/filters/squish_filter.rb +28 -0
  22. data/lib/normatron/filters/strip_filter.rb +33 -0
  23. data/lib/normatron/filters/swapcase_filter.rb +30 -0
  24. data/lib/normatron/filters/titleize_filter.rb +29 -0
  25. data/lib/normatron/filters/underscore_filter.rb +45 -0
  26. data/lib/normatron/filters/upcase_filter.rb +29 -0
  27. data/lib/normatron/version.rb +3 -0
  28. data/spec/normatron/configuration_spec.rb +60 -0
  29. data/spec/normatron/extensions/active_record_spec.rb +96 -0
  30. data/spec/normatron/filters/blank_filter_spec.rb +15 -0
  31. data/spec/normatron/filters/camelize_filter_spec.rb +42 -0
  32. data/spec/normatron/filters/capitalize_filter_spec.rb +14 -0
  33. data/spec/normatron/filters/chomp_filter_spec.rb +15 -0
  34. data/spec/normatron/filters/dasherize_filter_spec.rb +9 -0
  35. data/spec/normatron/filters/downcase_filter_spec.rb +10 -0
  36. data/spec/normatron/filters/dump_filter_spec.rb +10 -0
  37. data/spec/normatron/filters/keep_filter_spec.rb +86 -0
  38. data/spec/normatron/filters/remove_filter_spec.rb +86 -0
  39. data/spec/normatron/filters/squeeze_filter_spec.rb +10 -0
  40. data/spec/normatron/filters/squish_filter_spec.rb +12 -0
  41. data/spec/normatron/filters/strip_filter_spec.rb +12 -0
  42. data/spec/normatron/filters/swapcase_filter_spec.rb +12 -0
  43. data/spec/normatron/filters/titleize_filter_spec.rb +12 -0
  44. data/spec/normatron/filters/underscore_filter_spec.rb +26 -0
  45. data/spec/normatron/filters/upcase_filter_spec.rb +10 -0
  46. data/spec/normatron_spec.rb +28 -2
  47. data/spec/spec_helper.rb +37 -4
  48. data/spec/support/my_filters.rb +7 -0
  49. data/spec/support/user_model.rb +14 -0
  50. metadata +64 -13
  51. data/spec/configuration_spec.rb +0 -53
  52. data/spec/extensions/active_record_spec.rb +0 -114
  53. data/spec/filters_spec.rb +0 -442
  54. data/spec/support/model_model.rb +0 -3
  55. data/spec/support/schema.rb +0 -7
@@ -0,0 +1,9 @@
1
+ # encoding: UTF-8
2
+
3
+ require 'spec_helper'
4
+ require 'normatron/filters/dasherize_filter'
5
+
6
+ describe Normatron::Filters::DasherizeFilter do
7
+ it_should_behave_like "string processor"
8
+ it_should_behave_like "evaluable filter", ["string_inflections"], "string-inflections"
9
+ end
@@ -0,0 +1,10 @@
1
+ # encoding: UTF-8
2
+
3
+ require 'spec_helper'
4
+ require 'normatron/filters/downcase_filter'
5
+
6
+ describe Normatron::Filters::DowncaseFilter do
7
+ it_should_behave_like "string processor"
8
+ it_should_behave_like "evaluable filter", ["caçador"], "caçador"
9
+ it_should_behave_like "evaluable filter", ["CAÇADOR"], "caçador"
10
+ end
@@ -0,0 +1,10 @@
1
+ # encoding: UTF-8
2
+
3
+ require 'spec_helper'
4
+ require 'normatron/filters/dump_filter'
5
+
6
+ describe Normatron::Filters::DumpFilter do
7
+ it_should_behave_like "string processor"
8
+ it_should_behave_like "evaluable filter", ["First \n Time"], '"First \n Time"'
9
+ it_should_behave_like "evaluable filter", ['First \n Time'], '"First \\\n Time"'
10
+ end
@@ -0,0 +1,86 @@
1
+ # encoding: UTF-8
2
+
3
+ require 'spec_helper'
4
+ require 'normatron/filters/keep_filter'
5
+
6
+ describe Normatron::Filters::KeepFilter do
7
+ it_should_behave_like "string processor"
8
+ it_should_behave_like "character cleaner", :keep, [:Graph]
9
+ it_should_behave_like "character cleaner", :keep, [:Punct]
10
+ it_should_behave_like "character cleaner", :keep, [:Upper]
11
+ it_should_behave_like "character cleaner", :keep, [:Word]
12
+ it_should_behave_like "character cleaner", :keep, [:Latin]
13
+ it_should_behave_like "character cleaner", :keep, [:L]
14
+ it_should_behave_like "character cleaner", :keep, [:M]
15
+ it_should_behave_like "character cleaner", :keep, [:N]
16
+ it_should_behave_like "character cleaner", :keep, [:P]
17
+ it_should_behave_like "character cleaner", :keep, [:S]
18
+ it_should_behave_like "character cleaner", :keep, [:Z]
19
+ it_should_behave_like "character cleaner", :keep, [:C]
20
+ it_should_behave_like "character cleaner", :keep, [:Graph, :Punct]
21
+ it_should_behave_like "character cleaner", :keep, [:Graph, :Upper]
22
+ it_should_behave_like "character cleaner", :keep, [:Graph, :Word]
23
+ it_should_behave_like "character cleaner", :keep, [:Graph, :Latin]
24
+ it_should_behave_like "character cleaner", :keep, [:Graph, :L]
25
+ it_should_behave_like "character cleaner", :keep, [:Graph, :M]
26
+ it_should_behave_like "character cleaner", :keep, [:Graph, :N]
27
+ it_should_behave_like "character cleaner", :keep, [:Graph, :P]
28
+ it_should_behave_like "character cleaner", :keep, [:Graph, :S]
29
+ it_should_behave_like "character cleaner", :keep, [:Graph, :Z]
30
+ it_should_behave_like "character cleaner", :keep, [:Graph, :C]
31
+ it_should_behave_like "character cleaner", :keep, [:Punct, :Upper]
32
+ it_should_behave_like "character cleaner", :keep, [:Punct, :Word]
33
+ it_should_behave_like "character cleaner", :keep, [:Punct, :Latin]
34
+ it_should_behave_like "character cleaner", :keep, [:Punct, :L]
35
+ it_should_behave_like "character cleaner", :keep, [:Punct, :M]
36
+ it_should_behave_like "character cleaner", :keep, [:Punct, :N]
37
+ it_should_behave_like "character cleaner", :keep, [:Punct, :P]
38
+ it_should_behave_like "character cleaner", :keep, [:Punct, :S]
39
+ it_should_behave_like "character cleaner", :keep, [:Punct, :Z]
40
+ it_should_behave_like "character cleaner", :keep, [:Punct, :C]
41
+ it_should_behave_like "character cleaner", :keep, [:Upper, :Word]
42
+ it_should_behave_like "character cleaner", :keep, [:Upper, :Latin]
43
+ it_should_behave_like "character cleaner", :keep, [:Upper, :L]
44
+ it_should_behave_like "character cleaner", :keep, [:Upper, :M]
45
+ it_should_behave_like "character cleaner", :keep, [:Upper, :N]
46
+ it_should_behave_like "character cleaner", :keep, [:Upper, :P]
47
+ it_should_behave_like "character cleaner", :keep, [:Upper, :S]
48
+ it_should_behave_like "character cleaner", :keep, [:Upper, :Z]
49
+ it_should_behave_like "character cleaner", :keep, [:Upper, :C]
50
+ it_should_behave_like "character cleaner", :keep, [:Word, :Latin]
51
+ it_should_behave_like "character cleaner", :keep, [:Word, :L]
52
+ it_should_behave_like "character cleaner", :keep, [:Word, :M]
53
+ it_should_behave_like "character cleaner", :keep, [:Word, :N]
54
+ it_should_behave_like "character cleaner", :keep, [:Word, :P]
55
+ it_should_behave_like "character cleaner", :keep, [:Word, :S]
56
+ it_should_behave_like "character cleaner", :keep, [:Word, :Z]
57
+ it_should_behave_like "character cleaner", :keep, [:Word, :C]
58
+ it_should_behave_like "character cleaner", :keep, [:Latin, :L]
59
+ it_should_behave_like "character cleaner", :keep, [:Latin, :M]
60
+ it_should_behave_like "character cleaner", :keep, [:Latin, :N]
61
+ it_should_behave_like "character cleaner", :keep, [:Latin, :P]
62
+ it_should_behave_like "character cleaner", :keep, [:Latin, :S]
63
+ it_should_behave_like "character cleaner", :keep, [:Latin, :Z]
64
+ it_should_behave_like "character cleaner", :keep, [:Latin, :C]
65
+ it_should_behave_like "character cleaner", :keep, [:L, :M]
66
+ it_should_behave_like "character cleaner", :keep, [:L, :N]
67
+ it_should_behave_like "character cleaner", :keep, [:L, :P]
68
+ it_should_behave_like "character cleaner", :keep, [:L, :S]
69
+ it_should_behave_like "character cleaner", :keep, [:L, :Z]
70
+ it_should_behave_like "character cleaner", :keep, [:L, :C]
71
+ it_should_behave_like "character cleaner", :keep, [:M, :N]
72
+ it_should_behave_like "character cleaner", :keep, [:M, :P]
73
+ it_should_behave_like "character cleaner", :keep, [:M, :S]
74
+ it_should_behave_like "character cleaner", :keep, [:M, :Z]
75
+ it_should_behave_like "character cleaner", :keep, [:M, :C]
76
+ it_should_behave_like "character cleaner", :keep, [:N, :P]
77
+ it_should_behave_like "character cleaner", :keep, [:N, :S]
78
+ it_should_behave_like "character cleaner", :keep, [:N, :Z]
79
+ it_should_behave_like "character cleaner", :keep, [:N, :C]
80
+ it_should_behave_like "character cleaner", :keep, [:P, :S]
81
+ it_should_behave_like "character cleaner", :keep, [:P, :Z]
82
+ it_should_behave_like "character cleaner", :keep, [:P, :C]
83
+ it_should_behave_like "character cleaner", :keep, [:S, :Z]
84
+ it_should_behave_like "character cleaner", :keep, [:S, :C]
85
+ it_should_behave_like "character cleaner", :keep, [:Z, :C]
86
+ end
@@ -0,0 +1,86 @@
1
+ # encoding: UTF-8
2
+
3
+ require 'spec_helper'
4
+ require 'normatron/filters/remove_filter'
5
+
6
+ describe Normatron::Filters::RemoveFilter do
7
+ it_should_behave_like "string processor"
8
+ it_should_behave_like "character cleaner", :remove, [:Graph]
9
+ it_should_behave_like "character cleaner", :remove, [:Punct]
10
+ it_should_behave_like "character cleaner", :remove, [:Upper]
11
+ it_should_behave_like "character cleaner", :remove, [:Word]
12
+ it_should_behave_like "character cleaner", :remove, [:Latin]
13
+ it_should_behave_like "character cleaner", :remove, [:L]
14
+ it_should_behave_like "character cleaner", :remove, [:M]
15
+ it_should_behave_like "character cleaner", :remove, [:N]
16
+ it_should_behave_like "character cleaner", :remove, [:P]
17
+ it_should_behave_like "character cleaner", :remove, [:S]
18
+ it_should_behave_like "character cleaner", :remove, [:Z]
19
+ it_should_behave_like "character cleaner", :remove, [:C]
20
+ it_should_behave_like "character cleaner", :remove, [:Graph, :Punct]
21
+ it_should_behave_like "character cleaner", :remove, [:Graph, :Upper]
22
+ it_should_behave_like "character cleaner", :remove, [:Graph, :Word]
23
+ it_should_behave_like "character cleaner", :remove, [:Graph, :Latin]
24
+ it_should_behave_like "character cleaner", :remove, [:Graph, :L]
25
+ it_should_behave_like "character cleaner", :remove, [:Graph, :M]
26
+ it_should_behave_like "character cleaner", :remove, [:Graph, :N]
27
+ it_should_behave_like "character cleaner", :remove, [:Graph, :P]
28
+ it_should_behave_like "character cleaner", :remove, [:Graph, :S]
29
+ it_should_behave_like "character cleaner", :remove, [:Graph, :Z]
30
+ it_should_behave_like "character cleaner", :remove, [:Graph, :C]
31
+ it_should_behave_like "character cleaner", :remove, [:Punct, :Upper]
32
+ it_should_behave_like "character cleaner", :remove, [:Punct, :Word]
33
+ it_should_behave_like "character cleaner", :remove, [:Punct, :Latin]
34
+ it_should_behave_like "character cleaner", :remove, [:Punct, :L]
35
+ it_should_behave_like "character cleaner", :remove, [:Punct, :M]
36
+ it_should_behave_like "character cleaner", :remove, [:Punct, :N]
37
+ it_should_behave_like "character cleaner", :remove, [:Punct, :P]
38
+ it_should_behave_like "character cleaner", :remove, [:Punct, :S]
39
+ it_should_behave_like "character cleaner", :remove, [:Punct, :Z]
40
+ it_should_behave_like "character cleaner", :remove, [:Punct, :C]
41
+ it_should_behave_like "character cleaner", :remove, [:Upper, :Word]
42
+ it_should_behave_like "character cleaner", :remove, [:Upper, :Latin]
43
+ it_should_behave_like "character cleaner", :remove, [:Upper, :L]
44
+ it_should_behave_like "character cleaner", :remove, [:Upper, :M]
45
+ it_should_behave_like "character cleaner", :remove, [:Upper, :N]
46
+ it_should_behave_like "character cleaner", :remove, [:Upper, :P]
47
+ it_should_behave_like "character cleaner", :remove, [:Upper, :S]
48
+ it_should_behave_like "character cleaner", :remove, [:Upper, :Z]
49
+ it_should_behave_like "character cleaner", :remove, [:Upper, :C]
50
+ it_should_behave_like "character cleaner", :remove, [:Word, :Latin]
51
+ it_should_behave_like "character cleaner", :remove, [:Word, :L]
52
+ it_should_behave_like "character cleaner", :remove, [:Word, :M]
53
+ it_should_behave_like "character cleaner", :remove, [:Word, :N]
54
+ it_should_behave_like "character cleaner", :remove, [:Word, :P]
55
+ it_should_behave_like "character cleaner", :remove, [:Word, :S]
56
+ it_should_behave_like "character cleaner", :remove, [:Word, :Z]
57
+ it_should_behave_like "character cleaner", :remove, [:Word, :C]
58
+ it_should_behave_like "character cleaner", :remove, [:Latin, :L]
59
+ it_should_behave_like "character cleaner", :remove, [:Latin, :M]
60
+ it_should_behave_like "character cleaner", :remove, [:Latin, :N]
61
+ it_should_behave_like "character cleaner", :remove, [:Latin, :P]
62
+ it_should_behave_like "character cleaner", :remove, [:Latin, :S]
63
+ it_should_behave_like "character cleaner", :remove, [:Latin, :Z]
64
+ it_should_behave_like "character cleaner", :remove, [:Latin, :C]
65
+ it_should_behave_like "character cleaner", :remove, [:L, :M]
66
+ it_should_behave_like "character cleaner", :remove, [:L, :N]
67
+ it_should_behave_like "character cleaner", :remove, [:L, :P]
68
+ it_should_behave_like "character cleaner", :remove, [:L, :S]
69
+ it_should_behave_like "character cleaner", :remove, [:L, :Z]
70
+ it_should_behave_like "character cleaner", :remove, [:L, :C]
71
+ it_should_behave_like "character cleaner", :remove, [:M, :N]
72
+ it_should_behave_like "character cleaner", :remove, [:M, :P]
73
+ it_should_behave_like "character cleaner", :remove, [:M, :S]
74
+ it_should_behave_like "character cleaner", :remove, [:M, :Z]
75
+ it_should_behave_like "character cleaner", :remove, [:M, :C]
76
+ it_should_behave_like "character cleaner", :remove, [:N, :P]
77
+ it_should_behave_like "character cleaner", :remove, [:N, :S]
78
+ it_should_behave_like "character cleaner", :remove, [:N, :Z]
79
+ it_should_behave_like "character cleaner", :remove, [:N, :C]
80
+ it_should_behave_like "character cleaner", :remove, [:P, :S]
81
+ it_should_behave_like "character cleaner", :remove, [:P, :Z]
82
+ it_should_behave_like "character cleaner", :remove, [:P, :C]
83
+ it_should_behave_like "character cleaner", :remove, [:S, :Z]
84
+ it_should_behave_like "character cleaner", :remove, [:S, :C]
85
+ it_should_behave_like "character cleaner", :remove, [:Z, :C]
86
+ end
@@ -0,0 +1,10 @@
1
+ # encoding: UTF-8
2
+
3
+ require 'spec_helper'
4
+ require 'normatron/filters/squeeze_filter'
5
+
6
+ describe Normatron::Filters::SqueezeFilter do
7
+ it_should_behave_like "string processor"
8
+ it_should_behave_like "evaluable filter", ["1 22 333 4444 " ], "1 2 3 4 "
9
+ it_should_behave_like "evaluable filter", ["1 22 333 4444 ", "2-3 "], "1 2 3 4444 "
10
+ end
@@ -0,0 +1,12 @@
1
+ # encoding: UTF-8
2
+
3
+ require 'spec_helper'
4
+ require 'normatron/filters/squish_filter'
5
+
6
+ describe Normatron::Filters::SquishFilter do
7
+ it_should_behave_like "string processor"
8
+ it_should_behave_like "evaluable filter", [" Friday 05 October 2012 " ], "Friday 05 October 2012"
9
+ it_should_behave_like "evaluable filter", ["Friday 05 October 2012" ], "Friday 05 October 2012"
10
+ it_should_behave_like "evaluable filter", ["Friday \n05 \nOctober \n2012" ], "Friday 05 October 2012"
11
+ it_should_behave_like "evaluable filter", [" Friday 05 \nOctober 2012 "], "Friday 05 October 2012"
12
+ end
@@ -0,0 +1,12 @@
1
+ # encoding: UTF-8
2
+
3
+ require 'spec_helper'
4
+ require 'normatron/filters/strip_filter'
5
+
6
+ describe Normatron::Filters::StripFilter do
7
+ it_should_behave_like "string processor"
8
+ it_should_behave_like "evaluable filter", [" to anywhere " ], "to anywhere"
9
+ it_should_behave_like "evaluable filter", [" to anywhere ", :L ], "to anywhere "
10
+ it_should_behave_like "evaluable filter", [" to anywhere ", :R ], " to anywhere"
11
+ it_should_behave_like "evaluable filter", [" to anywhere ", :LR], "to anywhere"
12
+ end
@@ -0,0 +1,12 @@
1
+ # encoding: UTF-8
2
+
3
+ require 'spec_helper'
4
+ require 'normatron/filters/swapcase_filter'
5
+
6
+ describe Normatron::Filters::SwapcaseFilter do
7
+ it_should_behave_like "string processor"
8
+ it_should_behave_like "evaluable filter", ["caçador"], "CAÇADOR"
9
+ it_should_behave_like "evaluable filter", ["CAÇADOR"], "caçador"
10
+ it_should_behave_like "evaluable filter", ["CaÇaDoR"], "cAçAdOr"
11
+ it_should_behave_like "evaluable filter", ["cAçAdOr"], "CaÇaDoR"
12
+ end
@@ -0,0 +1,12 @@
1
+ # encoding: UTF-8
2
+
3
+ require 'spec_helper'
4
+ require 'normatron/filters/titleize_filter'
5
+
6
+ describe Normatron::Filters::TitleizeFilter do
7
+ it_should_behave_like "string processor"
8
+ it_should_behave_like "evaluable filter", ["04. until it sleeps" ], "04. Until It Sleeps"
9
+ it_should_behave_like "evaluable filter", ["04. UNTIL IT SLEEPS" ], "04. Until It Sleeps"
10
+ it_should_behave_like "evaluable filter", ["quem é o dono deste sofá?"], "Quem É O Dono Deste Sofá?"
11
+ it_should_behave_like "evaluable filter", ["QUEM É O DONO DESTE SOFÁ?"], "Quem É O Dono Deste Sofá?"
12
+ end
@@ -0,0 +1,26 @@
1
+ # encoding: UTF-8
2
+
3
+ require 'spec_helper'
4
+ require 'normatron/filters/underscore_filter'
5
+
6
+ describe Normatron::Filters::UnderscoreFilter do
7
+ it_should_behave_like "string processor"
8
+ it_should_behave_like "evaluable filter", ["ActiveRecord::Errors" ], "active_record/errors"
9
+ it_should_behave_like "evaluable filter", ["DadosHistóricos::Período::Empresa"], "dados_históricos/período/empresa"
10
+ it_should_behave_like "evaluable filter", ["ÍmparPar::NorteSul" ], "ímpar_par/norte_sul"
11
+
12
+ context "should affect acronyms" do
13
+ let(:inflections) { ActiveSupport::Inflector::Inflections.instance }
14
+
15
+ before(:all) do
16
+ inflections.acronym 'docType'
17
+ end
18
+
19
+ after(:all) do
20
+ inflections.acronyms.delete("doctype")
21
+ end
22
+
23
+ it_should_behave_like "evaluable filter", ["docTypeStop::RunSSL::Xml::MixHTTP" ], "doctype_stop/run_ssl/xml/mix_http"
24
+ it_should_behave_like "evaluable filter", ["DocTypeStop::RunSSL::Xml::MixHTTP" ], "doc_type_stop/run_ssl/xml/mix_http"
25
+ end
26
+ end
@@ -0,0 +1,10 @@
1
+ # encoding: UTF-8
2
+
3
+ require 'spec_helper'
4
+ require 'normatron/filters/upcase_filter'
5
+
6
+ describe Normatron::Filters::UpcaseFilter do
7
+ it_should_behave_like "string processor"
8
+ it_should_behave_like "evaluable filter", ["caçador"], "CAÇADOR"
9
+ it_should_behave_like "evaluable filter", ["CAÇADOR"], "CAÇADOR"
10
+ end
@@ -1,10 +1,10 @@
1
- require "spec_helper"
1
+ require 'spec_helper'
2
+ require 'normatron'
2
3
 
3
4
  describe Normatron do
4
5
 
5
6
  specify do
6
7
  described_class.should respond_to :configuration
7
- described_class.should respond_to :configure
8
8
  described_class.should respond_to :setup
9
9
  described_class.should respond_to :config
10
10
  end
@@ -15,4 +15,30 @@ describe Normatron do
15
15
  it { config.should be_an_instance_of Normatron::Configuration }
16
16
  it { expect { |b| Normatron.setup(&b) }.to yield_control }
17
17
  end
18
+
19
+ describe :build_hash do
20
+ context "with single filter hash" do
21
+ it { described_class.build_hash( :a ).should == { a: nil } }
22
+ it { described_class.build_hash( [:a] ).should == { a: nil } }
23
+ it { described_class.build_hash( [[:a]] ).should == { a: nil } }
24
+ it { described_class.build_hash( [[:a, :b]] ).should == { a: [:b] } }
25
+ it { described_class.build_hash( {:a => :b} ).should == { a: [:b] } }
26
+ it { described_class.build_hash( {:a => [:b]} ).should == { a: [:b] } }
27
+ it { described_class.build_hash( {:a => [[:b]]} ).should == { a: [[:b]] } }
28
+ it { described_class.build_hash( [{:a => [[:b]]}] ).should == { a: [[:b]] } }
29
+ end
30
+
31
+ context "with double filters hash" do
32
+ it { described_class.build_hash( :a, :b ).should == { a: nil, b: nil } }
33
+ it { described_class.build_hash( [:a, :b] ).should == { a: nil, b: nil } }
34
+ it { described_class.build_hash( [:a, :b => [:c, :d]] ).should == { a: nil, b: [:c, :d] } }
35
+ it { described_class.build_hash( [:a, [:b, :c, :d]] ).should == { a: nil, b: [:c, :d] } }
36
+ end
37
+
38
+ context "with trible filters hash" do
39
+ it { described_class.build_hash( [:a, [:b, :c, :d], { e: [:f, :g] }] ).should == { a: nil, b: [:c, :d], e: [:f, :g] } }
40
+ it { described_class.build_hash( [:a, { b: [:c, :d] }, { e: [:f, :g] }] ).should == { a: nil, b: [:c, :d], e: [:f, :g] } }
41
+ it { described_class.build_hash( [:a, { b: [:c, :d], e: [:f, :g] }] ).should == { a: nil, b: [:c, :d], e: [:f, :g] } }
42
+ end
43
+ end
18
44
  end
@@ -1,6 +1,39 @@
1
- require "active_record"
2
- require "normatron"
1
+ # encoding: UTF-8
3
2
 
4
- ActiveRecord::Base.establish_connection :adapter => "sqlite3", :database => ":memory:"
3
+ require "active_record"
5
4
  Dir[File.dirname(__FILE__) + "/support/**/*.rb"].each { |f| require f }
6
- ActiveRecord::Base.send(:include, Normatron::Extensions::ActiveRecord) if defined?(ActiveRecord::Base)
5
+
6
+ shared_examples "evaluable filter" do |args, expected|
7
+ if args.size == 1
8
+ it { subject.send(:evaluate, args[0]).should_not equal expected }
9
+ it { subject.send(:evaluate, args[0]).should eq expected }
10
+ it { subject.send(:evaluate, args[0]).should be_a String }
11
+ else
12
+ it { subject.send(:evaluate, args[0], *args[1..-1]).should_not equal expected }
13
+ it { subject.send(:evaluate, args[0], *args[1..-1]).should eq expected }
14
+ it { subject.send(:evaluate, args[0], *args[1..-1]).should be_a String }
15
+ end
16
+ end
17
+
18
+ shared_examples "string processor" do |*args|
19
+ let(:number) { rand(1000) }
20
+
21
+ if args.any?
22
+ it { subject.send(:evaluate, number, args).should eq number }
23
+ it { subject.send(:evaluate, nil, args).should be_nil }
24
+ else
25
+ it { subject.send(:evaluate, number).should eq number }
26
+ it { subject.send(:evaluate, nil).should be_nil }
27
+ end
28
+ end
29
+
30
+ shared_examples "character cleaner" do |action, properties|
31
+ let(:word) {"ᰄ긚 ᧔瑤л꽥๏ ѨDꨥ\aՇ謬ꗀᶆᵆ쳻ῼἬ鿃ႍꥈᤫ꙲⅟౮ⅰ⅘༌_゠⟦〉⸠›⸓⌟⅂₧௹¨⣭  \u2028\u2029\u008C\u0011⁠\uA7E5" }
32
+ let(:regex) do
33
+ construct = properties.map { |p| "\\p{#{p.to_s}}" } * ""
34
+ construct = "[#{'^' if action == :keep}#{construct}]"
35
+ Regexp.new(construct.force_encoding "UTF-8")
36
+ end
37
+
38
+ it { subject.evaluate(word, properties).should eq word.gsub(regex, '') }
39
+ end
@@ -0,0 +1,7 @@
1
+ module MyFilters
2
+ module SmileFilter
3
+ def self.evaluate(value)
4
+ value + " =]"
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,14 @@
1
+ ActiveRecord::Base.establish_connection :adapter => "sqlite3", :database => ":memory:"
2
+
3
+ ActiveRecord::Schema.define(:version => 0) do
4
+ create_table :users do |t|
5
+ t.string :login
6
+ t.string :password
7
+ t.string :email
8
+ t.string :phone
9
+ end
10
+ end
11
+
12
+ class User < ActiveRecord::Base
13
+ attr_accessible :login, :password, :email, :phone
14
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: normatron
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.3.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-10-01 00:00:00.000000000 Z
12
+ date: 2012-10-10 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activerecord
@@ -75,7 +75,7 @@ dependencies:
75
75
  - - ! '>='
76
76
  - !ruby/object:Gem::Version
77
77
  version: 2.10.0
78
- description: ! " Normatron is an Ruby On Rails plugin that perform attribute normalizations
78
+ description: ! " Normatron is a Ruby On Rails plugin that perform attribute normalizations
79
79
  for ActiveRecord objects.\n With it you can normalize attributes to the desired
80
80
  format before saving them in the database.\n This gem inhibits the work of having
81
81
  to override attributes or create a specific method to perform most of the normalizations.\n"
@@ -85,20 +85,56 @@ executables: []
85
85
  extensions: []
86
86
  extra_rdoc_files: []
87
87
  files:
88
+ - lib/generators/normatron/templates/normatron.rb
89
+ - lib/generators/normatron/install_generator.rb
88
90
  - lib/normatron/filters.rb
89
91
  - lib/normatron/configuration.rb
92
+ - lib/normatron/filters/squeeze_filter.rb
93
+ - lib/normatron/filters/swapcase_filter.rb
94
+ - lib/normatron/filters/keep_filter.rb
95
+ - lib/normatron/filters/underscore_filter.rb
96
+ - lib/normatron/filters/camelize_filter.rb
97
+ - lib/normatron/filters/titleize_filter.rb
98
+ - lib/normatron/filters/upcase_filter.rb
99
+ - lib/normatron/filters/capitalize_filter.rb
100
+ - lib/normatron/filters/dump_filter.rb
101
+ - lib/normatron/filters/remove_filter.rb
102
+ - lib/normatron/filters/strip_filter.rb
103
+ - lib/normatron/filters/blank_filter.rb
104
+ - lib/normatron/filters/squish_filter.rb
105
+ - lib/normatron/filters/dasherize_filter.rb
106
+ - lib/normatron/filters/helpers.rb
107
+ - lib/normatron/filters/downcase_filter.rb
108
+ - lib/normatron/filters/chomp_filter.rb
109
+ - lib/normatron/extensions.rb
110
+ - lib/normatron/version.rb
90
111
  - lib/normatron/extensions/active_record.rb
91
112
  - lib/normatron.rb
92
113
  - MIT-LICENSE
93
114
  - Rakefile
94
115
  - README.textile
95
116
  - spec/spec_helper.rb
96
- - spec/support/model_model.rb
97
- - spec/support/schema.rb
98
- - spec/filters_spec.rb
117
+ - spec/support/user_model.rb
118
+ - spec/support/my_filters.rb
99
119
  - spec/normatron_spec.rb
100
- - spec/configuration_spec.rb
101
- - spec/extensions/active_record_spec.rb
120
+ - spec/normatron/filters/downcase_filter_spec.rb
121
+ - spec/normatron/filters/dump_filter_spec.rb
122
+ - spec/normatron/filters/camelize_filter_spec.rb
123
+ - spec/normatron/filters/chomp_filter_spec.rb
124
+ - spec/normatron/filters/capitalize_filter_spec.rb
125
+ - spec/normatron/filters/upcase_filter_spec.rb
126
+ - spec/normatron/filters/strip_filter_spec.rb
127
+ - spec/normatron/filters/underscore_filter_spec.rb
128
+ - spec/normatron/filters/keep_filter_spec.rb
129
+ - spec/normatron/filters/squish_filter_spec.rb
130
+ - spec/normatron/filters/remove_filter_spec.rb
131
+ - spec/normatron/filters/blank_filter_spec.rb
132
+ - spec/normatron/filters/squeeze_filter_spec.rb
133
+ - spec/normatron/filters/swapcase_filter_spec.rb
134
+ - spec/normatron/filters/dasherize_filter_spec.rb
135
+ - spec/normatron/filters/titleize_filter_spec.rb
136
+ - spec/normatron/configuration_spec.rb
137
+ - spec/normatron/extensions/active_record_spec.rb
102
138
  homepage: https://github.com/fernandors87/normatron
103
139
  licenses: []
104
140
  post_install_message:
@@ -125,10 +161,25 @@ specification_version: 3
125
161
  summary: Normalize attributes for ActiveRecord objects.
126
162
  test_files:
127
163
  - spec/spec_helper.rb
128
- - spec/support/model_model.rb
129
- - spec/support/schema.rb
130
- - spec/filters_spec.rb
164
+ - spec/support/user_model.rb
165
+ - spec/support/my_filters.rb
131
166
  - spec/normatron_spec.rb
132
- - spec/configuration_spec.rb
133
- - spec/extensions/active_record_spec.rb
167
+ - spec/normatron/filters/downcase_filter_spec.rb
168
+ - spec/normatron/filters/dump_filter_spec.rb
169
+ - spec/normatron/filters/camelize_filter_spec.rb
170
+ - spec/normatron/filters/chomp_filter_spec.rb
171
+ - spec/normatron/filters/capitalize_filter_spec.rb
172
+ - spec/normatron/filters/upcase_filter_spec.rb
173
+ - spec/normatron/filters/strip_filter_spec.rb
174
+ - spec/normatron/filters/underscore_filter_spec.rb
175
+ - spec/normatron/filters/keep_filter_spec.rb
176
+ - spec/normatron/filters/squish_filter_spec.rb
177
+ - spec/normatron/filters/remove_filter_spec.rb
178
+ - spec/normatron/filters/blank_filter_spec.rb
179
+ - spec/normatron/filters/squeeze_filter_spec.rb
180
+ - spec/normatron/filters/swapcase_filter_spec.rb
181
+ - spec/normatron/filters/dasherize_filter_spec.rb
182
+ - spec/normatron/filters/titleize_filter_spec.rb
183
+ - spec/normatron/configuration_spec.rb
184
+ - spec/normatron/extensions/active_record_spec.rb
134
185
  has_rdoc: