rake-common_tasks 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 1f306b14e9a8760a2d79bae45b8418bb29f5f131
4
+ data.tar.gz: 6c1d3737d29bc523881bde11420aded72e756e55
5
+ SHA512:
6
+ metadata.gz: effc0e85c2c97d1444c7d415bdd7d1e633a8060232df5b7e470da23ca24dcfe7baa4c94e4e1bbbdd802d12fb344e5214d9733f4ccaad54b7934d4699fc9f6fb9
7
+ data.tar.gz: 25ff87ed4651cf492e0e66b3613ef8b78f5c1cff974b4ef365dcf538080deb790c0fd79274c42b9c387834b591318010ab7ccd6731dd89fe69ed8367f3bb5b36
@@ -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/Gemfile ADDED
@@ -0,0 +1,2 @@
1
+ source 'https://rubygems.org'
2
+ gemspec
@@ -0,0 +1,68 @@
1
+ # Rake::CommonTasks
2
+
3
+ Common Rake Tasks that are suitable for multiple projects.
4
+
5
+ ## Installation
6
+
7
+ Add this line to your application's Gemfile:
8
+
9
+ gem 'rake-common_tasks', require: 'rake/common_tasks'
10
+
11
+ And then execute:
12
+
13
+ $ bundle
14
+
15
+ ## Usage
16
+
17
+ Sample Rakefile:
18
+
19
+ ````rake
20
+ #!/usr/bin/env rake
21
+
22
+ # environment
23
+ ENV['RACK_ENV'] ||= 'development'
24
+
25
+ # load path
26
+ lib_path = File.expand_path('../lib', __FILE__)
27
+ ($:.unshift lib_path) unless ($:.include? lib_path)
28
+
29
+ require 'rake'
30
+ require 'rake/common_taks'
31
+
32
+ # mixin helper methods used when writing rake tasks,
33
+ # e.g. system_try_and_fail, is_local?, progress_bar...
34
+ include Rake::CommonTasks::Helpers
35
+
36
+ # import all common rake tasks -- not recommended
37
+ CommonRakeTasks.import!
38
+
39
+ # import a specific set of rake tasks
40
+ CommonRakeTasks.import! 'default.rake', 'dotenv.rake' # etc...
41
+ ````
42
+
43
+ ## Available Rake Tasks
44
+
45
+ ````bash
46
+ # db.rake
47
+ rake db:test:create # Create test env database *(postgres only)
48
+ rake db:test:drop # Drop test env database *(postgres only)
49
+ rake db:test:reset # Drop and Create test env database *(postgres only)
50
+
51
+ # dotenv.rake
52
+ rake dotenv # Load environment settings from .env
53
+
54
+ # default.rake
55
+ rake # Run tests
56
+ rake test # Run tests
57
+
58
+ # s3deploy.rake
59
+ rake s3:deploy # deploy to S3 (Staging)
60
+ rake s3:deploy:staging # deploy to S3 (Staging)
61
+ rake s3:deploy:production # deploy to S3 (production)
62
+
63
+ # server.rake
64
+ rake server # Start a local server with `./public' as it's root
65
+
66
+ # tmp.rake
67
+ rake tmp:clear # Clears the project's tmp directory
68
+ ````
@@ -0,0 +1,9 @@
1
+ #!/usr/bin/env rake
2
+
3
+ ENV['RACK_ENV'] ||= 'development'
4
+
5
+ lib_path = File.expand_path('../lib', __FILE__)
6
+ ($:.unshift lib_path) unless ($:.include? lib_path)
7
+
8
+ require 'rake'
9
+ require "bundler/gem_tasks"
@@ -0,0 +1,57 @@
1
+ require 'progress_bar'
2
+ require "rake/common_tasks/version"
3
+
4
+ module Rake
5
+ module CommonTasks
6
+ def self.import!(*files)
7
+ ENV['RAKE_ROOT'] = Dir.pwd
8
+ tasks = Dir.glob(File.expand_path('../common_tasks/**/*.rake', __FILE__))
9
+ tasks.each do |task|
10
+ if files.empty?
11
+ ::Rake.load_rakefile task
12
+ end
13
+
14
+ if !files.empty? && files.include?(Pathname.new(task).basename.to_s)
15
+ ::Rake.load_rakefile task
16
+ end
17
+ end
18
+ end
19
+
20
+ module Helpers
21
+ def system_try_and_fail(command)
22
+ sh command do |ok, res|
23
+ if !ok
24
+ yield if block_given?
25
+ raise "COMMAND FAILED: Error running #{command} (Pwd: #{Dir.pwd}, exit status:#{res.exitstatus}). Aborting"
26
+ end
27
+ end
28
+ end
29
+
30
+ def check_env!
31
+ raise "RACK_ENV unknown" if ENV['RACK_ENV'].nil? || ENV['RACK_ENV'] == ''
32
+ end
33
+
34
+ def is_local?
35
+ check_env!
36
+ %w(development test).include? ENV['RACK_ENV']
37
+ end
38
+
39
+ def is_production?
40
+ check_env!
41
+ ENV['RACK_ENV'] == 'production'
42
+ end
43
+
44
+ def progress_bar(total = 0)
45
+ ::ProgressBar.new(total, :bar, :counter, :rate)
46
+ end
47
+
48
+ def test_db_name
49
+ if ENV['DATABASE_NAME'].nil? or ENV['DATABASE_NAME'] == ''
50
+ raise "ENV['DATABASE_NAME'] is nil or blank!"
51
+ end
52
+
53
+ "#{ENV['DATABASE_NAME']}_test"
54
+ end
55
+ end
56
+ end
57
+ end
@@ -0,0 +1,20 @@
1
+ namespace :db do
2
+ namespace :test do
3
+ desc "Create test database *(postgres only)"
4
+ task :create => :environment do
5
+ return unless is_local?
6
+ puts "Creating #{db_name} database..."
7
+ system_try_and_fail "createdb #{db_name}"
8
+ end
9
+
10
+ desc "Drop test database *(postgres only)"
11
+ task :drop => :environment do
12
+ return unless is_local?
13
+ puts "Droppping #{db_name} database..."
14
+ system_try_and_fail "dropdb #{db_name}"
15
+ end
16
+
17
+ desc "Prepare test env database *(postgres only)"
18
+ task :prepare => [:environment, :create, :drop]
19
+ end
20
+ end
@@ -0,0 +1,6 @@
1
+ require 'rake/testtask'
2
+ Rake::TestTask.new do |t|
3
+ t.libs << "spec"
4
+ t.pattern = "spec/**/*_spec.rb"
5
+ end
6
+ task :default => [:test]
@@ -0,0 +1,11 @@
1
+ task :dotenv do
2
+ env_file_suffix = "-#{ENV['RACK_ENV']}" unless is_local?
3
+ env_file = File.join(ENV['RAKE_ROOT'],".env#{env_file_suffix}")
4
+ if File.exist? env_file
5
+ puts "Loading environment from: #{env_file}"
6
+ require 'dotenv'
7
+ Dotenv.load env_file
8
+ end
9
+ end
10
+
11
+ task :environment => :dotenv
@@ -0,0 +1,11 @@
1
+ require 'dalli'
2
+
3
+ namespace :memcache do
4
+ desc "Flush all data in memcached"
5
+ task :flush_all => :environment do
6
+ puts "Flushing All data stored in memcached..."
7
+ Dalli::Client.new.flush_all
8
+ puts "Done!"
9
+ end
10
+ end
11
+ task :'memcached:flush_all' => [:'memcache:flush_all']
@@ -0,0 +1,21 @@
1
+ namespace :redis do
2
+ desc "Flush data from Redis db"
3
+ task :flushdb => :environment do
4
+ db = URI.parse(ENV['REDIS_URL']).try(:path).to_s[1..-1].to_i
5
+ puts "Flushing data from Redis db: #{db}..."
6
+ Redis.new.flushdb
7
+ puts "Done!"
8
+ end
9
+
10
+ desc "Flush all data from Redis"
11
+ task :flushall => :environment do
12
+ server = "localhost:6379/0"
13
+ if ENV['REDIS_URL']
14
+ uri = URI.parse(ENV['REDIS_URL'])
15
+ server = "#{uri.host}:#{uri.port}#{uri.path}"
16
+ end
17
+ puts "Flushing all data from #{server}..."
18
+ Redis.new.flushall
19
+ puts "Done!"
20
+ end
21
+ end
@@ -0,0 +1,64 @@
1
+ require 'aws-sdk'
2
+ require 'mime/types'
3
+
4
+ namespace :s3 do
5
+ namespace :deploy do
6
+ task :staging => :environment do
7
+ if ENV.key?('STAGING_BUCKET')
8
+ deploy_public_to_s3(ENV['STAGING_BUCKET'])
9
+ else
10
+ raise "Set the STAGING_BUCKET environment variable to the name of the bucket you want to deploy to."
11
+ end
12
+ end
13
+
14
+ desc "Deploy to S3 (production)"
15
+ task :production => :dotenv do
16
+ if ENV.key?('PRODUCTION_BUCKET')
17
+ deploy_public_to_s3(ENV['PRODUCTION_BUCKET'])
18
+ else
19
+ raise "Set the PRODUCTION_BUCKET environment variable to the name of the bucket you want to deploy to."
20
+ end
21
+ end
22
+ end
23
+ desc "Deploy to S3 (staging)"
24
+ task :deploy => :'deploy:staging'
25
+
26
+ def aws_configured?
27
+ !AWS.config.access_key_id.nil? && !AWS.config.secret_access_key.nil?
28
+ end
29
+
30
+ def has_aws_env_keys?
31
+ ENV.key?('AWS_ACCESS_KEY_ID') && ENV.key?('AWS_SECRET_ACCESS_KEY')
32
+ end
33
+
34
+ def check_aws_config!
35
+ if !aws_configured?
36
+ aws_credentials = AWS::Core::CredentialProviders::SharedCredentialFileProvider.new.get_credentials
37
+ end
38
+
39
+ if aws_credentials.empty? && has_aws_env_keys?
40
+ aws_credentials.merge!(access_key_id: ENV['AWS_ACCESS_KEY_ID'], secret_access_key: ENV['AWS_SECRET_ACCESS_KEY'])
41
+ end
42
+
43
+ AWS.config(aws_credentials)
44
+
45
+ unless aws_configured?
46
+ raise "Deploy Failed: aws-sdk is not configured. More Info: http://docs.aws.amazon.com/AWSSdkDocsRuby/latest/DeveloperGuide/prog-basics-creds.html"
47
+ end
48
+ end
49
+
50
+ def deploy_public_to_s3(bucket)
51
+ check_aws_config!
52
+ Dir.glob("public/**/*") do |file|
53
+ unless file == '.' or file == '..'
54
+ unless File.directory?(file)
55
+ filename = file.to_s.gsub('public/', '')
56
+ content_type = MIME::Types.type_for(filename).first
57
+ print " - Writing #{filename} (#{content_type}) to S3"
58
+ AWS::S3.new.buckets[bucket].objects[filename].write(open(file), acl: :public_read, content_type: content_type)
59
+ puts "...Done!"
60
+ end
61
+ end
62
+ end
63
+ end
64
+ end
@@ -0,0 +1,6 @@
1
+ desc "Start a local server with public as it's root"
2
+ task :server => :environment do
3
+ ENV['PORT'] ||= '8080'
4
+ puts "Started site on localhost:#{ENV['PORT']}... (CTRL-C to stop)"
5
+ `pushd public; python -m SimpleHTTPServer #{ENV['PORT']}`
6
+ end
@@ -0,0 +1,20 @@
1
+ namespace :db do
2
+ namespace :test do
3
+ desc "Create test env database *(postgres only)"
4
+ task :create => :environment do
5
+ return unless is_local?
6
+ puts "Creating #{db_name} database..."
7
+ system_try_and_fail "createdb #{db_name}"
8
+ end
9
+
10
+ desc "Drop test env database *(postgres only)"
11
+ task :drop => :environment do
12
+ return unless is_local?
13
+ puts "Droppping #{db_name} database..."
14
+ system_try_and_fail "dropdb #{db_name}"
15
+ end
16
+
17
+ desc "Drop and Create test env database *(postgres only)"
18
+ task :reset => [:environment, :create, :drop]
19
+ end
20
+ end
@@ -0,0 +1,8 @@
1
+ namespace :tmp do
2
+ desc "Clears the project's tmp directory"
3
+ task :clear do
4
+ puts "Clearing the tmp directory..."
5
+ FileUtils.rm_rf(Dir.glob('tmp/*'))
6
+ puts "Done!"
7
+ end
8
+ end
@@ -0,0 +1,5 @@
1
+ module Rake
2
+ module CommonTasks
3
+ VERSION = "0.1.0"
4
+ end
5
+ end
@@ -0,0 +1,28 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $:.unshift(lib) unless $:.include?(lib)
4
+ require 'rake/common_tasks/version'
5
+
6
+ Gem::Specification.new do |gem|
7
+ gem.name = 'rake-common_tasks'
8
+ gem.version = Rake::CommonTasks::VERSION
9
+ gem.authors = ['Eric Marden']
10
+ gem.email = ['eric@xentek.net']
11
+ gem.description = %q{Common Rake Tasks}
12
+ gem.summary = %q{Common Rake Tasks, serving a variety of needs. Modular! Include only what you want and nothing that you don't.}
13
+ gem.homepage = 'https://github.com/xentek/rake-common_tasks'
14
+
15
+ gem.files = `git ls-files`.split($/)
16
+ gem.executables = gem.files.grep(%r{^bin/}) { |f| File.basename(f) }
17
+ gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
18
+ gem.require_paths = ['lib']
19
+
20
+ gem.add_dependency 'rake'
21
+ gem.add_dependency 'dotenv'
22
+ gem.add_dependency 'progress_bar'
23
+ gem.add_dependency 'httparty'
24
+ gem.add_dependency 'mime-types'
25
+ gem.add_dependency 'aws-sdk'
26
+
27
+ gem.add_development_dependency 'bundler', '~> 1.5'
28
+ end
metadata ADDED
@@ -0,0 +1,158 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: rake-common_tasks
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Eric Marden
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-12-11 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rake
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: dotenv
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: progress_bar
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: httparty
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: mime-types
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: aws-sdk
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: bundler
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: '1.5'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: '1.5'
111
+ description: Common Rake Tasks
112
+ email:
113
+ - eric@xentek.net
114
+ executables: []
115
+ extensions: []
116
+ extra_rdoc_files: []
117
+ files:
118
+ - ".gitignore"
119
+ - Gemfile
120
+ - README.md
121
+ - Rakefile
122
+ - lib/rake/common_tasks.rb
123
+ - lib/rake/common_tasks/db.rake
124
+ - lib/rake/common_tasks/default.rake
125
+ - lib/rake/common_tasks/dotenv.rake
126
+ - lib/rake/common_tasks/memcache.rake
127
+ - lib/rake/common_tasks/redis.rake
128
+ - lib/rake/common_tasks/s3deploy.rake
129
+ - lib/rake/common_tasks/server.rake
130
+ - lib/rake/common_tasks/test.rake
131
+ - lib/rake/common_tasks/tmp.rake
132
+ - lib/rake/common_tasks/version.rb
133
+ - rake-common_tasks.gemspec
134
+ homepage: https://github.com/xentek/rake-common_tasks
135
+ licenses: []
136
+ metadata: {}
137
+ post_install_message:
138
+ rdoc_options: []
139
+ require_paths:
140
+ - lib
141
+ required_ruby_version: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - ">="
144
+ - !ruby/object:Gem::Version
145
+ version: '0'
146
+ required_rubygems_version: !ruby/object:Gem::Requirement
147
+ requirements:
148
+ - - ">="
149
+ - !ruby/object:Gem::Version
150
+ version: '0'
151
+ requirements: []
152
+ rubyforge_project:
153
+ rubygems_version: 2.2.2
154
+ signing_key:
155
+ specification_version: 4
156
+ summary: Common Rake Tasks, serving a variety of needs. Modular! Include only what
157
+ you want and nothing that you don't.
158
+ test_files: []