Class: SolidusBraintree::Generators::InstallGenerator

Inherits:
Rails::Generators::AppBase
  • Object
show all
Defined in:
lib/generators/solidus_braintree/install/install_generator.rb

Instance Method Summary collapse

Instance Method Details

#add_test_gemsObject



28
29
30
31
32
33
34
35
36
# File 'lib/generators/solidus_braintree/install/install_generator.rb', line 28

def add_test_gems
  gem_group :test do
    ['vcr', 'webmock'].each do |gem_name|
      gem gem_name unless Bundler.locked_gems.dependencies[gem_name]
    end
  end

  bundle_command 'install'
end

#alert_no_classic_frontend_supportObject



139
140
141
142
143
144
145
146
147
148
# File 'lib/generators/solidus_braintree/install/install_generator.rb', line 139

def alert_no_classic_frontend_support
  support_code_for(:classic_frontend) do
    message = <<~TEXT
      For solidus_frontend compatibility, please use version 2.x.
      The new version of this extension only supports Solidus Starter Frontend.
      No frontend code has been copied to your application.
    TEXT
    say_status :error, set_color(message.tr("\n", ' '), :red), :red
  end
end

#install_solidus_backend_supportObject



65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
# File 'lib/generators/solidus_braintree/install/install_generator.rb', line 65

def install_solidus_backend_support
  support_code_for(:backend) do
    gsub_file 'vendor/assets/javascripts/spree/backend/all.js',
      "//= require spree/backend/solidus_paypal_braintree\n", ''

    append_file 'vendor/assets/javascripts/spree/backend/all.js',
      "//= require spree/backend/solidus_braintree\n"

    gsub_file 'vendor/assets/stylesheets/spree/backend/all.css',
      " *= require spree/backend/solidus_paypal_braintree\n", ''

    inject_into_file 'vendor/assets/stylesheets/spree/backend/all.css',
      " *= require spree/backend/solidus_braintree\n", before: %r{\*/}, verbose: true
  end
end

#install_solidus_starter_frontend_supportObject



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
# File 'lib/generators/solidus_braintree/install/install_generator.rb', line 81

def install_solidus_starter_frontend_support
  support_code_for(:starter_frontend) do
    directory 'app', 'app'

    inject_into_file 'vendor/assets/javascripts/spree/frontend/all.js',
      "//= require jquery3\n",
      before: '//= require rails-ujs',
      verbose: true

    gsub_file 'vendor/assets/javascripts/spree/frontend/all.js',
      "//= require spree/frontend/solidus_paypal_braintree\n", ''

    append_file 'app/assets/javascripts/solidus_starter_frontend.js',
      "//= require spree/frontend/solidus_braintree\n"

    gsub_file 'vendor/assets/stylesheets/spree/frontend/all.css',
      " *= require spree/frontend/solidus_paypal_braintree\n", ''

    inject_into_file 'app/assets/stylesheets/solidus_starter_frontend.css',
      " *= require spree/frontend/solidus_braintree\n", before: %r{\*/}, verbose: true

    inject_into_class 'app/controllers/checkouts_controller.rb',
      'CheckoutsController',
      "  helper SolidusBraintree::BraintreeCheckoutHelper\n\n",
      verbose: true

    inject_into_class 'app/controllers/carts_controller.rb',
      'CartsController',
      "  helper SolidusBraintree::BraintreeCheckoutHelper\n\n",
      verbose: true

    inject_into_file 'app/views/orders/_payment_info.html.erb',
      "        <li><%= render 'payments/braintree_payment_details', payment: payment %></li>\n",
      after: "<li><%= payment.payment_method.name %></li>\n",
      verbose: true

    spec_paths =
      case options[:specs]
      when 'all' then %w[spec]
      when 'frontend'
        %w[
          spec/solidus_braintree_spec_helper.rb
          spec/system/frontend
          spec/support
          spec/fixtures
        ]
      end

    spec_paths.each do |path|
      if engine.root.join(path).directory?
        directory engine.root.join(path), path
      else
        template engine.root.join(path), path
      end
    end
  end
end

#mount_engineObject



58
59
60
61
62
63
# File 'lib/generators/solidus_braintree/install/install_generator.rb', line 58

def mount_engine
  gsub_file 'config/routes.rb',
    "mount SolidusPaypalBraintree::Engine, at: '/solidus_paypal_braintree'\n", ''

  route "mount SolidusBraintree::Engine, at: '#{solidus_mount_point}solidus_braintree'"
end

#normalize_components_optionsObject



20
21
22
23
24
25
26
# File 'lib/generators/solidus_braintree/install/install_generator.rb', line 20

def normalize_components_options
  @components = {
    backend: options[:backend],
    starter_frontend: options[:frontend] == 'starter',
    classic_frontend: options[:frontend] == 'classic',
  }
end

#run_migrationsObject



53
54
55
56
# File 'lib/generators/solidus_braintree/install/install_generator.rb', line 53

def run_migrations
  rake 'railties:install:migrations FROM=solidus_braintree'
  run 'bin/rails db:migrate' if options[:migrate]
end

#setup_initializersObject



38
39
40
41
42
43
44
45
46
47
48
49
50
51
# File 'lib/generators/solidus_braintree/install/install_generator.rb', line 38

def setup_initializers
  legacy_initializer_pathname =
    Pathname.new(destination_root).join('config/initializers/solidus_paypal_braintree.rb')

  if legacy_initializer_pathname.exist?
    legacy_initializer_pathname.rename('config/initializers/solidus_braintree.rb')

    gsub_file 'config/initializers/solidus_braintree.rb',
      "SolidusPaypalBraintree.configure do |config|\n",
      "SolidusBraintree.configure do |config|\n"
  else
    directory 'config/initializers', 'config/initializers'
  end
end