after_party 0.0.1 → 1.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.
- checksums.yaml +7 -0
- data/lib/after_party.rb +7 -0
- data/lib/after_party/active_record.rb +1 -0
- data/lib/after_party/models/active_record/task_record.rb +8 -0
- data/lib/after_party/models/mongoid/task_record.rb +13 -0
- data/lib/after_party/models/task_recorder.rb +27 -0
- data/lib/after_party/mongoid.rb +1 -0
- data/lib/after_party/railtie.rb +22 -0
- data/lib/generators/install/USAGE +17 -0
- data/lib/generators/install/install_generator.rb +42 -0
- data/lib/generators/install/templates/after_party.rb +7 -0
- data/lib/generators/install/templates/migration.rb +7 -0
- data/lib/generators/task/USAGE +9 -0
- data/lib/generators/task/task_generator.rb +29 -0
- data/lib/generators/task/templates/deploy.rake +14 -0
- data/lib/tasks/deploy_task_runner.rake +13 -0
- metadata +24 -11
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: f1fc9b24b5cfb9e2f0e46f71e1122ee2ceb80e7f
|
4
|
+
data.tar.gz: 022ed0dff055749f8b7e52d408bb9139d8d0780a
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: e8f29fb1a2b000228c482ac6593939ceb8e957310e22aeddd9588d5cab051fd12af99b41f25cdfe7a8dac1dbc7c67366c67b0deb982438ebb1eca687a550d078
|
7
|
+
data.tar.gz: a40296c727981c5a40bc021b70999c24677f3b3620c4f42a83cd2cb99f22d112c6ab4b44ff8698f71f3032f4a6c8993bfab097677e4838ee70e18faf8e3c6f5c
|
data/lib/after_party.rb
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require "after_party/models/active_record/task_record.rb"
|
@@ -0,0 +1,27 @@
|
|
1
|
+
|
2
|
+
|
3
|
+
class TaskRecorder
|
4
|
+
include ActiveModel::Naming
|
5
|
+
attr_reader :filename, :timestamp, :task_name
|
6
|
+
|
7
|
+
FILE_MASK = File.join(Rails.root, "lib/tasks/deployment/*.rake")
|
8
|
+
|
9
|
+
def self.pending_files
|
10
|
+
Dir[FILE_MASK].collect{ |f| TaskRecorder.new(f) }.select{ |f| f.pending? }.sort{ |x,y| x.timestamp <=> y.timestamp }
|
11
|
+
end
|
12
|
+
|
13
|
+
def initialize(filename='')
|
14
|
+
@filename = filename
|
15
|
+
parse_filename
|
16
|
+
end
|
17
|
+
|
18
|
+
def pending?
|
19
|
+
timestamp && !TaskRecord.completed_task?(timestamp)
|
20
|
+
end
|
21
|
+
|
22
|
+
def parse_filename
|
23
|
+
/(\d+)_(.+)\.rake/.match(Pathname(@filename).basename.to_s)
|
24
|
+
@timestamp = $1
|
25
|
+
@task_name = $2
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
require "after_party/models/mongoid/task_record.rb"
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require 'after_party'
|
2
|
+
require 'after_party'
|
3
|
+
require 'rails'
|
4
|
+
module AfterParty
|
5
|
+
class Railtie < Rails::Railtie
|
6
|
+
#railtie is loaded from lib/after_party.rb. So all load paths need to be relative to /lib
|
7
|
+
rake_tasks do
|
8
|
+
load "tasks/deploy_task_runner.rake"
|
9
|
+
end
|
10
|
+
|
11
|
+
initializer "load_task_record_models" do
|
12
|
+
load "after_party/models/task_recorder.rb"
|
13
|
+
end
|
14
|
+
|
15
|
+
generators do
|
16
|
+
load "generators/task/task_generator.rb"
|
17
|
+
load "generators/install/install_generator.rb"
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
|
22
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
Description:
|
2
|
+
Generates the required files for after_party to generate and run deploy tasks
|
3
|
+
Accepts an optional parameter as the name of your ORM, default is "active_record", also accepts "mongoid"
|
4
|
+
|
5
|
+
Example:
|
6
|
+
rails generate after_party:install
|
7
|
+
|
8
|
+
This will create:
|
9
|
+
config/initializers/after_party.rb
|
10
|
+
db/migrate/{timestamp}_create_task_records.rb
|
11
|
+
|
12
|
+
Non-migrating ORMs:
|
13
|
+
rails generate after_party:install mongoid
|
14
|
+
|
15
|
+
This will create:
|
16
|
+
config/initializers/after_party.rb
|
17
|
+
|
@@ -0,0 +1,42 @@
|
|
1
|
+
require 'rails/generators'
|
2
|
+
|
3
|
+
module AfterParty
|
4
|
+
module Generators
|
5
|
+
|
6
|
+
class InstallGenerator < Rails::Generators::Base
|
7
|
+
source_root File.expand_path('../templates', __FILE__)
|
8
|
+
argument :orm_name, :type => :string, :default => "active_record"
|
9
|
+
|
10
|
+
def create_initializer_file
|
11
|
+
template "after_party.rb", "config/initializers/after_party.rb"
|
12
|
+
end
|
13
|
+
|
14
|
+
def copy_migration
|
15
|
+
if requires_migration?
|
16
|
+
template "migration.rb", "db/migrate/#{timestamp}_create_#{table_name}.rb"
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
private
|
21
|
+
def timestamp
|
22
|
+
@timestamp ||= Time.now.utc.strftime("%Y%m%d%H%M%S")
|
23
|
+
end
|
24
|
+
|
25
|
+
def migration_exists?
|
26
|
+
absolute = File.expand_path("db/migrate/", destination_root)
|
27
|
+
#dirname, file_name = File.dirname(absolute), File.basename(absolute).sub(/\.rb$/, '')
|
28
|
+
Dir.glob("#{absolute}/[0-9]*_create_#{table_name}.rb").first
|
29
|
+
end
|
30
|
+
|
31
|
+
def requires_migration?
|
32
|
+
orm_name == "active_record" && !migration_exists?
|
33
|
+
end
|
34
|
+
|
35
|
+
def table_name
|
36
|
+
table = "task_record"
|
37
|
+
ActiveRecord::Base.pluralize_table_names ? table.pluralize : table
|
38
|
+
end
|
39
|
+
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,7 @@
|
|
1
|
+
AfterParty.setup do |config|
|
2
|
+
# ==> ORM configuration
|
3
|
+
# Load and configure the ORM. Supports :active_record (default) and
|
4
|
+
# :mongoid (bson_ext recommended) by default. Other ORMs may be
|
5
|
+
# available as additional gems.
|
6
|
+
require "after_party/<%= orm_name %>.rb"
|
7
|
+
end
|
@@ -0,0 +1,9 @@
|
|
1
|
+
Description:
|
2
|
+
Generates a rake task that will be included at the end of the deployment task. An optional
|
3
|
+
second parameter with the task description is recommended.
|
4
|
+
|
5
|
+
Example:
|
6
|
+
rails generate deploy_task data_update
|
7
|
+
|
8
|
+
This will create:
|
9
|
+
lib/tasks/deployment/<timestamp>_data_update.rake
|
@@ -0,0 +1,29 @@
|
|
1
|
+
require 'date'
|
2
|
+
module AfterParty
|
3
|
+
module Generators
|
4
|
+
class TaskGenerator < Rails::Generators::NamedBase
|
5
|
+
source_root File.expand_path('../templates', __FILE__)
|
6
|
+
argument :name, :type => :string
|
7
|
+
argument :description, :type => :string, :default => :nil
|
8
|
+
|
9
|
+
def copy_deploy_task
|
10
|
+
|
11
|
+
template "deploy.rake", "lib/tasks/deployment/#{timestamp}_#{file_name}.rake"
|
12
|
+
|
13
|
+
end
|
14
|
+
|
15
|
+
private
|
16
|
+
def file_name
|
17
|
+
name.underscore.tr(" ", "_")
|
18
|
+
end
|
19
|
+
|
20
|
+
def task_description
|
21
|
+
"Deployment task: #{description || file_name}"
|
22
|
+
end
|
23
|
+
|
24
|
+
def timestamp
|
25
|
+
@timestamp ||= Time.now.utc.strftime("%Y%m%d%H%M%S")
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
namespace :after_party do
|
2
|
+
|
3
|
+
desc "<%= task_description %>"
|
4
|
+
task :<%= file_name %> => :environment do
|
5
|
+
Dir[Rails.root.join("lib/after_party/*.rb")].each {|f| require f}
|
6
|
+
puts "running deploy task '<%= file_name %>'"
|
7
|
+
|
8
|
+
# put your task implementation here
|
9
|
+
|
10
|
+
# update task as completed. If you remove the line below, the task will run with every deploy (or every time you call after_party:run)
|
11
|
+
TaskRecord.create :version => '<%= timestamp %>'
|
12
|
+
end
|
13
|
+
|
14
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
namespace :after_party do
|
2
|
+
desc "runs (in order) all pending after_party deployment tasks, if they have not run yet against the current db."
|
3
|
+
task :run => :environment do
|
4
|
+
tasks = TaskRecorder.pending_files.map {|f| "after_party:#{f.task_name}"}
|
5
|
+
|
6
|
+
tasks.each {|t| Rake::Task[t].invoke}
|
7
|
+
|
8
|
+
if tasks.empty?
|
9
|
+
puts "no pending tasks to run"
|
10
|
+
end
|
11
|
+
|
12
|
+
end
|
13
|
+
end
|
metadata
CHANGED
@@ -1,45 +1,58 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: after_party
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
5
|
-
prerelease:
|
4
|
+
version: '1.1'
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Steve Mitchell
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date: 2013-
|
11
|
+
date: 2013-12-30 00:00:00.000000000 Z
|
13
12
|
dependencies: []
|
14
13
|
description:
|
15
14
|
email:
|
16
15
|
executables: []
|
17
16
|
extensions: []
|
18
17
|
extra_rdoc_files: []
|
19
|
-
files:
|
18
|
+
files:
|
19
|
+
- lib/after_party/active_record.rb
|
20
|
+
- lib/after_party/models/active_record/task_record.rb
|
21
|
+
- lib/after_party/models/mongoid/task_record.rb
|
22
|
+
- lib/after_party/models/task_recorder.rb
|
23
|
+
- lib/after_party/mongoid.rb
|
24
|
+
- lib/after_party/railtie.rb
|
25
|
+
- lib/after_party.rb
|
26
|
+
- lib/generators/install/install_generator.rb
|
27
|
+
- lib/generators/install/templates/after_party.rb
|
28
|
+
- lib/generators/install/templates/migration.rb
|
29
|
+
- lib/generators/install/USAGE
|
30
|
+
- lib/generators/task/task_generator.rb
|
31
|
+
- lib/generators/task/templates/deploy.rake
|
32
|
+
- lib/generators/task/USAGE
|
33
|
+
- lib/tasks/deploy_task_runner.rake
|
20
34
|
homepage: http://github.com/theSteveMitchell/after_party
|
21
35
|
licenses: []
|
36
|
+
metadata: {}
|
22
37
|
post_install_message:
|
23
38
|
rdoc_options: []
|
24
39
|
require_paths:
|
25
|
-
-
|
40
|
+
- lib
|
26
41
|
required_ruby_version: !ruby/object:Gem::Requirement
|
27
|
-
none: false
|
28
42
|
requirements:
|
29
|
-
- -
|
43
|
+
- - '>='
|
30
44
|
- !ruby/object:Gem::Version
|
31
45
|
version: '0'
|
32
46
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
33
|
-
none: false
|
34
47
|
requirements:
|
35
|
-
- -
|
48
|
+
- - '>='
|
36
49
|
- !ruby/object:Gem::Version
|
37
50
|
version: '0'
|
38
51
|
requirements: []
|
39
52
|
rubyforge_project:
|
40
|
-
rubygems_version:
|
53
|
+
rubygems_version: 2.0.6
|
41
54
|
signing_key:
|
42
|
-
specification_version:
|
55
|
+
specification_version: 4
|
43
56
|
summary: Automated post-deploy tasks for Ruby/Rails. Your deployment is the party.
|
44
57
|
This is the after party
|
45
58
|
test_files: []
|