delivery_center 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 45152e885540e4eff7d90f7401c0443e9375fe82
4
+ data.tar.gz: 5797ce2d4084413599c93c0fdf098f8e6acf844a
5
+ SHA512:
6
+ metadata.gz: 78095d1fd1b554ebd4c9907ebce01b938fbc303a67e5ff0605caa8d94e89620292716b02a6cc5929d40b671c34e01cb299b5b13de6e32e58b1ef22ffdb6b25b0
7
+ data.tar.gz: 4d581ac2e26e8919c32c1eaa600ecaf2135ca6a5a8954a11251e4480952989dee1c53158ae73268fa25e33f72cad41d62b306a6d149853a2cf349de102542255
data/.gitignore ADDED
@@ -0,0 +1,10 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /Gemfile.lock
4
+ /_yardoc/
5
+ /coverage/
6
+ /doc/
7
+ /pkg/
8
+ /spec/reports/
9
+ /tmp/
10
+ .envrc
data/.travis.yml ADDED
@@ -0,0 +1,19 @@
1
+ sudo: false
2
+ language: ruby
3
+ rvm:
4
+ - 2.3.3
5
+ env:
6
+ - DELIVERY_CENTER_DATABASE_USERNAME=travis DELIVERY_CENTER_DATABASE_DATABASE=myapp_test
7
+ services:
8
+ - mysql
9
+ before_script:
10
+ - bundle exec ./exe/delivery_center db create
11
+ - bundle exec ./exe/delivery_center db migrate
12
+ script:
13
+ - bundle exec rspec
14
+ deploy:
15
+ api_key:
16
+ secure: APbt3PruFSNF8l6SsRsdA6spgg8/zlOPcWT5AlMTzYvArTP52qVwBg6l53VPS0o4Blbx534ZvSCg5r/PbjjaKZY1DJGHk6EUCIunzM09wDbTLj4fh37nQGozZYB7EONs8eyedVqN5VxF2fHozR/nByTIZ9Yh4DGshyc0rKK8ObwH1JEaTtzT/Usxen3xMWC9Xee6SyBalSicbZDn8LjxnUcqfzLuOJ8rVJSFClPtwPSM8nFhkI4Qp78GwWVtOlZMoF4hzKSt3MkNy3tx7O5CKnW+o0uBrOW2k2G3Gkz8buw2ehd80OBqUKrPLs9a9bzB1G0IDpjTFLUq3HrJLFwT3oxst0pgGjDkPOlv/KngeUzJNOBvwQN8F4wLsmQdhjlMGYRxvJShtnOoGrkLDYrRZzrt8RaAFtRUNv7qFhK+C/2PoQbc4+w/QY4+ETWwoHuxgHxEDKwO4yQsHxHzm8bFkYpwufTSKgSWJdFelEI+Dq9MWD6TKnpFiwbsTrxYZq0v3B1wV3qpU8Vbxw5n/ABaFkhToAnb2XEUfvafxvg4/RycMpH5fPKA7vu4yP9ZEBoub5qnOev3ENkU7k6qcwyMAgNjy+A0f8zV53TlVOPXnEnQw+2i3Qco5f3fPBptTIEOm4Hn5YkaJ5ryS7nPQ4dI4O4EcavLnOOq8ffjOWQFBUY=
17
+ provider: rubygems
18
+ on:
19
+ tags: true
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in delivery_center.gemspec
4
+ gemspec
data/README.md ADDED
@@ -0,0 +1,36 @@
1
+ # DeliveryCenter
2
+
3
+ Welcome to your new gem! In this directory, you'll find the files you need to be able to package up your Ruby library into a gem. Put your Ruby code in the file `lib/delivery_center`. To experiment with that code, run `bin/console` for an interactive prompt.
4
+
5
+ TODO: Delete this and the text above, and describe your gem
6
+
7
+ ## Installation
8
+
9
+ Add this line to your application's Gemfile:
10
+
11
+ ```ruby
12
+ gem 'delivery_center'
13
+ ```
14
+
15
+ And then execute:
16
+
17
+ $ bundle
18
+
19
+ Or install it yourself as:
20
+
21
+ $ gem install delivery_center
22
+
23
+ ## Usage
24
+
25
+ TODO: Write usage instructions here
26
+
27
+ ## Development
28
+
29
+ After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake test` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
30
+
31
+ To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
32
+
33
+ ## Contributing
34
+
35
+ Bug reports and pull requests are welcome on GitHub at https://github.com/[USERNAME]/delivery_center.
36
+
data/Rakefile ADDED
@@ -0,0 +1,10 @@
1
+ require "bundler/gem_tasks"
2
+ require "rake/testtask"
3
+
4
+ Rake::TestTask.new(:test) do |t|
5
+ t.libs << "test"
6
+ t.libs << "lib"
7
+ t.test_files = FileList['test/**/*_test.rb']
8
+ end
9
+
10
+ task :default => :test
data/bin/console ADDED
@@ -0,0 +1,11 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "bundler/setup"
4
+ require "delivery_center"
5
+
6
+ # You can add fixtures and/or initialization code here to make experimenting
7
+ # with your gem easier. You can also use a different console, if you like.
8
+
9
+ # (If you use this, don't forget to add pry to your Gemfile!)
10
+ require "pry"
11
+ Pry.start
data/bin/setup ADDED
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+ IFS=$'\n\t'
4
+ set -vx
5
+
6
+ bundle install
7
+
8
+ # Do any other automated setup that you need to do here
@@ -0,0 +1,38 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'delivery_center/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "delivery_center"
8
+ spec.version = DeliveryCenter::VERSION
9
+ spec.authors = ["Takatoshi Maeda", 'tokubai']
10
+ spec.email = ["me@tmd.tw", "developers@tokubai.co.jp"]
11
+
12
+ spec.summary = %q{deploy management tool}
13
+ spec.description = %q{deploy management tool}
14
+ spec.homepage = "https://github.com/tokubai/delivery_center"
15
+
16
+ spec.files = `git ls-files -z`.split("\x0").reject do |f|
17
+ f.match(%r{^(test|spec|features)/})
18
+ end
19
+ spec.bindir = "exe"
20
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
21
+ spec.require_paths = ["lib"]
22
+
23
+ spec.add_dependency "thor"
24
+ spec.add_dependency "sinatra"
25
+ spec.add_dependency "sinatra-contrib"
26
+ spec.add_dependency "activerecord"
27
+ spec.add_dependency "mysql2"
28
+ spec.add_dependency "ridgepole"
29
+
30
+ spec.add_development_dependency "bundler", "~> 1.13"
31
+ spec.add_development_dependency "rake", "~> 10.0"
32
+ spec.add_development_dependency "rspec", "~> 3.6.0"
33
+ spec.add_development_dependency "pry"
34
+ spec.add_development_dependency "rack-test"
35
+ spec.add_development_dependency "rspec-json_matcher"
36
+ spec.add_development_dependency "factory_girl"
37
+ spec.add_development_dependency "database_rewinder"
38
+ end
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'delivery_center'
4
+
5
+ DeliveryCenter::Cli.start(ARGV)
@@ -0,0 +1,65 @@
1
+ require 'sinatra/base'
2
+ require 'sinatra/reloader'
3
+ require 'sinatra/json'
4
+
5
+ class DeliveryCenter::App < Sinatra::Base
6
+ register Sinatra::Reloader if ENV['RACK_ENV'] == 'development'
7
+
8
+ not_found do
9
+ 'not found'
10
+ end
11
+
12
+ get '/applications.json' do
13
+ applications = DeliveryCenter::Application.all
14
+ applications = applications.where("name LIKE '%#{params[:name]}%'") unless params[:name].nil?
15
+ json applications
16
+ end
17
+
18
+ post '/applications.json' do
19
+ json DeliveryCenter::Application.find_or_create_by(name: params[:name])
20
+ end
21
+
22
+ get '/:name.json' do
23
+ json find_application
24
+ end
25
+
26
+ post '/:name/deploy.json' do
27
+ begin
28
+ json find_application.deploy!
29
+ rescue DeliveryCenter::AlreadyDeployedError => e
30
+ json({ error_code: e.code, message: 'already deployment latest revision' })
31
+ end
32
+ end
33
+
34
+ post '/:name/rollback.json' do
35
+ begin
36
+ json find_application.rollback!
37
+ rescue DeliveryCenter::PreviousDeployNotExistError => e
38
+ json({ error_code: e.code, message: 'not found previous revision' })
39
+ end
40
+ end
41
+
42
+ get '/:name/revisions.json' do
43
+ json find_application.revisions.order(id: :desc)
44
+ end
45
+
46
+ post '/:name/revisions.json' do
47
+ json find_application.revisions.find_or_create_by!(value: params[:revision])
48
+ end
49
+
50
+ get '/:name/revisions/current' do
51
+ find_application.current_revision.value
52
+ end
53
+
54
+ get '/:name/revisions/current.json' do
55
+ json find_application.current_revision
56
+ end
57
+
58
+ private
59
+
60
+ def find_application
61
+ application = DeliveryCenter::Application.find_by(name: params[:name])
62
+ raise Sinatra::NotFound if application.nil?
63
+ application
64
+ end
65
+ end
@@ -0,0 +1,3 @@
1
+ class DeliveryCenter::ApplicationRecord < ActiveRecord::Base
2
+ self.abstract_class = true
3
+ end
@@ -0,0 +1,41 @@
1
+ require 'ridgepole'
2
+
3
+ class DeliveryCenter::Cli::Database < Thor
4
+ namespace 'db'
5
+
6
+ desc 'migrate', 'migrate delivery center database schema'
7
+ option 'apply', desc: 'apply', default: false, aliases: 'a', type: :boolean
8
+ def migrate
9
+ ridgepole.diff(schemafile.read, path: schemafile.to_s).migrate
10
+ end
11
+
12
+ desc 'create', 'create delivery center database'
13
+ def create
14
+ ActiveRecord::Base.clear_all_connections!
15
+ ActiveRecord::Base.establish_connection(DeliveryCenter.database_config(excludes: [:database]))
16
+ ActiveRecord::Base.connection.create_database(DeliveryCenter.database_config[:database])
17
+ DeliveryCenter.logger.info("create #{DeliveryCenter.database_config[:database]} database.")
18
+ end
19
+
20
+ desc 'drop', 'drop delivery center database'
21
+ def drop
22
+ ActiveRecord::Base.clear_all_connections!
23
+ ActiveRecord::Base.establish_connection(DeliveryCenter.database_config(excludes: [:database]))
24
+ ActiveRecord::Base.connection.drop_database(DeliveryCenter.database_config[:database])
25
+ DeliveryCenter.logger.info("drop #{DeliveryCenter.database_config[:database]} database.")
26
+ end
27
+
28
+ private
29
+
30
+ def ridgepole
31
+ @ridgepole ||= Ridgepole::Client.new(
32
+ DeliveryCenter.database_config,
33
+ dry_run: !options[:apply],
34
+ debug: false,
35
+ )
36
+ end
37
+
38
+ def schemafile
39
+ DeliveryCenter.root.join('schema', 'Schemafile')
40
+ end
41
+ end
@@ -0,0 +1,15 @@
1
+ require 'thor'
2
+
3
+ class DeliveryCenter::Cli < Thor
4
+ require 'delivery_center/cli/database'
5
+
6
+ desc 'db SUBCOMMAND ...ARGS', 'manage db'
7
+ subcommand 'db', DeliveryCenter::Cli::Database
8
+
9
+ desc 'server', 'run delivery center web application'
10
+ option 'port', desc: 'listen port', default: 8080, aliases: 'p', type: :numeric
11
+ option 'address', desc: 'listen address', default: 'localhost', aliases: 'b', type: :string
12
+ def server
13
+ DeliveryCenter::App.run!(options)
14
+ end
15
+ end
@@ -0,0 +1,13 @@
1
+ module DeliveryCenter
2
+ class AlreadyDeployedError < StandardError
3
+ def code
4
+ 1
5
+ end
6
+ end
7
+
8
+ class PreviousDeployNotExistError < StandardError
9
+ def code
10
+ 2
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,3 @@
1
+ class DeliveryCenter::ApiKey < DeliveryCenter::ApplicationRecord
2
+
3
+ end
@@ -0,0 +1,46 @@
1
+ require 'delivery_center/errors'
2
+
3
+ class DeliveryCenter::Application < DeliveryCenter::ApplicationRecord
4
+ has_many :revisions, class_name: 'DeliveryCenter::Revision'
5
+ has_many :deploys, class_name: 'DeliveryCenter::Deploy'
6
+
7
+ def can_deploy?
8
+ current_revision != recent_revision
9
+ end
10
+
11
+ def deploy!
12
+ self.class.transaction do
13
+ raise DeliveryCenter::AlreadyDeployedError unless can_deploy?
14
+ deploy = deploys.find_or_create_by!(revision: recent_revision)
15
+ deploy.mark_current!
16
+ deploys.reload # invalidate older current status has object cache
17
+ deploy
18
+ end
19
+ end
20
+
21
+ def can_rollback?
22
+ current = deploys.find_by(current: true)
23
+ return false if current.nil?
24
+ deploys.where('id < :current_id', current_id: current.id).order(id: :desc).exists?
25
+ end
26
+
27
+ def rollback!
28
+ self.class.transaction do
29
+ current = deploys.find_by(current: true)
30
+ raise DeliveryCenter::PreviousDeployNotExistError if current.nil?
31
+ previous = deploys.where('id < :current_id', current_id: current.id).order(id: :desc).first
32
+ raise DeliveryCenter::PreviousDeployNotExistError if previous.nil?
33
+ previous.mark_current!
34
+ deploys.reload # invalidate older current status has object cache
35
+ previous
36
+ end
37
+ end
38
+
39
+ def current_revision
40
+ deploys.find_by(current: true)&.revision
41
+ end
42
+
43
+ def recent_revision
44
+ revisions.last
45
+ end
46
+ end
@@ -0,0 +1,12 @@
1
+ class DeliveryCenter::Deploy < DeliveryCenter::ApplicationRecord
2
+ belongs_to :application, class_name: 'DeliveryCenter::Application'
3
+ belongs_to :revision, class_name: 'DeliveryCenter::Revision'
4
+
5
+ def mark_current!
6
+ self.class.transaction do
7
+ self.class.where(application_id: application_id).update_all(current: false)
8
+ self.current = true
9
+ self.save!
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,3 @@
1
+ class DeliveryCenter::Revision < DeliveryCenter::ApplicationRecord
2
+
3
+ end
@@ -0,0 +1,7 @@
1
+ require 'delivery_center/application_record'
2
+
3
+ Dir.glob(DeliveryCenter.root.join('models', '*.rb')).each do |f|
4
+ require f
5
+ end
6
+
7
+ ActiveRecord::Base.establish_connection(DeliveryCenter.database_config)
@@ -0,0 +1,3 @@
1
+ Dir.glob(File.join(__dir__, '*.rb')).each do |f|
2
+ require f
3
+ end
@@ -0,0 +1,6 @@
1
+ create_table "api_keys", unsigned: true, force: :cascade do |t|
2
+ t.string :title, null: false
3
+ t.string :description, null: false
4
+ t.string :value, null: false
5
+ t.timestamps
6
+ end
@@ -0,0 +1,6 @@
1
+ create_table "applications", unsigned: true, force: :cascade do |t|
2
+ t.string :name, null: false
3
+ t.timestamps
4
+ end
5
+
6
+ add_index "applications", ["name"], name: "idx_name", unique: true, using: :btree
@@ -0,0 +1,6 @@
1
+ create_table "deploys", unsigned: true, force: :cascade do |t|
2
+ t.integer :application_id, null: false
3
+ t.integer :revision_id, null: false
4
+ t.boolean :current, default: false
5
+ t.timestamps
6
+ end
@@ -0,0 +1,7 @@
1
+ create_table "revisions", unsigned: true, force: :cascade do |t|
2
+ t.integer :application_id, null: false
3
+ t.string :value, null: false
4
+ t.timestamps
5
+ end
6
+
7
+ add_index "revisions", ["application_id", "value"], name: "idx_application_id_value", unique: true, using: :btree
@@ -0,0 +1,3 @@
1
+ module DeliveryCenter
2
+ VERSION = "0.1.2"
3
+ end
@@ -0,0 +1,44 @@
1
+ require 'active_record'
2
+
3
+ module DeliveryCenter
4
+ def self.logger
5
+ @logger ||= Logger.new(STDOUT)
6
+ end
7
+
8
+ def self.root
9
+ Pathname.new(File.join(__dir__, 'delivery_center'))
10
+ end
11
+
12
+ def self.database_config(excludes: [])
13
+ config = _database_config
14
+ excludes.each { |key| config.delete(key) }
15
+ config
16
+ end
17
+
18
+ def self._database_config
19
+ if ENV['RACK_ENV'] == 'test'
20
+ {
21
+ adapter: 'mysql2',
22
+ username: ENV['DELIVERY_CENTER_DATABASE_USERNAME'],
23
+ password: ENV['DELIVERY_CENTER_DATABASE_PASSWORD'],
24
+ database: ENV['DELIVERY_CENTER_DATABASE_DATABASE'] || 'delivery_center_test',
25
+ host: ENV['DELIVERY_CENTER_DATABASE_HOST'],
26
+ port: ENV['DELIVERY_CENTER_DATABASE_PORT'],
27
+ }
28
+ else
29
+ {
30
+ adapter: 'mysql2',
31
+ username: ENV['DELIVERY_CENTER_DATABASE_USERNAME'],
32
+ password: ENV['DELIVERY_CENTER_DATABASE_PASSWORD'],
33
+ database: ENV['DELIVERY_CENTER_DATABASE_DATABASE'] || 'delivery_center',
34
+ host: ENV['DELIVERY_CENTER_DATABASE_HOST'],
35
+ port: ENV['DELIVERY_CENTER_DATABASE_PORT'],
36
+ }
37
+ end
38
+ end
39
+
40
+ require 'delivery_center/app'
41
+ require 'delivery_center/cli'
42
+ require 'delivery_center/models'
43
+ require "delivery_center/version"
44
+ end
metadata ADDED
@@ -0,0 +1,268 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: delivery_center
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.2
5
+ platform: ruby
6
+ authors:
7
+ - Takatoshi Maeda
8
+ - tokubai
9
+ autorequire:
10
+ bindir: exe
11
+ cert_chain: []
12
+ date: 2017-07-05 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: thor
16
+ requirement: !ruby/object:Gem::Requirement
17
+ requirements:
18
+ - - ">="
19
+ - !ruby/object:Gem::Version
20
+ version: '0'
21
+ type: :runtime
22
+ prerelease: false
23
+ version_requirements: !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - ">="
26
+ - !ruby/object:Gem::Version
27
+ version: '0'
28
+ - !ruby/object:Gem::Dependency
29
+ name: sinatra
30
+ requirement: !ruby/object:Gem::Requirement
31
+ requirements:
32
+ - - ">="
33
+ - !ruby/object:Gem::Version
34
+ version: '0'
35
+ type: :runtime
36
+ prerelease: false
37
+ version_requirements: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - ">="
40
+ - !ruby/object:Gem::Version
41
+ version: '0'
42
+ - !ruby/object:Gem::Dependency
43
+ name: sinatra-contrib
44
+ requirement: !ruby/object:Gem::Requirement
45
+ requirements:
46
+ - - ">="
47
+ - !ruby/object:Gem::Version
48
+ version: '0'
49
+ type: :runtime
50
+ prerelease: false
51
+ version_requirements: !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - ">="
54
+ - !ruby/object:Gem::Version
55
+ version: '0'
56
+ - !ruby/object:Gem::Dependency
57
+ name: activerecord
58
+ requirement: !ruby/object:Gem::Requirement
59
+ requirements:
60
+ - - ">="
61
+ - !ruby/object:Gem::Version
62
+ version: '0'
63
+ type: :runtime
64
+ prerelease: false
65
+ version_requirements: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - ">="
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
70
+ - !ruby/object:Gem::Dependency
71
+ name: mysql2
72
+ requirement: !ruby/object:Gem::Requirement
73
+ requirements:
74
+ - - ">="
75
+ - !ruby/object:Gem::Version
76
+ version: '0'
77
+ type: :runtime
78
+ prerelease: false
79
+ version_requirements: !ruby/object:Gem::Requirement
80
+ requirements:
81
+ - - ">="
82
+ - !ruby/object:Gem::Version
83
+ version: '0'
84
+ - !ruby/object:Gem::Dependency
85
+ name: ridgepole
86
+ requirement: !ruby/object:Gem::Requirement
87
+ requirements:
88
+ - - ">="
89
+ - !ruby/object:Gem::Version
90
+ version: '0'
91
+ type: :runtime
92
+ prerelease: false
93
+ version_requirements: !ruby/object:Gem::Requirement
94
+ requirements:
95
+ - - ">="
96
+ - !ruby/object:Gem::Version
97
+ version: '0'
98
+ - !ruby/object:Gem::Dependency
99
+ name: bundler
100
+ requirement: !ruby/object:Gem::Requirement
101
+ requirements:
102
+ - - "~>"
103
+ - !ruby/object:Gem::Version
104
+ version: '1.13'
105
+ type: :development
106
+ prerelease: false
107
+ version_requirements: !ruby/object:Gem::Requirement
108
+ requirements:
109
+ - - "~>"
110
+ - !ruby/object:Gem::Version
111
+ version: '1.13'
112
+ - !ruby/object:Gem::Dependency
113
+ name: rake
114
+ requirement: !ruby/object:Gem::Requirement
115
+ requirements:
116
+ - - "~>"
117
+ - !ruby/object:Gem::Version
118
+ version: '10.0'
119
+ type: :development
120
+ prerelease: false
121
+ version_requirements: !ruby/object:Gem::Requirement
122
+ requirements:
123
+ - - "~>"
124
+ - !ruby/object:Gem::Version
125
+ version: '10.0'
126
+ - !ruby/object:Gem::Dependency
127
+ name: rspec
128
+ requirement: !ruby/object:Gem::Requirement
129
+ requirements:
130
+ - - "~>"
131
+ - !ruby/object:Gem::Version
132
+ version: 3.6.0
133
+ type: :development
134
+ prerelease: false
135
+ version_requirements: !ruby/object:Gem::Requirement
136
+ requirements:
137
+ - - "~>"
138
+ - !ruby/object:Gem::Version
139
+ version: 3.6.0
140
+ - !ruby/object:Gem::Dependency
141
+ name: pry
142
+ requirement: !ruby/object:Gem::Requirement
143
+ requirements:
144
+ - - ">="
145
+ - !ruby/object:Gem::Version
146
+ version: '0'
147
+ type: :development
148
+ prerelease: false
149
+ version_requirements: !ruby/object:Gem::Requirement
150
+ requirements:
151
+ - - ">="
152
+ - !ruby/object:Gem::Version
153
+ version: '0'
154
+ - !ruby/object:Gem::Dependency
155
+ name: rack-test
156
+ requirement: !ruby/object:Gem::Requirement
157
+ requirements:
158
+ - - ">="
159
+ - !ruby/object:Gem::Version
160
+ version: '0'
161
+ type: :development
162
+ prerelease: false
163
+ version_requirements: !ruby/object:Gem::Requirement
164
+ requirements:
165
+ - - ">="
166
+ - !ruby/object:Gem::Version
167
+ version: '0'
168
+ - !ruby/object:Gem::Dependency
169
+ name: rspec-json_matcher
170
+ requirement: !ruby/object:Gem::Requirement
171
+ requirements:
172
+ - - ">="
173
+ - !ruby/object:Gem::Version
174
+ version: '0'
175
+ type: :development
176
+ prerelease: false
177
+ version_requirements: !ruby/object:Gem::Requirement
178
+ requirements:
179
+ - - ">="
180
+ - !ruby/object:Gem::Version
181
+ version: '0'
182
+ - !ruby/object:Gem::Dependency
183
+ name: factory_girl
184
+ requirement: !ruby/object:Gem::Requirement
185
+ requirements:
186
+ - - ">="
187
+ - !ruby/object:Gem::Version
188
+ version: '0'
189
+ type: :development
190
+ prerelease: false
191
+ version_requirements: !ruby/object:Gem::Requirement
192
+ requirements:
193
+ - - ">="
194
+ - !ruby/object:Gem::Version
195
+ version: '0'
196
+ - !ruby/object:Gem::Dependency
197
+ name: database_rewinder
198
+ requirement: !ruby/object:Gem::Requirement
199
+ requirements:
200
+ - - ">="
201
+ - !ruby/object:Gem::Version
202
+ version: '0'
203
+ type: :development
204
+ prerelease: false
205
+ version_requirements: !ruby/object:Gem::Requirement
206
+ requirements:
207
+ - - ">="
208
+ - !ruby/object:Gem::Version
209
+ version: '0'
210
+ description: deploy management tool
211
+ email:
212
+ - me@tmd.tw
213
+ - developers@tokubai.co.jp
214
+ executables:
215
+ - delivery_center
216
+ extensions: []
217
+ extra_rdoc_files: []
218
+ files:
219
+ - ".gitignore"
220
+ - ".travis.yml"
221
+ - Gemfile
222
+ - README.md
223
+ - Rakefile
224
+ - bin/console
225
+ - bin/setup
226
+ - delivery_center.gemspec
227
+ - exe/delivery_center
228
+ - lib/delivery_center.rb
229
+ - lib/delivery_center/app.rb
230
+ - lib/delivery_center/application_record.rb
231
+ - lib/delivery_center/cli.rb
232
+ - lib/delivery_center/cli/database.rb
233
+ - lib/delivery_center/errors.rb
234
+ - lib/delivery_center/models.rb
235
+ - lib/delivery_center/models/api_key.rb
236
+ - lib/delivery_center/models/application.rb
237
+ - lib/delivery_center/models/deploy.rb
238
+ - lib/delivery_center/models/revision.rb
239
+ - lib/delivery_center/schema/Schemafile
240
+ - lib/delivery_center/schema/api_keys.rb
241
+ - lib/delivery_center/schema/applications.rb
242
+ - lib/delivery_center/schema/deploys.rb
243
+ - lib/delivery_center/schema/revisions.rb
244
+ - lib/delivery_center/version.rb
245
+ homepage: https://github.com/tokubai/delivery_center
246
+ licenses: []
247
+ metadata: {}
248
+ post_install_message:
249
+ rdoc_options: []
250
+ require_paths:
251
+ - lib
252
+ required_ruby_version: !ruby/object:Gem::Requirement
253
+ requirements:
254
+ - - ">="
255
+ - !ruby/object:Gem::Version
256
+ version: '0'
257
+ required_rubygems_version: !ruby/object:Gem::Requirement
258
+ requirements:
259
+ - - ">="
260
+ - !ruby/object:Gem::Version
261
+ version: '0'
262
+ requirements: []
263
+ rubyforge_project:
264
+ rubygems_version: 2.5.2
265
+ signing_key:
266
+ specification_version: 4
267
+ summary: deploy management tool
268
+ test_files: []