rake-common_tasks 0.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.
@@ -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: []