paranoid_starlight 1.2.0 → 1.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.
data/README.md CHANGED
@@ -2,9 +2,9 @@
2
2
 
3
3
  This piece of gem contains some custom validators and converters for ActiveModel.
4
4
 
5
- It have validations for email and name (European style).
5
+ It has validations for email and name (European style).
6
6
  And validation and converter (to international format) of telephone number. (CZ/SK format)
7
-
7
+ Few converters for texts and strings. Specs included.
8
8
 
9
9
  ## Installation
10
10
 
@@ -12,6 +12,10 @@ Add this line to your application's Gemfile:
12
12
 
13
13
  gem 'paranoid_starlight'
14
14
 
15
+ If you want to have methods available for ActiveRecord models, use:
16
+
17
+ gem 'paranoid_starlight', :require => 'paranoid_starlight/active_record'
18
+
15
19
  And then execute:
16
20
 
17
21
  $ bundle
@@ -34,21 +38,55 @@ Or install it yourself as:
34
38
  model.email = 'example@example.org'
35
39
  model.valid?
36
40
 
37
- or put this into /config/initializers/paranoid.rb
38
41
 
39
- ActiveRecord::Base.send(:include, ParanoidStarlight::Validations)
40
- ActiveRecord::Base.send(:include, ParanoidStarlight::Converters)
41
-
42
- Now you have them available globally for models
42
+ If you required active_record hook, you can use:
43
43
 
44
44
  class Person < ActiveRecord::Base
45
- attr_accessible :name, :telephone, :email
45
+ attr_accessible :name, :telephone, :mobile, :email
46
+ attr_accessible :address, :zip
47
+
46
48
  validates_email_format_of :email
47
49
  validates_name_format_of :name
48
- validates_telephone_format_of :telephone
50
+ # few different valid formats are allowed
51
+ validates_telephone_format_of :telephone, :mobile
49
52
  # or validates :email, :email => true
50
53
 
51
- before_save :convert_telephone_number(:telephone)
54
+ before_save :convert_fields
55
+ before_validation :process_fields
56
+
57
+ def convert_fields
58
+ # convert to international form
59
+ convert_telephone_number(:telephone)
60
+ convert_telephone_number(:mobile)
61
+ # or convert_telephone_number [:telephone, :mobile]
62
+ # do other things
63
+ end
64
+
65
+ def process_fields
66
+ clean_text([:address, :zip])
67
+ end
68
+ end
69
+
70
+ Currently there are these possibilities:
71
+ - validates_email_format_of
72
+ - validates_name_format_of
73
+ - validates_telephone_number_of
74
+
75
+ - clean_text
76
+ - clean_whitespaces
77
+ - convert_telephone_number
78
+
79
+ It is easy to create own converter, just do:
80
+
81
+ class Kiddie
82
+ include ::ParanoidStarlight::Converters
83
+ attr_accessor :name
84
+
85
+ def l33t
86
+ basic_converter(self, :name) do |text|
87
+ text.gsub('e', '3')
88
+ end
89
+ end
52
90
  end
53
91
 
54
92
 
@@ -59,3 +97,9 @@ Now you have them available globally for models
59
97
  3. Commit your changes (`git commit -am 'Add some feature'`)
60
98
  4. Push to the branch (`git push origin my-new-feature`)
61
99
  5. Create new Pull Request
100
+
101
+ ## Author
102
+ Created by Ivan Stana
103
+ License: MIT
104
+
105
+ I encourage to write me something
@@ -128,28 +128,51 @@ module ParanoidStarlight
128
128
  end
129
129
  end
130
130
 
131
+ def clean_whitespaces(inattr, outattr = '')
132
+ basic_converter(self, inattr, outattr) do |text|
133
+ text.to_s.gsub(/\s/, '')
134
+ end
135
+ end
136
+
131
137
  private
132
138
  def basic_converter(obj, inattr, outattr, &code)
133
- unless obj.respond_to? inattr.to_sym
134
- raise("Attribute #{inattr} does not exist.")
135
- end
136
-
137
- outattr = inattr if outattr == ''
139
+ attributes = []
140
+
141
+ # May be only one value, ideally string or symbol
142
+ outattr = outattr.to_sym
143
+
144
+
145
+ if inattr.is_a? Array
146
+ attributes = inattr
147
+ elsif obj.respond_to? inattr.to_sym
148
+ attributes << inattr
149
+ # hash, array and like haven't got to_sym defined
150
+ outattr = inattr if outattr.to_s == ''
151
+ else
152
+ raise("Attribute #{inattr} does not exist.")
153
+ end
154
+
155
+ if attributes.size > 1 && outattr.to_s != ''
156
+ raise("Multiple attributes can be used only without output attribute")
157
+ end
158
+
159
+ attributes.each do |attribute|
160
+ outattr = attribute if attributes.size > 1
138
161
 
139
- unless obj.respond_to? outattr.to_sym
162
+ unless obj.respond_to? outattr
140
163
  raise("Attribute #{outattr} does not exist.")
141
164
  end
142
-
165
+
143
166
  setter = "#{outattr}=".to_sym
144
167
  unless obj.respond_to? setter
145
168
  raise("Setter #{setter} does not exist.")
146
169
  end
147
-
148
- to_convert = obj.send(inattr.to_sym)
170
+
171
+ to_convert = obj.send(attribute.to_sym)
149
172
  unless to_convert.nil?
150
173
  obj.send(setter, code.call(to_convert))
151
174
  end
152
-
175
+ end
153
176
  end
154
177
 
155
178
  end # end converters
@@ -1,3 +1,3 @@
1
1
  module ParanoidStarlight
2
- VERSION = "1.2.0"
2
+ VERSION = "1.3.0"
3
3
  end
@@ -8,10 +8,12 @@ Gem::Specification.new do |gem|
8
8
  gem.version = ParanoidStarlight::VERSION
9
9
  gem.author = 'Ivan Stana'
10
10
  gem.email = 'stiipa@centrum.sk'
11
- gem.summary = "Pack of custom validations and converters for ActiveModel"
11
+ gem.summary = "Pack of custom validations and converters for ActiveModel. Or standalone."
12
12
  gem.description = <<-EOF
13
- Validators for name and email. Converter and validator for
14
- telephone number (CZ/SK format). ActiveModel. Specs included.
13
+ It has validations for email and name (European style).
14
+ And validation and converter (to international format)
15
+ of telephone number. (CZ/SK format)
16
+ Few converters for texts and strings. Specs included.
15
17
  EOF
16
18
 
17
19
  gem.homepage = "http://github.com/istana/paranoid_starlight"
@@ -8,7 +8,7 @@ class Fangirl
8
8
  include ::ParanoidStarlight::Converters
9
9
  attr_accessor :telephone
10
10
  attr_accessor :text
11
- attr_accessor :basic_field, :basic_field_out
11
+ attr_accessor :basic_field, :basic_field2, :basic_field_out
12
12
  end
13
13
 
14
14
  describe ParanoidStarlight::Converters do
@@ -61,6 +61,7 @@ describe ParanoidStarlight::Converters do
61
61
  before do
62
62
  @test = Fangirl.new
63
63
  @test.basic_field = "Hello world!"
64
+ @test.basic_field2 = "World sends love to you!"
64
65
 
65
66
  def @test.upcase(input, output = '')
66
67
  basic_converter(self, input, output) do |text|
@@ -69,6 +70,22 @@ describe ParanoidStarlight::Converters do
69
70
  end
70
71
  end
71
72
 
73
+ context 'supplies parameters in different format' do
74
+ it 'should accept anything in input with to_s' do
75
+ @test.upcase(:basic_field)
76
+ @test.basic_field.should == "HELLO WORLD!"
77
+ @test.upcase('basic_field2')
78
+ @test.basic_field2.should == "WORLD SENDS LOVE TO YOU!"
79
+ end
80
+
81
+ it 'should accept anything with to_s as output' do
82
+ @test.upcase(:basic_field, :basic_field_out)
83
+ @test.basic_field_out.should == "HELLO WORLD!"
84
+ @test.upcase('basic_field2', 'basic_field_out')
85
+ @test.basic_field_out.should == "WORLD SENDS LOVE TO YOU!"
86
+ end
87
+ end
88
+
72
89
  context 'had one attribute supplied' do
73
90
  it 'should overwrite attribute' do
74
91
  @test.upcase(:basic_field)
@@ -84,6 +101,21 @@ describe ParanoidStarlight::Converters do
84
101
  end
85
102
  end
86
103
 
104
+ context 'had array of attributes supplied' do
105
+ it 'should convert all attributes of array' do
106
+ @test.upcase([:basic_field, :basic_field2])
107
+ @test.basic_field.should == "HELLO WORLD!"
108
+ @test.basic_field2.should == "WORLD SENDS LOVE TO YOU!"
109
+ end
110
+ end
111
+
112
+ context 'had array of attributes and output supplied' do
113
+ it 'should raise error' do
114
+ expect {@test.upcase([:basic_field, :basic_field2],
115
+ :basic_field_out) }.to raise_error(/Multiple attributes can/)
116
+ end
117
+ end
118
+
87
119
  end
88
120
 
89
121
 
@@ -149,7 +181,7 @@ describe 'ParanoidStarlight::Validations' do
149
181
  'Ivan Stana', 'Ivan R. Stana', 'Ivan Ronon Stana',
150
182
  'Jean Claude Van Damme', 'Jean-Pierre Cassel',
151
183
  'Tatyana Sukhotina-Tolstaya',
152
- 'John R. R. Tolkien'
184
+ 'John R. R. Tolkien', 'I S'
153
185
  ].each {
154
186
  |name| @name.validate_each(@mock, "name", name)
155
187
  }
@@ -158,7 +190,7 @@ describe 'ParanoidStarlight::Validations' do
158
190
  it "should validate invalid name" do
159
191
  @mock.errors[].should_receive('<<')
160
192
  [
161
- 'J. R. R. Tolkien', 'J.R.R. Tolkien', 'Tolkien'
193
+ 'J. R. R. Tolkien', 'J.R.R. Tolkien', 'Tolkien', ''
162
194
  ].each {
163
195
  |name| @name.validate_each(@mock, "name", name)
164
196
  }
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: paranoid_starlight
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.0
4
+ version: 1.3.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -75,8 +75,9 @@ dependencies:
75
75
  - - ! '>='
76
76
  - !ruby/object:Gem::Version
77
77
  version: '0'
78
- description: ! " Validators for name and email. Converter and validator for\n telephone
79
- number (CZ/SK format). ActiveModel. Specs included.\n"
78
+ description: ! " It has validations for email and name (European style).\n And
79
+ validation and converter (to international format)\n of telephone number. (CZ/SK
80
+ format)\n Few converters for texts and strings. Specs included.\n"
80
81
  email: stiipa@centrum.sk
81
82
  executables: []
82
83
  extensions: []
@@ -114,5 +115,5 @@ rubyforge_project:
114
115
  rubygems_version: 1.8.24
115
116
  signing_key:
116
117
  specification_version: 3
117
- summary: Pack of custom validations and converters for ActiveModel
118
+ summary: Pack of custom validations and converters for ActiveModel. Or standalone.
118
119
  test_files: []