Class: MakeItSo::Rails::AppBuilder

Inherits:
Rails::AppBuilder
  • Object
show all
Defined in:
lib/make_it_so/rails/app_builder.rb

Instance Method Summary collapse

Instance Method Details

#application_controllerObject



7
8
9
10
11
# File 'lib/make_it_so/rails/app_builder.rb', line 7

def application_controller
  inside 'app/controllers' do
    template 'application_controller.rb'
  end
end

#application_recordObject



13
14
15
16
17
# File 'lib/make_it_so/rails/app_builder.rb', line 13

def application_record
  inside 'app/models' do
    template 'application_record.rb'
  end
end

#base_javascriptsObject



19
20
21
22
23
24
25
26
27
# File 'lib/make_it_so/rails/app_builder.rb', line 19

def base_javascripts
  self.gem 'jquery-rails'
  inside 'app/assets/javascripts' do
    template 'application.js'
    jquery_files = "//= require jquery\n" +
      "//= require jquery_ujs\n"
    gsub_file 'application.js', "//= require rails-ujs\n", jquery_files
  end
end

#base_stylesheetsObject



29
30
31
32
33
# File 'lib/make_it_so/rails/app_builder.rb', line 29

def base_stylesheets
  inside 'app/assets/stylesheets' do
    template 'application.css'
  end
end

#devise_dependencyObject



189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
# File 'lib/make_it_so/rails/app_builder.rb', line 189

def devise_dependency
  self.gem 'devise'

  after_bundle do
    generate 'devise:install'
    generate 'devise:views'
    generate 'devise user'

    if options[:rspec]
      inside 'spec' do
        directory 'features'

        inside 'support' do
          insert_into_file 'factory_bot.rb',
            after: "FactoryBot.define do\n" do

            snippet('user_factory.rb')
          end

          template 'devise_controller_spec.rb'
        end
      end
    end

    route "root 'homes\#index'"
  end
end

#eliminate_byebugObject



45
46
47
48
# File 'lib/make_it_so/rails/app_builder.rb', line 45

def eliminate_byebug
  both_lines = /^[[:space:]]*# Call 'byebug'.*gem 'byebug'.*?$\n/m
  gsub_file 'Gemfile', both_lines, "\n"
end

#factory_bot_rspecObject



144
145
146
147
148
149
150
151
152
153
154
155
# File 'lib/make_it_so/rails/app_builder.rb', line 144

def factory_bot_rspec
  self.gem 'factory_bot', group: [:development, :test]
  after_bundle do
    inside 'spec' do
      uncomment_lines 'rails_helper.rb', /spec\/support\/\*\*\/\*.rb/

      inside 'support' do
        template 'factory_bot.rb'
      end
    end
  end
end

#fix_generatorsObject



39
40
41
42
43
# File 'lib/make_it_so/rails/app_builder.rb', line 39

def fix_generators
  inject_into_class 'config/application.rb', 'Application' do
    snippet('application_generator.rb')
  end
end

#foundation_dependencyObject



217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
# File 'lib/make_it_so/rails/app_builder.rb', line 217

def foundation_dependency
  self.gem 'foundation-rails', '~> 5.0'

  after_bundle do
    generate 'foundation:install foundation'
    # foundation-rails generates an application layout so we
    # must remove it
    # there is a pull request open to skip this:
    # https://github.com/zurb/foundation-rails/pull/108
    remove_file 'app/views/layouts/foundation.html.erb'

    inside 'app/assets/javascripts' do
      insert_into_file 'application.js',
        "//= require foundation\n",
        after: "//= require jquery_ujs\n"
    end
  end
end

#jestObject



96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
# File 'lib/make_it_so/rails/app_builder.rb', line 96

def jest
  after_bundle do
    run 'yarn add jest babel-jest --dev'
    run 'mkdir -p spec/javascript'
    modify_json(package_json_file) do |json|
      json["scripts"] ||= {}
      json["scripts"]["test"] = "node_modules/.bin/jest"
      json["scripts"]["test:dev"] = "node_modules/.bin/jest --notify --watch"
      json["jest"] ||= {}
      json["jest"].merge!({
        "roots": [
          "spec/javascript"
        ],
        "moduleDirectories": [
          "node_modules",
          "app/javascript"
        ]
      })
    end

    rake 'yarn:install'
  end
end

#karmaObject



74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
# File 'lib/make_it_so/rails/app_builder.rb', line 74

def karma
  after_bundle do
    unparsed_json = snippet('js_testing_deps.json')
    parsed_json = JSON.parse(unparsed_json)

    modify_json(package_json_file) do |json|
      json["devDependencies"] ||= {}
      json["devDependencies"].merge!(parsed_json["devDependencies"])
      json["scripts"] ||= {}
      json["scripts"]["test"] = "node_modules/.bin/karma start karma.conf.js"
    end

    template 'karma.conf.js'
    inside 'spec/javascript' do
      template 'exampleTest.js'
      template 'testHelper.js'
    end

    rake 'yarn:install'
  end
end

#pry_rails_dependencyObject



35
36
37
# File 'lib/make_it_so/rails/app_builder.rb', line 35

def pry_rails_dependency
  self.gem 'pry-rails', group: [:development, :test]
end

#reactObject



50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
# File 'lib/make_it_so/rails/app_builder.rb', line 50

def react
  self.gem 'webpacker', '~> 3.3'

  after_bundle do
    rake 'webpacker:install'
    rake 'webpacker:install:react'

    unparsed_json = snippet('react_dependencies.json')
    parsed_json = JSON.parse(unparsed_json)

    modify_json(package_json_file) do |json|
      ["dependencies", "devDependencies"].each do |key|
        json[key] ||= {}
        json[key].merge!(parsed_json[key])
      end

      json["scripts"] ||= {}
      json["scripts"]["start"] = "./bin/webpack-dev-server"
    end

    rake 'yarn:install'
  end
end

#rspec_dependencyObject



120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
# File 'lib/make_it_so/rails/app_builder.rb', line 120

def rspec_dependency
  self.gem 'rspec-rails', group: [:development, :test]
  self.gem 'capybara', group: [:development, :test]
  self.gem 'launchy', group: [:development, :test]

  after_bundle do
    #stop spring in case it is running - it will hang
    #https://github.com/rails/rails/issues/13381
    run 'spring stop'
    generate 'rspec:install'
    inside 'spec' do
      empty_directory 'support'
    end

    inside 'spec' do
      insert_into_file 'rails_helper.rb',
        after: rails_helper_insertion_hook do

        "require 'capybara/rspec'\n"
      end
    end
  end
end

#shoulda_rspecObject



174
175
176
177
178
179
180
181
182
183
184
185
186
187
# File 'lib/make_it_so/rails/app_builder.rb', line 174

def shoulda_rspec
  self.gem 'shoulda-matchers',
    group: [:development, :test],
    require: false
  after_bundle do
    inside 'spec' do
      insert_into_file 'rails_helper.rb',
        after: rails_helper_insertion_hook do

         "require 'shoulda-matchers'\n"
      end
    end
  end
end

#valid_attribute_rspecObject



157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
# File 'lib/make_it_so/rails/app_builder.rb', line 157

def valid_attribute_rspec
  self.gem 'valid_attribute', group: [:development, :test]
  after_bundle do
    inside 'spec' do
      insert_into_file 'rails_helper.rb',
        after: rails_helper_insertion_hook do

        "require File.join(File.dirname(__FILE__), 'support/valid_attribute')\n"
      end

      inside 'support' do
        template 'valid_attribute.rb'
      end
    end
  end
end