normatron 0.1.1 → 0.2.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.
@@ -0,0 +1,18 @@
1
+ require "spec_helper"
2
+
3
+ describe Normatron do
4
+
5
+ specify do
6
+ described_class.should respond_to :configuration
7
+ described_class.should respond_to :configure
8
+ described_class.should respond_to :setup
9
+ described_class.should respond_to :config
10
+ end
11
+
12
+ let(:config) { Normatron.configuration }
13
+
14
+ describe :configuration do
15
+ it { config.should be_an_instance_of Normatron::Configuration }
16
+ it { expect { |b| Normatron.setup(&b) }.to yield_control }
17
+ end
18
+ end
data/spec/spec_helper.rb CHANGED
@@ -1,9 +1,6 @@
1
- require "active_support/core_ext/string"
2
1
  require "active_record"
3
2
  require "normatron"
4
3
 
5
4
  ActiveRecord::Base.establish_connection :adapter => "sqlite3", :database => ":memory:"
6
-
7
5
  Dir[File.dirname(__FILE__) + "/support/**/*.rb"].each { |f| require f }
8
-
9
6
  ActiveRecord::Base.send(:include, Normatron::Extensions::ActiveRecord) if defined?(ActiveRecord::Base)
@@ -0,0 +1,3 @@
1
+ class Model < ActiveRecord::Base
2
+ attr_accessible :field_a, :field_b, :field_c
3
+ end
@@ -1,10 +1,7 @@
1
1
  ActiveRecord::Schema.define(:version => 0) do
2
- create_table :clients do |t|
3
- t.string :name
4
- t.decimal :credit_limit, precision: 10, scale: 2
5
- t.string :cpf
6
- t.date :birth_date
7
- t.string :phone
8
- t.integer :login_count
2
+ create_table :models do |t|
3
+ t.string :field_a
4
+ t.string :field_b
5
+ t.string :field_c
9
6
  end
10
7
  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.1.1
4
+ version: 0.2.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-09-16 00:00:00.000000000 Z
12
+ date: 2012-09-23 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activerecord
@@ -87,22 +87,18 @@ extra_rdoc_files: []
87
87
  files:
88
88
  - lib/normatron/filters.rb
89
89
  - lib/normatron/configuration.rb
90
- - lib/normatron/filters/conversions.rb
91
- - lib/normatron/filters/string_inflections.rb
92
90
  - lib/normatron/extensions/active_record.rb
93
91
  - lib/normatron.rb
94
92
  - MIT-LICENSE
95
93
  - Rakefile
96
94
  - README.textile
97
95
  - spec/spec_helper.rb
98
- - spec/lib/normatron_spec.rb
99
- - spec/lib/normatron/filters_spec.rb
100
- - spec/lib/normatron/filters/conversions_spec.rb
101
- - spec/lib/normatron/filters/string_inflections_spec.rb
102
- - spec/lib/normatron/configuration_spec.rb
103
- - spec/lib/normatron/extensions/active_record_spec.rb
104
- - spec/support/client_model.rb
96
+ - spec/support/model_model.rb
105
97
  - spec/support/schema.rb
98
+ - spec/filters_spec.rb
99
+ - spec/normatron_spec.rb
100
+ - spec/configuration_spec.rb
101
+ - spec/extensions/active_record_spec.rb
106
102
  homepage: https://github.com/fernandors87/normatron
107
103
  licenses: []
108
104
  post_install_message:
@@ -129,12 +125,10 @@ specification_version: 3
129
125
  summary: Normalize attributes for ActiveRecord objects.
130
126
  test_files:
131
127
  - spec/spec_helper.rb
132
- - spec/lib/normatron_spec.rb
133
- - spec/lib/normatron/filters_spec.rb
134
- - spec/lib/normatron/filters/conversions_spec.rb
135
- - spec/lib/normatron/filters/string_inflections_spec.rb
136
- - spec/lib/normatron/configuration_spec.rb
137
- - spec/lib/normatron/extensions/active_record_spec.rb
138
- - spec/support/client_model.rb
128
+ - spec/support/model_model.rb
139
129
  - spec/support/schema.rb
130
+ - spec/filters_spec.rb
131
+ - spec/normatron_spec.rb
132
+ - spec/configuration_spec.rb
133
+ - spec/extensions/active_record_spec.rb
140
134
  has_rdoc:
@@ -1,29 +0,0 @@
1
- module Normatron
2
- module Filters
3
- module Conversions
4
- class << self
5
-
6
- ##
7
- # Convert a blank string on a nil object.
8
- #
9
- # @example
10
- # StringInflections.blank("") #=> nil
11
- # StringInflections.blank(" ") #=> nil
12
- # StringInflections.blank("\n") #=> nil
13
- # StringInflections.blank("1") #=> "1"
14
- # StringInflections.blank(0) #=> 0
15
- # @param [String] value Any character sequence
16
- # @return [String, nil] The object itself or nil
17
- #
18
- # @see http://api.rubyonrails.org/classes/String.html#method-i-blank-3F ActiveSupport::CoreExt::Object#blank?
19
- def blank(value)
20
- if Filters.is_a_string?(value)
21
- value.to_s.blank? ? nil : value
22
- else
23
- value
24
- end
25
- end
26
- end
27
- end
28
- end
29
- end
@@ -1,155 +0,0 @@
1
- module Normatron
2
- module Filters
3
- ##
4
- # Contains methods that perform modifications on Strings.
5
- # In general, modifications are only for removal and/or character replacement.
6
- # All methods take String or ActiveSupport::Multibyte::Chars variables as main argument.
7
- # Where character case need to be changed, all accented characters will also be affected.
8
- # There is no type coersion, ie all filters return the same object type passed by the argument.
9
- #
10
- # @author Fernando Rodrigues da Silva
11
- module StringInflections
12
- class << self
13
-
14
- ##
15
- # Remove all non letter characters.
16
- #
17
- # @example
18
- # StringInflections.alphas("Doom 3") #=> "Doom"
19
- # StringInflections.alphas("\n") #=> ""
20
- # StringInflections.alphas("1") #=> ""
21
- # StringInflections.alphas(0) #=> 0
22
- # @param [String] value Any character sequence
23
- # @return [String, nil] The object itself or a alpha characters sequence
24
- #
25
- # @see http://www.ruby-doc.org/core-1.9.3/Regexp.html Regexp
26
- # @see http://www.ruby-doc.org/core-1.9.3/String.html#method-i-gsub String#gsub
27
- def alphas(value)
28
- if Filters.is_a_string?(value)
29
- value.gsub(/[^\p{L}]/u, '')
30
- else
31
- value
32
- end
33
- end
34
-
35
- ##
36
- # The first character will be uppercased, all others will be lowercased.
37
- #
38
- # @example
39
- # StringInflections.capitalize("mASTER OF PUPPETS") #=> "Master of puppets"
40
- # StringInflections.capitalize(" mASTER OF PUPPETS") #=> " master of puppets"
41
- # StringInflections.capitalize(1) #=> 1
42
- # @param [String] value Any character sequence
43
- # @return [String] The object itself or a capitalized string
44
- #
45
- # @see http://api.rubyonrails.org/classes/ActiveSupport/Multibyte/Chars.html#method-i-capitalize ActiveSupport::Multibyte::Chars#capitalize
46
- def capitalize(value)
47
- evaluate(:capitalize, value)
48
- end
49
-
50
- ##
51
- # Replace all underscores with dashes.
52
- #
53
- # @example
54
- # StringInflections.dasherize("__ shoot _ to _ thrill __") #=> "-- shoot - to - thrill --"
55
- # StringInflections.dasherize(1) #=> 1
56
- # @param [String] value Any character sequence
57
- # @return [String] The object itself or a capitalized string
58
- #
59
- # @see http://api.rubyonrails.org/classes/String.html#method-i-dasherize ActiveSupport::CoreExt::Object#dasherize
60
- def dasherize(value)
61
- evaluate(:dasherize, value)
62
- end
63
-
64
- ##
65
- # Remove all non digit characters.
66
- #
67
- # @example
68
- # StringInflections.digits("Quake 3") #=> "3"
69
- # StringInflections.digits("\n") #=> ""
70
- # StringInflections.digits("1") #=> "1"
71
- # StringInflections.digits(0) #=> 0
72
- # @param [String] value Any character sequence
73
- # @return [String, nil] The object itself or a digit characters sequence
74
- #
75
- # @see http://www.ruby-doc.org/core-1.9.3/Regexp.html Regexp
76
- # @see http://www.ruby-doc.org/core-1.9.3/String.html#method-i-gsub String#gsub
77
- def digits(value)
78
- if Filters.is_a_string?(value)
79
- value.gsub(/\D/, '')
80
- else
81
- value
82
- end
83
- end
84
-
85
- ##
86
- # Lowercase all characters on the sequence.
87
- #
88
- # @example
89
- # StringInflections.downcase("KILL'EM ALL") #=> "kill'em all"
90
- # StringInflections.downcase("ÊXITO") #=> "êxito"
91
- # StringInflections.downcase("1") #=> "1"
92
- # StringInflections.downcase(0) #=> 0
93
- # @param [String] value Any character sequence
94
- # @return [String, nil] The object itself or a downcased string
95
- #
96
- # @see http://api.rubyonrails.org/classes/ActiveSupport/Multibyte/Chars.html#method-i-downcase ActiveSupport::Multibyte::Chars#downcase
97
- # @see http://www.ruby-doc.org/core-1.9.3/String.html#method-i-downcase String#downcase
98
- def downcase(value)
99
- evaluate(:downcase, value)
100
- end
101
-
102
- def lstrip(value)
103
- evaluate(:lstrip, value)
104
- end
105
-
106
- def rstrip(value)
107
- evaluate(:rstrip, value)
108
- end
109
-
110
- def squeeze(value)
111
- evaluate(:squeeze, value)
112
- end
113
-
114
- def squish(value)
115
- evaluate(:squish, value)
116
- end
117
-
118
- def strip(value)
119
- evaluate(:strip, value)
120
- end
121
-
122
- def title(value)
123
- evaluate(:titlecase, value)
124
- end
125
-
126
- def upcase(value)
127
- evaluate(:upcase, value)
128
- end
129
-
130
- private
131
-
132
- def evaluate(method_name, value)
133
- if need_type_cast?(method_name, value)
134
- value.mb_chars.send(method_name)
135
- elsif Filters.is_a_string?(value)
136
- value.send(method_name)
137
- else
138
- value
139
- end
140
- end
141
-
142
- def need_type_cast?(method_name, value)
143
- if value.is_a?(String)
144
- case method_name
145
- when :capitalize, :downcase, :titlecase, :upcase
146
- true
147
- end
148
- else
149
- false
150
- end
151
- end
152
- end
153
- end
154
- end
155
- end
@@ -1,45 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Normatron::Configuration do
4
-
5
- let(:klass) { Normatron::Configuration }
6
- let(:instance) { @instance }
7
-
8
- before :each do
9
- @instance = klass.new
10
- end
11
-
12
- describe :default_filters do
13
- it "should be initializated" do
14
- instance.default_filters.should eq [:squish, :blank]
15
- end
16
-
17
- it "should be enclause values into an array" do
18
- instance.default_filters = :a
19
- instance.default_filters.should eq [:a]
20
- end
21
-
22
- it "should reject repeated filters" do
23
- instance.default_filters = :a, :a
24
- instance.default_filters.should eq [:a]
25
-
26
- instance.default_filters += [:a, :b]
27
- instance.default_filters.should eq [:a, :b]
28
- end
29
-
30
- it "should reject nil filters" do
31
- instance.default_filters = nil
32
- instance.default_filters.should eq []
33
-
34
- instance.default_filters = :a, nil
35
- instance.default_filters.should eq [:a]
36
-
37
- instance.default_filters << nil
38
- instance.default_filters.should eq [:a]
39
- end
40
- end
41
-
42
- pending "should map filter modules"
43
- pending "should allow create inline filters"
44
- pending "should"
45
- end
@@ -1,147 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Normatron::Extensions::ActiveRecord do
4
- let(:model_class) { Client }
5
-
6
- before :each do
7
- model_class.normalize_options = {}
8
- end
9
-
10
- describe :normalize do
11
- pending "should remove nil normalization" do
12
- pending "attributes"
13
- pending "filters"
14
- end
15
- it "should remove nil normalization filters" do
16
- model_class.normalize(:name, :with => [:a, :a, :b, :c, :c, nil])
17
- model_class.normalize_options.should == {:name => [:a, :b, :c]}
18
-
19
- model_class.normalize_options = {}
20
- model_class.normalize(:name, :with => [nil])
21
- model_class.normalize_options.should == {:name => [:squish, :blank]}
22
- end
23
-
24
- it "should remove repeated normalization filters" do
25
- model_class.normalize(:name, :with => [:a, :a, :b, :c, :c])
26
- model_class.normalize_options.should == {:name => [:a, :b, :c]}
27
-
28
- model_class.normalize(:name, :with => [:a, :d, :e])
29
- model_class.normalize_options.should == {:name => [:a, :b, :c, :d, :e]}
30
- end
31
-
32
- it "should stack repeated normalization attributes" do
33
- model_class.normalize(:name, :name, :with => [:a, :b, :c])
34
- model_class.normalize_options.should == {:name => [:a, :b, :c]}
35
-
36
- model_class.normalize(:name, :with => [:d, :e])
37
- model_class.normalize_options.should == {:name => [:a, :b, :c, :d, :e]}
38
- end
39
-
40
- context "with single normalization attribute" do
41
- it "should bind to a single attribute" do
42
- model_class.normalize(:name, with: :a)
43
- model_class.normalize_options.should == {:name => [:a]}
44
- end
45
-
46
- it "should bind to multiple attributes" do
47
- model_class.normalize(:name, :cpf, with: [:a])
48
- model_class.normalize_options.should == {:name => [:a], cpf: [:a]}
49
- end
50
- end
51
-
52
- context "with multiple normalization attributes" do
53
- it "should bind to a single attribute" do
54
- model_class.normalize(:name, with: [:a, :b])
55
- model_class.normalize_options.should == {:name => [:a, :b]}
56
- end
57
-
58
- it "should bind to multiple attributes" do
59
- model_class.normalize(:name, :cpf, with: [:a, :b])
60
- model_class.normalize_options.should == {:name => [:a, :b], cpf: [:a, :b]}
61
- end
62
- end
63
-
64
- context "when :with isn't present" do
65
- describe "default filters" do
66
- it "should bind to a single attribute" do
67
- model_class.normalize(:name)
68
- model_class.normalize_options.should == {:name => [:squish, :blank]}
69
- end
70
-
71
- it "should bind to multiple attributes" do
72
- model_class.normalize(:name, :phone)
73
- model_class.normalize_options.should == {:name => [:squish, :blank], phone: [:squish, :blank]}
74
- end
75
- end
76
- end
77
-
78
- end
79
-
80
- describe :apply_normalizations do
81
- it "should apply Conversion normalizations" do
82
- model_class.normalize(:name, :with => :blank)
83
- instance = model_class.new name: " "
84
- instance.apply_normalizations
85
- instance.name.should be_nil
86
- end
87
-
88
- it "should apply StringInflections normalizations" do
89
- model_class.normalize(:name, :with => :upcase)
90
- instance = model_class.new name: "a"
91
- instance.apply_normalizations
92
- instance.name.should eq "A"
93
- end
94
-
95
- it "should apply instance methods normalizations" do
96
- class Client < ActiveRecord::Base
97
- def my_filter(value)
98
- value.split(//) * "-"
99
- end
100
- end
101
-
102
- model_class.normalize(:name, :with => :my_filter)
103
- instance = model_class.new name: "aaa"
104
- instance.apply_normalizations
105
- instance.name.should eq "a-a-a"
106
- end
107
- end
108
-
109
- pending "should apply blocks normalizations"
110
- pending "should apply modules normalizations"
111
- pending "should apply configuration blocks normalizations"
112
- pending "should remove nil normalization" do
113
- pending "attributes"
114
- pending "filters"
115
- end
116
- pending "should ignore nil normalization" do
117
- pending "attribute"
118
- pending "filter"
119
- end
120
- pending "should apply normalizations" do
121
- pending "using a single filter" do
122
- pending "for a single attribute"
123
- pending "for all attributes"
124
- end
125
- pending "using multiple filters" do
126
- pending "for a single attribute"
127
- pending "for all attributes"
128
- end
129
- pending "specified into" do
130
- pending "native filters module"
131
- pending "custom filters module"
132
- pending "instance model"
133
- pending "instance block"
134
- pending "instance lambda"
135
- pending "configuration lambda"
136
- end
137
- end
138
- pending "should allow specify" do
139
- pending "when the normalizations will be done"
140
- pending "conditions to normalizations be done"
141
- pending "sequence of normalization chain"
142
- end
143
- pending "should raise exception" do
144
- pending "when given attribute doesn't exist"
145
- pending "when given filter doesn't exist"
146
- end
147
- end