Module: Jets::Core

Extended by:
Memoist
Included in:
Jets
Defined in:
lib/jets/core.rb

Constant Summary collapse

@@application =

Calling application triggers load of configs. Jets’ the default config/application.rb is loaded, then the project’s config/application.rb is loaded.

nil
@@call_count =

NOTE: In development this will always be 1 because the app gets reloaded. On AWS Lambda, this will be ever increasing until the container gets replaced.

0
@@prewarm_count =
0

Instance Method Summary collapse

Instance Method Details

#applicationObject



11
12
13
14
15
16
17
# File 'lib/jets/core.rb', line 11

def application
  return @@application if @@application

  @@application = Jets::Application.new
  @@application.setup!
  @@application
end

#awsObject



25
26
27
# File 'lib/jets/core.rb', line 25

def aws
  application.aws
end

#boot(options = {}) ⇒ Object

Load all application base classes and project classes



30
31
32
# File 'lib/jets/core.rb', line 30

def boot(options={})
  Jets::Booter.boot!(options)
end

#build_rootObject



61
62
63
# File 'lib/jets/core.rb', line 61

def build_root
  "/tmp/jets/#{config.project_name}".freeze
end

#call_countObject



150
151
152
# File 'lib/jets/core.rb', line 150

def call_count
  @@call_count
end

#class_mappings(class_name) ⇒ Object



121
122
123
124
125
126
# File 'lib/jets/core.rb', line 121

def class_mappings(class_name)
  map = {
    "Jets::Io" => "Jets::IO",
  }
  map[class_name] || class_name
end

#configObject

For some reason memoize doesnt work with application, think there’s some circular dependency issue. Figure this out later.



21
22
23
# File 'lib/jets/core.rb', line 21

def config
  application.config
end

#eager_load!Object



84
85
86
87
# File 'lib/jets/core.rb', line 84

def eager_load!
  eager_load_jets
  eager_load_app
end

#eager_load_appObject

Eager load user’s application



129
130
131
132
133
134
135
136
137
138
139
140
141
# File 'lib/jets/core.rb', line 129

def eager_load_app
  Dir.glob("#{Jets.root}app/**/*.rb").select do |path|
    next if !File.file?(path) or path =~ %r{/javascript/} or path =~ %r{/views/}

    class_name = path
                  .sub(/\.rb$/,'') # remove .rb
                  .sub(/^\.\//,'') # remove ./
                  .sub(/app\/\w+\//,'') # remove app/controllers or app/jobs etc
                  .classify
    # puts "eager_load! loading path: #{path} class_name: #{class_name}" if ENV['JETS_DEBUG']
    class_name.constantize # use constantize instead of require so dont have to worry about order.
  end
end

#eager_load_jetsObject

Eager load jet’s lib and classes



90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
# File 'lib/jets/core.rb', line 90

def eager_load_jets
  lib_jets = File.expand_path(".", File.dirname(__FILE__))
  Dir.glob("#{lib_jets}/**/*.rb").select do |path|
    # puts "path #{path}"
    next if !File.file?(path)
    next if skip_eager_load_paths?(path)

    path = path.sub("#{lib_jets}/","jets/")
    class_name = path
                  .sub(/\.rb$/,'') # remove .rb
                  .sub(/^\.\//,'') # remove ./
                  .sub(/app\/\w+\//,'') # remove app/controllers or app/jobs etc
                  .camelize
    # special class mappings
    class_name = class_mappings(class_name)
    class_name.constantize # use constantize instead of require so dont have to worry about order.
  end
end

#envObject



54
55
56
57
58
# File 'lib/jets/core.rb', line 54

def env
  env = ENV['JETS_ENV'] || 'development'
  ENV['RAILS_ENV'] = ENV['RACK_ENV'] = env
  ActiveSupport::StringInquirer.new(env)
end

#increase_call_countObject



146
147
148
# File 'lib/jets/core.rb', line 146

def increase_call_count
  @@call_count += 1
end

#increase_prewarm_countObject



155
156
157
# File 'lib/jets/core.rb', line 155

def increase_prewarm_count
  @@prewarm_count += 1
end

#load_tasksObject



76
77
78
# File 'lib/jets/core.rb', line 76

def load_tasks
  Jets::Commands::RakeTasks.load!
end

#loggerObject



66
67
68
# File 'lib/jets/core.rb', line 66

def logger
  Jets::Logger.new($stderr)
end

#prewarm_countObject



159
160
161
# File 'lib/jets/core.rb', line 159

def prewarm_count
  @@prewarm_count
end

#rootObject

Ensures trailing slash Useful for appending a ‘./’ in front of a path or leaving it alone. Returns: ‘/path/with/trailing/slash/’ or ‘./’ @@root = nil def root

return @@root if @@root
@@root = ENV['JETS_ROOT'].to_s
@@root = '.' if @@root == ''
@@root = "#{@@root}/" unless @@root.ends_with?('/')
@@root = Pathname.new(@@root)

end



46
47
48
49
50
51
# File 'lib/jets/core.rb', line 46

def root
  root = ENV['JETS_ROOT'].to_s
  root = '.' if root == ''
  root = "#{root}/" unless root.ends_with?('/')
  Pathname.new(root)
end

#skip_eager_load_paths?(path) ⇒ Boolean

Skip these paths because eager loading doesnt work for them.

Returns:

  • (Boolean)


110
111
112
113
114
115
116
117
118
119
# File 'lib/jets/core.rb', line 110

def skip_eager_load_paths?(path)
  path =~ %r{/templates/} ||
  path =~ %r{/version} ||
  path =~ %r{/rails_overrides} ||
  path =~ %r{/default/application} ||
  path =~ %r{/internal/app} ||
  path =~ %r{/webpacker} ||
  path =~ %r{/cli} ||
  path =~ %r{/core_ext}
end

#versionObject



80
81
82
# File 'lib/jets/core.rb', line 80

def version
  Jets::VERSION
end

#webpacker?Boolean

Returns:

  • (Boolean)


71
72
73
# File 'lib/jets/core.rb', line 71

def webpacker?
  Gem.loaded_specs.keys.include?("webpacker")
end