normatron 0.2.1 → 0.3.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.
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
@@ -1,53 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Normatron::Configuration do
4
- before :each do
5
- @instance = described_class.new
6
- end
7
-
8
- subject { @instance }
9
-
10
- describe "#default_filters" do
11
- it "should initializate" do
12
- subject.default_filters.should == { squish: [], blank: [] }
13
- end
14
- it "should parse and set filters properly" do
15
- subject.default_filters = :upcase, :blank, { keep: [:L, :N] }, [:remove, :S, :Z]
16
- subject.default_filters.should == { upcase: [], blank: [], keep: [:L, :N], remove: [:S, :Z] }
17
- end
18
- it "should raise error for empty filters" do
19
- lambda{ subject.default_filters = [] }.should raise_error
20
- end
21
- end
22
-
23
- describe "::clean_filters" do
24
- context "with wrong arguments" do
25
- it { expect{ described_class.clean_filters(nil) }.to raise_error }
26
- it { expect{ described_class.clean_filters([]) }.to raise_error }
27
- it { expect{ described_class.clean_filters(1) }.to raise_error }
28
- it { expect{ described_class.clean_filters([1]) }.to raise_error }
29
- it { expect{ described_class.clean_filters([:a, 1]) }.to raise_error }
30
- it { expect{ described_class.clean_filters([[1]]) }.to raise_error }
31
- end
32
-
33
- context "with single filter hash" do
34
- it { described_class.clean_filters(:a ).should == { a:[] } }
35
- it { described_class.clean_filters([:a] ).should == { a:[] } }
36
- it { described_class.clean_filters([[:a]] ).should == { a:[] } }
37
- it { described_class.clean_filters([[:a, :b]] ).should == { a:[:b] } }
38
- it { described_class.clean_filters([a: [:b]] ).should == { a:[:b] } }
39
- end
40
-
41
- context "with double filters hash" do
42
- it { described_class.clean_filters([:a, :b] ).should == { a:[], b:[] } }
43
- it { described_class.clean_filters([:a, b:[:c, :d]] ).should == { a:[], b:[:c, :d] } }
44
- it { described_class.clean_filters([:a, [:b, :c, :d]] ).should == { a:[], b:[:c, :d] } }
45
- end
46
-
47
- context "with trible filters hash" do
48
- it { described_class.clean_filters([:a, [:b, :c, :d], { e: [:f, :g] }] ).should == { a:[], b:[:c, :d], e: [:f, :g] } }
49
- it { described_class.clean_filters([:a, { b: [:c, :d] }, { e: [:f, :g] }] ).should == { a:[], b:[:c, :d], e: [:f, :g] } }
50
- it { described_class.clean_filters([:a, { b: [:c, :d], e: [:f, :g] }] ).should == { a:[], b:[:c, :d], e: [:f, :g] } }
51
- end
52
- end
53
- end
@@ -1,114 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Normatron::Extensions::ActiveRecord do
4
- let(:model) { Model }
5
- before(:each) { model.normalize_options = nil }
6
-
7
- describe "::normalize" do
8
- subject { model.normalize_options }
9
-
10
- specify("unknown attribute") { expect { model.normalize :abcdef }.to raise_error }
11
- specify("nil attribute") { expect { model.normalize nil }.to raise_error }
12
-
13
- context "with no filters" do
14
- it "should use default filters" do
15
- model.normalize :field_a
16
- should == { field_a: { squish: [], blank: [] } }
17
- end
18
-
19
- it "should assoc to multiple attributes" do
20
- model.normalize :field_a, :field_b, :field_c
21
- should == { field_a: { squish: [], blank: [] },
22
- field_b: { squish: [], blank: [] },
23
- field_c: { squish: [], blank: [] } }
24
- end
25
-
26
- it "should stack attributes for multiple calls" do
27
- model.normalize :field_a, :field_b
28
- model.normalize :field_c
29
- should == { field_a: { squish: [], blank: [] },
30
- field_b: { squish: [], blank: [] },
31
- field_c: { squish: [], blank: [] } }
32
- end
33
- end
34
-
35
- context "with single filter" do
36
- it "should set it" do
37
- model.normalize :field_a, with: :upcase
38
- should == { field_a: { upcase: [] } }
39
- end
40
-
41
- it "should set it as an array" do
42
- model.normalize :field_a, with: [:upcase]
43
- should == { field_a: { upcase: [] } }
44
- end
45
-
46
- it "should set it as an array" do
47
- model.normalize :field_a, with: [[:keep, :L, :Z, :N]]
48
- should == { field_a: { keep: [:L, :Z, :N] } }
49
- end
50
- end
51
-
52
- context "with multiple filters" do
53
- it "should set it" do
54
- model.normalize :field_a, with: [:upcase, :dasherize]
55
- should == { field_a: { upcase: [], dasherize: [] } }
56
- end
57
-
58
- it "should stack filters for multiple calls" do
59
- model.normalize :field_a, with: :upcase
60
- model.normalize :field_a, :field_b, with: [:blank, :squish]
61
- should == { field_a: { upcase: [], blank: [], squish: [] },
62
- field_b: { blank: [], squish: []} }
63
- end
64
-
65
- it "should use filters with arguments passed as an array" do
66
- model.normalize :field_a, with: [:upcase, [:keep, :L, :N], :blank]
67
- should == { field_a: { upcase: [], keep: [:L, :N], blank: [] } }
68
- end
69
-
70
- it "should use filters with arguments passed as a hash" do
71
- model.normalize :field_a, with: [:upcase, { keep: [:L, :N] }, :blank]
72
- should == { field_a: { upcase: [], keep: [:L, :N], blank: [] } }
73
- end
74
- end
75
- end
76
-
77
- describe "#normalize_attributes" do
78
- before(:each) { @instance = model.new }
79
- let(:instance) { @instance }
80
-
81
- it "should run instance method filter" do
82
- model.class_eval do
83
- define_method :test_filter do |value, glue, size|
84
- v = value.gsub(/\p{Z}/u, '').split(//) * glue
85
- v[0..size-1]
86
- end
87
- end
88
-
89
- model.normalize :field_a, with: [[:test_filter, ".", 5]]
90
- instance.field_a = " bla bla bla"
91
- instance.normalize_attributes
92
- instance.field_a.should == "b.l.a"
93
- end
94
-
95
- it "should run native filter" do
96
- model.normalize :field_a, with: [keep: [:N]]
97
- instance.field_a = "abc123"
98
- instance.normalize_attributes
99
- instance.field_a.should == "123"
100
- end
101
-
102
- it "should be called before validation" do
103
- model.normalize :field_a, with: :downcase
104
- instance.field_a = "XXXXXX"
105
- instance.valid?
106
- instance.field_a.should == "xxxxxx"
107
- end
108
-
109
- it "should raise error for wrong filters" do
110
- model.normalize :field_a, with: :down
111
- expect { instance.normalize_attributes }.to raise_error "Filter 'down' wasn't found."
112
- end
113
- end
114
- end
@@ -1,442 +0,0 @@
1
- # encoding: UTF-8
2
-
3
- require 'spec_helper'
4
-
5
- describe Normatron::Filters do
6
-
7
- subject { described_class }
8
- let(:mb_chars) { ActiveSupport::Multibyte::Chars }
9
-
10
- #
11
- # BLANK
12
- ###################################################################################################################
13
- describe "::blank" do
14
- it { subject.blank(" . " ).should eq " . " }
15
- it { subject.blank(" . ".mb_chars).should eq " . ".mb_chars }
16
-
17
- it { subject.blank(" . " ).should be_a String }
18
- it { subject.blank(" " ).should be_nil }
19
- it { subject.blank("\n \t \r \f" ).should be_nil }
20
-
21
- it { subject.blank(" . ".mb_chars).should be_a mb_chars }
22
- it { subject.blank(" ".mb_chars).should be_nil }
23
- it { subject.blank("\n \t \r \f".mb_chars).should be_nil }
24
-
25
- it { subject.blank(100 ).should eq 100 }
26
- it { subject.blank(nil ).should be_nil }
27
- end
28
-
29
- #
30
- # CAMELIZE
31
- ###################################################################################################################
32
- describe "::camelize" do
33
- it { subject.camelize("active_record/errors" ).should eq "ActiveRecord::Errors" }
34
- it { subject.camelize("áctivé_record/érrórs" ).should eq "ÁctivéRecord::Érrórs" }
35
- it { subject.camelize("ActivE_record/ErrOrs" ).should eq "ActiveRecord::Errors" }
36
- it { subject.camelize("ÁctivÉ_record/ÉrrÓrs" ).should eq "ÁctivéRecord::Érrórs" }
37
- it { subject.camelize("active_record/errors", :upper ).should eq "ActiveRecord::Errors" }
38
- it { subject.camelize("áctivé_record/érrórs", :upper ).should eq "ÁctivéRecord::Érrórs" }
39
- it { subject.camelize("ActivE_record/ErrOrs", :upper ).should eq "ActiveRecord::Errors" }
40
- it { subject.camelize("ÁctivÉ_record/ÉrrÓrs", :upper ).should eq "ÁctivéRecord::Érrórs" }
41
- it { subject.camelize("active_record/errors", :lower ).should eq "activeRecord::Errors" }
42
- it { subject.camelize("áctivé_record/érrórs", :lower ).should eq "áctivéRecord::Érrórs" }
43
- it { subject.camelize("ActivE_record/ErrOrs", :lower ).should eq "activeRecord::Errors" }
44
- it { subject.camelize("ÁctivÉ_record/ÉrrÓrs", :lower ).should eq "áctivéRecord::Érrórs" }
45
-
46
- it { subject.camelize("active_record/errors".mb_chars ).should eq "ActiveRecord::Errors".mb_chars }
47
- it { subject.camelize("áctivé_record/érrórs".mb_chars ).should eq "ÁctivéRecord::Érrórs".mb_chars }
48
- it { subject.camelize("ActivE_record/ErrOrs".mb_chars ).should eq "ActiveRecord::Errors".mb_chars }
49
- it { subject.camelize("ÁctivÉ_record/ÉrrÓrs".mb_chars ).should eq "ÁctivéRecord::Érrórs".mb_chars }
50
- it { subject.camelize("active_record/errors".mb_chars, :upper).should eq "ActiveRecord::Errors".mb_chars }
51
- it { subject.camelize("áctivé_record/érrórs".mb_chars, :upper).should eq "ÁctivéRecord::Érrórs".mb_chars }
52
- it { subject.camelize("ActivE_record/ErrOrs".mb_chars, :upper).should eq "ActiveRecord::Errors".mb_chars }
53
- it { subject.camelize("ÁctivÉ_record/ÉrrÓrs".mb_chars, :upper).should eq "ÁctivéRecord::Érrórs".mb_chars }
54
- it { subject.camelize("active_record/errors".mb_chars, :lower).should eq "activeRecord::Errors".mb_chars }
55
- it { subject.camelize("áctivé_record/érrórs".mb_chars, :lower).should eq "áctivéRecord::Érrórs".mb_chars }
56
- it { subject.camelize("ActivE_record/ErrOrs".mb_chars, :lower).should eq "activeRecord::Errors".mb_chars }
57
- it { subject.camelize("ÁctivÉ_record/ÉrrÓrs".mb_chars, :lower).should eq "áctivéRecord::Érrórs".mb_chars }
58
-
59
- it { subject.camelize("active_record/errors" ).should be_a String }
60
- it { subject.camelize("áctivé_record/érrórs" ).should be_a String }
61
- it { subject.camelize("ActivE_record/ErrOrs" ).should be_a String }
62
- it { subject.camelize("ÁctivÉ_record/ÉrrÓrs" ).should be_a String }
63
- it { subject.camelize("active_record/errors", :upper ).should be_a String }
64
- it { subject.camelize("áctivé_record/érrórs", :upper ).should be_a String }
65
- it { subject.camelize("ActivE_record/ErrOrs", :upper ).should be_a String }
66
- it { subject.camelize("ÁctivÉ_record/ÉrrÓrs", :upper ).should be_a String }
67
- it { subject.camelize("active_record/errors", :lower ).should be_a String }
68
- it { subject.camelize("áctivé_record/érrórs", :lower ).should be_a String }
69
- it { subject.camelize("ActivE_record/ErrOrs", :lower ).should be_a String }
70
- it { subject.camelize("ÁctivÉ_record/ÉrrÓrs", :lower ).should be_a String }
71
-
72
- it { subject.camelize("active_record/errors".mb_chars ).should be_a mb_chars }
73
- it { subject.camelize("áctivé_record/érrórs".mb_chars ).should be_a mb_chars }
74
- it { subject.camelize("ActivE_record/ErrOrs".mb_chars ).should be_a mb_chars }
75
- it { subject.camelize("ÁctivÉ_record/ÉrrÓrs".mb_chars ).should be_a mb_chars }
76
- it { subject.camelize("active_record/errors".mb_chars, :upper).should be_a mb_chars }
77
- it { subject.camelize("áctivé_record/érrórs".mb_chars, :upper).should be_a mb_chars }
78
- it { subject.camelize("ActivE_record/ErrOrs".mb_chars, :upper).should be_a mb_chars }
79
- it { subject.camelize("ÁctivÉ_record/ÉrrÓrs".mb_chars, :upper).should be_a mb_chars }
80
- it { subject.camelize("active_record/errors".mb_chars, :lower).should be_a mb_chars }
81
- it { subject.camelize("áctivé_record/érrórs".mb_chars, :lower).should be_a mb_chars }
82
- it { subject.camelize("ActivE_record/ErrOrs".mb_chars, :lower).should be_a mb_chars }
83
- it { subject.camelize("ÁctivÉ_record/ÉrrÓrs".mb_chars, :lower).should be_a mb_chars }
84
-
85
- it { subject.camelize(100 ).should eq 100 }
86
- it { subject.camelize(100, :upper ).should eq 100 }
87
- it { subject.camelize(100, :lower ).should eq 100 }
88
- it { subject.camelize(nil ).should be_nil }
89
- it { subject.camelize(nil, :upper ).should be_nil }
90
- it { subject.camelize(nil, :lower ).should be_nil }
91
-
92
- it { expect { subject.camelize("ÁctivÉ_record/ÉrrÓrs", :other) }.to raise_error }
93
-
94
- context "should affect acronyms" do
95
- let(:inflections) { ActiveSupport::Inflector::Inflections.instance }
96
-
97
- before(:all) do
98
- inflections.acronym 'HTTP'
99
- inflections.acronym 'SSL'
100
- end
101
-
102
- it { subject.camelize("http_address/ssl", :upper).should eq "HTTPAddress::SSL" }
103
- it { subject.camelize("http_address/ssl", :lower).should eq "httpAddress::SSL" }
104
-
105
- after(:all) do
106
- inflections.acronyms = {}
107
- end
108
- end
109
- end
110
-
111
- describe "::capitalize" do
112
- it { subject.capitalize("abcDEF GhI" ).should eq "Abcdef ghi" }
113
- it { subject.capitalize("ébcDEF GhI" ).should eq "Ébcdef ghi" }
114
- it { subject.capitalize(" bcDEF GhI" ).should eq " bcdef ghi" }
115
- it { subject.capitalize("abcDEF GhI" ).should be_a String }
116
- it { subject.capitalize("abcDEF GhI".mb_chars).should be_a mb_chars }
117
- it { subject.capitalize(100 ).should eq 100 }
118
- it { subject.capitalize(nil ).should be_nil }
119
- end
120
-
121
- #
122
- # CHOMP
123
- ###################################################################################################################
124
- describe "::chomp" do
125
- it { subject.chomp("abcdef ghijkl" ).should eq "abcdef ghijkl" }
126
- it { subject.chomp("abcdef ghij\n" ).should eq "abcdef ghij" }
127
- it { subject.chomp("abc\nd efghij" ).should eq "abc\nd efghij" }
128
- it { subject.chomp("abc\nd ef\n\r" ).should eq "abc\nd ef\n" }
129
- it { subject.chomp("abc\nd ef\r\n" ).should eq "abc\nd ef" }
130
- it { subject.chomp("abcdef ghijkl", "jkl" ).should eq "abcdef ghi" }
131
- it { subject.chomp("abcdef ghij\n", "j\n" ).should eq "abcdef ghi" }
132
- it { subject.chomp("abc\nd efghij", " efghij" ).should eq "abc\nd" }
133
- it { subject.chomp("abc\nd ef\n\r", "\n\r" ).should eq "abc\nd ef" }
134
- it { subject.chomp("abc\nd ef\r\n", "\n" ).should eq "abc\nd ef" }
135
-
136
- it { subject.chomp("abcdef ghijkl" ).should eq "abcdef ghijkl" }
137
- it { subject.chomp("abcdef ghij\n" ).should eq "abcdef ghij" }
138
- it { subject.chomp("abc\nd efghij" ).should eq "abc\nd efghij" }
139
- it { subject.chomp("abc\nd ef\n\r" ).should eq "abc\nd ef\n" }
140
- it { subject.chomp("abc\nd ef\r\n" ).should eq "abc\nd ef" }
141
- it { subject.chomp("abcdef ghijkl", "jkl" .mb_chars ).should eq "abcdef ghi" }
142
- it { subject.chomp("abcdef ghij\n", "j\n" .mb_chars ).should eq "abcdef ghi" }
143
- it { subject.chomp("abc\nd efghij", " efghij".mb_chars ).should eq "abc\nd" }
144
- it { subject.chomp("abc\nd ef\n\r", "\n\r" .mb_chars ).should eq "abc\nd ef" }
145
- it { subject.chomp("abc\nd ef\r\n", "\n" .mb_chars ).should eq "abc\nd ef" }
146
-
147
- it { subject.chomp("abcdef ghijkl".mb_chars ).should eq "abcdef ghijkl".mb_chars }
148
- it { subject.chomp("abcdef ghij\n".mb_chars ).should eq "abcdef ghij" .mb_chars }
149
- it { subject.chomp("abc\nd efghij".mb_chars ).should eq "abc\nd efghij".mb_chars }
150
- it { subject.chomp("abc\nd ef\n\r".mb_chars ).should eq "abc\nd ef\n" .mb_chars }
151
- it { subject.chomp("abc\nd ef\r\n".mb_chars ).should eq "abc\nd ef" .mb_chars }
152
- it { subject.chomp("abcdef ghijkl".mb_chars, "jkl" ).should eq "abcdef ghi" .mb_chars }
153
- it { subject.chomp("abcdef ghij\n".mb_chars, "j\n" ).should eq "abcdef ghi" .mb_chars }
154
- it { subject.chomp("abc\nd efghij".mb_chars, " efghij" ).should eq "abc\nd" .mb_chars }
155
- it { subject.chomp("abc\nd ef\n\r".mb_chars, "\n\r" ).should eq "abc\nd ef" .mb_chars }
156
- it { subject.chomp("abc\nd ef\r\n".mb_chars, "\n" ).should eq "abc\nd ef" .mb_chars }
157
-
158
- it { subject.chomp("abcdef ghijkl".mb_chars ).should eq "abcdef ghijkl".mb_chars }
159
- it { subject.chomp("abcdef ghij\n".mb_chars ).should eq "abcdef ghij" .mb_chars }
160
- it { subject.chomp("abc\nd efghij".mb_chars ).should eq "abc\nd efghij".mb_chars }
161
- it { subject.chomp("abc\nd ef\n\r".mb_chars ).should eq "abc\nd ef\n" .mb_chars }
162
- it { subject.chomp("abc\nd ef\r\n".mb_chars ).should eq "abc\nd ef" .mb_chars }
163
- it { subject.chomp("abcdef ghijkl".mb_chars, "jkl" .mb_chars).should eq "abcdef ghi" .mb_chars }
164
- it { subject.chomp("abcdef ghij\n".mb_chars, "j\n" .mb_chars).should eq "abcdef ghi" .mb_chars }
165
- it { subject.chomp("abc\nd efghij".mb_chars, " efghij".mb_chars).should eq "abc\nd" .mb_chars }
166
- it { subject.chomp("abc\nd ef\n\r".mb_chars, "\n\r" .mb_chars).should eq "abc\nd ef" .mb_chars }
167
- it { subject.chomp("abc\nd ef\r\n".mb_chars, "\n" .mb_chars).should eq "abc\nd ef" .mb_chars }
168
-
169
- it { subject.chomp("abcdef ghijkl" ).should be_a String }
170
- it { subject.chomp("abcdef ghij\n" ).should be_a String }
171
- it { subject.chomp("abc\nd efghij" ).should be_a String }
172
- it { subject.chomp("abc\nd ef\n\r" ).should be_a String }
173
- it { subject.chomp("abc\nd ef\r\n" ).should be_a String }
174
- it { subject.chomp("abcdef ghijkl", "jkl" ).should be_a String }
175
- it { subject.chomp("abcdef ghij\n", "j\n" ).should be_a String }
176
- it { subject.chomp("abc\nd efghij", " efghij" ).should be_a String }
177
- it { subject.chomp("abc\nd ef\n\r", "\n\r" ).should be_a String }
178
- it { subject.chomp("abc\nd ef\r\n", "\n" ).should be_a String }
179
-
180
- it { subject.chomp("abcdef ghijkl" ).should be_a String }
181
- it { subject.chomp("abcdef ghij\n" ).should be_a String }
182
- it { subject.chomp("abc\nd efghij" ).should be_a String }
183
- it { subject.chomp("abc\nd ef\n\r" ).should be_a String }
184
- it { subject.chomp("abc\nd ef\r\n" ).should be_a String }
185
- it { subject.chomp("abcdef ghijkl", "jkl" .mb_chars ).should be_a String }
186
- it { subject.chomp("abcdef ghij\n", "j\n" .mb_chars ).should be_a String }
187
- it { subject.chomp("abc\nd efghij", " efghij".mb_chars ).should be_a String }
188
- it { subject.chomp("abc\nd ef\n\r", "\n\r" .mb_chars ).should be_a String }
189
- it { subject.chomp("abc\nd ef\r\n", "\n" .mb_chars ).should be_a String }
190
-
191
- it { subject.chomp("abcdef ghijkl".mb_chars ).should be_a mb_chars }
192
- it { subject.chomp("abcdef ghij\n".mb_chars ).should be_a mb_chars }
193
- it { subject.chomp("abc\nd efghij".mb_chars ).should be_a mb_chars }
194
- it { subject.chomp("abc\nd ef\n\r".mb_chars ).should be_a mb_chars }
195
- it { subject.chomp("abc\nd ef\r\n".mb_chars ).should be_a mb_chars }
196
- it { subject.chomp("abcdef ghijkl".mb_chars, "jkl" ).should be_a mb_chars }
197
- it { subject.chomp("abcdef ghij\n".mb_chars, "j\n" ).should be_a mb_chars }
198
- it { subject.chomp("abc\nd efghij".mb_chars, " efghij" ).should be_a mb_chars }
199
- it { subject.chomp("abc\nd ef\n\r".mb_chars, "\n\r" ).should be_a mb_chars }
200
- it { subject.chomp("abc\nd ef\r\n".mb_chars, "\n" ).should be_a mb_chars }
201
-
202
- it { subject.chomp("abcdef ghijkl".mb_chars ).should be_a mb_chars }
203
- it { subject.chomp("abcdef ghij\n".mb_chars ).should be_a mb_chars }
204
- it { subject.chomp("abc\nd efghij".mb_chars ).should be_a mb_chars }
205
- it { subject.chomp("abc\nd ef\n\r".mb_chars ).should be_a mb_chars }
206
- it { subject.chomp("abc\nd ef\r\n".mb_chars ).should be_a mb_chars }
207
- it { subject.chomp("abcdef ghijkl".mb_chars, "jkl" .mb_chars).should be_a mb_chars }
208
- it { subject.chomp("abcdef ghij\n".mb_chars, "j\n" .mb_chars).should be_a mb_chars }
209
- it { subject.chomp("abc\nd efghij".mb_chars, " efghij".mb_chars).should be_a mb_chars }
210
- it { subject.chomp("abc\nd ef\n\r".mb_chars, "\n\r" .mb_chars).should be_a mb_chars }
211
- it { subject.chomp("abc\nd ef\r\n".mb_chars, "\n" .mb_chars).should be_a mb_chars }
212
-
213
- it { subject.chomp(100 ).should eq 100 }
214
- it { subject.chomp(nil ).should be_nil }
215
- end
216
-
217
- describe "::dasherize" do
218
- it { subject.dasherize("string_inflections" ).should eq "string-inflections" }
219
- it { subject.dasherize("string_inflections" ).should be_a String }
220
- it { subject.dasherize("string_inflections".mb_chars).should be_a mb_chars }
221
- it { subject.dasherize(100 ).should eq 100 }
222
- it { subject.dasherize(nil ).should be_nil }
223
- end
224
-
225
- describe "::downcase" do
226
- it { subject.downcase("ÇSDF !@# JHAS" ).should eq "çsdf !@# jhas" }
227
- it { subject.downcase("ÇSDF !@# JHAS" ).should be_a String }
228
- it { subject.downcase("ÇSDF !@# JHAS".mb_chars).should be_a mb_chars }
229
- it { subject.downcase(100 ).should eq 100 }
230
- it { subject.downcase(nil ).should be_nil }
231
- end
232
-
233
- #
234
- # DUMP
235
- ###################################################################################################################
236
- describe "::dump" do
237
- it { subject.dump("abc\ndef" ).should eq '"abc\ndef"' }
238
- it { subject.dump('abc\ndef' ).should eq '"abc\\\ndef"' }
239
-
240
- it { subject.dump("abc\ndef".mb_chars).should eq '"abc\ndef"' .mb_chars }
241
- it { subject.dump('abc\ndef'.mb_chars).should eq '"abc\\\ndef"'.mb_chars }
242
-
243
- it { subject.dump("abc\ndef" ).should be_a String }
244
- it { subject.dump('abc\ndef' ).should be_a String }
245
-
246
- it { subject.dump("abc\ndef".mb_chars).should be_a mb_chars }
247
- it { subject.dump('abc\ndef'.mb_chars).should be_a mb_chars }
248
-
249
- it { subject.dump(100 ).should eq 100 }
250
- it { subject.dump(nil ).should be_nil }
251
- end
252
-
253
- describe "::keep" do
254
- it { subject.keep("1111aaaa", :L ).should eq "aaaa" }
255
- it { subject.keep("1111ܑܑܑܑ", :M ).should eq "ܑܑܑܑ" }
256
- it { subject.keep("1111!!!!", :P ).should eq "!!!!" }
257
- it { subject.keep("1111££££", :S ).should eq "££££" }
258
- it { subject.keep("11 ££", :Z ).should eq " " }
259
- it { subject.keep("11\n\n££", :C ).should eq "\n\n" }
260
- it { subject.keep("1111aaaa", :L ).should be_a String }
261
- it { subject.keep("1111aaaa".mb_chars, :L).should be_a mb_chars }
262
- it { subject.keep(1, :L ).should eq 1 }
263
- it { subject.keep(1, :M ).should eq 1 }
264
- it { subject.keep(1, :P ).should eq 1 }
265
- it { subject.keep(1, :S ).should eq 1 }
266
- it { subject.keep(1, :Z ).should eq 1 }
267
- it { subject.keep(1, :C ).should eq 1 }
268
- it { subject.keep(nil, :L ).should be_nil }
269
- it { subject.keep(nil, :M ).should be_nil }
270
- it { subject.keep(nil, :P ).should be_nil }
271
- it { subject.keep(nil, :S ).should be_nil }
272
- it { subject.keep(nil, :Z ).should be_nil }
273
- it { subject.keep(nil, :C ).should be_nil }
274
-
275
- context "with multiple options" do
276
- it { subject.keep("1111aaaa!!!!", [:L, :N]).should eq "1111aaaa" }
277
- it { subject.keep("1111ܑܑܑܑ!!!!", [:M, :N]).should eq "1111ܑܑܑܑ" }
278
- it { subject.keep("1111!!!!aaaa", [:P, :L]).should eq "!!!!aaaa" }
279
- it { subject.keep("1111££££aaaa", [:S, :N]).should eq "1111££££" }
280
- it { subject.keep("11 ££aaaa", [:Z, :S]).should eq " ££" }
281
- it { subject.keep("11\n\n££aaaa", [:C, :N]).should eq "11\n\n" }
282
- end
283
-
284
- context "with wrong option" do
285
- it { lambda { subject.keep("1111aaaa", :J) }.should raise_error }
286
- it { lambda { subject.keep("1111ܑܑܑܑ", :J) }.should raise_error }
287
- it { lambda { subject.keep("1111!!!!", :J) }.should raise_error }
288
- it { lambda { subject.keep("1111££££", :J) }.should raise_error }
289
- it { lambda { subject.keep("11 ££", :J) }.should raise_error }
290
- it { lambda { subject.keep("11\n\n££", :J) }.should raise_error }
291
- end
292
-
293
- context "with wrong option inside multiple options array" do
294
- it { lambda { subject.keep("1111aaaa", [:J, :N]) }.should raise_error }
295
- it { lambda { subject.keep("1111ܑܑܑܑ", [:J, :N]) }.should raise_error }
296
- it { lambda { subject.keep("1111!!!!", [:J, :N]) }.should raise_error }
297
- it { lambda { subject.keep("1111££££", [:J, :N]) }.should raise_error }
298
- it { lambda { subject.keep("11 ££", [:J, :N]) }.should raise_error }
299
- it { lambda { subject.keep("11\n\n££", [:J, :N]) }.should raise_error }
300
- end
301
- end
302
-
303
- describe "::lstrip" do
304
- it { subject.lstrip(" 1111 " ).should eq "1111 " }
305
- it { subject.lstrip(" 1111 " ).should be_a String }
306
- it { subject.lstrip(" 1111 ".mb_chars).should be_a mb_chars }
307
- it { subject.lstrip(1).should eq 1 }
308
- it { subject.lstrip(nil).should be_nil }
309
- end
310
-
311
- describe "::remove" do
312
- it { subject.remove("1111aaaa", :L ).should eq "1111" }
313
- it { subject.remove("1111ܑܑܑܑ", :M ).should eq "1111" }
314
- it { subject.remove("1111!!!!", :P ).should eq "1111" }
315
- it { subject.remove("1111££££", :S ).should eq "1111" }
316
- it { subject.remove("11 ££", :Z ).should eq "11££" }
317
- it { subject.remove("11\n\n££", :C ).should eq "11££" }
318
- it { subject.remove("1111aaaa", :L ).should be_a String }
319
- it { subject.remove("1111aaaa".mb_chars, :L).should be_a mb_chars }
320
- it { subject.remove(1, :L ).should eq 1 }
321
- it { subject.remove(1, :M ).should eq 1 }
322
- it { subject.remove(1, :P ).should eq 1 }
323
- it { subject.remove(1, :S ).should eq 1 }
324
- it { subject.remove(1, :Z ).should eq 1 }
325
- it { subject.remove(1, :C ).should eq 1 }
326
- it { subject.remove(nil, :L ).should be_nil }
327
- it { subject.remove(nil, :M ).should be_nil }
328
- it { subject.remove(nil, :P ).should be_nil }
329
- it { subject.remove(nil, :S ).should be_nil }
330
- it { subject.remove(nil, :Z ).should be_nil }
331
- it { subject.remove(nil, :C ).should be_nil }
332
-
333
- context "with multiple options" do
334
- it { subject.remove("1111aaaa!!!!", [:L, :N]).should eq "!!!!" }
335
- it { subject.remove("1111ܑܑܑܑ!!!!", [:M, :N]).should eq "!!!!" }
336
- it { subject.remove("1111!!!!aaaa", [:P, :L]).should eq "1111" }
337
- it { subject.remove("1111££££aaaa", [:S, :N]).should eq "aaaa" }
338
- it { subject.remove("11 ££aaaa", [:Z, :S]).should eq "11aaaa" }
339
- it { subject.remove("11\n\n££aaaa", [:C, :N]).should eq "££aaaa" }
340
- end
341
-
342
- context "with wrong option" do
343
- it { lambda { subject.remove("1111aaaa", :J) }.should raise_error }
344
- it { lambda { subject.remove("1111ܑܑܑܑ", :J) }.should raise_error }
345
- it { lambda { subject.remove("1111!!!!", :J) }.should raise_error }
346
- it { lambda { subject.remove("1111££££", :J) }.should raise_error }
347
- it { lambda { subject.remove("11 ££", :J) }.should raise_error }
348
- it { lambda { subject.remove("11\n\n££", :J) }.should raise_error }
349
- end
350
-
351
- context "with wrong option inside multiple options array" do
352
- it { lambda { subject.remove("1111aaaa", [:J, :N]) }.should raise_error }
353
- it { lambda { subject.remove("1111ܑܑܑܑ", [:J, :N]) }.should raise_error }
354
- it { lambda { subject.remove("1111!!!!", [:J, :N]) }.should raise_error }
355
- it { lambda { subject.remove("1111££££", [:J, :N]) }.should raise_error }
356
- it { lambda { subject.remove("11 ££", [:J, :N]) }.should raise_error }
357
- it { lambda { subject.remove("11\n\n££", [:J, :N]) }.should raise_error }
358
- end
359
- end
360
-
361
- describe "::rstrip" do
362
- it { subject.rstrip(" 1111 " ).should eq " 1111" }
363
- it { subject.rstrip(" 1111 " ).should be_a String }
364
- it { subject.rstrip(" 1111 ".mb_chars).should be_a mb_chars }
365
- it { subject.rstrip(1 ).should eq 1 }
366
- it { subject.rstrip(nil ).should be_nil }
367
- end
368
-
369
- describe "::squeeze" do
370
- it { subject.squeeze(" 1 22 333 4444 " ).should eq " 1 2 3 4 " }
371
- it { subject.squeeze(" 1 22 333 4444 " ).should be_a String }
372
- it { subject.squeeze(" 1 22 333 4444 ".mb_chars).should be_a mb_chars }
373
- it { subject.squeeze(1 ).should eq 1 }
374
- it { subject.squeeze(nil ).should be_nil }
375
-
376
- context "with options" do
377
- it { subject.squeeze("aaabbbcccdddeeefff", "b-d" ).should eq "aaabcdeeefff" }
378
- it { subject.squeeze("aaabbbcccdddeeefff".mb_chars, "b-d").should eq "aaabcdeeefff".mb_chars }
379
- end
380
- end
381
-
382
- describe "::squish" do
383
- it { subject.squish(" 11 11 " ).should eq "11 11" }
384
- it { subject.squish(" 11\n\n11 " ).should eq "11 11" }
385
- it { subject.squish(" 11 11 " ).should be_a String }
386
- it { subject.squish(" 11 11 ".mb_chars).should be_a mb_chars }
387
- it { subject.squish(1 ).should eq 1 }
388
- it { subject.squish(nil ).should be_nil }
389
- end
390
-
391
- describe "::strip" do
392
- it { subject.strip(" 1111 " ).should eq "1111" }
393
- it { subject.strip(" 1111 " ).should be_a String }
394
- it { subject.strip(" 1111 ".mb_chars).should be_a mb_chars }
395
- it { subject.strip(1 ).should eq 1 }
396
- it { subject.strip(nil ).should be_nil }
397
- end
398
-
399
- #
400
- # SWAPCASE
401
- ###################################################################################################################
402
- describe "::swapcase" do
403
- it { subject.swapcase("aeiouáéíóú" ).should eq "AEIOUÁÉÍÓÚ" }
404
- it { subject.swapcase("AEIOUÁÉÍÓÚ" ).should eq "aeiouáéíóú" }
405
- it { subject.swapcase("aEiOuÁéÍóÚ" ).should eq "AeIoUáÉíÓú" }
406
- it { subject.swapcase("AeIoUáÉíÓú" ).should eq "aEiOuÁéÍóÚ" }
407
-
408
- it { subject.swapcase("aeiouáéíóú".mb_chars).should eq "AEIOUÁÉÍÓÚ".mb_chars }
409
- it { subject.swapcase("AEIOUÁÉÍÓÚ".mb_chars).should eq "aeiouáéíóú".mb_chars }
410
- it { subject.swapcase("aEiOuÁéÍóÚ".mb_chars).should eq "AeIoUáÉíÓú".mb_chars }
411
- it { subject.swapcase("AeIoUáÉíÓú".mb_chars).should eq "aEiOuÁéÍóÚ".mb_chars }
412
-
413
- it { subject.swapcase("aeiouáéíóú" ).should be_a String }
414
- it { subject.swapcase("AEIOUÁÉÍÓÚ" ).should be_a String }
415
- it { subject.swapcase("aEiOuÁéÍóÚ" ).should be_a String }
416
- it { subject.swapcase("AeIoUáÉíÓú" ).should be_a String }
417
-
418
- it { subject.swapcase("aeiouáéíóú".mb_chars).should be_a mb_chars }
419
- it { subject.swapcase("AEIOUÁÉÍÓÚ".mb_chars).should be_a mb_chars }
420
- it { subject.swapcase("aEiOuÁéÍóÚ".mb_chars).should be_a mb_chars }
421
- it { subject.swapcase("AeIoUáÉíÓú".mb_chars).should be_a mb_chars }
422
-
423
- it { subject.swapcase(100 ).should eq 100 }
424
- it { subject.swapcase(nil ).should be_nil }
425
- end
426
-
427
- describe "::titleize" do
428
- pending
429
- end
430
-
431
- describe "::underscore" do
432
- pending
433
- end
434
-
435
- describe "::upcase" do
436
- it { subject.upcase("Çsdf !@# éhas" ).should eq "ÇSDF !@# ÉHAS" }
437
- it { subject.upcase("Çsdf !@# éhas" ).should be_a String }
438
- it { subject.upcase("Çsdf !@# éhas".mb_chars).should be_a mb_chars }
439
- it { subject.upcase(100 ).should eq 100 }
440
- it { subject.upcase(nil ).should be_nil }
441
- end
442
- end