hydra-migrate 0.0.1

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/.gitignore ADDED
@@ -0,0 +1,17 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
data/.rspec ADDED
@@ -0,0 +1 @@
1
+ -cf doc
data/.travis.yml ADDED
@@ -0,0 +1,4 @@
1
+ language: ruby
2
+ rvm:
3
+ - 1.9.3
4
+ - 2.0.0
data/CONTRIBUTING.md ADDED
@@ -0,0 +1,111 @@
1
+ # How to Contribute
2
+
3
+ We want your help to make Project Hydra great.
4
+ There are a few guidelines that we need contributors to follow so that we can have a chance of keeping on top of things.
5
+
6
+ ## Hydra Project Intellectual Property Licensing and Ownership
7
+
8
+ All code contributors must have an Individual Contributor License Agreement (iCLA) on file with the Hydra Project Steering Group.
9
+ If the contributor works for an institution, the institution must have a Corporate Contributor License Agreement (cCLA) on file.
10
+
11
+ https://wiki.duraspace.org/display/hydra/Hydra+Project+Intellectual+Property+Licensing+and+Ownership
12
+
13
+ You should also add yourself to the `CONTRIBUTORS.md` file in the root of the project.
14
+
15
+ ## Contribution Tasks
16
+
17
+ * Reporting Issues
18
+ * Making Changes
19
+ * Submitting Changes
20
+ * Merging Changes
21
+
22
+ ### Reporting Issues
23
+
24
+ * Make sure you have a [GitHub account](https://github.com/signup/free)
25
+ * Submit a [Github issue](./issues) by:
26
+ * Clearly describing the issue
27
+ * Provide a descriptive summary
28
+ * Explain the expected behavior
29
+ * Explain the actual behavior
30
+ * Provide steps to reproduce the actual behavior
31
+
32
+ ### Making Changes
33
+
34
+ * Fork the repository on GitHub
35
+ * Create a topic branch from where you want to base your work.
36
+ * This is usually the master branch.
37
+ * To quickly create a topic branch based on master; `git branch fix/master/my_contribution master`
38
+ * Then checkout the new branch with `git checkout fix/master/my_contribution`.
39
+ * Please avoid working directly on the `master` branch.
40
+ * You may find the [hub suite of commands](https://github.com/defunkt/hub) helpful
41
+ * Make commits of logical units.
42
+ * Your commit should include a high level description of your work in HISTORY.textile
43
+ * Check for unnecessary whitespace with `git diff --check` before committing.
44
+ * Make sure your commit messages are [well formed](http://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html).
45
+ * If you created an issue, you can close it by including "Closes #issue" in your commit message. See [Github's blog post for more details](https://github.com/blog/1386-closing-issues-via-commit-messages)
46
+
47
+ ```
48
+ Present tense short summary (50 characters or less)
49
+
50
+ More detailed description, if necessary. It should be wrapped to 72
51
+ characters. Try to be as descriptive as you can, even if you think that
52
+ the commit content is obvious, it may not be obvious to others. You
53
+ should add such description also if it's already present in bug tracker,
54
+ it should not be necessary to visit a webpage to check the history.
55
+
56
+ Include Closes #<issue-number> when relavent.
57
+
58
+ Description can have multiple paragraphs and you can use code examples
59
+ inside, just indent it with 4 spaces:
60
+
61
+ class PostsController
62
+ def index
63
+ respond_with Post.limit(10)
64
+ end
65
+ end
66
+
67
+ You can also add bullet points:
68
+
69
+ - you can use dashes or asterisks
70
+
71
+ - also, try to indent next line of a point for readability, if it's too
72
+ long to fit in 72 characters
73
+ ```
74
+
75
+ * Make sure you have added the necessary tests for your changes.
76
+ * Run _all_ the tests to assure nothing else was accidentally broken.
77
+ * When you are ready to submit a pull request
78
+
79
+ ### Submitting Changes
80
+
81
+ * Read the article ["Using Pull Requests"](https://help.github.com/articles/using-pull-requests) on GitHub.
82
+ * Make sure your branch is up to date with its parent branch (i.e. master)
83
+ * `git checkout master`
84
+ * `git pull --rebase`
85
+ * `git checkout <your-branch>`
86
+ * `git rebase master`
87
+ * It is likely a good idea to run your tests again.
88
+ * Squash the commits for your branch into one commit
89
+ * `git rebase --interactive HEAD~<number-of-commits>` ([See Github help](https://help.github.com/articles/interactive-rebase))
90
+ * To determine the number of commits on your branch: `git log master..<your-branch> --oneline | wc -l`
91
+ * Squashing your branch's changes into one commit is "good form" and helps the person merging your request to see everything that is going on.
92
+ * Push your changes to a topic branch in your fork of the repository.
93
+ * Submit a pull request from your fork to the project.
94
+
95
+ ### Merging Changes
96
+
97
+ * It is considered "poor from" to merge your own request.
98
+ * Please take the time to review the changes and get a sense of what is being changed. Things to consider:
99
+ * Does the commit message explain what is going on?
100
+ * Does the code changes have tests? _Not all changes need new tests, some changes are refactorings_
101
+ * Does the commit contain more than it should? Are two separate concerns being addressed in one commit?
102
+ * Did the Travis tests complete successfully?
103
+ * If you are uncertain, bring other contributors into the conversation by creating a comment that includes their @username.
104
+ * If you like the pull request, but want others to chime in, create a +1 comment and tag a user.
105
+
106
+ # Additional Resources
107
+
108
+ * [General GitHub documentation](http://help.github.com/)
109
+ * [GitHub pull request documentation](http://help.github.com/send-pull-requests/)
110
+ * [Pro Git](http://git-scm.com/book) is both a free and excellent book about Git.
111
+ * [A Git Config for Contributing](http://ndlib.github.io/practices/my-typical-per-project-git-config/)
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in hydra-migrate.gemspec
4
+ gemspec
data/LICENSE.txt ADDED
@@ -0,0 +1,12 @@
1
+ Copyright 2011-2013, The Trustees of Indiana University and Northwestern
2
+ University. Licensed under the Apache License, Version 2.0 (the "License");
3
+ you may not use this file except in compliance with the License.
4
+
5
+ You may obtain a copy of the License at
6
+
7
+ http://www.apache.org/licenses/LICENSE-2.0
8
+
9
+ Unless required by applicable law or agreed to in writing, software distributed
10
+ under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
11
+ CONDITIONS OF ANY KIND, either express or implied. See the License for the
12
+ specific language governing permissions and limitations under the License.
data/README.md ADDED
@@ -0,0 +1,75 @@
1
+ # Hydra::Migrate [![Build Status](https://travis-ci.org/projecthydra/hydra-migrate.png?branch=master)](https://travis-ci.org/projecthydra/hydra-migrate)
2
+
3
+ Simple migrations for Hydra models
4
+
5
+ ## Installation
6
+
7
+ Add this line to your application's Gemfile:
8
+
9
+ gem 'hydra-migrate', :require => false
10
+
11
+ And then execute:
12
+
13
+ $ bundle
14
+
15
+ Or install it yourself as:
16
+
17
+ $ gem install hydra-migrate
18
+
19
+ ## Usage
20
+
21
+ ### app/models/my_model.rb
22
+
23
+ class MyModel < ActiveFedora::Base
24
+ include Hydra::ModelMixins::Migratable
25
+ # ... other model code here ...
26
+ end
27
+
28
+ ### Magic class naming: db/hydra/my_model_migration.rb
29
+
30
+ class MyModelMigration < Hydra::Migrate::Migration
31
+ migrate nil => 1 do |object,version,dispatcher|
32
+ # Do stuff to object to get it from unknown version to v1
33
+ end
34
+
35
+ migrate 1 => 2 do |object,version,dispatcher|
36
+ # Do stuff to object to get it from v1 to v2
37
+ end
38
+ end
39
+
40
+ ### Manual class naming: db/hydra/my_explicit_model_migration.rb
41
+
42
+ class MyExplicitModelMigration < Hydra::Migrate::Migration
43
+ migrates MyModel
44
+
45
+ migrate nil => 1 do |object,version,dispatcher|
46
+ # Do stuff to object to get it from unknown version to v1
47
+ end
48
+
49
+ migrate 1 => 2 do |object,version,dispatcher|
50
+ # Do stuff to object to get it from v1 to v2
51
+ end
52
+ end
53
+
54
+ ### Run the migration
55
+
56
+ # Migrate everything that can be migrated
57
+ $ rake hydra:migrate
58
+
59
+ # Migrate one particular class of objects
60
+ $ rake hydra:migrate[MyModel]
61
+
62
+ ## Todo
63
+
64
+ * Reversible migrations (rollback)
65
+ * Improved rake task(s):
66
+ * Specify target version (already possible in raw code)
67
+ * Migrate specific object, not entire model class
68
+
69
+ ## Contributing
70
+
71
+ 1. Fork it
72
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
73
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
74
+ 4. Push to the branch (`git push origin my-new-feature`)
75
+ 5. Create new Pull Request
data/Rakefile ADDED
@@ -0,0 +1,7 @@
1
+ require "bundler/gem_tasks"
2
+ require 'rspec/core/rake_task'
3
+
4
+ RSpec::Core::RakeTask.new do |t|
5
+ t.pattern = "./spec/**/*_spec.rb"
6
+ end
7
+ task :default => :spec
@@ -0,0 +1,26 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'hydra/migrate/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "hydra-migrate"
8
+ spec.version = Hydra::Migrate::VERSION
9
+ spec.authors = ["Michael Klein"]
10
+ spec.email = ["mbklein@gmail.com"]
11
+ spec.description = %q{Simple migrations for Hydra objects}
12
+ spec.summary = %q{Simple migrations for Hydra objects}
13
+ spec.homepage = ""
14
+ spec.license = "Apache 2"
15
+
16
+ spec.files = `git ls-files`.split($/)
17
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
+ spec.require_paths = ["lib"]
20
+
21
+ spec.add_dependency 'active-fedora'
22
+ spec.add_development_dependency "bundler", "~> 1.3"
23
+ spec.add_development_dependency "rake"
24
+ spec.add_development_dependency "rspec"
25
+ spec.add_development_dependency "simplecov"
26
+ end
@@ -0,0 +1,37 @@
1
+ require 'active_fedora'
2
+
3
+ module Hydra
4
+ module Datastream
5
+ class MigrationInfo < ActiveFedora::OmDatastream
6
+ set_terminology do |t|
7
+ t.root(:path=>"migrationInfo", :xmlns=>"http://hydra-collab.stanford.edu/schemas/migrationInfo/v1", :namespace_prefix=>nil)
8
+ t.current
9
+ t.history do
10
+ t.migration do
11
+ t.from(:path=>'@from')
12
+ t.to(:path=>'@to')
13
+ t.at(:path=>'@at')
14
+ end
15
+ end
16
+ end
17
+
18
+ def self.xml_template
19
+ builder = Nokogiri::XML::Builder.new do |xml|
20
+ xml.migrationInfo(:xmlns=>"http://hydra-collab.stanford.edu/schemas/migrationInfo/v1") {
21
+ xml.current
22
+ xml.history
23
+ }
24
+ end
25
+ builder.doc
26
+ end
27
+
28
+ define_template :migration do |xml, from, to, at=Time.now|
29
+ xml.migration :from=>from, :to=>to, :at=>at
30
+ end
31
+
32
+ def migrate(to)
33
+ add_child_node(find_by_terms(:history), :migration, current.first.to_s, to, Time.now)
34
+ end
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,11 @@
1
+ require "hydra/datastream/migration_info"
2
+ require "hydra/migrate/version"
3
+ require "hydra/migrate/dispatcher"
4
+ require "hydra/migrate/migration"
5
+ require "hydra/model_mixins/migratable"
6
+ require 'hydra/migrate/engine' if defined?(Rails)
7
+
8
+ module Hydra
9
+ module Migrate
10
+ end
11
+ end
@@ -0,0 +1,53 @@
1
+ module Hydra
2
+ module Migrate
3
+ class Dispatcher
4
+ def migrations
5
+ @migrations || reset!
6
+ end
7
+ protected :migrations
8
+
9
+ def reset!
10
+ @migrations ||= Hash.new { |h,k| h[k] = [] }
11
+ end
12
+
13
+ def load_migrations(path)
14
+ Dir[File.join(path,'**','*.rb')].each { |migration_file|
15
+ existing_migrations = ObjectSpace.each_object(Hydra::Migrate::Migration).to_a
16
+ load(migration_file)
17
+ new_migrations = ObjectSpace.each_object(Hydra::Migrate::Migration).to_a - existing_migrations
18
+ new_migrations.each { |klass| klass.new(self) }
19
+ }
20
+ end
21
+
22
+ def define_migration(signature={}, block)
23
+ self.migrations[signature[:for]] << { :from=>signature[:from].to_s, :to=>signature[:to].to_s, :block=>block }
24
+ end
25
+
26
+ def migrations_for(target, constraints={})
27
+ raise "Not a migratable object: #{target.inspect}" unless target.is_a?(Hydra::ModelMixins::Migratable)
28
+ if self.migrations.has_key?(target.class)
29
+ migrations[target.class].select { |v|
30
+ v[:from].to_s == constraints[:from].to_s and (constraints[:to].nil? or v[:to].to_s == constraints[:to].to_s)
31
+ }
32
+ else
33
+ return []
34
+ end
35
+ end
36
+
37
+ def can_migrate?(object, constraints={})
38
+ object.is_a?(Hydra::ModelMixins::Migratable) and not migrations_for(object, {:from=>object.current_migration}.merge(constraints)).empty?
39
+ end
40
+
41
+ def migrate!(object, to=nil, opts={})
42
+ raise "Not a migratable object: #{object.inspect}" unless object.is_a?(Hydra::ModelMixins::Migratable)
43
+ migrations_for(object, :from=>object.current_migration, :to=>to).each do |migration|
44
+ migration[:block].call(object, to, self)
45
+ object.migrationInfo.migrate(migration[:to])
46
+ object.current_migration = migration[:to]
47
+ object.save unless opts[:dry_run]
48
+ end
49
+ object
50
+ end
51
+ end
52
+ end
53
+ end
@@ -0,0 +1,13 @@
1
+ module Hydra
2
+ module Migrate
3
+ class Engine < Rails::Engine
4
+ # Load rake tasks
5
+ rake_tasks do
6
+ task_spec = File.join(File.expand_path('../..',File.dirname(__FILE__)),'railties', '*.rake')
7
+ Dir.glob(task_spec).each do |railtie|
8
+ load railtie
9
+ end
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,36 @@
1
+ module Hydra
2
+ module Migrate
3
+ class Migration
4
+ class << self
5
+ def actions
6
+ @actions ||= []
7
+ end
8
+
9
+ def migrates klass
10
+ unless klass.is_a?(Class) and klass.ancestors.include?(Hydra::ModelMixins::Migratable)
11
+ raise TypeError, "Unknown migratable class: #{klass.to_s}"
12
+ end
13
+ @target_class = klass
14
+ end
15
+
16
+ def target_class
17
+ return @target_class if @target_class
18
+ klass = Module.const_get(self.name.sub(/Migration$/,'').to_sym)
19
+ migrates klass
20
+ end
21
+
22
+ def migrate opts={}, &block
23
+ unless opts.is_a?(Hash) and opts.length == 1
24
+ raise ArgumentError, "migrate <from_version> => <to_version>"
25
+ end
26
+
27
+ actions << [{:for=>target_class, :from=>opts.keys.first, :to=>opts.values.first}, block]
28
+ end
29
+ end
30
+
31
+ def initialize(migrator)
32
+ self.class.actions.each { |action| migrator.define_migration(*action) }
33
+ end
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,5 @@
1
+ module Hydra
2
+ module Migrate
3
+ VERSION = "0.0.1"
4
+ end
5
+ end
@@ -0,0 +1,12 @@
1
+ module Hydra
2
+ module ModelMixins
3
+ module Migratable
4
+ extend ActiveSupport::Concern
5
+
6
+ included do
7
+ has_metadata :name=>"migrationInfo", :type=>Hydra::Datastream::MigrationInfo, :autocreate=>true
8
+ delegate :current_migration, :to=>:migrationInfo, :at=>[:current], :unique=>true
9
+ end
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,17 @@
1
+ namespace :hydra do
2
+ desc "Run ActiveFedora model migrations"
3
+ task :migrate, [:models] => :environment do |t,args|
4
+ migrator = Hydra::Migrate::Dispatcher.new
5
+ migrator.load_migrations(File.join(Rails.root,'db/hydra'))
6
+ models = (args[:models] || 'ActiveFedora::Base').split(/[,;\s]+/)
7
+ models.each do |model|
8
+ klass = model.split(/::/).inject(Module) { |k,c| k.const_find(c.to_sym) }
9
+ klass.find(:all).each do |obj|
10
+ while migrator.can_migrate? obj
11
+ $stderr.puts "Migrating #{obj.class} #{obj.pid} from #{obj.current_migration.inspect} to #{version.inspect}"
12
+ migrator.migrate! obj
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,9 @@
1
+ class TestClassMigration < Hydra::Migrate::Migration
2
+ migrate(nil => 1) { |obj,version,migrator|
3
+ obj.myMetadata.migrated = 'yep'
4
+ }
5
+
6
+ migrate(1 => 2) { |obj,version,migrator|
7
+ obj.myMetadata.migrated = obj.myMetadata.migrated.first + ', YEP!'
8
+ }
9
+ end
@@ -0,0 +1,16 @@
1
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
2
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
3
+
4
+ ENV["RAILS_ENV"] ||= "test"
5
+
6
+ require 'bundler/setup'
7
+ require 'rspec'
8
+ require 'rspec/autorun'
9
+
10
+ begin
11
+ require 'simplecov'
12
+ SimpleCov.start
13
+ rescue LoadError
14
+ end
15
+
16
+ require 'hydra/migrate'
@@ -0,0 +1,19 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
+
3
+ describe Hydra::ModelMixins::Migratable do
4
+ before :all do
5
+ class TestClass < ActiveFedora::Base
6
+ include Hydra::ModelMixins::Migratable
7
+ end
8
+ end
9
+
10
+ after :all do
11
+ Object.send(:remove_const, :TestClass)
12
+ end
13
+
14
+ subject {TestClass.new}
15
+
16
+ it "should have a migrationInfo datastream" do
17
+ subject.datastreams['migrationInfo'].should be_a(Hydra::Datastream::MigrationInfo)
18
+ end
19
+ end
@@ -0,0 +1,119 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
+
3
+ describe Hydra::Migrate do
4
+ before :all do
5
+ class TestClass < ActiveFedora::Base
6
+ include Hydra::ModelMixins::Migratable
7
+ has_metadata name: 'myMetadata', :type => ActiveFedora::SimpleDatastream do |d|
8
+ d.field :migrated, :string
9
+ end
10
+
11
+ def save
12
+ true
13
+ end
14
+ end
15
+ end
16
+
17
+ after :each do
18
+ # Undefine all migration classes
19
+ ObjectSpace.each_object(Hydra::Migrate::Migration).to_a.collect { |obj|
20
+ obj.class.name.to_sym
21
+ }.uniq.each { |klass|
22
+ begin
23
+ Object.send(:remove_const, klass)
24
+ rescue NameError
25
+ end
26
+ }
27
+ end
28
+
29
+ after :all do
30
+ Object.send(:remove_const, :TestClass)
31
+ end
32
+
33
+ let!(:migrator) {Hydra::Migrate::Dispatcher.new}
34
+ subject {TestClass.new}
35
+
36
+ describe "no migrations defined" do
37
+ it "should have a nil migration version" do
38
+ expect(subject.current_migration).to be_blank
39
+ end
40
+
41
+ it "should not be able to migrate" do
42
+ expect(migrator.can_migrate?(subject)).to be_false
43
+ end
44
+ end
45
+
46
+ describe "TestClassMigration" do
47
+ before :each do
48
+ migrator.load_migrations(File.expand_path('../../fixtures/db',__FILE__))
49
+ end
50
+
51
+ before :each do
52
+ @migration = TestClassMigration.new(migrator)
53
+ end
54
+
55
+ it "should target the right class" do
56
+ TestClassMigration.target_class.should eq(TestClass)
57
+ end
58
+
59
+ it "should be able to migrate" do
60
+ expect(subject.current_migration).to be_blank
61
+ expect(subject.myMetadata.migrated).to be_blank
62
+ expect(migrator.can_migrate?(subject)).to be_true
63
+ expect(migrator.can_migrate?(subject, :to=>1)).to be_true
64
+ expect(migrator.can_migrate?(subject, :to=>2)).to be_false
65
+ end
66
+
67
+ describe "migrate" do
68
+ it "should perform migrations" do
69
+ migrator.migrate!(subject)
70
+ expect(subject.myMetadata.migrated).to eq(['yep'])
71
+ expect(subject.current_migration).to eq('1')
72
+
73
+ migrator.migrate!(subject)
74
+ expect(subject.myMetadata.migrated).to eq(['yep, YEP!'])
75
+ expect(subject.current_migration).to eq('2')
76
+ end
77
+ end
78
+ end
79
+
80
+ describe "ExplicitTestClassMigration" do
81
+ before :all do
82
+ class ExplicitTestClassMigration < Hydra::Migrate::Migration
83
+ migrates TestClass
84
+ end
85
+ end
86
+
87
+ after :all do
88
+ Object.send(:remove_const, :ExplicitTestClassMigration)
89
+ end
90
+
91
+ it "should target the right class" do
92
+ expect(ExplicitTestClassMigration.target_class).to eq(TestClass)
93
+ end
94
+ end
95
+
96
+ describe "IncorrectTestClassMigration" do
97
+ after :each do
98
+ Object.send(:remove_const, :IncorrectTestClassMigration)
99
+ end
100
+
101
+ it "should require a migratable class" do
102
+ expect(lambda {
103
+ class IncorrectTestClassMigration < Hydra::Migrate::Migration
104
+ migrates Object
105
+ end
106
+ }).to raise_error(TypeError)
107
+ end
108
+
109
+ it "should require a correctly-formed migration spec" do
110
+ class IncorrectTestClassMigration < Hydra::Migrate::Migration
111
+ migrates TestClass
112
+ end
113
+ expect { IncorrectTestClassMigration.migrate { } }.to raise_error(ArgumentError)
114
+ expect { IncorrectTestClassMigration.migrate(2) { } }.to raise_error(ArgumentError)
115
+ expect { IncorrectTestClassMigration.migrate(1=>2) { } }.not_to raise_error()
116
+ expect { IncorrectTestClassMigration.migrate(1=>2,2=>3) { } }.to raise_error(ArgumentError)
117
+ end
118
+ end
119
+ end
metadata ADDED
@@ -0,0 +1,152 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: hydra-migrate
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Michael Klein
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2013-08-20 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: active-fedora
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '0'
30
+ - !ruby/object:Gem::Dependency
31
+ name: bundler
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ~>
36
+ - !ruby/object:Gem::Version
37
+ version: '1.3'
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: '1.3'
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: rspec
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: simplecov
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
+ description: Simple migrations for Hydra objects
95
+ email:
96
+ - mbklein@gmail.com
97
+ executables: []
98
+ extensions: []
99
+ extra_rdoc_files: []
100
+ files:
101
+ - .gitignore
102
+ - .rspec
103
+ - .travis.yml
104
+ - CONTRIBUTING.md
105
+ - Gemfile
106
+ - LICENSE.txt
107
+ - README.md
108
+ - Rakefile
109
+ - hydra-migrate.gemspec
110
+ - lib/hydra/datastream/migration_info.rb
111
+ - lib/hydra/migrate.rb
112
+ - lib/hydra/migrate/dispatcher.rb
113
+ - lib/hydra/migrate/engine.rb
114
+ - lib/hydra/migrate/migration.rb
115
+ - lib/hydra/migrate/version.rb
116
+ - lib/hydra/model_mixins/migratable.rb
117
+ - lib/railties/hydra-migrate.rake
118
+ - spec/fixtures/db/hydra/test_class_migration.rb
119
+ - spec/spec_helper.rb
120
+ - spec/unit/migratable_spec.rb
121
+ - spec/unit/migrate_spec.rb
122
+ homepage: ''
123
+ licenses:
124
+ - Apache 2
125
+ post_install_message:
126
+ rdoc_options: []
127
+ require_paths:
128
+ - lib
129
+ required_ruby_version: !ruby/object:Gem::Requirement
130
+ none: false
131
+ requirements:
132
+ - - ! '>='
133
+ - !ruby/object:Gem::Version
134
+ version: '0'
135
+ required_rubygems_version: !ruby/object:Gem::Requirement
136
+ none: false
137
+ requirements:
138
+ - - ! '>='
139
+ - !ruby/object:Gem::Version
140
+ version: '0'
141
+ requirements: []
142
+ rubyforge_project:
143
+ rubygems_version: 1.8.23
144
+ signing_key:
145
+ specification_version: 3
146
+ summary: Simple migrations for Hydra objects
147
+ test_files:
148
+ - spec/fixtures/db/hydra/test_class_migration.rb
149
+ - spec/spec_helper.rb
150
+ - spec/unit/migratable_spec.rb
151
+ - spec/unit/migrate_spec.rb
152
+ has_rdoc: