oa_angular_setup 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 96ee39082d3740903d1372209ed3a6bc60261d49
4
+ data.tar.gz: 9de1f74bf4e600d44e709ea866799e192560e8a1
5
+ SHA512:
6
+ metadata.gz: 28cfadf7cca21ad4b834c26e44e4a0d8ea61228600b182fccc27e313c73d4caf4d6f85c28bdc10f9847a1276a6be52cd2383390d0c38306d1d3a704c4f8d7bae
7
+ data.tar.gz: c6f0162f6b31331878bbb776fb10afba8bcd93175bd29bc406f5173b3e763d5269863335cbb0c2a9fc3c39b4721e1e1453042b2394e22a6f2b8685604e0783ca
@@ -0,0 +1,16 @@
1
+ require 'rails/generators/base'
2
+
3
+ module OaAngularSetup
4
+ module Generators
5
+ class InstallGenerator < ::Rails::Generators::Base
6
+ source_root File.expand_path("../../templates", __FILE__)
7
+ desc "Creates OaAngularSetup initializer for your application"
8
+
9
+ def copy_initializer
10
+ template "oa_angular_setup_initializer.rb", "config/initializers/oa_angular_setup.rb"
11
+
12
+ puts "Install complete! Checkout 'config/initializers/oa_angular_setup.rb' to edit the configuration for oa_angular_setup."
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,24 @@
1
+ OaAngularSetup.configure do |config|
2
+ # Set the options to what makes sense for you
3
+
4
+ #Name of your app (default: 'App')
5
+ config.app_name = 'App'
6
+
7
+ #Create app.js file true/false (default: true)
8
+ config.create_app_js = true
9
+
10
+ #Create factories true/false (default: true)
11
+ config.create_factories = true
12
+
13
+ #Create controllers true/false (default: true)
14
+ config.create_controllers = true
15
+
16
+ #The URL where the gem can find your swagger documentation (default: "http://localhost:3000/api/swagger_doc")
17
+ config.swagger_doc_url = "http://localhost:3000/api/swagger_doc"
18
+
19
+ #The Destination where the files will be created, starting from your Rails.root . (default: "/public/angular/")
20
+ config.destination = "/public/angular/"
21
+
22
+ #Download and implement swagger-ui true/false (default: true)
23
+ config.add_swaggger_ui = true
24
+ end
@@ -0,0 +1,420 @@
1
+ require 'mechanize'
2
+ require 'nokogiri'
3
+ require 'rails'
4
+ class AngularInitializer
5
+
6
+ def initialize
7
+ config = OaAngularSetup.configuration
8
+ @app_name = config.app_name
9
+ @factory_name = "#{@app_name}Services"
10
+ @create_factories = config.create_factories
11
+ @create_app_js = config.create_app_js
12
+ @create_controllers = config.create_controllers
13
+ @url = config.swagger_doc_url
14
+ @destination = "#{Rails.root}#{config.destination}"
15
+ end
16
+
17
+ def add_angular
18
+ #add in swagger ui
19
+ if OaAngularSetup.configuration.add_swaggger_ui
20
+ if !File.exists?("#{Rails.root}/public/api/docs/")
21
+ #get files and move into place
22
+ Dir.mkdir("#{Rails.root}/public/api") unless File.exists?("#{Rails.root}/public/api")
23
+ system "npm install swagger-ui" unless File.exists?("#{Rails.root}/node_modules/swagger-ui/")
24
+ system "cp -R #{Rails.root}/node_modules/swagger-ui/dist #{Rails.root}/public/api/docs"
25
+
26
+ #replace dummy url
27
+ file_name = "#{Rails.root}/public/api/docs/index.html"
28
+ text = File.read(file_name)
29
+ new_contents = text.gsub('http://petstore.swagger.io/v2/swagger.json', @url)
30
+ File.open(file_name, "w") {|file| file.puts new_contents }
31
+ end
32
+ end
33
+ end
34
+
35
+ def update
36
+ mechanize = Mechanize.new
37
+ page = mechanize.get(@url)
38
+ body = JSON.parse(page.body)
39
+ app_bodies = {}
40
+
41
+ body["apis"].each do |api|
42
+ model = api["path"].split('.')[0]
43
+ api_page = mechanize.get(@url + model)
44
+ api_body = JSON.parse(api_page.body)
45
+ app_bodies[model] = api_body["apis"]
46
+
47
+ update_factory(api_body["apis"], model, @factory_name) if @create_factories
48
+ update_controllers(api_body["apis"], model, @app_name) if @create_controllers
49
+ end
50
+ update_app_js(app_bodies) if @create_app_js
51
+
52
+ write_backups
53
+ end
54
+
55
+ def write_backups
56
+ Dir.mkdir("#{@destination}backups/") unless File.exists?("#{@destination}backups/")
57
+ if @create_factories
58
+ Dir.mkdir("#{@destination}backups/factories/") unless File.exists?("#{@destination}backups/factories/")
59
+ FileUtils.cp_r "#{@destination}factories/.", "#{@destination}backups/factories/"
60
+ end
61
+ if @create_factories
62
+ Dir.mkdir("#{@destination}backups/controllers/") unless File.exists?("#{@destination}backups/controllers/")
63
+ FileUtils.cp_r "#{@destination}controllers/.", "#{@destination}backups/controllers/"
64
+ end
65
+ if @create_app_js
66
+ FileUtils.cp "#{@destination}#{@app_name}.js", "#{@destination}backups/#{@app_name}.js"
67
+ end
68
+ end
69
+
70
+ def run
71
+ Dir.mkdir("#{@destination}") unless File.exists?("#{@destination}")
72
+ mechanize = Mechanize.new
73
+ page = mechanize.get(@url)
74
+ body = JSON.parse(page.body)
75
+
76
+ if @create_app_js
77
+ app_js_file = File.open("#{@destination}#{@app_name}.js", 'w')
78
+ if @create_factories
79
+ app_js_file.write("var #{@app_name} = angular.module('#{@app_name}', ['ngRoute', '#{@factory_name}']); \n")
80
+ else
81
+ app_js_file.write("var #{@app_name} = angular.module('#{@app_name}', ['ngRoute']); \n")
82
+ end
83
+ app_js_file.write("\n ");
84
+ app_js_file.write("#{@app_name}.config(['$routeProvider', function($routeProvider) { \n");
85
+ app_js_file.write(" $routeProvider.\n")
86
+ end
87
+
88
+ body["apis"].each do |api|
89
+ model = api["path"].split('.')[0]
90
+ api_page = mechanize.get(@url + model)
91
+ api_body = JSON.parse(api_page.body)
92
+
93
+ write_factories(api_body["apis"], model, @factory_name) if @create_factories
94
+ write_app_js(api_body["apis"], model, app_js_file) if @create_app_js
95
+ write_controllers(api_body["apis"], model, @app_name) if @create_controllers
96
+ end
97
+
98
+ if @create_app_js
99
+ app_js_file.write(" otherwise({ \n")
100
+ app_js_file.write(" redirectTo: '/' \n")
101
+ app_js_file.write(" }); \n")
102
+ app_js_file.write("}]); \n")
103
+ if @create_factories
104
+ app_js_file.write("\n")
105
+ app_js_file.write("var #{@factory_name} = angular.module('#{@factory_name}', ['ngResource']); \n")
106
+ end
107
+ app_js_file.close
108
+ end
109
+ write_backups
110
+ end
111
+
112
+ def output_to_angular(outfile_or_string, method, path)
113
+ string = ""
114
+ # assuming only called for PUT and GET methods
115
+ if method == 'GET'
116
+ command = 'show'
117
+ elsif method == 'PUT'
118
+ command = 'update'
119
+ else
120
+ puts "problem. method not GET or PUT"
121
+ return
122
+ end
123
+ if path.include?("id")
124
+ ep_path = path.split('/')
125
+ if ep_path[4].nil?
126
+ string += " #{command}: {method:'#{method}'}"
127
+ else
128
+ action = ep_path[4].split(".")[0]
129
+ if method == 'GET'
130
+ string += " #{action}: {method:'#{method}', isArray:true, params:{action:'#{action}'}}"
131
+ else
132
+ string += " #{action}: {method:'#{method}', params:{action:'#{action}'}}"
133
+ end
134
+ end
135
+ else
136
+ string += " query: {method:'#{method}', isArray:true}"
137
+ end
138
+ if outfile_or_string.is_a?(File)
139
+ outfile_or_string.write(string)
140
+ else
141
+ return string
142
+ end
143
+ end
144
+
145
+ def write_factories(apis, model, name)
146
+ Dir.mkdir("#{@destination}factories") unless File.exists?("#{@destination}factories")
147
+
148
+ fh1 = name + ".factory('"
149
+ fh2 = "', ['$resource', function($resource){\n"
150
+ output = []
151
+ fname = "#{@destination}factories/" + model.gsub("/","") + "_factory.js"
152
+ output_string = fh1 + model.gsub("/","").chomp('s').capitalize + fh2
153
+ output_string += " return $resource('api/v1" + model + "/:id/:action', {}, { \n"
154
+
155
+ apis.each do |endpoint|
156
+ endpoint["operations"].each do |op|
157
+ string = write_factory(endpoint, op)
158
+ string = " // #{op['summary']} \n"+string
159
+ output.push(string)
160
+ end
161
+ end
162
+
163
+ output_string += output.join(",\n")
164
+ output_string += "\n });\n"
165
+ output_string += "}]);\n"
166
+
167
+ outfile = File.open(fname, 'w')
168
+ outfile.write(output_string)
169
+ outfile.close
170
+ end
171
+
172
+ def write_app_js(apis, model_name, outfile)
173
+ model = model_name.delete('/')
174
+ apis.each do |endpoint|
175
+ endpoint["operations"].each do |op|
176
+ case op["method"]
177
+ when /GET/
178
+ ep_path = endpoint["path"].split('/')
179
+ if ep_path[4].nil?
180
+ if endpoint["path"].include?("id")
181
+ outfile.write(" when('/#{model}/:id', { \n")
182
+ outfile.write(" template@url: '/angular/templates/#{model}/show.html', \n")
183
+ outfile.write(" controller: '#{model.capitalize}ShowCtrl' \n")
184
+ else
185
+ ctrl = 'index'
186
+ outfile.write(" when('/#{model}', { \n")
187
+ outfile.write(" template@url: '/angular/templates/#{model}/index.html',\n")
188
+ outfile.write(" controller: '#{model.capitalize}IndexCtrl' \n")
189
+ end
190
+ outfile.write(" }). \n")
191
+ end
192
+ when /PUT/
193
+ ep_path = endpoint["path"].split('/')
194
+ if ep_path[4].nil?
195
+ outfile.write(" when('/#{model}/:id/edit', { \n")
196
+ outfile.write(" template@url: '/angular/templates/#{model}/edit.html', \n")
197
+ outfile.write(" controller: '#{model.capitalize}EditCtrl' \n")
198
+ outfile.write(" }). \n")
199
+ end
200
+ when /POST/
201
+ outfile.write(" when('/#{model}/new', { \n")
202
+ outfile.write(" template@url: '/angular/templates/#{model}/new.html', \n")
203
+ outfile.write(" controller: '#{model.capitalize}NewCtrl' \n")
204
+ outfile.write(" }). \n")
205
+ end
206
+ end
207
+ end
208
+ end
209
+
210
+ def write_controllers(apis, model_name, app_name)
211
+ Dir.mkdir("#{@destination}controllers") unless File.exists?("#{@destination}controllers")
212
+ model = model_name.delete('/')
213
+ output = []
214
+ apis.each do |endpoint|
215
+ endpoint["operations"].each do |op|
216
+ string,controller_title = write_controller(model, endpoint, op)
217
+ output.push(string)
218
+ end
219
+ end
220
+ outfile = File.open("#{@destination}controllers/#{model}_controllers.js", 'w')
221
+ outfile.write(output.join)
222
+ outfile.close
223
+ end
224
+
225
+ def update_factory(apis, model, name)
226
+ Dir.mkdir("#{@destination}factories") unless File.exists?("#{@destination}factories")
227
+
228
+ fh1 = name + ".factory('"
229
+ fh2 = "', ['$resource', function($resource){\n"
230
+ fname = "#{@destination}factories/" + model.gsub("/","") + "_factory.js"
231
+ # backup_contents = File.read("#{@destination}backups/factories/" + model.gsub("/","") + "_factory.js").split("\n")
232
+ file_contents = File.read(fname)
233
+ file_contents_lines = file_contents.split("\n")
234
+ first_lines = file_contents_lines.shift(2)
235
+ output_string = first_lines.join("\n")+"\n"
236
+ file_contents_lines.pop(2) #drop last two closing lines so they arent added twice
237
+ paths = file_contents.scan(/\n\s*(\w*?):/i).flatten
238
+
239
+ output = []
240
+ file_contents_lines.each_with_index do |line, index|
241
+ output.push(line.chomp(","))
242
+ end
243
+
244
+ apis.each do |endpoint|
245
+ endpoint["operations"].each do |op|
246
+ string = write_factory(endpoint, op)
247
+ next if output.include?(string)
248
+ next if(paths.include?(string.split(":")[0]))
249
+ string = " // #{op['summary']} \n"+string
250
+ output.push(string)
251
+ end
252
+ end
253
+
254
+ output_string += output.join(",\n")
255
+ output_string += "\n });\n"
256
+ output_string += "}]);\n"
257
+
258
+ outfile = File.open(fname, 'w')
259
+ outfile.write(output_string)
260
+ outfile.close
261
+ end
262
+
263
+ def write_controller(model, endpoint, op)
264
+ string = ""
265
+ controller_title = ""
266
+ service = model.chomp('s').capitalize
267
+ ep_path = endpoint["path"].split('/')
268
+ case op["method"]
269
+ when /GET/
270
+ if ep_path[4].nil?
271
+ if endpoint["path"].include?("id")
272
+ controller_title = "#{model.capitalize}ShowCtrl"
273
+ string += "angular.module('#{@app_name}').controller('#{controller_title}', ['$scope', '$routeParams', '#{service}', function ($scope, $routeParams, #{service}) { \n"
274
+ string += " $scope.id = $routeParams.id; \n"
275
+ string += "}]); \n"
276
+ string += " \n"
277
+ else
278
+ controller_title = "#{model.capitalize}IndexCtrl"
279
+ string += "angular.module('#{@app_name}').controller('#{controller_title}', ['$scope', '#{service}', function ($scope, #{service}) { \n"
280
+ string += " $scope.#{model} = #{service}.query(); \n"
281
+ string += "}]); \n"
282
+ string += " \n"
283
+ end
284
+ end
285
+ when /PUT/
286
+ if ep_path[4].nil?
287
+ controller_title = "#{model.capitalize}EditCtrl"
288
+ string += "angular.module('#{@app_name}').controller('#{controller_title}', ['$scope', '$routeParams', '#{service}', function ($scope, $routeParams, #{service}) { \n"
289
+ string += " $scope.id = $routeParams.id; \n"
290
+ string += "}]); \n"
291
+ string += " \n"
292
+ end
293
+ when /POST/
294
+ controller_title = "#{model.capitalize}NewCtrl"
295
+ string += "angular.module('#{@app_name}').controller('#{controller_title}', ['$scope', '#{service}', function ($scope, #{service}) { \n"
296
+ string += "}]); \n"
297
+ string += " \n"
298
+ end
299
+
300
+ return string, controller_title
301
+ end
302
+
303
+ def write_factory(endpoint, op)
304
+ string = ""
305
+ case op["method"]
306
+ when /GET/
307
+ string = output_to_angular(string, op["method"], endpoint["path"])
308
+ when /PUT/
309
+ string = output_to_angular(string, op["method"], endpoint["path"])
310
+ when /POST/
311
+ string = " create: {method:'POST'}"
312
+ when /DELETE/
313
+ string = " destroy: {method:'DELETE'}"
314
+ end
315
+
316
+ return string
317
+ end
318
+
319
+ def update_controllers(apis, model_name, app_name)
320
+ Dir.mkdir("#{@destination}controllers") unless File.exists?("#{@destination}controllers")
321
+ output, edited_controller_titles = [], []
322
+ model = model_name.delete('/')
323
+ file_contents = File.read("#{@destination}controllers/#{model}_controllers.js")
324
+ controller_names = file_contents.scan(/controller\('(.*?)'/im).flatten
325
+ controllers = file_contents.scan(/angular.module.*?}\]\);/im)
326
+
327
+ controllers.each do |controller|
328
+ output.push(controller+" \n \n")
329
+ end
330
+
331
+ apis.each do |endpoint|
332
+ endpoint["operations"].each do |op|
333
+ string,controller_title = write_controller(model, endpoint, op)
334
+
335
+ output.push(string) unless controller_names.include?(controller_title)
336
+ end
337
+ end
338
+ outfile = File.open("#{@destination}controllers/#{model}_controllers.js", 'w')
339
+ outfile.write(output.join)
340
+ outfile.close
341
+ end
342
+
343
+ def update_app_js(apis)
344
+ output, edited_routes = [],[]
345
+ file_contents = File.read("#{@destination}#{@app_name}.js")
346
+ routes = file_contents.scan(/when\(.*?}\)\./im)
347
+ route_paths = file_contents.scan(/when\('(.*?)'/im).flatten
348
+
349
+ if @create_app_js
350
+ if @create_factories
351
+ output.push("var #{@app_name} = angular.module('#{@app_name}', ['ngRoute', '#{@factory_name}']); \n")
352
+ else
353
+ output.push("var #{@app_name} = angular.module('#{@app_name}', ['ngRoute']); \n")
354
+ end
355
+ output.push("\n #{@app_name}.config(['$routeProvider', function($routeProvider) { \n $routeProvider.\n");
356
+ end
357
+
358
+ routes.each_with_index do |route, index|
359
+ output.push(" #{route} \n ")
360
+ end
361
+
362
+ apis.each do |model_name, model_api|
363
+ model = model_name.delete('/')
364
+ model_api.each do |endpoint|
365
+ endpoint["operations"].each do |op|
366
+ string , route_path = "",""
367
+ case op["method"]
368
+ when /GET/
369
+ ep_path = endpoint["path"].split('/')
370
+ if ep_path[4].nil?
371
+ if endpoint["path"].include?("id")
372
+ route_path = "/#{model}/:id"
373
+ string += " when('#{route_path}', { \n"
374
+ string += " template@url: '/angular/templates/#{model}/show.html', \n"
375
+ string += " controller: '#{model.capitalize}ShowCtrl' \n"
376
+ else
377
+ ctrl = 'index'
378
+ route_path = "/#{model}"
379
+ string += " when('#{route_path}', { \n"
380
+ string += " template@url: '/angular/templates/#{model}/index.html',\n"
381
+ string += " controller: '#{model.capitalize}IndexCtrl' \n"
382
+ end
383
+ string += " }). \n"
384
+ end
385
+ when /PUT/
386
+ ep_path = endpoint["path"].split('/')
387
+ if ep_path[4].nil?
388
+ route_path = "/#{model}/:id/edit"
389
+ string += " when('#{route_path}', { \n"
390
+ string += " template@url: '/angular/templates/#{model}/edit.html', \n"
391
+ string += " controller: '#{model.capitalize}EditCtrl' \n"
392
+ string += " }). \n"
393
+ end
394
+ when /POST/
395
+ route_path = "/#{model}/new"
396
+ string += " when('#{route_path}', { \n"
397
+ string += " template@url: '/angular/templates/#{model}/new.html', \n"
398
+ string += " controller: '#{model.capitalize}NewCtrl' \n"
399
+ string += " }). \n"
400
+ end
401
+ output.push(string) unless route_paths.include?(route_path)
402
+
403
+ end
404
+ end
405
+ end
406
+ output.push(" otherwise({ \n")
407
+ output.push(" redirectTo: '/' \n")
408
+ output.push(" }); \n")
409
+ output.push("}]); \n")
410
+ if @create_factories
411
+ output.push("\n")
412
+ output.push("var #{@factory_name} = angular.module('#{@factory_name}', ['ngResource']); \n")
413
+ end
414
+ app_js_file = File.open("#{@destination}#{@app_name}.js", 'w')
415
+ app_js_file.write(output.join)
416
+ app_js_file.close
417
+ end
418
+
419
+ end
420
+
@@ -0,0 +1,3 @@
1
+ module OaAngularSetup
2
+ VERSION = "0.1.0"
3
+ end
@@ -0,0 +1,41 @@
1
+ require "oa_angular_setup/version"
2
+ require "oa_angular_setup/initialize_angular"
3
+ require 'rails'
4
+
5
+ module OaAngularSetup
6
+
7
+ class << self
8
+ attr_accessor :configuration
9
+ def configuration
10
+ @configuration ||= Configuration.new
11
+ end
12
+
13
+ def configure
14
+ yield(configuration)
15
+ end
16
+ end
17
+
18
+
19
+ class Configuration
20
+ attr_accessor :app_name, :create_factories, :create_app_js,
21
+ :create_controllers, :swagger_doc_url, :destination, :add_swaggger_ui
22
+
23
+ def initialize
24
+ @app_name = 'App'
25
+ @create_factories = true
26
+ @create_app_js = true
27
+ @create_controllers = true
28
+ @add_swaggger_ui = true
29
+ @swagger_doc_url = "http://localhost:3000/api/swagger_doc"
30
+ @destination = "/public/angular/"
31
+ end
32
+ end
33
+
34
+ module Rails
35
+ class Railtie < ::Rails::Railtie
36
+ rake_tasks do
37
+ load "tasks/oa_angular_setup.rake"
38
+ end
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,16 @@
1
+ require "oa_angular_setup/initialize_angular"
2
+
3
+ namespace :oa_angular_setup do
4
+
5
+ desc 'Create angular server'
6
+ task :create => :environment do
7
+ initializer = AngularInitializer.new
8
+ initializer.run
9
+ end
10
+
11
+ desc 'Create angular server'
12
+ task :update => :environment do
13
+ initializer = AngularInitializer.new
14
+ initializer.update
15
+ end
16
+ end
metadata ADDED
@@ -0,0 +1,92 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: oa_angular_setup
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Mark VanArsdale
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2015-12-07 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ~>
18
+ - !ruby/object:Gem::Version
19
+ version: '1.10'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ~>
25
+ - !ruby/object:Gem::Version
26
+ version: '1.10'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ~>
32
+ - !ruby/object:Gem::Version
33
+ version: '10.0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ~>
39
+ - !ruby/object:Gem::Version
40
+ version: '10.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rspec
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ~>
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ~>
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ description: A gem to setup angular factories
56
+ email:
57
+ - mark@openarc.net
58
+ executables: []
59
+ extensions: []
60
+ extra_rdoc_files: []
61
+ files:
62
+ - lib/generators/oa_angular_setup/install_generator.rb
63
+ - lib/generators/templates/oa_angular_setup_initializer.rb
64
+ - lib/oa_angular_setup.rb
65
+ - lib/oa_angular_setup/initialize_angular.rb
66
+ - lib/oa_angular_setup/version.rb
67
+ - lib/tasks/oa_angular_setup.rake
68
+ homepage: https://github.com/openarcllc/oa_angular_setup
69
+ licenses:
70
+ - MIT
71
+ metadata: {}
72
+ post_install_message:
73
+ rdoc_options: []
74
+ require_paths:
75
+ - lib
76
+ required_ruby_version: !ruby/object:Gem::Requirement
77
+ requirements:
78
+ - - '>='
79
+ - !ruby/object:Gem::Version
80
+ version: '0'
81
+ required_rubygems_version: !ruby/object:Gem::Requirement
82
+ requirements:
83
+ - - '>='
84
+ - !ruby/object:Gem::Version
85
+ version: '0'
86
+ requirements: []
87
+ rubyforge_project:
88
+ rubygems_version: 2.5.0
89
+ signing_key:
90
+ specification_version: 4
91
+ summary: A gem to setup angular factories
92
+ test_files: []