version-serializer 1.0.0 → 1.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile +2 -1
- data/Gemfile.lock +5 -2
- data/README.md +14 -8
- data/lib/version_serializer.rb +2 -52
- data/lib/version_serializer/range_compatibility.rb +16 -0
- data/lib/version_serializer/semantic_version.rb +13 -0
- data/lib/version_serializer/version.rb +51 -1
- data/test/unit/range_compatibility_test.rb +40 -0
- data/test/unit/semantic_version_test.rb +21 -0
- data/test/unit/version_test.rb +0 -1
- metadata +9 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4ed6b796906bba1905dcab7f248a3d57d45ee52b
|
4
|
+
data.tar.gz: 6c20492d42f639bbebac50dbfc8df4aaf165ce43
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 707796012d0dd5f87dbc68bbfb2fb72ffc8c2854b5c024be2cb0af1c38b3e71066e48f2c730fbd4fba0c6b5a8bdaf30a0a64367a67f88deeccf93f63d9b979ee
|
7
|
+
data.tar.gz: ce6c58f585107e05decc1551ee92242edc7e6437fa49a1e4921568fb92c0d2cfd079156dd647dd14788ee399e4bbc429e1b50d37b7969e5a062147f9d3718edf
|
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
version-serializer (1.
|
4
|
+
version-serializer (1.1.0)
|
5
5
|
|
6
6
|
GEM
|
7
7
|
remote: https://rubygems.org/
|
@@ -39,6 +39,8 @@ GEM
|
|
39
39
|
pry-doc (0.6.0)
|
40
40
|
pry (~> 0.9)
|
41
41
|
yard (~> 0.8)
|
42
|
+
pry-nav (0.2.4)
|
43
|
+
pry (>= 0.9.10, < 0.11.0)
|
42
44
|
rake (10.3.2)
|
43
45
|
rb-fsevent (0.9.4)
|
44
46
|
rb-inotify (0.9.4)
|
@@ -64,6 +66,7 @@ DEPENDENCIES
|
|
64
66
|
guard-yard
|
65
67
|
pry
|
66
68
|
pry-doc
|
69
|
+
pry-nav
|
67
70
|
rake
|
68
71
|
rb-fsevent
|
69
72
|
simplecov
|
@@ -71,4 +74,4 @@ DEPENDENCIES
|
|
71
74
|
version-serializer!
|
72
75
|
|
73
76
|
BUNDLED WITH
|
74
|
-
1.
|
77
|
+
1.14.3
|
data/README.md
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
# VersionSerializer
|
2
2
|
|
3
|
-
|
3
|
+
Serializes semantic versions and adds compatibility methods to check if a given
|
4
|
+
instance is compatible with a certain version by specifying a range.
|
4
5
|
|
5
6
|
## Installation
|
6
7
|
|
@@ -16,14 +17,19 @@ Or install it yourself as:
|
|
16
17
|
|
17
18
|
$ gem install version_serializer
|
18
19
|
|
20
|
+
|
19
21
|
## Usage
|
20
22
|
|
21
|
-
|
23
|
+
```ruby
|
22
24
|
|
23
|
-
|
25
|
+
# Model Definition
|
26
|
+
class YourModel < ActiveRecord::Base
|
27
|
+
include VersionSerializer::RangeCompatibility
|
28
|
+
serialize :min_version, VersionSerializer::SemanticVersion
|
29
|
+
serialize :max_version, VersionSerializer::SemanticVersion
|
30
|
+
end
|
24
31
|
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
5. Create new Pull Request
|
32
|
+
# Compatibility
|
33
|
+
m = YourModel.create(min_version: "1.0.1", max_version: "2.3.4")
|
34
|
+
m.compatible? "2.0"
|
35
|
+
```
|
data/lib/version_serializer.rb
CHANGED
@@ -1,53 +1,3 @@
|
|
1
1
|
require "version_serializer/version"
|
2
|
-
|
3
|
-
|
4
|
-
class Version
|
5
|
-
attr_accessor :major, :minor
|
6
|
-
|
7
|
-
def initialize major, minor
|
8
|
-
@major = major
|
9
|
-
@minor = minor
|
10
|
-
end
|
11
|
-
|
12
|
-
def self.load (data)
|
13
|
-
return nil if data.nil?
|
14
|
-
self.new(*('%.3f' % data).split('.').map(&:to_i))
|
15
|
-
end
|
16
|
-
|
17
|
-
def self.dump (object)
|
18
|
-
return nil if object.nil?
|
19
|
-
|
20
|
-
if object.respond_to?(:major)
|
21
|
-
("%d.%03d" % [object.major, object.minor]).to_f
|
22
|
-
else
|
23
|
-
object
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
def self.from_string data
|
28
|
-
return nil if data.nil?
|
29
|
-
self.new(*data.to_s.split('.').map(&:to_i))
|
30
|
-
end
|
31
|
-
|
32
|
-
def self.range min, max
|
33
|
-
self.dump(min) .. self.dump(max)
|
34
|
-
end
|
35
|
-
|
36
|
-
include Comparable
|
37
|
-
def <=> other
|
38
|
-
return nil if other.nil?
|
39
|
-
|
40
|
-
[major, minor] <=> [other.major, other.minor]
|
41
|
-
end
|
42
|
-
|
43
|
-
def as_json options = {}
|
44
|
-
to_s
|
45
|
-
end
|
46
|
-
|
47
|
-
def to_s
|
48
|
-
return nil if major.nil? || minor.nil?
|
49
|
-
|
50
|
-
"%d.%d" % [major, minor]
|
51
|
-
end
|
52
|
-
end
|
53
|
-
end
|
2
|
+
require "version_serializer/semantic_version"
|
3
|
+
require "version_serializer/range_compatibility"
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module VersionSerializer
|
2
|
+
module RangeCompatibility
|
3
|
+
def has_version?
|
4
|
+
min_version || max_version
|
5
|
+
end
|
6
|
+
|
7
|
+
def compatible? version
|
8
|
+
return true unless has_version?
|
9
|
+
|
10
|
+
version = SemanticVersion.new(version) if version.is_a? String
|
11
|
+
|
12
|
+
(min_version.nil? || min_version && version >= min_version) &&
|
13
|
+
(max_version.nil? || max_version && version <= max_version)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -1,3 +1,53 @@
|
|
1
1
|
module VersionSerializer
|
2
|
-
VERSION = "1.
|
2
|
+
VERSION = "1.1.0"
|
3
|
+
|
4
|
+
class Version
|
5
|
+
attr_accessor :major, :minor
|
6
|
+
|
7
|
+
def initialize major, minor
|
8
|
+
@major = major
|
9
|
+
@minor = minor
|
10
|
+
end
|
11
|
+
|
12
|
+
def self.load (data)
|
13
|
+
return nil if data.nil?
|
14
|
+
self.new(*('%.3f' % data).split('.').map(&:to_i))
|
15
|
+
end
|
16
|
+
|
17
|
+
def self.dump (object)
|
18
|
+
return nil if object.nil?
|
19
|
+
|
20
|
+
if object.respond_to?(:major)
|
21
|
+
("%d.%03d" % [object.major, object.minor]).to_f
|
22
|
+
else
|
23
|
+
object
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
def self.from_string data
|
28
|
+
return nil if data.nil?
|
29
|
+
self.new(*data.to_s.split('.').map(&:to_i))
|
30
|
+
end
|
31
|
+
|
32
|
+
def self.range min, max
|
33
|
+
self.dump(min) .. self.dump(max)
|
34
|
+
end
|
35
|
+
|
36
|
+
include Comparable
|
37
|
+
def <=> other
|
38
|
+
return nil if other.nil?
|
39
|
+
|
40
|
+
[major, minor] <=> [other.major, other.minor]
|
41
|
+
end
|
42
|
+
|
43
|
+
def as_json options = {}
|
44
|
+
to_s
|
45
|
+
end
|
46
|
+
|
47
|
+
def to_s
|
48
|
+
return nil if major.nil? || minor.nil?
|
49
|
+
|
50
|
+
"%d.%d" % [major, minor]
|
51
|
+
end
|
52
|
+
end
|
3
53
|
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
require 'version_serializer'
|
2
|
+
require 'test_helper'
|
3
|
+
|
4
|
+
|
5
|
+
class CompatibilityTest < MiniTest::Test
|
6
|
+
|
7
|
+
class TestResource
|
8
|
+
include VersionSerializer::RangeCompatibility
|
9
|
+
|
10
|
+
attr_accessor :min_version, :max_version
|
11
|
+
|
12
|
+
def initialize(min_version=nil, max_version=nil)
|
13
|
+
@min_version = VersionSerializer::SemanticVersion.new(min_version) if min_version
|
14
|
+
@max_version = VersionSerializer::SemanticVersion.new(max_version) if max_version
|
15
|
+
end
|
16
|
+
|
17
|
+
end
|
18
|
+
|
19
|
+
def test_compatible
|
20
|
+
binding.pry
|
21
|
+
[
|
22
|
+
["1.2", "1.5"],
|
23
|
+
[nil, "1.5"],
|
24
|
+
["1.2.1", nil],
|
25
|
+
[nil, nil]
|
26
|
+
].each do |min, max|
|
27
|
+
assert TestResource.new(min, max).compatible?("1.2.2")
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
def test_incompatible
|
32
|
+
[
|
33
|
+
["1.2", "1.5"],
|
34
|
+
[nil, "1.2"],
|
35
|
+
["1.7.7", nil]
|
36
|
+
].each do |min, max|
|
37
|
+
assert !TestResource.new(min, max).compatible?("1.6")
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'version_serializer'
|
2
|
+
require 'test_helper'
|
3
|
+
|
4
|
+
class SemanticVersionTest < MiniTest::Test
|
5
|
+
def test_load
|
6
|
+
assert_equal VersionSerializer::SemanticVersion.new("2.4.0"), VersionSerializer::SemanticVersion.load("2.4.0")
|
7
|
+
end
|
8
|
+
|
9
|
+
def test_dump
|
10
|
+
version = VersionSerializer::SemanticVersion.new("2.4.0")
|
11
|
+
assert_equal version.to_s, VersionSerializer::SemanticVersion.dump(version)
|
12
|
+
end
|
13
|
+
|
14
|
+
def test_nil_load
|
15
|
+
assert_nil VersionSerializer::SemanticVersion.load(nil)
|
16
|
+
end
|
17
|
+
|
18
|
+
def test_nil_dump
|
19
|
+
assert_nil VersionSerializer::SemanticVersion.dump(nil)
|
20
|
+
end
|
21
|
+
end
|
data/test/unit/version_test.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: version-serializer
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- NDrive DevOps Team
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2017-06-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -52,8 +52,12 @@ files:
|
|
52
52
|
- README.md
|
53
53
|
- Rakefile
|
54
54
|
- lib/version_serializer.rb
|
55
|
+
- lib/version_serializer/range_compatibility.rb
|
56
|
+
- lib/version_serializer/semantic_version.rb
|
55
57
|
- lib/version_serializer/version.rb
|
56
58
|
- test/test_helper.rb
|
59
|
+
- test/unit/range_compatibility_test.rb
|
60
|
+
- test/unit/semantic_version_test.rb
|
57
61
|
- test/unit/version_test.rb
|
58
62
|
- version_serializer.gemspec
|
59
63
|
homepage: http://www.ndrive.com
|
@@ -76,11 +80,13 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
76
80
|
version: '0'
|
77
81
|
requirements: []
|
78
82
|
rubyforge_project:
|
79
|
-
rubygems_version: 2.
|
83
|
+
rubygems_version: 2.6.10
|
80
84
|
signing_key:
|
81
85
|
specification_version: 4
|
82
86
|
summary: Serialize version
|
83
87
|
test_files:
|
84
88
|
- test/test_helper.rb
|
89
|
+
- test/unit/range_compatibility_test.rb
|
90
|
+
- test/unit/semantic_version_test.rb
|
85
91
|
- test/unit/version_test.rb
|
86
92
|
has_rdoc:
|