Class: Ninjs::Project

Inherits:
Object
  • Object
show all
Defined in:
lib/ninjs/project.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(options = nil) ⇒ Project

Returns a new instance of Project.



7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# File 'lib/ninjs/project.rb', line 7

def initialize(options = nil)
  settings = {
    name: nil,
    root: Dir.getwd
  }
  
  settings.merge!(options) unless options.nil?

  @name = settings[:name]
  @root = File.expand_path(settings[:root])

  if @name.nil?
    raise ArgumentError, "Ninjs::Project.new({ name: 'Name' }): name is required without a configuration file" unless File.exists? "#{@root}/ninjs.conf"
  end

  @modules = Array.new
  @config = Ninjs::Configuration.new @root
  @config.name = @name unless @name.nil?
end

Instance Attribute Details

#configObject (readonly)

Returns the value of attribute config.



3
4
5
# File 'lib/ninjs/project.rb', line 3

def config
  @config
end

#modulesObject (readonly)

Returns the value of attribute modules.



3
4
5
# File 'lib/ninjs/project.rb', line 3

def modules
  @modules
end

#rootObject

Returns the value of attribute root.



3
4
5
# File 'lib/ninjs/project.rb', line 3

def root
  @root
end

Instance Method Details

#add_scripts_to_models(directory) ⇒ Object



137
138
139
140
141
142
# File 'lib/ninjs/project.rb', line 137

def add_scripts_to_models(directory)
  Dir["#{directory}/*.js"].each do |file|
    module_filename = file.gsub(directory, '')
    @modules << "#{directory}#{module_filename}" unless module_filename.match(/^\/_/)
  end
end

#compile_application_file(file) ⇒ Object



205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
# File 'lib/ninjs/project.rb', line 205

def compile_application_file(file)
  begin
    ninjs_lib_secretary = Sprockets::Secretary.new(
      :root         => "#{Ninjs::BASE_DIR}",
      :asset_root   => @config.asset_root,
      :load_path    => ["repository"],
      source_files: ["#{file}"],
      interpolate_constants: false
    )

    application_file = ninjs_lib_secretary.concatenation
    ninjs_lib_secretary.install_assets
    application_file.save_to "#{file}"
  rescue Exception => error
    @errors = true
    puts Ninjs::Notification.error "Sprockets error: #{error.message}"
  end
end

#compile_module(module_file, module_name) ⇒ Object



151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
# File 'lib/ninjs/project.rb', line 151

def compile_module(module_file, module_name)
  begin
    ninjs_lib_secretary = Sprockets::Secretary.new(
      :root         => "#{Ninjs::BASE_DIR}",
      :asset_root   => @config.asset_root,
      :load_path    => ["repository"],
      source_files: ["#{module_file}"],
      interpolate_constants: false
    )

    module_file = ninjs_lib_secretary.concatenation
    message = File.exists?("#{@root}/#{@config.dest_dir}/#{module_name}.js") ? "\e[32m>>>\e[0m #{@config.dest_dir}/#{module_name}.js updated" : "\e[32m>>>\e[0m #{@config.dest_dir}/#{module_name}.js created"
    module_file.save_to "#{@root}/#{@config.dest_dir}/#{module_name}.js"
    ninjs_lib_secretary.install_assets

  rescue Exception => error
    @errors = true
    puts Ninjs::Notification.error "Sprockets error: #{error.message}"
  end
end

#compile_modulesObject



144
145
146
147
148
149
# File 'lib/ninjs/project.rb', line 144

def compile_modules
  @modules.each do |module_file|
    module_filename = Ninjs::Helpers.get_filename module_file
    compile_module module_file, module_filename
  end
end

#compress_applicationObject



224
225
226
227
228
229
230
231
232
233
234
235
236
# File 'lib/ninjs/project.rb', line 224

def compress_application
  app_root = File.expand_path "#{@config.dest_dir}"
  modules = Dir.entries(app_root)
  modules.reject! { |file| file =~ /^\./ }

  modules.each do |module_file|
    full_path = "#{app_root}/#{module_file}"
    uncompressed = File.open(full_path, "r").readlines.join('')
    File.open(full_path, "w+") do |module_file|
      module_file << JSMin.minify(uncompressed)
    end
  end
end

#createObject



33
34
35
36
37
38
39
40
41
42
# File 'lib/ninjs/project.rb', line 33

def create
  puts Ninjs::Notification.notice "Creating the #{@config.name} project in #{@root}" 
  create_project_scaffold
  @config.write
  create_ninjs_lib_file
  create_utility_lib_file
  create_ninjs_application_file
  import_rakefile
  import_spec_files
end

#create_ninjs_application_fileObject



79
80
81
82
83
84
85
# File 'lib/ninjs/project.rb', line 79

def create_ninjs_application_file
  File.open("#{@root}/application/#{@config.name.downcase}.js", "w+") do |file|
    file << "//-- This file was automatically generated by Ninjs @ #{Time.now.to_s} DO NOT EDIT THIS FILE --//\n"
    file << File.open("#{@root}/lib/nin.js", 'r').readlines.join('')
    file << "\nvar #{@config.name} = new NinjsApplication();"
  end
end

#create_ninjs_lib_fileObject



52
53
54
55
56
57
58
59
60
61
62
63
64
# File 'lib/ninjs/project.rb', line 52

def create_ninjs_lib_file
  operation = File.exists?("#{@root}/lib/nin.js") ? 'updated' : 'created'
  ninjs_lib_secretary = Sprockets::Secretary.new(
    :root         => "#{Ninjs::BASE_DIR}",
    :load_path    => ["repository"],
    source_files: ["repository/ninjs/core/nin.js"],
    interpolate_constants: false
  )

  ninjs_lib_secretary.concatenation.save_to "#{@root}/lib/nin.js"

  puts Ninjs::Notification.added "lib/nin.js #{operation}"
end

#create_project_scaffoldObject



44
45
46
47
48
49
50
# File 'lib/ninjs/project.rb', line 44

def create_project_scaffold
  Dir.mkdir "#{@root}" unless File.exists? "#{@root}"
  Ninjs::Manifest.directories.each do |folder|
    puts Ninjs::Notification.added "#{folder} created" unless File.exists? "#{@root}/#{folder}"
    Dir.mkdir "#{@root}/#{folder}" unless File.exists? "#{@root}/#{folder}"
  end
end

#create_utility_lib_fileObject



66
67
68
69
70
71
72
73
74
75
76
77
# File 'lib/ninjs/project.rb', line 66

def create_utility_lib_file
  utility_lib_secretary = Sprockets::Secretary.new(
    root: "#{Ninjs::BASE_DIR}",
    load_path: ["repository"],
    source_files: ["repository/ninjs/utilities/all.js"],
    interpolate_constants: false
  )
  
  utility_lib_secretary.concatenation.save_to "#{@root}/lib/utilities.js"
  
  puts Ninjs::Notification.added "lib/utilities.js created"
end

#get_directory_script_filesObject



119
120
121
122
123
124
# File 'lib/ninjs/project.rb', line 119

def get_directory_script_files
  script_files = Array.new
  Dir["#{@root}/**/*.js"].each do |file|
    script_files << file unless file.match(/application\/|tests\//)
  end
end

#get_modulesObject



126
127
128
129
130
131
132
133
134
135
# File 'lib/ninjs/project.rb', line 126

def get_modules
  @modules = Array.new
  if @config.src_dir.is_a? Array
    @config.src_dir.each do |directory| 
      add_scripts_to_models File.expand_path(directory, @root)
    end 
  else
    add_scripts_to_models File.expand_path(@config.src_dir, @root)
  end
end

#import_rakefileObject



87
88
89
# File 'lib/ninjs/project.rb', line 87

def import_rakefile
  FileUtils.cp "#{Ninjs::BASE_DIR}/repository/ninjs/Rakefile", "#{@root}/Rakefile"
end

#import_spec_file(src, dest) ⇒ Object



106
107
108
# File 'lib/ninjs/project.rb', line 106

def import_spec_file(src, dest)
  FileUtils.cp "#{Ninjs::BASE_DIR}/#{src}", "#{@root}/#{dest}"
end

#import_spec_filesObject



91
92
93
94
95
96
97
98
99
100
101
102
103
104
# File 'lib/ninjs/project.rb', line 91

def import_spec_files
  {
    'repository/ninjs/spec/javascripts/application_spec.js' => 'spec/javascripts/',
    'repository/ninjs/spec/javascripts/array_utility_spec.js' => 'spec/javascripts/',
    'repository/ninjs/spec/javascripts/existence_spec.js' => 'spec/javascripts/',
    'repository/ninjs/spec/javascripts/extension_spec.js' => 'spec/javascripts/',
    'repository/ninjs/spec/javascripts/module_spec.js' => 'spec/javascripts/',
    'repository/ninjs/spec/javascripts/string_utility_spec.js' => 'spec/javascripts/',
    'repository/ninjs/spec/javascripts/support/jasmine_config.rb' => 'spec/javascripts/support',
    'repository/ninjs/spec/javascripts/support/jasmine_runner.rb' => 'spec/javascripts/support',
    'templates/test-index.html' => 'spec/index.html',
    'templates/jasmine.yml' => 'spec/javascripts/support/'
  }.each { |src, dest| import_spec_file src, dest }
end

#updateObject



110
111
112
113
114
115
116
117
# File 'lib/ninjs/project.rb', line 110

def update
  get_modules
  compile_modules
  update_application_file
  compress_application if @config.output == 'compressed'
  puts Ninjs::Notification.log "application updated" unless @errors
  @errors = false
end

#update_application_fileObject



172
173
174
175
176
177
178
179
180
181
# File 'lib/ninjs/project.rb', line 172

def update_application_file
  application_file = "#{@root}/#{@config.dest_dir}/#{@config.name.downcase}.js"
  File.open(application_file, "w+") do |file|
    write_dependencies(file)
    write_core(file)
    write_autoload(file)
  end
  
  compile_application_file application_file
end

#write_autoload(file) ⇒ Object



197
198
199
200
201
202
203
# File 'lib/ninjs/project.rb', line 197

def write_autoload(file)
  @config.autoload.each do |auto_file|
    file << "/*---------- Ninjs autoload #{auto_file} ----------*/"
    file << "\n//= require #{auto_file}\n\n" if auto_file.match(/^\<.+\>$/)
    file << "\n//= require \"#{auto_file}\"\n\n" if auto_file.match(/^[^\<].+|[^\>]$/)
  end
end

#write_core(file) ⇒ Object



191
192
193
194
195
# File 'lib/ninjs/project.rb', line 191

def write_core(file)      
  file << "/*---------- Ninjs core ../lib/nin.js ----------*/\n"
  file << "//= require \"../lib/nin.js\"\n\n"
  file << "\nvar #{@config.name} = new NinjsApplication();\n\n"
end

#write_dependencies(file) ⇒ Object



183
184
185
186
187
188
189
# File 'lib/ninjs/project.rb', line 183

def write_dependencies(file)
  @config.dependencies.each do |dependency|
    file << "/*---------- #{dependency} ----------*/"
    file << "\n//= require #{dependency}\n\n" if dependency.match(/^\<.+\>$/)
    file << "\n//= require \"#{dependency}\"\n\n" if dependency.match(/^[^\<].+|[^\>]$/)
  end
end