ip_as_int 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile CHANGED
@@ -3,12 +3,3 @@ source 'https://rubygems.org'
3
3
  # Specify your gem's dependencies in ip_as_int.gemspec
4
4
  gemspec
5
5
 
6
- gem 'rspec'
7
- gem 'rake'
8
- gem 'activemodel'
9
- # one-liner to install these properly: bash < <(curl -L https://raw.github.com/gist/1333785)
10
- # gem 'linecache19', '0.5.13'
11
- # gem 'ruby-debug-base19', '0.11.26'
12
- gem 'debugger'
13
- gem 'activerecord'
14
- gem 'sqlite3'
data/README.md CHANGED
@@ -2,91 +2,100 @@
2
2
 
3
3
  IP address - integer conversion and activerecord support for ip attribute as integer column.
4
4
 
5
- ## Installation
6
-
7
- Add this line to your application's Gemfile:
8
-
9
- gem 'ip_as_int'
10
-
11
- And then execute:
12
-
13
- $ bundle
14
-
15
- Or install it yourself as:
16
-
17
- $ gem install ip_as_int
18
-
19
5
  ## Usage
20
6
 
21
7
  ### IP address - integer conversion
22
8
 
23
- >> require 'ip_as_int'
24
- => true
25
- >> ip_string = '192.168.0.1'
26
- => "192.168.0.1"
27
- >> ip_int = IpAsInt.ip2int(ip_string)
28
- => 3232235521
29
- >> ip_string = IpAsInt.int2ip(ip_int)
30
- => "192.168.0.1"
9
+ ```ruby
10
+ require 'ip_as_int'
11
+ ip_string = '192.168.0.1'
12
+ ip_int = IpAsInt.ip2int(ip_string) # => 3232235521
13
+ ip_string = IpAsInt.int2ip(ip_int) # => "192.168.0.1"
14
+ ```
31
15
 
32
16
  Exceptions on invalid IP address
33
17
 
34
- >> IpAsInt.ip2int('192.168.0')
35
- ArgumentError: Invalid IP: need 4 parts
36
- >> IpAsInt.ip2int('192.168.0.s')
37
- ArgumentError: Invalid IP: illegal format
38
- >> IpAsInt.ip2int('192.168.0.256')
39
- ArgumentError: Invalid IP: integer out of range
18
+ ```ruby
19
+ IpAsInt.ip2int('192.168.0')
20
+ # => ArgumentError: Invalid IP: need 4 parts
21
+ IpAsInt.ip2int('192.168.0.s')
22
+ # => ArgumentError: Invalid IP: illegal format
23
+ IpAsInt.ip2int('192.168.0.256')
24
+ # => ArgumentError: Invalid IP: integer out of range
25
+ ```
40
26
 
41
27
  ### ActiveRecord IP address attribute as integer column
42
28
 
43
- class Model < ActiveRecord::Base
44
- include IpAsInt::IpAddressAttribute
45
- ip_address :ip # :ip as integer column
46
- search_methods :ip # to allow squeel to do Model.search(:ip => '192.168.0.1')
47
- end
29
+ ```ruby
30
+ class Model < ActiveRecord::Base
31
+ include IpAsInt::IpAddressAttribute
32
+ ip_address :ip # :ip as integer column
33
+ search_methods :ip # to allow squeel to do Model.search(:ip => '192.168.0.1')
34
+ end
35
+ ```
48
36
 
49
37
  Attribute methods are defined to let the ip attribute assigned a string, conversion to integer column is done automatically.
50
38
 
51
- >> m = Model.create(:ip => '192.168.0.1')
52
- => #<Model id: 1, ip: 3232235521>
53
- >> m.valid?
54
- => true
55
- >> m.reload.ip
56
- => "192.168.0.1"
39
+ ```ruby
40
+ m = Model.create(:ip => '192.168.0.1') # => #<Model id: 1, ip: 3232235521>
41
+ m.valid? # => true
42
+ m.reload.ip # => "192.168.0.1"
43
+ ```
57
44
 
58
45
  a scope to retrieve IP by string is also provided unless `scope: false` option is given.
59
46
 
60
- >> Model.create(
61
- ?> [{ :ip => '192.168.0.1' },
62
- ?> { :ip => '192.168.0.2' },
63
- ?> { :ip => '192.168.0.3' }
64
- >> ])
65
- => [#<Model id: 3, ip: 3232235521>, #<Model id: 4, ip: 3232235522>, #<Model id: 5, ip: 3232235523>]
66
- >> Model.ip('192.168.0.1', '192.168.0.2')
67
- => [#<Model id: 3, ip: 3232235521>, #<Model id: 4, ip: 3232235522>]
47
+ ```ruby
48
+ Model.create(
49
+ [{ :ip => '192.168.0.1' },
50
+ { :ip => '192.168.0.2' },
51
+ { :ip => '192.168.0.3' }
52
+ ])
53
+ # => [#<Model id: 3, ip: 3232235521>, #<Model id: 4, ip: 3232235522>, #<Model id: 5, ip: 3232235523>]
54
+ Model.ip('192.168.0.1', '192.168.0.2')
55
+ # => [#<Model id: 3, ip: 3232235521>, #<Model id: 4, ip: 3232235522>]
56
+ ```
68
57
 
69
58
  a validation of the ip address is set up unless `validation: false` option is given
70
59
 
71
- >> Model.create!(:ip => '192.168.0')
72
- ActiveRecord::RecordInvalid: Validation failed: Ip has to be a valid IP address
60
+ ```ruby
61
+ Model.create!(:ip => '192.168.0')
62
+ # => ActiveRecord::RecordInvalid: Validation failed: Ip has to be a valid IP address
63
+ ```
73
64
 
74
65
  ## Further use
75
66
 
76
67
  In fact, you can also use the `IpAsInt::IpAddressAttribute` module with active model only.
77
68
 
78
- class Model
79
- include ActiveModel::Validations
80
- include ::IpAsInt::IpAddressAttribute
81
- ip_address :ip
82
- end
69
+ ```ruby
70
+ class Model
71
+ include ActiveModel::Validations
72
+ include ::IpAsInt::IpAddressAttribute
73
+ ip_address :ip
74
+ end
75
+ ```
83
76
 
84
77
  The validator can also be used by itself on an IP attribute irrespective of underlying storage (i.e., even if you use a string column)
85
78
 
86
- class Model
87
- # :ip string column
88
- validates :ip, :ip_address => { :allow_blank => true }
89
- end
79
+ ```ruby
80
+ class Model
81
+ # :ip string column
82
+ validates :ip, :ip_address => { :allow_blank => true }
83
+ end
84
+ ```
85
+
86
+ ## Installation
87
+
88
+ Add this line to your application's Gemfile:
89
+
90
+ gem 'ip_as_int'
91
+
92
+ And then execute:
93
+
94
+ $ bundle
95
+
96
+ Or install it yourself as:
97
+
98
+ $ gem install ip_as_int
90
99
 
91
100
  ## Contributing
92
101
 
@@ -8,7 +8,7 @@ Gem::Specification.new do |gem|
8
8
  gem.email = ["viktor.tron@gmail.com"]
9
9
  gem.description = DESC
10
10
  gem.summary = DESC
11
- gem.homepage = ""
11
+ gem.homepage = "https://github.com/zelig/ip_as_int"
12
12
 
13
13
  gem.files = `git ls-files`.split($\)
14
14
  gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
@@ -18,4 +18,10 @@ Gem::Specification.new do |gem|
18
18
  gem.version = IpAsInt::VERSION
19
19
 
20
20
  gem.add_development_dependency 'rspec'
21
+ gem.add_development_dependency 'rspec'
22
+ gem.add_development_dependency 'rake'
23
+ gem.add_development_dependency 'activemodel'
24
+ gem.add_development_dependency 'debugger'
25
+ gem.add_development_dependency 'activerecord'
26
+ gem.add_development_dependency 'sqlite3'
21
27
  end
@@ -1,3 +1,3 @@
1
1
  module IpAsInt
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ip_as_int
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
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: 2013-01-11 00:00:00.000000000 Z
12
+ date: 2013-01-28 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rspec
@@ -27,6 +27,102 @@ dependencies:
27
27
  - - ! '>='
28
28
  - !ruby/object:Gem::Version
29
29
  version: '0'
30
+ - !ruby/object:Gem::Dependency
31
+ name: rspec
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
38
+ type: :development
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
46
+ - !ruby/object:Gem::Dependency
47
+ name: rake
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ type: :development
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ - !ruby/object:Gem::Dependency
63
+ name: activemodel
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ! '>='
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
70
+ type: :development
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
77
+ version: '0'
78
+ - !ruby/object:Gem::Dependency
79
+ name: debugger
80
+ requirement: !ruby/object:Gem::Requirement
81
+ none: false
82
+ requirements:
83
+ - - ! '>='
84
+ - !ruby/object:Gem::Version
85
+ version: '0'
86
+ type: :development
87
+ prerelease: false
88
+ version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - ! '>='
92
+ - !ruby/object:Gem::Version
93
+ version: '0'
94
+ - !ruby/object:Gem::Dependency
95
+ name: activerecord
96
+ requirement: !ruby/object:Gem::Requirement
97
+ none: false
98
+ requirements:
99
+ - - ! '>='
100
+ - !ruby/object:Gem::Version
101
+ version: '0'
102
+ type: :development
103
+ prerelease: false
104
+ version_requirements: !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - ! '>='
108
+ - !ruby/object:Gem::Version
109
+ version: '0'
110
+ - !ruby/object:Gem::Dependency
111
+ name: sqlite3
112
+ requirement: !ruby/object:Gem::Requirement
113
+ none: false
114
+ requirements:
115
+ - - ! '>='
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ none: false
122
+ requirements:
123
+ - - ! '>='
124
+ - !ruby/object:Gem::Version
125
+ version: '0'
30
126
  description: IP address - integer conversion and activerecord support for ip attribute
31
127
  as integer column
32
128
  email:
@@ -52,9 +148,8 @@ files:
52
148
  - lib/ip_as_int/version.rb
53
149
  - spec/ip2int_spec.rb
54
150
  - spec/ip_address_attribute_spec.rb
55
- - spec/ip_address_attribute_spec.rb~
56
151
  - spec/spec_helper.rb
57
- homepage: ''
152
+ homepage: https://github.com/zelig/ip_as_int
58
153
  licenses: []
59
154
  post_install_message:
60
155
  rdoc_options: []
@@ -68,7 +163,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
68
163
  version: '0'
69
164
  segments:
70
165
  - 0
71
- hash: 2770053615365876423
166
+ hash: -3385027163081094626
72
167
  required_rubygems_version: !ruby/object:Gem::Requirement
73
168
  none: false
74
169
  requirements:
@@ -77,7 +172,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
77
172
  version: '0'
78
173
  segments:
79
174
  - 0
80
- hash: 2770053615365876423
175
+ hash: -3385027163081094626
81
176
  requirements: []
82
177
  rubyforge_project:
83
178
  rubygems_version: 1.8.24
@@ -88,5 +183,4 @@ summary: IP address - integer conversion and activerecord support for ip attribu
88
183
  test_files:
89
184
  - spec/ip2int_spec.rb
90
185
  - spec/ip_address_attribute_spec.rb
91
- - spec/ip_address_attribute_spec.rb~
92
186
  - spec/spec_helper.rb
@@ -1,112 +0,0 @@
1
- require 'spec_helper'
2
- require 'ip_as_int'
3
- require 'active_model'
4
-
5
- describe ::IpAsInt::IpAddressAttribute do
6
-
7
- def model
8
- @model
9
- end
10
-
11
- shared_examples_for "accessors and validation" do
12
-
13
- context "with validation" do
14
- before :each do
15
- @model = model_class(:ip).new
16
- end
17
-
18
- it "defines attribute writer for ip_address, stores value as integer" do
19
- model.ip = '192.168.0.1'
20
- model.read_attribute(:ip).should == 3232235521
21
- end
22
-
23
- it "defines attribute reader for ip_address, converts value from integer" do
24
- model.write_attribute(:ip, 3232235521)
25
- model.ip.should == '192.168.0.1'
26
- model.should be_valid
27
- end
28
-
29
- it "nil preserved" do
30
- model.ip = nil
31
- model.read_attribute(:ip).should == nil
32
- end
33
-
34
- it "invalid input preserved" do
35
- model.ip = "invalid"
36
- model.read_attribute(:ip).should == nil
37
- model.ip.should == "invalid"
38
- end
39
-
40
- it "validates correctly" do
41
- model.ip = "invalid"
42
- model.should_not be_valid
43
- end
44
-
45
- it "validates correctly even if underlying change" do
46
- model.ip = "invalid"
47
- model.write_attribute(:ip, 3232235521)
48
- model.should_not be_valid
49
- end
50
-
51
- it "invalid on nil IP" do
52
- model.ip = nil
53
- model.should_not be_valid
54
- end
55
-
56
- end
57
-
58
- context "without validation" do
59
- before :each do
60
- @model = model_class(:ip, :validation => false).new
61
- end
62
-
63
- it "valid on invalid IP" do
64
- model.ip = "invalid"
65
- model.should be_valid
66
- end
67
-
68
- it "valid on valid IP" do
69
- model.ip = '192.168.0.1'
70
- model.should be_valid
71
- end
72
-
73
- end
74
- context "with validation with arguments" do
75
-
76
- before :each do
77
- @model = model_class(:ip, :validation => { :allow_nil => true }).new
78
- end
79
-
80
- it "invalid on invalid IP" do
81
- model.ip = "invalid"
82
- model.should_not be_valid
83
- end
84
-
85
- it "valid on valid IP" do
86
- model.ip = '192.168.0.1'
87
- model.should be_valid
88
- end
89
-
90
- it "valid on nil IP" do
91
- model.ip = nil
92
- model.should be_valid
93
- end
94
-
95
- end
96
- end
97
-
98
- context "activemodel integration" do
99
-
100
- def model_class(*attrs)
101
- Class.new do
102
- include ActiveModel::Validations
103
- include ::IpAsInt::IpAddressAttribute
104
- ip_address(*attrs)
105
- end
106
- end
107
-
108
- include_examples "accessors and validations"
109
-
110
- end
111
-
112
- end