railsapp_factory 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,5 @@
1
+ # Template to
2
+ # add json_pure runtime for RailsappFactory eval methods
3
+
4
+ gem 'json_pure'
5
+
@@ -0,0 +1,55 @@
1
+ # Template to
2
+ # add javascript runtime
3
+
4
+ # Add both gems so that the application is suitable for jruby as well as MRI
5
+
6
+ require 'fileutils'
7
+
8
+ gemfile = open('Gemfile').collect {|line| line.chomp}
9
+ gemfile0 = gemfile.dup
10
+
11
+ gemfile.each do |line|
12
+ # change to single quotes
13
+ line.sub!(/"([^"']+)"/, '\'\1\'')
14
+ line.sub!(/platform:/, ':platform =>')
15
+ line.sub!(/require:/, ':require =>')
16
+ # see http://docs.travis-ci.com/user/database-setup/
17
+ if line.sub!(/^\s*(gem\s*['"]sqlite3['"])\s*$/, '\1, :platform => [:ruby, :mswin, :mingw]')
18
+ puts "Changing gem sqlite to handle multiple platforms"
19
+ gemfile <<= "gem 'jdbc-sqlite3', platform: :jruby"
20
+ end
21
+
22
+ if line.sub!(/^\s*gem\s*['"]mysql2?['"]\s*$/, '\0, :platform => :ruby')
23
+ puts "Changing gem mysql to handle multiple platforms"
24
+ gemfile <<= "gem 'activerecord-jdbcmysql-adapter', platform: :jruby"
25
+ end
26
+
27
+ if line.sub!(/^[#\s]*(gem\s*['"]therubyracer['"])\s*$/, '\1, :platform => :ruby')
28
+ puts "Changing gem therubyracer to enable and handle multiple platforms"
29
+ gemfile <<= "gem 'therubyrhino', :platform => :jruby"
30
+ end
31
+ end
32
+
33
+ gemfile <<= "gem 'therubyrhino', :platform => :jruby"
34
+ gemfile <<= "gem 'therubyracer', :platform => :ruby"
35
+
36
+ cleaned_up_gemfile = [ ]
37
+ gemfile.each do |line|
38
+ unless line =~ /^gem / && cleaned_up_gemfile.include?(line)
39
+ #puts "Keeping: [#{line}]"
40
+ cleaned_up_gemfile << line
41
+ end
42
+ end
43
+
44
+ if cleaned_up_gemfile != gemfile0
45
+ puts 'Updating Gemfile'
46
+ FileUtils.rm_f 'Gemfile.bak'
47
+ FileUtils.move 'Gemfile', 'Gemfile.bak'
48
+ File.open('Gemfile', 'w') do |f|
49
+ cleaned_up_gemfile.each do |line|
50
+ f.puts line
51
+ end
52
+ end
53
+ end
54
+
55
+
@@ -0,0 +1,187 @@
1
+ # Template to
2
+ # 1. update rails 2.3 to using bundler as per http://bundler.io/v1.5/rails23.html
3
+ # - copies gem details from config/environment.rb to Gemfile and comments them out in environment.rb file
4
+ # 2. fix broken require in Rakefile
5
+ # 3. update to rails-lts (unless RAILS_LTS env var is set to false)
6
+ #
7
+ # Template is safe to apply multiple times
8
+
9
+
10
+ file 'config/preinitializer.rb', <<-EOF
11
+
12
+ begin
13
+ require 'rubygems'
14
+ require 'bundler'
15
+ rescue LoadError
16
+ raise "Could not load the bundler gem. Install it with `gem install bundler`."
17
+ end
18
+
19
+ if Gem::Version.new(Bundler::VERSION) <= Gem::Version.new("0.9.24")
20
+ raise RuntimeError, "Your bundler version is too old for Rails 2.3.\n" +
21
+ "Run `gem install bundler` to upgrade."
22
+ end
23
+
24
+ begin
25
+ # Set up load paths for all bundled gems
26
+ ENV["BUNDLE_GEMFILE"] = File.expand_path("../../Gemfile", __FILE__)
27
+ Bundler.setup
28
+ rescue Bundler::GemNotFound
29
+ raise RuntimeError, "Bundler couldn't find some gems.\n" +
30
+ "Did you run `bundle install`?"
31
+ end
32
+
33
+ EOF
34
+
35
+ INSERT_INTO_BOOT = <<-EOF
36
+
37
+ class Rails::Boot
38
+ def run
39
+ load_initializer
40
+
41
+ Rails::Initializer.class_eval do
42
+ def load_gems
43
+ @bundler_loaded ||= Bundler.require :default, Rails.env
44
+ end
45
+ end
46
+
47
+ Rails::Initializer.run(:set_load_path)
48
+ end
49
+ end
50
+
51
+ EOF
52
+
53
+ file_name = 'config/boot.rb'
54
+ mentions_bundler = false
55
+ File.open(file_name).each do |line|
56
+ mentions_bundler ||= line =~ /Bundler\./
57
+ end
58
+
59
+ unless mentions_bundler
60
+ puts " updating #{file_name} - inserting bundler code"
61
+ bak_name = file_name + '.without_bundler'
62
+ unless File.exists? bak_name
63
+ FileUtils.move file_name, bak_name
64
+ File.open(file_name, 'w') do |f|
65
+ File.open(bak_name).each do |line|
66
+ if line =~ /Rails.boot!/
67
+ f.puts INSERT_INTO_BOOT
68
+ end
69
+ f.puts line
70
+ end
71
+ end
72
+ end
73
+ end
74
+
75
+ # Check what has already been done
76
+ has_source = false
77
+ has_gem = {}
78
+ if File.exists? 'Gemfile'
79
+ File.open('Gemfile', 'r').each do |line|
80
+ has_source ||= line =~ /^\s*source\s/
81
+ if line =~ /^\s*gem\s+['"]([^'"]+)['"]/
82
+ has_gem[$1] = line
83
+ end
84
+ end
85
+ end
86
+
87
+ #update Gemfile based on what is in config/environment.rb
88
+ File.open('Gemfile', 'a+') do |gemfile|
89
+ unless has_source
90
+ gemfile.puts "source '#{ENV['GEM_SOURCE'] || 'https://rubygems.org'}'"
91
+ end
92
+
93
+ # make sure rails is in the gem list
94
+ unless has_gem['rails']
95
+ rails_gem_version = nil
96
+ open('config/environment.rb').each do |line|
97
+ if line =~ /^RAILS_GEM_VERSION\s*=\s*\D(2\.3\.\d+)\D/
98
+ rails_gem_version = $1
99
+ end
100
+ end
101
+ rails_gem_version ||= '2.3.18'
102
+
103
+ if ENV['RAILS_LTS'] == 'false'
104
+ # a different version has been deliberately picked
105
+ has_gem['rails'] = "gem 'rails', '#{rails_gem_version}'"
106
+ gemfile.puts has_gem['rails']
107
+ puts " updating Gemfile - adding rails gem #{rails_gem_version}"
108
+ else
109
+ has_gem['rails'] = "gem 'rails', :git => 'git://github.com/makandra/rails.git', :branch => '2-3-lts'"
110
+ gemfile.puts has_gem['rails']
111
+ if rails_gem_version != '2.3.18'
112
+ puts 'WARNING - RAILS_GEM_VERSION needs to be updated to 2.3.18 in config/environment.rb!'
113
+ end
114
+ puts " updating Gemfile - adding rails gem #{rails_gem_version}-lts"
115
+ end
116
+ end
117
+
118
+ # make sure database adapters are in the list
119
+ open('config/database.yml').each do |line|
120
+ if line =~ /^\s*adapter:\s*['"]?([^'"\s]+)/
121
+ adapter = $1
122
+ unless has_gem[adapter]
123
+ gemfile.puts "gem '#{adapter}' # used in database.yml"
124
+ puts " updating Gemfile - adding #{adapter} gem # used in database.yml"
125
+ has_gem[adapter] = true
126
+ end
127
+ end
128
+ end
129
+
130
+ # copy over other gem definitions
131
+ file_name = 'config/environment.rb'
132
+ bak_name = file_name + '.bak'
133
+ FileUtils.rm_f bak_name
134
+ FileUtils.move file_name, bak_name
135
+ File.open(file_name, 'w') do |f|
136
+ File.open(bak_name, 'r').each do |line|
137
+ if line =~ /^([\s#]*)config\.(gem.*)/
138
+ prefix = $1
139
+ command = $2
140
+ prefix.sub!(/^\s+/, '')
141
+ command.sub!(/:version *=>/, ' ')
142
+ command.sub!(/:lib/, ':require')
143
+ command.sub!(/require:/, ':require => ')
144
+ command.sub!(/lib:/, ':lib => ')
145
+ if line =~ /^\s*config.gem\s+['"]([^'"]+)['"]/
146
+ prefix = '# ' if has_gem[$1]
147
+ has_gem[$1] = line
148
+ puts " updating Gemfile - adding #{$1} gem" if prefix !~ /#/
149
+ end
150
+ gemfile.puts "#{prefix}#{command} # converted from: #{line}"
151
+ f.print '# Moved to Gemfile: '
152
+ end
153
+ f.puts line
154
+ end
155
+ end
156
+
157
+ unless has_gem['json_pure']
158
+ gemfile.puts "gem 'json_pure' # used by RailsapFactory *_eval methods"
159
+ puts ' updating Gemfile - adding json_pure gem # used by RailsapFactory *_eval methods'
160
+ end
161
+
162
+ end
163
+
164
+ # Fix ERROR: 'rake/rdoctask' is obsolete and no longer supported. Use 'rdoc/task' (available in RDoc 2.4.2+) instead.
165
+ # .../railsapp/Rakefile:8
166
+
167
+ file_name = 'Rakefile'
168
+ bak_name = file_name + '.bak'
169
+ unless File.exists? bak_name
170
+ FileUtils.move file_name, bak_name
171
+ File.open(file_name, 'w') do |f|
172
+ File.open(bak_name, 'r').each do |line|
173
+ if line =~ /rake.rdoctask/
174
+ line = "# require 'rdoc/task' # replaces outs of date: #{line}"
175
+ puts ' updating Rakefile - fixing rake/rdoctask line'
176
+ end
177
+ f.puts line
178
+ end
179
+ end
180
+ end
181
+
182
+ %w{Gemfile config/environment.rb Rakefile}.each do |file|
183
+ puts '=' * 50, file, '=' * 50
184
+ puts File.read(file)
185
+ end
186
+ puts '=' * 50, 'END OF TEMPLATE'
187
+
metadata ADDED
@@ -0,0 +1,157 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: railsapp_factory
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Ian Heggie
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2014-03-02 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: bundler
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ~>
20
+ - !ruby/object:Gem::Version
21
+ version: '1.3'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ~>
28
+ - !ruby/object:Gem::Version
29
+ version: '1.3'
30
+ - !ruby/object:Gem::Dependency
31
+ name: json_pure
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
38
+ type: :runtime
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
46
+ - !ruby/object:Gem::Dependency
47
+ name: rake
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ type: :development
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ - !ruby/object:Gem::Dependency
63
+ name: rspec
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ~>
68
+ - !ruby/object:Gem::Version
69
+ version: '2.12'
70
+ type: :development
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ~>
76
+ - !ruby/object:Gem::Version
77
+ version: '2.12'
78
+ description: Rails application factory to make testing gems against multiple versions
79
+ easier
80
+ email:
81
+ - ian@heggie.biz
82
+ executables: []
83
+ extensions: []
84
+ extra_rdoc_files: []
85
+ files:
86
+ - .gitignore
87
+ - .travis.yml
88
+ - Gemfile
89
+ - LICENSE.txt
90
+ - README.md
91
+ - Rakefile
92
+ - lib/railsapp_factory.rb
93
+ - lib/railsapp_factory/build_error.rb
94
+ - lib/railsapp_factory/build_methods.rb
95
+ - lib/railsapp_factory/class_methods.rb
96
+ - lib/railsapp_factory/helper_methods.rb
97
+ - lib/railsapp_factory/run_in_app_methods.rb
98
+ - lib/railsapp_factory/server_methods.rb
99
+ - lib/railsapp_factory/string_inquirer.rb
100
+ - lib/railsapp_factory/template_methods.rb
101
+ - lib/railsapp_factory/version.rb
102
+ - railsapp_factory.gemspec
103
+ - spec/railsapp_factory/class_methods_spec.rb
104
+ - spec/railsapp_factory/helper_methods_spec.rb
105
+ - spec/railsapp_factory/string_inquirer_spec.rb
106
+ - spec/railsapp_factory/template_methods_spec.rb
107
+ - spec/railsapp_factory_spec.rb
108
+ - spec/spec_helper.rb
109
+ - spec/templates/add-file.rb
110
+ - spec/templates/add-ruby_version-controller.rb
111
+ - spec/templates/add-yet-another-file.rb
112
+ - templates/add_json_pure.rb
113
+ - templates/add_necessary_gems.rb
114
+ - templates/use_bundler_with_rails23.rb
115
+ homepage: ''
116
+ licenses:
117
+ - MIT
118
+ post_install_message:
119
+ rdoc_options: []
120
+ require_paths:
121
+ - lib
122
+ required_ruby_version: !ruby/object:Gem::Requirement
123
+ none: false
124
+ requirements:
125
+ - - ! '>='
126
+ - !ruby/object:Gem::Version
127
+ version: '0'
128
+ segments:
129
+ - 0
130
+ hash: 1127916945110373028
131
+ required_rubygems_version: !ruby/object:Gem::Requirement
132
+ none: false
133
+ requirements:
134
+ - - ! '>='
135
+ - !ruby/object:Gem::Version
136
+ version: '0'
137
+ segments:
138
+ - 0
139
+ hash: 1127916945110373028
140
+ requirements: []
141
+ rubyforge_project:
142
+ rubygems_version: 1.8.23.2
143
+ signing_key:
144
+ specification_version: 3
145
+ summary: The prupose of this gem is to make integration testing of gems and libraries
146
+ against multiple versions of rails easy and avoid having to keep copies of the framework
147
+ in the gem being tested
148
+ test_files:
149
+ - spec/railsapp_factory/class_methods_spec.rb
150
+ - spec/railsapp_factory/helper_methods_spec.rb
151
+ - spec/railsapp_factory/string_inquirer_spec.rb
152
+ - spec/railsapp_factory/template_methods_spec.rb
153
+ - spec/railsapp_factory_spec.rb
154
+ - spec/spec_helper.rb
155
+ - spec/templates/add-file.rb
156
+ - spec/templates/add-ruby_version-controller.rb
157
+ - spec/templates/add-yet-another-file.rb