zenturio_batteries 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore ADDED
@@ -0,0 +1,11 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ coverage
6
+ doc/
7
+ lib/bundler/man
8
+ pkg/*
9
+ rdoc
10
+ spec/reports
11
+ tmp/*
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --color
2
+ --format documentation
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+ gemspec
3
+
4
+ gem 'rspec'
data/Gemfile.lock ADDED
@@ -0,0 +1,24 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ zenturio_batteries (0.0.1)
5
+
6
+ GEM
7
+ remote: https://rubygems.org/
8
+ specs:
9
+ diff-lcs (1.1.3)
10
+ rspec (2.11.0)
11
+ rspec-core (~> 2.11.0)
12
+ rspec-expectations (~> 2.11.0)
13
+ rspec-mocks (~> 2.11.0)
14
+ rspec-core (2.11.1)
15
+ rspec-expectations (2.11.3)
16
+ diff-lcs (~> 1.1.3)
17
+ rspec-mocks (2.11.3)
18
+
19
+ PLATFORMS
20
+ ruby
21
+
22
+ DEPENDENCIES
23
+ rspec
24
+ zenturio_batteries!
data/LICENSE.txt ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2012 Andreas Sotnik <andreas.sotnik@gmail.com>
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,49 @@
1
+ # ZenturioBatteries
2
+
3
+ This gem generates common parts of Ruby On Rails applications. Parts like: production configuration for several web servers, common models with migrations, some widgets, etc
4
+
5
+ Gem consist of several "batteries":
6
+
7
+ 1. Production Configurations for several web servers
8
+ 2. ???
9
+
10
+ Each "battery" - is a common usable part for application. Parts would be generated as part of application.
11
+
12
+ This approach has advantages (compare to usual including gem):
13
+
14
+ 1. Only necessary part would be generated => reduced number of imported classes.
15
+ 2. Every generated component - independent part and could be customized for every specific project.
16
+ 3. No need to update parts of old application => so less compatibility dependency. But it's also a disadvantage.
17
+
18
+
19
+ ## Installation
20
+
21
+ Add this lines to your application's Gemfile:
22
+
23
+ group :development do
24
+ gem 'zenturio_batteries'
25
+ end
26
+
27
+ Then execute:
28
+
29
+ $ bundle
30
+
31
+ Or install it yourself as:
32
+
33
+ $ gem install zenturio_batteries
34
+
35
+ Add to Rakefile:
36
+
37
+ require "zenturio_batteries"
38
+ ZenturioBatteries.load_tasks
39
+
40
+ That's all. You ready for generating parts.
41
+
42
+ For example (generating production configuration files):
43
+
44
+ $ rake batteries:config
45
+
46
+ ## Usage
47
+
48
+ TODO: Write usage instructions here
49
+
data/Rakefile ADDED
@@ -0,0 +1,8 @@
1
+ require "bundler/gem_tasks"
2
+ require 'rspec/core/rake_task'
3
+ require 'zenturio_batteries'
4
+
5
+ RSpec::Core::RakeTask.new('spec')
6
+ ZenturioBatteries.load_tasks
7
+
8
+ task :default => :spec
File without changes
@@ -0,0 +1,33 @@
1
+ #bundle exec unicorn_rails -c config/unicorn.rb -E production
2
+
3
+ base_path = '<%= proj_dir %>'
4
+
5
+ rails_env = ENV['RAILS_ENV'] || 'production'
6
+
7
+ worker_processes (rails_env == 'production' ? 7 : 2)
8
+
9
+ preload_app true
10
+
11
+ timeout 30
12
+
13
+ listen base_path+'/tmp/sockets/unicorn.sock', :backlog => 2048
14
+
15
+ before_fork do |server, worker|
16
+
17
+ defined?(ActiveRecord::Base) and
18
+ ActiveRecord::Base.connection.disconnect!
19
+
20
+ old_pid = base_path + '/tmp/pids/unicorn.pid.oldbin'
21
+ if File.exists?(old_pid) && server.pid != old_pid
22
+ begin
23
+ Process.kill("QUIT", File.read(old_pid).to_i)
24
+ rescue Errno::ENOENT, Errno::ESRCH
25
+ # someone else did our job for us
26
+ end
27
+ end
28
+ end
29
+
30
+
31
+ after_fork do |server, worker|
32
+ ActiveRecord::Base.establish_connection
33
+ end
@@ -0,0 +1,28 @@
1
+ upstream app_server {
2
+ server unix:<%= proj_dir %>/tmp/sockets/unicorn.sock fail_timeout=0;
3
+ }
4
+
5
+ server {
6
+ root <%= proj_dir %>/public;
7
+
8
+ server_name domain.name;
9
+
10
+ try_files $uri @app;
11
+
12
+ keepalive_timeout 5;
13
+
14
+ location @app {
15
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
16
+ proxy_set_header Host $http_host;
17
+ proxy_redirect off;
18
+ proxy_pass http://app_server;
19
+ }
20
+
21
+ error_page 500 502 503 504 /500.html;
22
+ location = /500.html {
23
+ root <%= proj_dir %>/public;
24
+ }
25
+
26
+ }
27
+
28
+
File without changes
@@ -0,0 +1,20 @@
1
+ require 'zenturio_batteries'
2
+
3
+ namespace :batteries do
4
+
5
+ namespace :configs do
6
+ gen = ZenturioBatteries::Configs.new
7
+ options = gen.available_options
8
+
9
+ options.each do |opt|
10
+ desc opt[:label]
11
+ task opt[:handler], :hard_mode? do |t, args|
12
+ puts ''
13
+ hard_mode = (args[:hard_mode?] == 'true')
14
+ gen.execute! opt[:handler], hard_mode
15
+ puts ''
16
+ end
17
+ end
18
+ end
19
+
20
+ end
@@ -0,0 +1,59 @@
1
+ module ZenturioBatteries::Base
2
+ require 'erb'
3
+
4
+ # Basic module for generation application parts
5
+ module Generator
6
+
7
+ # Get the list of available options for current generator
8
+ def available_options
9
+ []
10
+ end
11
+
12
+ # Execute option for given handler.
13
+ # If there is no such handler - raise Exception
14
+ def execute! handler, hard_mode = false
15
+ raise Exception.new('No such handler') unless self.methods.include?(handler)
16
+
17
+ method = self.method(handler)
18
+ config_list = method.call
19
+
20
+ process_config! config_list, hard_mode
21
+ end
22
+
23
+ protected
24
+
25
+ # Copy necessary files to destination folders.
26
+ # Information about files - in config_list parameter
27
+ #
28
+ # config_list - is a Array and each element is a Hash.
29
+ # each element has 2 keys - :source and :destination
30
+ def process_config! config_list, hard_mode
31
+ config_list.each do |finfo|
32
+ source = finfo[:source]
33
+ dest = finfo[:destination]
34
+
35
+ # Setting bindings for templates
36
+ proj_dir = Dir.pwd
37
+
38
+ # Rendering templates
39
+ renderer = ERB.new File.new(ZenturioBatteries.base_dir+'/assets'+source).read
40
+ res = renderer.result binding
41
+
42
+ # Saving templates to destination
43
+ dest_file = proj_dir+dest
44
+
45
+ if File.exists?(dest_file) && !hard_mode
46
+ puts dest_file+' already exists and generation will be skipped.'
47
+ else
48
+ File.open(dest_file, "w+") do |f|
49
+ f.write(res)
50
+ end
51
+ puts dest_file+' was generated.'
52
+ end
53
+
54
+ end
55
+ end
56
+
57
+ end
58
+
59
+ end
@@ -0,0 +1,29 @@
1
+ require "zenturio_batteries/base/generator"
2
+
3
+ =begin
4
+ Class for generating production configuration files for several web servers
5
+
6
+ Supported options:
7
+ 1. Nginx + Unicorn
8
+ 2. %todo%
9
+ =end
10
+ class ZenturioBatteries::Configs
11
+ include ZenturioBatteries::Base::Generator
12
+
13
+ def available_options
14
+ [
15
+ {:label=>'Generate production config for: Nginx + Unicorn', :handler => :unicorn}
16
+ ]
17
+ end
18
+
19
+ protected
20
+
21
+ # Handler for `Nginx + Unicorn` option
22
+ def unicorn
23
+ [
24
+ {:source => '/configs/unicorn.erb', :destination=>'/unicorn.rb'},
25
+ {:source => '/configs/unicorn_nginx.erb', :destination=>'/nginx.conf'},
26
+ ]
27
+ end
28
+
29
+ end
@@ -0,0 +1,3 @@
1
+ module ZenturioBatteries
2
+ VERSION = "1.0.0"
3
+ end
@@ -0,0 +1,20 @@
1
+ require "zenturio_batteries/version"
2
+ require "zenturio_batteries/base/generator"
3
+ require "zenturio_batteries/configs"
4
+
5
+ =begin
6
+ Base module for Zenturio Batteries
7
+ =end
8
+ module ZenturioBatteries
9
+
10
+ # return base dir with assets and tasks directory inside
11
+ def self.base_dir
12
+ File.dirname(__FILE__)
13
+ end
14
+
15
+ # Loads rake tasks
16
+ def self.load_tasks
17
+ Dir.glob(base_dir+'/tasks/*.rake').each { |f| load f }
18
+ end
19
+
20
+ end
@@ -0,0 +1,27 @@
1
+ require 'spec_helper'
2
+
3
+ =begin
4
+ Mock class for testing some generator methods
5
+ =end
6
+ class MockGenerator
7
+ include ZenturioBatteries::Base::Generator
8
+ end
9
+
10
+ describe ZenturioBatteries::Base::Generator do
11
+
12
+ it 'has method that should return list of available options' do
13
+ gen = MockGenerator.new
14
+ gen.methods.include?(:available_options).should eq(true)
15
+ end
16
+
17
+ it 'has method that should execute option by its handler' do
18
+ gen = MockGenerator.new
19
+ gen.methods.include?(:execute!).should eq(true)
20
+ end
21
+
22
+ it 'can\'t call wrong hanlder' do
23
+ gen = MockGenerator.new
24
+ lambda { gen.execute!(:wrong_handler) }.should raise_exception
25
+ end
26
+
27
+ end
@@ -0,0 +1,33 @@
1
+ require 'spec_helper'
2
+
3
+ describe ZenturioBatteries::Configs do
4
+
5
+ before do
6
+ @curdir = Dir.pwd
7
+ Dir.mkdir @curdir+'/tmp' unless Dir.exists? @curdir+'/tmp'
8
+ Dir.chdir @curdir+'/tmp'
9
+ end
10
+
11
+ after do
12
+ Dir.chdir @curdir
13
+ Dir[@curdir+'/tmp/*'].each {|f| File.delete(f) }
14
+ Dir.unlink @curdir+'/tmp'
15
+ end
16
+
17
+ it 'has at least one option' do
18
+ gen = ZenturioBatteries::Configs.new
19
+ options = gen.available_options
20
+
21
+ options.class.should eq(Array)
22
+ options.empty?.should eq(false)
23
+ end
24
+
25
+ it 'can generate nginx|unicorn configuration' do
26
+ gen = ZenturioBatteries::Configs.new
27
+ gen.execute! :unicorn
28
+
29
+ File.exists?(Dir.pwd+'/unicorn.rb').should eq(true)
30
+ File.exists?(Dir.pwd+'/nginx.conf').should eq(true)
31
+ end
32
+
33
+ end
@@ -0,0 +1,11 @@
1
+ require 'zenturio_batteries'
2
+
3
+ RSpec.configure do |config|
4
+ config.treat_symbols_as_metadata_keys_with_true_values = true
5
+ config.run_all_when_everything_filtered = true
6
+ config.filter_run :focus
7
+
8
+ config.order = 'random'
9
+ end
10
+
11
+
@@ -0,0 +1,14 @@
1
+ require 'spec_helper'
2
+
3
+ describe ZenturioBatteries do
4
+
5
+ it 'has correct base directory' do
6
+ dir = ZenturioBatteries.base_dir
7
+
8
+ dir.empty?.should eq(false)
9
+ Dir.exists?(dir).should eq(true)
10
+ Dir.exists?(dir+'/assets').should eq(true)
11
+ Dir.exists?(dir+'/tasks').should eq(true)
12
+ end
13
+
14
+ end
@@ -0,0 +1,23 @@
1
+ # -*- encoding: utf-8 -*-
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'zenturio_batteries/version'
5
+
6
+ Gem::Specification.new do |gem|
7
+ gem.name = "zenturio_batteries"
8
+ gem.version = ZenturioBatteries::VERSION
9
+
10
+ gem.authors = ["Andreas Sotnik"]
11
+ gem.email = ["andreas.sotnik@gmail.com"]
12
+
13
+ gem.description = "This gem generates common parts of Ruby On Rails applications. Parts like: production configuration for several web servers, common models with migrations, some widgets, etc"
14
+ gem.summary = "Gem for generating common parts of RoR Application: production configuration, models, additional components, etc"
15
+ gem.homepage = "http://zenturio.me/pages/zenturio-batteries"
16
+
17
+ gem.license = 'MIT'
18
+
19
+ gem.files = `git ls-files`.split($/)
20
+ gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
21
+ gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
22
+ gem.require_paths = ["lib"]
23
+ end
metadata ADDED
@@ -0,0 +1,74 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: zenturio_batteries
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Andreas Sotnik
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-11-13 00:00:00.000000000 Z
13
+ dependencies: []
14
+ description: ! 'This gem generates common parts of Ruby On Rails applications. Parts
15
+ like: production configuration for several web servers, common models with migrations,
16
+ some widgets, etc'
17
+ email:
18
+ - andreas.sotnik@gmail.com
19
+ executables: []
20
+ extensions: []
21
+ extra_rdoc_files: []
22
+ files:
23
+ - .gitignore
24
+ - .rspec
25
+ - Gemfile
26
+ - Gemfile.lock
27
+ - LICENSE.txt
28
+ - README.md
29
+ - Rakefile
30
+ - lib/assets/.gitkeep
31
+ - lib/assets/configs/unicorn.erb
32
+ - lib/assets/configs/unicorn_nginx.erb
33
+ - lib/tasks/.gitkeep
34
+ - lib/tasks/configs.rake
35
+ - lib/zenturio_batteries.rb
36
+ - lib/zenturio_batteries/base/generator.rb
37
+ - lib/zenturio_batteries/configs.rb
38
+ - lib/zenturio_batteries/version.rb
39
+ - spec/base_generator_spec.rb
40
+ - spec/configs_spec.rb
41
+ - spec/spec_helper.rb
42
+ - spec/zenturio_batteries_spec.rb
43
+ - zenturio_batteries.gemspec
44
+ homepage: http://zenturio.me/pages/zenturio-batteries
45
+ licenses:
46
+ - MIT
47
+ post_install_message:
48
+ rdoc_options: []
49
+ require_paths:
50
+ - lib
51
+ required_ruby_version: !ruby/object:Gem::Requirement
52
+ none: false
53
+ requirements:
54
+ - - ! '>='
55
+ - !ruby/object:Gem::Version
56
+ version: '0'
57
+ required_rubygems_version: !ruby/object:Gem::Requirement
58
+ none: false
59
+ requirements:
60
+ - - ! '>='
61
+ - !ruby/object:Gem::Version
62
+ version: '0'
63
+ requirements: []
64
+ rubyforge_project:
65
+ rubygems_version: 1.8.24
66
+ signing_key:
67
+ specification_version: 3
68
+ summary: ! 'Gem for generating common parts of RoR Application: production configuration,
69
+ models, additional components, etc'
70
+ test_files:
71
+ - spec/base_generator_spec.rb
72
+ - spec/configs_spec.rb
73
+ - spec/spec_helper.rb
74
+ - spec/zenturio_batteries_spec.rb