rails-infrastructure 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (41) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +18 -0
  3. data/.ruby-gemset +1 -0
  4. data/.ruby-version +1 -0
  5. data/Gemfile +4 -0
  6. data/LICENSE.txt +22 -0
  7. data/README.rdoc +80 -0
  8. data/Rakefile +7 -0
  9. data/examples/infrastructure/databases.yml +29 -0
  10. data/examples/infrastructure/environment.yml +2 -0
  11. data/examples/infrastructure/server.yml +9 -0
  12. data/examples/infrastructure/servers/unicorn.rb +69 -0
  13. data/examples/infrastructure/servers/unicorn.yml.erb +13 -0
  14. data/examples/infrastructure/version.yml +2 -0
  15. data/examples/infrastructure.yml +11 -0
  16. data/lib/infrastructure/configurable.rb +51 -0
  17. data/lib/infrastructure/configuration.rb +93 -0
  18. data/lib/infrastructure/constants.rb +5 -0
  19. data/lib/infrastructure/databases.rb +117 -0
  20. data/lib/infrastructure/environment.rb +16 -0
  21. data/lib/infrastructure/path.rb +7 -0
  22. data/lib/infrastructure/railtie.rb +68 -0
  23. data/lib/infrastructure/server.rb +7 -0
  24. data/lib/infrastructure/version.rb +23 -0
  25. data/lib/infrastructure.rb +25 -0
  26. data/lib/rails-infrastructure.rb +2 -0
  27. data/lib/tasks/databases.rake +148 -0
  28. data/lib/tasks/environment.rake +19 -0
  29. data/lib/tasks/server.rake +73 -0
  30. data/lib/tasks/version.rake +23 -0
  31. data/rails-infrastructure.gemspec +28 -0
  32. data/test/infrastructure/configurable_test.rb +94 -0
  33. data/test/infrastructure/configuration_test.yml.erb +5 -0
  34. data/test/infrastructure/database_test.rb +108 -0
  35. data/test/infrastructure/environment_test.rb +23 -0
  36. data/test/infrastructure/paths_test.rb +9 -0
  37. data/test/infrastructure/server_test.rb +9 -0
  38. data/test/infrastructure/version_test.rb +23 -0
  39. data/test/infrastructure_test.rb +26 -0
  40. data/test/test_helper.rb +2 -0
  41. metadata +163 -0
@@ -0,0 +1,73 @@
1
+ namespace :server do
2
+
3
+ def execute(command)
4
+ puts "Executing: #{command}"
5
+ `#{command}`
6
+ end
7
+
8
+ Inf.server.servers.each do |server|
9
+ namespace server do
10
+
11
+ desc "Start #{server} server"
12
+ task :start do
13
+ puts "Starting: #{server.to_s.green}"
14
+ start_command = Inf.server.fetch(server).fetch :start
15
+ if start_command.nil?
16
+ raise "no start command configured for #{server}"
17
+ else
18
+ execute start_command
19
+ end
20
+ end
21
+
22
+ desc "Stop #{server} server"
23
+ task :stop do
24
+ puts "Stopping: #{server.to_s.green}"
25
+ stop_command = Inf.server.fetch(server).fetch :stop
26
+ if stop_command.nil?
27
+ raise "no stop command configured for #{server}"
28
+ elsif stop_command == 'kill'
29
+ Rake::Task["server:#{server}:kill"].reinvoke
30
+ else
31
+ execute stop_command
32
+ end
33
+ end
34
+
35
+ desc "Restart #{server} server"
36
+ task :restart do
37
+ Rake::Task["server:#{server}:stop"].reinvoke
38
+ Rake::Task["server:#{server}:start"].reinvoke
39
+ end
40
+
41
+ desc "Kill #{server} server"
42
+ task :kill do
43
+ pid_file = Inf.server.fetch(server).pid_file
44
+ if File.exists? pid_file
45
+ pid = File.read(pid_file).strip.to_i
46
+ raise "could not parse #{server} pid from #{pid_file}" if pid == 0
47
+ signal = Inf.server.fetch(server).fetch(:kill_signal) || 'QUIT'
48
+ begin
49
+ puts "Signal: #{signal}, PID: #{pid}"
50
+ Process.kill signal, pid
51
+ rescue Errno::ENOENT, Errno::ESRCH
52
+ end
53
+ end
54
+ end
55
+
56
+ desc "Tail #{server} server log file"
57
+ task :tail do
58
+ log_file = Inf.server.fetch(server).log_file
59
+ puts "Watching: #{log_file.green}"
60
+ begin
61
+ IO.popen "tail -n 0 -f #{log_file}" do |file|
62
+ while line = file.gets.to_s.strip do
63
+ puts line unless line.empty?
64
+ end
65
+ end
66
+ rescue Interrupt
67
+ end
68
+ end
69
+
70
+ end
71
+ end
72
+
73
+ end
@@ -0,0 +1,23 @@
1
+ namespace :version do
2
+
3
+ desc 'display current version'
4
+ task :current do
5
+ puts 'Version: ' + Inf.version.to_s.green
6
+ end
7
+
8
+ def save
9
+ Inf.version.save_config Inf.path.rails.config_infrastructure_dir + '/version.yml'
10
+ Rake::Task['version:current'].invoke
11
+ end
12
+
13
+ namespace :bump do
14
+ %w( tiny minor major ).each do |version|
15
+ desc "Bump #{version} version"
16
+ task version.to_sym do
17
+ Inf.version.send "bump_#{version}"
18
+ save
19
+ end
20
+ end
21
+ end
22
+
23
+ end
@@ -0,0 +1,28 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'infrastructure/constants'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "rails-infrastructure"
8
+ spec.version = Infrastructure::VERSION
9
+ spec.platform = Gem::Platform::RUBY
10
+ spec.authors = ["Griffith Chaffee"]
11
+ spec.email = ["griffithchaffee@gmail.com"]
12
+ spec.summary = %q{Rails infrastructure extensions}
13
+ spec.description = %q{Rails infrastructure extensions such as multiple databases and server configuration}
14
+ spec.homepage = "https://github.com/griffithchaffee/rails-infrastructure.git"
15
+ spec.license = "MIT"
16
+
17
+ spec.files = `git ls-files`.split($/)
18
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
19
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
20
+ spec.require_paths = ["lib"]
21
+
22
+ spec.add_runtime_dependency 'colored'
23
+ spec.add_runtime_dependency 'rails'
24
+
25
+ spec.add_development_dependency "minitest", ">= 4.7"
26
+ spec.add_development_dependency "bundler", "~> 1.3"
27
+ spec.add_development_dependency "rake"
28
+ end
@@ -0,0 +1,94 @@
1
+ require 'test_helper'
2
+
3
+ class Infrastructure::ConfigerableTest < MiniTest::Test
4
+
5
+ def setup
6
+ @class = Class.new do
7
+ include Infrastructure::Configurable
8
+ attr_reader :before_configure_callback
9
+ attr_reader :after_configure_callback
10
+ attr_reader :before_assignment_callback
11
+ attr_reader :after_assignment_callback
12
+ def initialize
13
+ callback :before_configure, -> { @before_configure_callback = true }
14
+ callback :after_configure, -> { @after_configure_callback = true }
15
+ callback :before_assignment, -> (key, value) { @before_assignment_callback = true }
16
+ callback :after_assignment, -> (key, value) { @after_assignment_callback = true }
17
+ end
18
+ end
19
+ @instance = @class.new
20
+ end
21
+
22
+ def test_configure
23
+ @instance.configure do
24
+ config.key1 = 'value1'
25
+ assign :key2, 'value2'
26
+ config.key3 = {
27
+ key4: 'value4',
28
+ key5: { key6: 'value6' }
29
+ }
30
+ end
31
+ assert_instance_of Infrastructure::Configuration, @instance.configuration
32
+ assert_equal 'value1', @instance.key1, 'config.key ='
33
+ assert_equal 'value2', @instance.configuration.key2, 'assign key, value'
34
+ @instance.configuration.key2 = 'value2.1'
35
+ assert_equal 'value2.1', @instance.configuration.key2, 'configuration.key ='
36
+ @instance.configuration.assign :key2, 'value2.2'
37
+ assert_equal 'value2.2', @instance.configuration.key2, 'configuration.assign key, value'
38
+ assert_equal 'value6', @instance.key3.key5.key6, 'configuration.assign nested hash'
39
+ assert_equal @instance.configuration.fetch(:key3), @instance.configuration.key3, 'configuration.assign key, value == configuration.fetch(key)'
40
+ assert_raises NoMethodError do
41
+ @instance.blah = 'test'
42
+ end
43
+ assert_raises NoMethodError do
44
+ @instance.blah
45
+ end
46
+ end
47
+
48
+ def test_callbacks
49
+ refute @instance.before_configure_callback, 'before_configure callback'
50
+ refute @instance.after_configure_callback, 'after_configure callback'
51
+ refute @instance.before_assignment_callback, 'before_assignment callback'
52
+ refute @instance.after_assignment_callback, 'after_assignment callback'
53
+ @instance.configure {}
54
+ assert @instance.before_configure_callback, 'before_configure callback'
55
+ assert @instance.after_configure_callback, 'after_configure callback'
56
+ refute @instance.before_assignment_callback, 'before_assignment callback'
57
+ refute @instance.after_assignment_callback, 'after_assignment callback'
58
+ @instance.configuration.assign :key, :value
59
+ assert @instance.before_assignment_callback, 'before_assignment callback'
60
+ assert @instance.after_assignment_callback, 'after_assignment callback'
61
+ end
62
+
63
+ def test_load_config
64
+ @instance.configuration.load_config File.expand_path('../configuration_test.yml.erb', __FILE__) do
65
+ @success = true
66
+ end
67
+ assert_equal 'value1', @instance.key1, 'config file should ready simple key/value pairs'
68
+ assert_equal 'value3', @instance.key2.key3, 'hashes should be convered to configuration instances'
69
+ assert_equal 'value5', @instance.configuration.key2.key4.key5, 'hashes should be convered to configuration instances'
70
+ assert @success, 'load_config block should be run if file loaded'
71
+ assert_raises Errno::ENOENT do
72
+ @instance.configuration.load_config File.expand_path('../DNE', __FILE__) do
73
+ @failure = true
74
+ end
75
+ end
76
+ @instance.configuration.load_config_if_exists File.expand_path('../DNE', __FILE__) do
77
+ @failure = true
78
+ end
79
+ assert @failure.nil?, 'load_config block should not be run if config not found'
80
+ end
81
+
82
+ def test_save_config
83
+ @instance.configuration.load_config File.expand_path('../configuration_test.yml.erb', __FILE__)
84
+ @instance.configuration.save_config File.expand_path('../configuration_save_test.yml.erb', __FILE__)
85
+ @other = Class.new do
86
+ include Infrastructure::Configurable
87
+ end.new
88
+ @other.configuration.load_config File.expand_path('../configuration_save_test.yml.erb', __FILE__)
89
+ assert @other.configuration.to_h == @instance.configuration.to_h, 'configuration should save and reload the same'
90
+ File.delete File.expand_path('../configuration_save_test.yml.erb', __FILE__)
91
+ end
92
+
93
+
94
+ end
@@ -0,0 +1,5 @@
1
+ key1: 'value1'
2
+ key2:
3
+ key3: 'value3'
4
+ key4:
5
+ key5: 'value5'
@@ -0,0 +1,108 @@
1
+ require 'test_helper'
2
+
3
+ class Infrastructure::DatabasesTest < MiniTest::Test
4
+
5
+ def setup
6
+
7
+ @orm = Class.new do
8
+ class << self
9
+ def establish_connection(config); config end
10
+ def connection
11
+ Class.new do
12
+ def tables; ['test'] end
13
+ def drop_database(database); database end
14
+ def create_database(database); database end
15
+ end.new
16
+ end
17
+ end
18
+ end
19
+ @instance = Infrastructure::Databases.new @orm, 'env1'
20
+ @instance.configure do
21
+ config.system = { database: 'system_database' }
22
+ config.defaults = { global_default: 'global_default' }
23
+ config.env1 = {
24
+ defaults: { environment_default: 'environment_default', id: 'id1' },
25
+ id1: {},
26
+ id2: { database: 'override', environment_default: 'override', global_default: 'override' }
27
+ }
28
+ config.env2 = {
29
+ defaults: { environment_default: 'environment_default', global_default: 'environment_override' },
30
+ id1: {},
31
+ id2: { database: 'override', environment_default: 'override', global_default: 'override' }
32
+ }
33
+ end
34
+ end
35
+
36
+ def test_accessors
37
+ assert_equal :env1, @instance.environment, 'environment accessor'
38
+ assert @instance.orm == @orm, 'orm accessor'
39
+ end
40
+
41
+ def test_merge_defaults
42
+ assert_equal 'global_default', @instance.env1.id1.global_default
43
+ assert_equal 'environment_override', @instance.env2.id1.global_default
44
+ assert_equal 'override', @instance.env1.id2.global_default
45
+ assert_equal 'override', @instance.env2.id2.global_default
46
+ assert_equal 'environment_default', @instance.env1.id1.environment_default
47
+ assert_equal 'override', @instance.env1.id2.environment_default
48
+ assert_equal 'environment_default', @instance.env1.id1.environment_default
49
+ assert_equal 'override', @instance.env1.id2.environment_default
50
+ assert_equal 'id1', @instance.env1.id1.id
51
+ assert_equal 'id2', @instance.env1.id2.id
52
+ assert_equal 'id1', @instance.env2.id1.id
53
+ assert_equal 'id2', @instance.env2.id2.id
54
+ assert_equal 'env1_id1', @instance.env1.id1.database
55
+ assert_equal 'override', @instance.env1.id2.database
56
+ assert_equal 'env2_id1', @instance.env2.id1.database
57
+ assert_equal 'override', @instance.env2.id2.database
58
+ end
59
+
60
+ def test_connection
61
+ refute @instance.connection.is_a?(Class)
62
+ end
63
+
64
+ def test_tables
65
+ assert ['test'] == @instance.tables
66
+ end
67
+
68
+ def test_environment_configs
69
+ assert_equal @instance.env1, @instance.environment_configs
70
+ assert_equal @instance.env2, @instance.environment_configs(:env2)
71
+ end
72
+
73
+ def test_environment_config
74
+ assert_equal @instance.env1.id1.to_h, @instance.environment_config(:id1)
75
+ assert_equal @instance.env1.id2.to_h, @instance.environment_config(:id2)
76
+ assert Hash[a: :b] == @instance.environment_config(a: :b)
77
+ assert_raises ArgumentError do
78
+ @instance.environment_config(:unknown)
79
+ end
80
+ assert_raises ArgumentError do
81
+ @instance.environment_defaults[:id] = 'id3'
82
+ @instance.environment_config(:id3)
83
+ end
84
+ end
85
+
86
+ def test_drop
87
+ assert_equal @instance.env1.id1.database, @instance.drop(:id1)
88
+ assert_equal 'test', @instance.drop(database: 'test')
89
+ end
90
+
91
+ def test_create
92
+ assert_equal @instance.env1.id1.database, @instance.create(:id1)
93
+ assert_equal 'test', @instance.create(database: 'test')
94
+ end
95
+
96
+ def test_connect
97
+ assert_equal @instance.env1.id1.to_h, @instance.connect(:id1)
98
+ end
99
+
100
+ def test_connect!
101
+ assert_equal @instance.env1.id1.to_h, @instance.connect(:id1)
102
+ end
103
+
104
+ def test_databases
105
+ assert ['env1_id1', 'override'] == @instance.databases
106
+ end
107
+
108
+ end
@@ -0,0 +1,23 @@
1
+ require 'test_helper'
2
+
3
+ class Infrastructure::EnvironmentTest < MiniTest::Test
4
+
5
+ def setup
6
+ @instance = Infrastructure::Environment.new
7
+ end
8
+
9
+ def test_environment
10
+ assert_equal '', @instance.to_s, 'default environment = development'
11
+ %w( development test production).each do |environment|
12
+ @instance.assign :environment, environment
13
+ %w( development test production).each do |environment|
14
+ if environment == @instance.to_s
15
+ assert @instance.send("#{environment}?"), "#{environment}? should be true"
16
+ else
17
+ refute @instance.send("#{environment}?"), "#{environment}? should be false"
18
+ end
19
+ end
20
+ end
21
+ end
22
+
23
+ end
@@ -0,0 +1,9 @@
1
+ require 'test_helper'
2
+
3
+ class Infrastructure::PathsTest < MiniTest::Test
4
+
5
+ def setup
6
+ @instance = Infrastructure::Path.new
7
+ end
8
+
9
+ end
@@ -0,0 +1,9 @@
1
+ require 'test_helper'
2
+
3
+ class Infrastructure::ServerTest < MiniTest::Test
4
+
5
+ def setup
6
+ @instance = Infrastructure::Server.new
7
+ end
8
+
9
+ end
@@ -0,0 +1,23 @@
1
+ require 'test_helper'
2
+
3
+ class Infrastructure::VersionTest < MiniTest::Test
4
+
5
+ def setup
6
+ @instance = Infrastructure::Version.new
7
+ end
8
+
9
+ def test_version
10
+ assert @instance.fetch(:version).nil?, 'default version = nil'
11
+ @instance.assign :version, '0.0.1'
12
+ assert_equal '0.0.1', @instance.version, 'default version = 0.0.1'
13
+ @instance.assign :version, '0.0.2'
14
+ assert_equal '0.0.2', @instance.version, 'version is updated'
15
+ @instance.bump_tiny
16
+ assert_equal '0.0.3', @instance.version, 'bump_tiny'
17
+ @instance.bump_minor
18
+ assert_equal '0.1.3', @instance.version, 'bump_minor'
19
+ @instance.bump_major
20
+ assert_equal '1.1.3', @instance.version, 'bump_major'
21
+ end
22
+
23
+ end
@@ -0,0 +1,26 @@
1
+ require 'test_helper'
2
+
3
+ class InfrastructureTest < MiniTest::Test
4
+
5
+ def setup
6
+ @class = Class.new do
7
+ attr_reader :params
8
+ def initialize(*params); @params = params end
9
+ def test; 'test' end
10
+ end
11
+ end
12
+
13
+ def test_build
14
+ i = Infrastructure.new
15
+ i.build :key1, @class
16
+ assert_instance_of @class, i.key1
17
+ assert_equal 'test', i.key1.test, 'instance methods can be called'
18
+ assert i.key1.params.empty?, 'params are passed'
19
+ i.build :key2, @class, 'value1', 'value2'
20
+ assert_instance_of @class, i.key2
21
+ assert_equal 'test', i.key2.test, 'instance methods can be called'
22
+ assert_equal 'value1', i.key2.params.first, 'params are passed'
23
+ assert_equal 'value2', i.key2.params.last, 'params are passed'
24
+ end
25
+
26
+ end
@@ -0,0 +1,2 @@
1
+ require 'infrastructure'
2
+ require 'minitest/autorun'
metadata ADDED
@@ -0,0 +1,163 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: rails-infrastructure
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Griffith Chaffee
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2013-10-06 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: colored
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: rails
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: minitest
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - '>='
46
+ - !ruby/object:Gem::Version
47
+ version: '4.7'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '4.7'
55
+ - !ruby/object:Gem::Dependency
56
+ name: bundler
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ~>
60
+ - !ruby/object:Gem::Version
61
+ version: '1.3'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ~>
67
+ - !ruby/object:Gem::Version
68
+ version: '1.3'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rake
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - '>='
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - '>='
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ description: Rails infrastructure extensions such as multiple databases and server
84
+ configuration
85
+ email:
86
+ - griffithchaffee@gmail.com
87
+ executables: []
88
+ extensions: []
89
+ extra_rdoc_files: []
90
+ files:
91
+ - .gitignore
92
+ - .ruby-gemset
93
+ - .ruby-version
94
+ - Gemfile
95
+ - LICENSE.txt
96
+ - README.rdoc
97
+ - Rakefile
98
+ - examples/infrastructure.yml
99
+ - examples/infrastructure/databases.yml
100
+ - examples/infrastructure/environment.yml
101
+ - examples/infrastructure/server.yml
102
+ - examples/infrastructure/servers/unicorn.rb
103
+ - examples/infrastructure/servers/unicorn.yml.erb
104
+ - examples/infrastructure/version.yml
105
+ - lib/infrastructure.rb
106
+ - lib/infrastructure/configurable.rb
107
+ - lib/infrastructure/configuration.rb
108
+ - lib/infrastructure/constants.rb
109
+ - lib/infrastructure/databases.rb
110
+ - lib/infrastructure/environment.rb
111
+ - lib/infrastructure/path.rb
112
+ - lib/infrastructure/railtie.rb
113
+ - lib/infrastructure/server.rb
114
+ - lib/infrastructure/version.rb
115
+ - lib/rails-infrastructure.rb
116
+ - lib/tasks/databases.rake
117
+ - lib/tasks/environment.rake
118
+ - lib/tasks/server.rake
119
+ - lib/tasks/version.rake
120
+ - rails-infrastructure.gemspec
121
+ - test/infrastructure/configurable_test.rb
122
+ - test/infrastructure/configuration_test.yml.erb
123
+ - test/infrastructure/database_test.rb
124
+ - test/infrastructure/environment_test.rb
125
+ - test/infrastructure/paths_test.rb
126
+ - test/infrastructure/server_test.rb
127
+ - test/infrastructure/version_test.rb
128
+ - test/infrastructure_test.rb
129
+ - test/test_helper.rb
130
+ homepage: https://github.com/griffithchaffee/rails-infrastructure.git
131
+ licenses:
132
+ - MIT
133
+ metadata: {}
134
+ post_install_message:
135
+ rdoc_options: []
136
+ require_paths:
137
+ - lib
138
+ required_ruby_version: !ruby/object:Gem::Requirement
139
+ requirements:
140
+ - - '>='
141
+ - !ruby/object:Gem::Version
142
+ version: '0'
143
+ required_rubygems_version: !ruby/object:Gem::Requirement
144
+ requirements:
145
+ - - '>='
146
+ - !ruby/object:Gem::Version
147
+ version: '0'
148
+ requirements: []
149
+ rubyforge_project:
150
+ rubygems_version: 2.0.4
151
+ signing_key:
152
+ specification_version: 4
153
+ summary: Rails infrastructure extensions
154
+ test_files:
155
+ - test/infrastructure/configurable_test.rb
156
+ - test/infrastructure/configuration_test.yml.erb
157
+ - test/infrastructure/database_test.rb
158
+ - test/infrastructure/environment_test.rb
159
+ - test/infrastructure/paths_test.rb
160
+ - test/infrastructure/server_test.rb
161
+ - test/infrastructure/version_test.rb
162
+ - test/infrastructure_test.rb
163
+ - test/test_helper.rb