/
install_generator.rb
200 lines (173 loc) 路 6.04 KB
/
install_generator.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
require 'rails/generators'
require 'highline/import'
require 'bundler'
require 'bundler/cli'
module Spree
class InstallGenerator < Rails::Generators::Base
class_option :migrate, :type => :boolean, :default => true, :banner => 'Run Spree migrations'
class_option :seed, :type => :boolean, :default => true, :banner => 'load seed data (migrations must be run)'
class_option :sample, :type => :boolean, :default => true, :banner => 'load sample data (migrations must be run)'
class_option :auto_accept, :type => :boolean
class_option :user_class, :type => :string
class_option :admin_email, :type => :string
class_option :admin_password, :type => :string
class_option :lib_name, :type => :string, :default => 'spree'
def self.source_paths
paths = self.superclass.source_paths
paths << File.expand_path('../templates', "../../#{__FILE__}")
paths << File.expand_path('../templates', "../#{__FILE__}")
paths << File.expand_path('../templates', __FILE__)
paths.flatten
end
def prepare_options
@run_migrations = options[:migrate]
@load_seed_data = options[:seed]
@load_sample_data = options[:sample]
unless @run_migrations
@load_seed_data = false
@load_sample_data = false
end
end
def add_files
template 'config/initializers/spree.rb', 'config/initializers/spree.rb'
end
def config_spree_yml
create_file "config/spree.yml" do
settings = { 'version' => Spree.version }
settings.to_yaml
end
end
def remove_unneeded_files
remove_file "public/index.html"
end
def additional_tweaks
return unless File.exists? 'public/robots.txt'
append_file "public/robots.txt", <<-ROBOTS
User-agent: *
Disallow: /checkout
Disallow: /cart
Disallow: /orders
Disallow: /countries
Disallow: /line_items
Disallow: /password_resets
Disallow: /states
Disallow: /user_sessions
Disallow: /user_registrations
Disallow: /users
Disallow: /account
ROBOTS
end
def setup_assets
@lib_name = 'spree'
%w{javascripts stylesheets images}.each do |path|
empty_directory "vendor/assets/#{path}/store" if defined? Spree::Frontend || Rails.env.test?
empty_directory "vendor/assets/#{path}/admin" if defined? Spree::Backend || Rails.env.test?
end
if defined? Spree::Frontend || Rails.env.test?
template "vendor/assets/javascripts/spree/frontend/all.js"
template "vendor/assets/stylesheets/spree/frontend/all.css"
end
if defined? Spree::Backend || Rails.env.test?
template "vendor/assets/javascripts/spree/frontend/all.js"
template "vendor/assets/stylesheets/spree/frontend/all.css"
end
end
def create_overrides_directory
empty_directory "app/overrides"
end
def configure_application
application <<-APP
config.to_prepare do
# Load application's model / class decorators
Dir.glob(File.join(File.dirname(__FILE__), "../app/**/*_decorator*.rb")) do |c|
Rails.configuration.cache_classes ? require(c) : load(c)
end
# Load application's view overrides
Dir.glob(File.join(File.dirname(__FILE__), "../app/overrides/*.rb")) do |c|
Rails.configuration.cache_classes ? require(c) : load(c)
end
end
APP
end
def include_seed_data
append_file "db/seeds.rb", <<-SEEDS
\n
Spree::Core::Engine.load_seed if defined?(Spree::Core)
Spree::Auth::Engine.load_seed if defined?(Spree::Auth)
SEEDS
end
def install_migrations
say_status :copying, "migrations"
silence_stream(STDOUT) do
silence_warnings { rake 'railties:install:migrations' }
end
end
def create_database
say_status :creating, "database"
silence_stream(STDOUT) do
silence_stream(STDERR) do
silence_warnings { rake 'db:create' }
end
end
end
def run_migrations
if @run_migrations
say_status :running, "migrations"
quietly { rake 'db:migrate' }
else
say_status :skipping, "migrations (don't forget to run rake db:migrate)"
end
end
def populate_seed_data
if @load_seed_data
say_status :loading, "seed data"
rake_options=[]
rake_options << "AUTO_ACCEPT=1" if options[:auto_accept]
rake_options << "ADMIN_EMAIL=#{options[:admin_email]}" if options[:admin_email]
rake_options << "ADMIN_PASSWORD=#{options[:admin_password]}" if options[:admin_password]
cmd = lambda { rake("db:seed #{rake_options.join(' ')}") }
if options[:auto_accept] || (options[:admin_email] && options[:admin_password])
quietly &cmd
else
cmd.call
end
else
say_status :skipping, "seed data (you can always run rake db:seed)"
end
end
def load_sample_data
if @load_sample_data
say_status :loading, "sample data"
quietly { rake 'spree_sample:load' }
else
say_status :skipping, "sample data (you can always run rake spree_sample:load)"
end
end
def notify_about_routes
insert_into_file File.join('config', 'routes.rb'), :after => "Application.routes.draw do\n" do
%Q{
# This line mounts Spree's routes at the root of your application.
# This means, any requests to URLs such as /products, will go to Spree::ProductsController.
# If you would like to change where this engine is mounted, simply change the :at option to something different.
#
# We ask that you don't use the :as option here, as Spree relies on it being the default of "spree"
mount Spree::Core::Engine, :at => '/'
}
end
unless options[:quiet]
puts "*" * 50
puts "We added the following line to your application's config/routes.rb file:"
puts " "
puts " mount Spree::Core::Engine, :at => '/'"
end
end
def complete
unless options[:quiet]
puts "*" * 50
puts "Spree has been installed successfully. You're all ready to go!"
puts " "
puts "Enjoy!"
end
end
end
end