versions.rb 0.1.1 → 1.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 046f37b7141e3bbca1436bcfdaf16a0be79c721c
4
- data.tar.gz: 16f3cc8ed2e379a9cf154cc6add663bc4788060f
3
+ metadata.gz: 3fac1013f437cd729493033b888daa6876e4240e
4
+ data.tar.gz: 7565ddf6130285ba36e2d527e604a213907afcee
5
5
  SHA512:
6
- metadata.gz: bee3c591304e503f4ab60cbccfedbbf1d73214cebde7126be572bc5e9ec13ea73ab533bbc56232a321c92ece808a7d4226440d7b0a69c1f74b0d972408be389a
7
- data.tar.gz: c5170793897cd54cb037df8cd197ac8dd4abf8121737dbe44464ae7efb76be42dbfd806f11c6da80df065e54c2e8c9b5024f409acb9f09cd908ad11fe3bd2d85
6
+ metadata.gz: cb9fe45414b32700606c4eae1e6a2881722a7cf54d7b276ec516a75a71db93cbdc3a9c57681d121547428a8201a27278b4ee2e5bd0f15a32188845b4a2cb3ffb
7
+ data.tar.gz: 7836b77b3f8281022134c507d544ce08adfc31142a34f74ef14f6c531b6c5e992eaf197647169482297a91b91758073efd987350ca9df043dcfccfe80207d6f4
data/.gitignore ADDED
@@ -0,0 +1,26 @@
1
+ *.gem
2
+ *.rbc
3
+ /.config
4
+ /coverage/
5
+ /InstalledFiles
6
+ /pkg/
7
+ /spec/reports/
8
+ /test/tmp/
9
+ /test/version_tmp/
10
+ /tmp/
11
+
12
+ ## Documentation cache and generated files:
13
+ /.yardoc/
14
+ /_yardoc/
15
+ /doc/
16
+ /rdoc/
17
+
18
+ ## Environment normalisation:
19
+ /.bundle/
20
+ /lib/bundler/man/
21
+
22
+ Gemfile.lock
23
+ .ruby-version
24
+ .ruby-gemset
25
+
26
+ .rvmrc
data/.travis.yml ADDED
@@ -0,0 +1,18 @@
1
+ language: ruby
2
+ rvm:
3
+ - 2.1.1
4
+ - 2.0.0
5
+ - 1.9.3
6
+ - 1.9.2
7
+ - jruby-19mode
8
+ - ruby-head
9
+ - jruby-head
10
+ jdk:
11
+ - openjdk7
12
+ - oraclejdk7
13
+ - openjdk6
14
+ script: rspec
15
+ matrix:
16
+ allow_failures:
17
+ - rvm: ruby-head
18
+ - rvm: jruby-head
data/Gemfile ADDED
@@ -0,0 +1,2 @@
1
+ source 'https://rubygems.org'
2
+ gemspec
data/README.md ADDED
@@ -0,0 +1,63 @@
1
+ # Versions.rb
2
+
3
+ _"Ruby class versioning made simple."_
4
+
5
+ [![Gem Version](https://badge.fury.io/rb/versions.rb.png)](https://rubygems.org/gems/versions.rb) [![Build Status](https://travis-ci.org/doomspork/versions.rb.png?branch=master)](https://travis-ci.org/doomspork/versions.rb) [![Code Climate](https://codeclimate.com/github/doomspork/versions.rb.png)](https://codeclimate.com/github/doomspork/versions.rb) [![Coverage Status](https://coveralls.io/repos/doomspork/versions.rb/badge.png?branch=master)](https://coveralls.io/r/doomspork/versions.rb)
6
+
7
+ Ruby 1.9, 2.0, 2.1, and JRuby supported.
8
+
9
+ ## Quickstart
10
+
11
+ Install it:
12
+
13
+ `gem install versions.rb`
14
+
15
+ Create a version (`lib/v1.0/awesome_feature.rb`):
16
+
17
+ ```ruby
18
+ module V1_0
19
+ class AwesomeFeature
20
+ def foo
21
+ :bar
22
+ end
23
+ end
24
+ end
25
+ ```
26
+
27
+ Use it:
28
+
29
+ ```ruby
30
+ VersionedFeature = Versions.for(:awesome_feature).select('1.0')
31
+ feature = VersionedFeature.new
32
+ ```
33
+
34
+ ## Configuration
35
+
36
+ #### File locations
37
+ By default Versions.rb will try to use a `lib/` directory within the project root, you can override this:
38
+
39
+ ```ruby
40
+ Versions.config.base_dir = 'dir_path_of_your_choosing'
41
+ ```
42
+
43
+ Alternatively you can override the `base_dir` for a single call as such:
44
+
45
+ ```ruby
46
+ Versions.for(:awesome_feature).at('./other/location').select('1.0')
47
+ ```
48
+
49
+ ## Contributing
50
+
51
+ Please make appropriate use of [Issues][issues] and [Pull Requests][pr]. All code should have accompanying tests.
52
+
53
+ ## Author/Contact
54
+
55
+ Versions.rb is written and maintained by [@doomspork](https://github.com/doomspork)
56
+
57
+ ## License
58
+
59
+ Versions.rb is made available under the [MIT][mit] license.
60
+
61
+ [issues]: https://github.com/doomspork/versions.rb/issues
62
+ [pr]: https://github.com/doomspork/versions.rb/pulls
63
+ [mit]: LICENSE
@@ -0,0 +1,51 @@
1
+ module Versionable
2
+ extend Forwardable
3
+
4
+ DEFAULT_PATH = File.join(File.dirname(__FILE__), '')
5
+
6
+ def_delegators :@versions, :versions, :available?, :select
7
+
8
+ def self.included(base)
9
+ base.extend(ClassMethods)
10
+ end
11
+
12
+ module ClassMethods
13
+ def instance_of!(version, *args)
14
+ version = version.to_sym
15
+ versioned_class = loaded_versions[version]
16
+ instance = versioned_class.new(*args)
17
+ instance.instance_variable_set(:@instance_version, version)
18
+ instance
19
+ end
20
+
21
+ def instance_of(version, *args)
22
+ begin
23
+ instance_of!(version, args)
24
+ rescue Versions::VersionNotAvailableError
25
+ nil
26
+ end
27
+ end
28
+
29
+ def versions_path(path)
30
+ @versions_path = path
31
+ end
32
+
33
+ private
34
+
35
+ def versions_directory
36
+ @versions_path || DEFAULT_PATH
37
+ end
38
+
39
+ def loaded_versions
40
+ @loaded_versions ||= Hash.new { |hash, key| hash[key] = versions_rb.select(key) }
41
+ end
42
+
43
+ def versions_rb
44
+ @versions_rb ||= Versions.for(self.name).at(versions_directory)
45
+ end
46
+ end
47
+
48
+ def version
49
+ @instances_version
50
+ end
51
+ end
data/lib/versions.rb CHANGED
@@ -1,27 +1,29 @@
1
- require 'versions/versionable.rb'
1
+ require 'versionable.rb'
2
2
  require 'versions/configurable.rb'
3
3
  require 'versions/file_helpers.rb'
4
4
  require 'versions/class_helpers.rb'
5
+ require 'versions/string_helpers.rb'
6
+ require 'versions/errors/version_not_available.rb'
5
7
 
6
8
  class Versions
7
- extend Versionable
8
9
  extend Configurable
9
10
 
10
11
  include FileHelpers
11
12
  include ClassHelpers
13
+ include StringHelpers
12
14
 
13
15
  # Public: Sets up and returns a new instance
14
16
  #
15
17
  # mod - Symbol or String of the library name
16
18
  #
17
19
  # Returns an instance of Versions
18
- def self.for(mod)
19
- new(mod)
20
+ def self.for(library)
21
+ new(library)
20
22
  end
21
23
 
22
24
  # Public: Sets the base directory for this instance
23
25
  #
24
- # path - path to the directory
26
+ # path - path to the directory
25
27
  #
26
28
  # Returns self
27
29
  def at(path)
@@ -36,6 +38,7 @@ class Versions
36
38
  # Returns the versioned Class
37
39
  # Raises VersionNotAvailableError
38
40
  def select(version)
41
+ version = version.to_sym
39
42
  if file = mapped_versions[version]
40
43
  load_class(version, file)
41
44
  else
@@ -49,7 +52,7 @@ class Versions
49
52
  #
50
53
  # Returns a Boolean
51
54
  def available?(version)
52
- !!mapped_versions[version]
55
+ !!mapped_versions[version.to_sym]
53
56
  end
54
57
 
55
58
  # Public: Get the available versions
@@ -63,15 +66,15 @@ class Versions
63
66
 
64
67
  # Internal: Create a new instance
65
68
  #
66
- # mod - Symbol or String of the library name
69
+ # library - Symbol or String of the library name
67
70
  #
68
71
  # Returns a new instance
69
- def initialize(mod)
70
- @library_name = mod.to_s
72
+ def initialize(library)
73
+ @library_name = snake_case(library.to_s)
71
74
  end
72
75
 
73
76
  # Internal: An internal map of versions and their respective files,
74
- # the Hash keys are version strings and files as value.
77
+ # the Hash keys are version strings and files as value.
75
78
  #
76
79
  # Returns a Hash
77
80
  def mapped_versions
@@ -0,0 +1,34 @@
1
+ class Versions
2
+ module ClassHelpers
3
+ protected
4
+
5
+ # Internal: The ClassName of the Library
6
+ #
7
+ # Returns a String
8
+ def library_name
9
+ camel_case(@library_name)
10
+ end
11
+
12
+ # Internal: Get the fully qualified class name with version
13
+ #
14
+ # version - the version selected
15
+ #
16
+ # Returns a String
17
+ def versioned_class_name(version)
18
+ safe_version = version.to_s.gsub(/\./, '_')
19
+ "#{Versions.config.class_prefix}#{safe_version}::#{library_name}"
20
+ end
21
+
22
+ # Internal: Load and return the Class
23
+ #
24
+ # version - the selected version
25
+ # file - the file path
26
+ #
27
+ # Returns a Class
28
+ def load_class(version, file)
29
+ require file
30
+ name = versioned_class_name(version)
31
+ name.split('::').inject(Object) { |obj, klz| obj.const_get(klz) }
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,32 @@
1
+ class Versions
2
+ module Configurable
3
+
4
+ # A simple configuration wrapper
5
+ class Config
6
+ attr_accessor :base_dir, :version_pattern, :class_prefix
7
+
8
+ # The default base directory path
9
+ BASE_DIR = File.join(Dir.pwd, 'lib')
10
+ # The default filename pattern
11
+ VERSION_PATTERN = /v(?:ersion)?[-_]?((\d+(?:\.\d+)*))/i
12
+ # The default class prefix
13
+ CLASS_PREFIX = 'V'
14
+
15
+ # Public: Create a new instance with default values
16
+ #
17
+ # Returns a new instance
18
+ def initialize
19
+ self.base_dir = BASE_DIR
20
+ self.version_pattern = VERSION_PATTERN
21
+ self.class_prefix = CLASS_PREFIX
22
+ end
23
+ end
24
+
25
+ # Public: Versions.rb configuration instance
26
+ #
27
+ # Returns an instance of Config
28
+ def config
29
+ @config ||= Config.new
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,4 @@
1
+ class Versions
2
+ class VersionNotAvailableError < Exception
3
+ end
4
+ end
@@ -0,0 +1,31 @@
1
+ class Versions
2
+ module FileHelpers
3
+ protected
4
+
5
+ # Internal: Parse a file path into a version string
6
+ #
7
+ # path - the file path to parse
8
+ #
9
+ # Returns a version String or nil
10
+ def parse_filepath(path)
11
+ (match = Versions.config.version_pattern.match(path)) ? match[1] : nil
12
+ end
13
+
14
+ # Internal: Create a map of versions and files
15
+ #
16
+ # Returns a Hash
17
+ def map_file_versions
18
+ file_path = File.join(path, '**', "#{@library_name}.rb")
19
+ files = Dir[file_path] || {}
20
+ files.inject({}) do |memo, path|
21
+ version_key = parse_filepath(path)
22
+ memo[version_key.to_sym] = path if version_key
23
+ memo
24
+ end
25
+ end
26
+
27
+ def path
28
+ @path ||= Versions.config.base_dir
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,26 @@
1
+ class Versions
2
+ module StringHelpers
3
+ # Internal: Make a String CamelCase
4
+ #
5
+ # str- to make CamelCase String
6
+ #
7
+ # Returns a String
8
+ def camel_case(str)
9
+ str.to_s.split(/[ _]/).map(&:capitalize).join('')
10
+ end
11
+
12
+ # Internal: Make a String snake_case
13
+ # Implementation borrowed from ActiveSupport
14
+ #
15
+ # str - to make snake_case String
16
+ #
17
+ # Returns a String
18
+ def snake_case(str)
19
+ str.gsub(/::/, '/').
20
+ gsub(/([A-Z]+)([A-Z][a-z])/,'\1_\2').
21
+ gsub(/([a-z\d])([A-Z])/,'\1_\2').
22
+ tr("-", "_").
23
+ downcase
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,7 @@
1
+ module V1
2
+ class SampleLibrary
3
+ def version
4
+ '1'
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,14 @@
1
+ module V2_1
2
+ class SampleLibrary
3
+ attr_accessor :one, :two
4
+
5
+ def initialize(one = 1, two = 2)
6
+ self.one = one
7
+ self.two = two
8
+ end
9
+
10
+ def version
11
+ '2.1'
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,7 @@
1
+ module V3_2_1
2
+ class SampleLibrary
3
+ def version
4
+ '3.2.1'
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,45 @@
1
+ require 'spec_helper'
2
+
3
+ class SampleLibrary
4
+ include Versionable
5
+
6
+ versions_path File.join(File.dirname(__FILE__), '..', 'fixtures')
7
+ end
8
+
9
+ describe Versionable do
10
+ subject { SampleLibrary }
11
+
12
+ describe '.instance_of!' do
13
+ context 'with available version' do
14
+ it 'will return the class' do
15
+ vers = subject.instance_of!('2.1')
16
+ expect(vers.version).to eql '2.1'
17
+ expect(vers).to instance_of V2_1::SampleLibrary
18
+ end
19
+
20
+ context 'with additional paramaters' do
21
+ it 'will pass them to the constructor' do
22
+ vers = subject.instance_of!('2.1', 0, 0)
23
+ expect(vers.one).to eql 0
24
+ expect(vers.two).to eql 0
25
+ end
26
+ end
27
+ end
28
+
29
+ context 'with missing version' do
30
+ it 'will be raise an error' do
31
+ expect { subject.instance_of!('4.2.0') }.to raise_error Versions::VersionNotAvailableError
32
+ end
33
+ end
34
+ end
35
+
36
+ describe '.instance_of' do
37
+ context 'with missing version' do
38
+ it 'will return nil' do
39
+ vers = subject.instance_of('4.2.0')
40
+ expect(vers).to be_nil
41
+ end
42
+ end
43
+ end
44
+
45
+ end
@@ -0,0 +1,57 @@
1
+ require 'spec_helper'
2
+
3
+ describe Versions do
4
+ subject { Versions.for(:sample_library) }
5
+
6
+ let(:fixture_path) { File.join(File.dirname(__FILE__), '..', 'fixtures') }
7
+
8
+ before { Versions.config.base_dir = fixture_path }
9
+
10
+ describe '#available?' do
11
+ context 'with existing version' do
12
+ it 'will be true' do
13
+ avail = subject.available? '1'
14
+ expect(avail).to be_truthy
15
+ end
16
+ end
17
+
18
+ context 'with missing version' do
19
+ it 'will be false' do
20
+ avail = subject.available? '4.2.0'
21
+ expect(avail).to be_falsey
22
+ end
23
+ end
24
+ end
25
+
26
+ describe '#versions' do
27
+ it 'returns an Array of available versions' do
28
+ vers = subject.versions
29
+ expect(vers.size).to eql 3
30
+ end
31
+ end
32
+
33
+ describe '#at' do
34
+ before { Versions.config.base_dir = nil }
35
+
36
+ it 'will override the base dir for this instance' do
37
+ vers = subject.at(fixture_path).versions
38
+ expect(vers.size).to eql 3
39
+ end
40
+ end
41
+
42
+ describe '#select' do
43
+ context 'with available version' do
44
+ it 'will return the class' do
45
+ vers = subject.select('2.1')
46
+ expect(vers).to eql V2_1::SampleLibrary
47
+ end
48
+ end
49
+
50
+ context 'with missing version' do
51
+ it 'will be raise an error' do
52
+ expect { subject.select('4.2.0') }.to raise_error
53
+ end
54
+ end
55
+ end
56
+
57
+ end
@@ -0,0 +1,20 @@
1
+ require 'simplecov'
2
+ require 'pry'
3
+
4
+ ENV['RACK_ENV'] = 'test'
5
+
6
+ SimpleCov.formatter = Coveralls::SimpleCov::Formatter if defined?(Coveralls)
7
+
8
+ # Configure code coverage reporting
9
+ SimpleCov.start do
10
+ add_filter '/spec/'
11
+ coverage_dir 'docs/coverage'
12
+ end
13
+
14
+ require 'versions'
15
+
16
+ Dir['./spec/support/**/*.rb'].each { |f| require f }
17
+
18
+ RSpec.configure do |config|
19
+ config.mock_framework = :rr
20
+ end
@@ -0,0 +1,25 @@
1
+ Gem::Specification.new do |s|
2
+ s.name = 'versions.rb'
3
+ s.version = '1.0'
4
+ s.summary = 'Support for versioned class definitions.'
5
+ s.description = 'Using simple namespacing Versions.rb lets you load versions of your code on-demand.'
6
+ s.authors = ['Sean Callan']
7
+ s.email = 'seancallan@gmail.com'
8
+ s.homepage = 'https://github.com/doomspork/versions.rb'
9
+ s.license = 'MIT'
10
+
11
+ s.files = `git ls-files -z`.split("\x0")
12
+ s.executables = s.files.grep(%r{^bin/}) { |f| File.basename(f) }
13
+ s.test_files = s.files.grep(%r{^(test|spec|features)/})
14
+ s.require_paths = ['lib']
15
+
16
+ s.required_ruby_version = '> 1.9'
17
+
18
+ s.add_development_dependency 'bundler', '~> 1.7'
19
+ s.add_development_dependency 'coveralls', '~> 0.7' unless RUBY_PLATFORM =~ /java/
20
+ s.add_development_dependency 'pry', '~> 0.10'
21
+ s.add_development_dependency 'rake', '~> 10.0'
22
+ s.add_development_dependency 'rr', '~> 1.1.2'
23
+ s.add_development_dependency 'rspec', '~> 3.1'
24
+ s.add_development_dependency 'simplecov', '~> 0.9'
25
+ end
metadata CHANGED
@@ -1,29 +1,71 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: versions.rb
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: '1.0'
5
5
  platform: ruby
6
6
  authors:
7
- - doomspork
7
+ - Sean Callan
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-02-03 00:00:00.000000000 Z
11
+ date: 2015-04-20 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ~>
18
+ - !ruby/object:Gem::Version
19
+ version: '1.7'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ~>
25
+ - !ruby/object:Gem::Version
26
+ version: '1.7'
27
+ - !ruby/object:Gem::Dependency
28
+ name: coveralls
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ~>
32
+ - !ruby/object:Gem::Version
33
+ version: '0.7'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ~>
39
+ - !ruby/object:Gem::Version
40
+ version: '0.7'
13
41
  - !ruby/object:Gem::Dependency
14
42
  name: pry
15
43
  requirement: !ruby/object:Gem::Requirement
16
44
  requirements:
17
45
  - - ~>
18
46
  - !ruby/object:Gem::Version
19
- version: 0.9.12.6
47
+ version: '0.10'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ~>
53
+ - !ruby/object:Gem::Version
54
+ version: '0.10'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rake
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ~>
60
+ - !ruby/object:Gem::Version
61
+ version: '10.0'
20
62
  type: :development
21
63
  prerelease: false
22
64
  version_requirements: !ruby/object:Gem::Requirement
23
65
  requirements:
24
66
  - - ~>
25
67
  - !ruby/object:Gem::Version
26
- version: 0.9.12.6
68
+ version: '10.0'
27
69
  - !ruby/object:Gem::Dependency
28
70
  name: rr
29
71
  requirement: !ruby/object:Gem::Requirement
@@ -44,37 +86,54 @@ dependencies:
44
86
  requirements:
45
87
  - - ~>
46
88
  - !ruby/object:Gem::Version
47
- version: 2.14.1
89
+ version: '3.1'
48
90
  type: :development
49
91
  prerelease: false
50
92
  version_requirements: !ruby/object:Gem::Requirement
51
93
  requirements:
52
94
  - - ~>
53
95
  - !ruby/object:Gem::Version
54
- version: 2.14.1
96
+ version: '3.1'
55
97
  - !ruby/object:Gem::Dependency
56
98
  name: simplecov
57
99
  requirement: !ruby/object:Gem::Requirement
58
100
  requirements:
59
101
  - - ~>
60
102
  - !ruby/object:Gem::Version
61
- version: 0.8.2
103
+ version: '0.9'
62
104
  type: :development
63
105
  prerelease: false
64
106
  version_requirements: !ruby/object:Gem::Requirement
65
107
  requirements:
66
108
  - - ~>
67
109
  - !ruby/object:Gem::Version
68
- version: 0.8.2
69
- description: Versions.rb provides a simple method for handling libraries that require
70
- versioning.
71
- email: iamdoomspork@gmail.com
110
+ version: '0.9'
111
+ description: Using simple namespacing Versions.rb lets you load versions of your code
112
+ on-demand.
113
+ email: seancallan@gmail.com
72
114
  executables: []
73
115
  extensions: []
74
116
  extra_rdoc_files: []
75
117
  files:
76
- - lib/versions.rb
118
+ - .gitignore
119
+ - .travis.yml
120
+ - Gemfile
77
121
  - LICENSE
122
+ - README.md
123
+ - lib/versionable.rb
124
+ - lib/versions.rb
125
+ - lib/versions/class_helpers.rb
126
+ - lib/versions/configurable.rb
127
+ - lib/versions/errors/version_not_available.rb
128
+ - lib/versions/file_helpers.rb
129
+ - lib/versions/string_helpers.rb
130
+ - spec/fixtures/v1/sample_library.rb
131
+ - spec/fixtures/v2.1/sample_library.rb
132
+ - spec/fixtures/v3.2.1/sample_library.rb
133
+ - spec/lib/versionable_spec.rb
134
+ - spec/lib/versions_spec.rb
135
+ - spec/spec_helper.rb
136
+ - versions.rb.gemspec
78
137
  homepage: https://github.com/doomspork/versions.rb
79
138
  licenses:
80
139
  - MIT
@@ -85,9 +144,9 @@ require_paths:
85
144
  - lib
86
145
  required_ruby_version: !ruby/object:Gem::Requirement
87
146
  requirements:
88
- - - '>='
147
+ - - '>'
89
148
  - !ruby/object:Gem::Version
90
- version: 1.8.7
149
+ version: '1.9'
91
150
  required_rubygems_version: !ruby/object:Gem::Requirement
92
151
  requirements:
93
152
  - - '>='
@@ -95,9 +154,15 @@ required_rubygems_version: !ruby/object:Gem::Requirement
95
154
  version: '0'
96
155
  requirements: []
97
156
  rubyforge_project:
98
- rubygems_version: 2.0.3
157
+ rubygems_version: 2.0.14
99
158
  signing_key:
100
159
  specification_version: 4
101
- summary: Ruby class versioning made simple.
102
- test_files: []
160
+ summary: Support for versioned class definitions.
161
+ test_files:
162
+ - spec/fixtures/v1/sample_library.rb
163
+ - spec/fixtures/v2.1/sample_library.rb
164
+ - spec/fixtures/v3.2.1/sample_library.rb
165
+ - spec/lib/versionable_spec.rb
166
+ - spec/lib/versions_spec.rb
167
+ - spec/spec_helper.rb
103
168
  has_rdoc: