class AngularInitializer
Public Class Methods
new()
click to toggle source
# File lib/oa_angular_setup/initialize_angular.rb, line 6 def initialize config = OaAngularSetup.configuration @app_name = config.app_name @factory_name = "#{@app_name}Services" @create_factories = config.create_factories @create_app_js = config.create_app_js @create_controllers = config.create_controllers @url = config.swagger_doc_url @destination = "#{Rails.root}#{config.destination}" end
Public Instance Methods
add_angular()
click to toggle source
# File lib/oa_angular_setup/initialize_angular.rb, line 17 def add_angular #add in swagger ui if OaAngularSetup.configuration.add_swaggger_ui if !File.exists?("#{Rails.root}/public/api/docs/") #get files and move into place Dir.mkdir("#{Rails.root}/public/api") unless File.exists?("#{Rails.root}/public/api") system "npm install swagger-ui" unless File.exists?("#{Rails.root}/node_modules/swagger-ui/") system "cp -R #{Rails.root}/node_modules/swagger-ui/dist #{Rails.root}/public/api/docs" #replace dummy url file_name = "#{Rails.root}/public/api/docs/index.html" text = File.read(file_name) new_contents = text.gsub('http://petstore.swagger.io/v2/swagger.json', @url) File.open(file_name, "w") {|file| file.puts new_contents } end end end
output_to_angular(outfile_or_string, method, path)
click to toggle source
# File lib/oa_angular_setup/initialize_angular.rb, line 113 def output_to_angular(outfile_or_string, method, path) string = "" # assuming only called for PUT and GET methods if method == 'GET' command = 'show' elsif method == 'PUT' command = 'update' else puts "problem. method not GET or PUT" return end if path.include?("id") ep_path = path.split('/') if ep_path[4].nil? string += " #{command}: {method:'#{method}'}" else action = ep_path[4].split(".")[0] if method == 'GET' string += " #{action}: {method:'#{method}', isArray:true, params:{action:'#{action}'}}" else string += " #{action}: {method:'#{method}', params:{action:'#{action}'}}" end end else string += " query: {method:'#{method}', isArray:true}" end if outfile_or_string.is_a?(File) outfile_or_string.write(string) else return string end end
run()
click to toggle source
# File lib/oa_angular_setup/initialize_angular.rb, line 70 def run Dir.mkdir("#{@destination}") unless File.exists?("#{@destination}") add_angular mechanize = Mechanize.new page = mechanize.get(@url) body = JSON.parse(page.body) if @create_app_js app_js_file = File.open("#{@destination}#{@app_name}.js", 'w') if @create_factories app_js_file.write("var #{@app_name} = angular.module('#{@app_name}', ['ngRoute', '#{@factory_name}']); \n") else app_js_file.write("var #{@app_name} = angular.module('#{@app_name}', ['ngRoute']); \n") end app_js_file.write("\n "); app_js_file.write("#{@app_name}.config(['$routeProvider', function($routeProvider) { \n"); app_js_file.write(" $routeProvider.\n") end body["apis"].each do |api| model = api["path"].split('.')[0] api_page = mechanize.get(@url + model) api_body = JSON.parse(api_page.body) write_factories(api_body["apis"], model, @factory_name) if @create_factories write_app_js(api_body["apis"], model, app_js_file) if @create_app_js write_controllers(api_body["apis"], model, @app_name) if @create_controllers end if @create_app_js app_js_file.write(" otherwise({ \n") app_js_file.write(" redirectTo: '/' \n") app_js_file.write(" }); \n") app_js_file.write("}]); \n") if @create_factories app_js_file.write("\n") app_js_file.write("var #{@factory_name} = angular.module('#{@factory_name}', ['ngResource']); \n") end app_js_file.close end write_backups end
update()
click to toggle source
# File lib/oa_angular_setup/initialize_angular.rb, line 35 def update mechanize = Mechanize.new page = mechanize.get(@url) body = JSON.parse(page.body) app_bodies = {} body["apis"].each do |api| model = api["path"].split('.')[0] api_page = mechanize.get(@url + model) api_body = JSON.parse(api_page.body) app_bodies[model] = api_body["apis"] update_factory(api_body["apis"], model, @factory_name) if @create_factories update_controllers(api_body["apis"], model, @app_name) if @create_controllers end update_app_js(app_bodies) if @create_app_js write_backups end
update_app_js(apis)
click to toggle source
# File lib/oa_angular_setup/initialize_angular.rb, line 346 def update_app_js(apis) output, edited_routes = [],[] file_contents = File.read("#{@destination}#{@app_name}.js") routes = file_contents.scan(/when\(.*?}\)\./im) route_paths = file_contents.scan(/when\('(.*?)'/im).flatten if @create_app_js if @create_factories output.push("var #{@app_name} = angular.module('#{@app_name}', ['ngRoute', '#{@factory_name}']); \n") else output.push("var #{@app_name} = angular.module('#{@app_name}', ['ngRoute']); \n") end output.push("\n #{@app_name}.config(['$routeProvider', function($routeProvider) { \n $routeProvider.\n"); end routes.each_with_index do |route, index| output.push(" #{route} \n ") end apis.each do |model_name, model_api| model = model_name.delete('/') model_api.each do |endpoint| endpoint["operations"].each do |op| string , route_path = "","" case op["method"] when /GET/ ep_path = endpoint["path"].split('/') if ep_path[4].nil? if endpoint["path"].include?("id") route_path = "/#{model}/:id" string += " when('#{route_path}', { \n" string += " template@url: '/angular/templates/#{model}/show.html', \n" string += " controller: '#{model.capitalize}ShowCtrl' \n" else ctrl = 'index' route_path = "/#{model}" string += " when('#{route_path}', { \n" string += " template@url: '/angular/templates/#{model}/index.html',\n" string += " controller: '#{model.capitalize}IndexCtrl' \n" end string += " }). \n" end when /PUT/ ep_path = endpoint["path"].split('/') if ep_path[4].nil? route_path = "/#{model}/:id/edit" string += " when('#{route_path}', { \n" string += " template@url: '/angular/templates/#{model}/edit.html', \n" string += " controller: '#{model.capitalize}EditCtrl' \n" string += " }). \n" end when /POST/ route_path = "/#{model}/new" string += " when('#{route_path}', { \n" string += " template@url: '/angular/templates/#{model}/new.html', \n" string += " controller: '#{model.capitalize}NewCtrl' \n" string += " }). \n" end output.push(string) unless route_paths.include?(route_path) end end end output.push(" otherwise({ \n") output.push(" redirectTo: '/' \n") output.push(" }); \n") output.push("}]); \n") if @create_factories output.push("\n") output.push("var #{@factory_name} = angular.module('#{@factory_name}', ['ngResource']); \n") end app_js_file = File.open("#{@destination}#{@app_name}.js", 'w') app_js_file.write(output.join) app_js_file.close end
update_controllers(apis, model_name, app_name)
click to toggle source
# File lib/oa_angular_setup/initialize_angular.rb, line 321 def update_controllers(apis, model_name, app_name) Dir.mkdir("#{@destination}controllers") unless File.exists?("#{@destination}controllers") return write_controllers(apis, model_name, app_name) unless File.exists?("#{@destination}controllers/#{model_name}_controllers.js") output, edited_controller_titles = [], [] model = model_name.delete('/') file_contents = File.read("#{@destination}controllers/#{model}_controllers.js") controller_names = file_contents.scan(/controller\('(.*?)'/im).flatten controllers = file_contents.scan(/angular.module.*?}\]\);/im) controllers.each do |controller| output.push(controller+" \n \n") end apis.each do |endpoint| endpoint["operations"].each do |op| string,controller_title = write_controller(model, endpoint, op) output.push(string) unless controller_names.include?(controller_title) end end outfile = File.open("#{@destination}controllers/#{model}_controllers.js", 'w') outfile.write(output.join) outfile.close end
update_factory(apis, model, name)
click to toggle source
# File lib/oa_angular_setup/initialize_angular.rb, line 226 def update_factory(apis, model, name) Dir.mkdir("#{@destination}factories") unless File.exists?("#{@destination}factories") return write_factories(apis, model, name) unless File.exists?("#{@destination}factories/#{model}_factory.js") fh1 = name + ".factory('" fh2 = "', ['$resource', function($resource){\n" fname = "#{@destination}factories/" + model.gsub("/","") + "_factory.js" # backup_contents = File.read("#{@destination}backups/factories/" + model.gsub("/","") + "_factory.js").split("\n") file_contents = File.read(fname) file_contents_lines = file_contents.split("\n") first_lines = file_contents_lines.shift(2) output_string = first_lines.join("\n")+"\n" file_contents_lines.pop(2) #drop last two closing lines so they arent added twice paths = file_contents.scan(/\n\s*(\w*?):/i).flatten output = [] file_contents_lines.each_with_index do |line, index| output.push(line.chomp(",")) end apis.each do |endpoint| endpoint["operations"].each do |op| string = write_factory(endpoint, op) next if output.include?(string) next if(paths.include?(string.split(":")[0])) string = " // #{op['summary']} \n"+string output.push(string) end end output_string += output.join(",\n") output_string += "\n });\n" output_string += "}]);\n" outfile = File.open(fname, 'w') outfile.write(output_string) outfile.close end
write_app_js(apis, model_name, outfile)
click to toggle source
# File lib/oa_angular_setup/initialize_angular.rb, line 173 def write_app_js(apis, model_name, outfile) model = model_name.delete('/') apis.each do |endpoint| endpoint["operations"].each do |op| case op["method"] when /GET/ ep_path = endpoint["path"].split('/') if ep_path[4].nil? if endpoint["path"].include?("id") outfile.write(" when('/#{model}/:id', { \n") outfile.write(" template@url: '/angular/templates/#{model}/show.html', \n") outfile.write(" controller: '#{model.capitalize}ShowCtrl' \n") else ctrl = 'index' outfile.write(" when('/#{model}', { \n") outfile.write(" template@url: '/angular/templates/#{model}/index.html',\n") outfile.write(" controller: '#{model.capitalize}IndexCtrl' \n") end outfile.write(" }). \n") end when /PUT/ ep_path = endpoint["path"].split('/') if ep_path[4].nil? outfile.write(" when('/#{model}/:id/edit', { \n") outfile.write(" template@url: '/angular/templates/#{model}/edit.html', \n") outfile.write(" controller: '#{model.capitalize}EditCtrl' \n") outfile.write(" }). \n") end when /POST/ outfile.write(" when('/#{model}/new', { \n") outfile.write(" template@url: '/angular/templates/#{model}/new.html', \n") outfile.write(" controller: '#{model.capitalize}NewCtrl' \n") outfile.write(" }). \n") end end end end
write_backups()
click to toggle source
# File lib/oa_angular_setup/initialize_angular.rb, line 55 def write_backups Dir.mkdir("#{@destination}backups/") unless File.exists?("#{@destination}backups/") if @create_factories Dir.mkdir("#{@destination}backups/factories/") unless File.exists?("#{@destination}backups/factories/") FileUtils.cp_r "#{@destination}factories/.", "#{@destination}backups/factories/" end if @create_factories Dir.mkdir("#{@destination}backups/controllers/") unless File.exists?("#{@destination}backups/controllers/") FileUtils.cp_r "#{@destination}controllers/.", "#{@destination}backups/controllers/" end if @create_app_js FileUtils.cp "#{@destination}#{@app_name}.js", "#{@destination}backups/#{@app_name}.js" end end
write_controller(model, endpoint, op)
click to toggle source
# File lib/oa_angular_setup/initialize_angular.rb, line 265 def write_controller(model, endpoint, op) string = "" controller_title = "" service = model.chomp('s').capitalize ep_path = endpoint["path"].split('/') case op["method"] when /GET/ if ep_path[4].nil? if endpoint["path"].include?("id") controller_title = "#{model.capitalize}ShowCtrl" string += "angular.module('#{@app_name}').controller('#{controller_title}', ['$scope', '$routeParams', '#{service}', function ($scope, $routeParams, #{service}) { \n" string += " $scope.id = $routeParams.id; \n" string += "}]); \n" string += " \n" else controller_title = "#{model.capitalize}IndexCtrl" string += "angular.module('#{@app_name}').controller('#{controller_title}', ['$scope', '#{service}', function ($scope, #{service}) { \n" string += " $scope.#{model} = #{service}.query(); \n" string += "}]); \n" string += " \n" end end when /PUT/ if ep_path[4].nil? controller_title = "#{model.capitalize}EditCtrl" string += "angular.module('#{@app_name}').controller('#{controller_title}', ['$scope', '$routeParams', '#{service}', function ($scope, $routeParams, #{service}) { \n" string += " $scope.id = $routeParams.id; \n" string += "}]); \n" string += " \n" end when /POST/ controller_title = "#{model.capitalize}NewCtrl" string += "angular.module('#{@app_name}').controller('#{controller_title}', ['$scope', '#{service}', function ($scope, #{service}) { \n" string += "}]); \n" string += " \n" end return string, controller_title end
write_controllers(apis, model_name, app_name)
click to toggle source
# File lib/oa_angular_setup/initialize_angular.rb, line 211 def write_controllers(apis, model_name, app_name) Dir.mkdir("#{@destination}controllers") unless File.exists?("#{@destination}controllers") model = model_name.delete('/') output = [] apis.each do |endpoint| endpoint["operations"].each do |op| string,controller_title = write_controller(model, endpoint, op) output.push(string) end end outfile = File.open("#{@destination}controllers/#{model}_controllers.js", 'w') outfile.write(output.join) outfile.close end
write_factories(apis, model, name)
click to toggle source
# File lib/oa_angular_setup/initialize_angular.rb, line 146 def write_factories(apis, model, name) Dir.mkdir("#{@destination}factories") unless File.exists?("#{@destination}factories") fh1 = name + ".factory('" fh2 = "', ['$resource', function($resource){\n" output = [] fname = "#{@destination}factories/" + model.gsub("/","") + "_factory.js" output_string = fh1 + model.gsub("/","").chomp('s').capitalize + fh2 output_string += " return $resource('api/v1" + model + "/:id/:action', {}, { \n" apis.each do |endpoint| endpoint["operations"].each do |op| string = write_factory(endpoint, op) string = " // #{op['summary']} \n"+string output.push(string) end end output_string += output.join(",\n") output_string += "\n });\n" output_string += "}]);\n" outfile = File.open(fname, 'w') outfile.write(output_string) outfile.close end
write_factory(endpoint, op)
click to toggle source
# File lib/oa_angular_setup/initialize_angular.rb, line 305 def write_factory(endpoint, op) string = "" case op["method"] when /GET/ string = output_to_angular(string, op["method"], endpoint["path"]) when /PUT/ string = output_to_angular(string, op["method"], endpoint["path"]) when /POST/ string = " create: {method:'POST'}" when /DELETE/ string = " destroy: {method:'DELETE'}" end return string end