mobilis 0.0.1

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.
@@ -0,0 +1,381 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'state_machine'
4
+ require 'tty-prompt'
5
+ require 'awesome_print'
6
+ require 'forwardable'
7
+
8
+ require 'mobilis/logger'
9
+ require 'mobilis/project'
10
+
11
+ module Mobilis
12
+
13
+ class InteractiveDesigner
14
+ extend Forwardable
15
+
16
+ attr_accessor :project
17
+ attr_reader :prompt
18
+
19
+ def_delegators :@project, :projects, :display
20
+
21
+ state_machine :state, initial: :intialize do
22
+
23
+ event :go_build do
24
+ transition [:main_menu] => :build
25
+ end
26
+
27
+ event :go_add_omakase_stack_rails_project do
28
+ transition [:main_menu] => :add_omakase_stack_rails_project
29
+ end
30
+
31
+ event :go_add_prime_stack_rails_project do
32
+ transition [:main_menu] => :add_prime_stack_rails_project
33
+ end
34
+
35
+ event :go_add_postgresql_instance do
36
+ transition [:main_menu] => :add_postgresql_instance
37
+ end
38
+
39
+ event :go_add_mysql_instance do
40
+ transition [:main_menu] => :add_mysql_instance
41
+ end
42
+
43
+ event :go_add_redis_instance do
44
+ transition [:main_menu] => :add_redis_instance
45
+ end
46
+
47
+ event :go_add_rack_project do
48
+ transition [:main_menu] => :add_rack_project
49
+ end
50
+
51
+ event :go_edit_rails_project do
52
+ transition [
53
+ :add_omakase_stack_rails_project,
54
+ :add_prime_stack_rails_project,
55
+ :edit_rails_controller,
56
+ :edit_rails_model,
57
+ :toggle_rails_api_mode,
58
+ :main_menu
59
+ ] => :edit_rails_project
60
+ end
61
+
62
+ event :go_generate do
63
+ transition [:main_menu] => :generate
64
+ end
65
+
66
+ event :go_main_menu do
67
+ transition to: :main_menu
68
+ end
69
+
70
+ event :go_rails_add_model do
71
+ transition [:edit_rails_project] => :rails_add_model
72
+ end
73
+
74
+ event :go_rails_add_controller do
75
+ transition [:edit_rails_project] => :rails_add_controller
76
+ end
77
+
78
+ event :go_rails_edit_controller do
79
+ transition [:rails_add_controller] => :edit_rails_controller
80
+ end
81
+
82
+ event :go_rails_edit_model do
83
+ transition [:rails_add_model] => :edit_rails_model
84
+ end
85
+
86
+ event :go_save_project do
87
+ transition [:main_menu] => :save_project
88
+ end
89
+
90
+ event :go_toggle_rails_api_mode do
91
+ transition [:edit_rails_project] => :toggle_rails_api_mode
92
+ end
93
+
94
+ event :go_edit_links_select_project do
95
+ transition [:main_menu] => :edit_links_select_project
96
+ end
97
+
98
+ event :go_edit_links do
99
+ transition [:edit_links_select_project] => :edit_links
100
+ end
101
+
102
+ after_transition any => any do |designer|
103
+ puts "o0o VVVV ---- VVVV o0o"
104
+ puts "-- Switched state to #{ designer.state_name } --"
105
+ puts "o0o ^^^^ ---- ^^^^ o0o"
106
+ end
107
+
108
+ state :main_menu do
109
+ def display
110
+ project.display
111
+ end
112
+ def choices
113
+ project_choices = projects.map do |project|
114
+ { name: "Edit '#{ project.name }' project", value: -> { @selected_rails_project = project ; go_edit_rails_project } }
115
+ end
116
+ [
117
+ {name: "Add prime stack rails project", value: -> { go_add_prime_stack_rails_project }},
118
+ {name: "Add omakase stack rails project", value: -> { go_add_omakase_stack_rails_project }},
119
+ {name: "Add rack3 project", value: -> { go_add_rack_project }},
120
+ #{ name: "Add airflow server project", value: -> { go_add_airflow_server }},
121
+ #{ name: "Add airflow job project", value: -> { go_add_airflow_job_project }},
122
+ #{ name: "Add Docker registry", value: -> { go_add_docker_registry }},
123
+ #{ name: "Add Vue.js project", value: -> { go_add_vue_project }},
124
+ #{ name: "Add flask project", value: -> { go_add_flask_project }},
125
+ #{ name: "Add existing git project", value: -> { go_add_existing_git_project }},
126
+ { name: "Add redis instance", value: -> { go_add_redis_instance }},
127
+ { name: "Add postgresql instance", value: -> { go_add_postgresql_instance }},
128
+ { name: "Add mysql instance", value: -> { go_add_mysql_instance }},
129
+ #{ name: "Add couchdb instance", value: -> { go_add_couchdb_instance }},
130
+ #{ name: "Add kafka instance", value: -> { go_add_kafka_instance }},
131
+ #{ name: "Add graphql instance", value: -> { go_add_grapql_instance }},
132
+ #{ name: "Add gitlab instance w/workers", value: -> { go_add_gitlab_instance }},
133
+ *project_choices,
134
+ { name: "edit links", value: -> { go_edit_links_select_project }},
135
+ { name: "Save mproj.json", value: -> { go_save_project }},
136
+ { name: "Generate", value: -> { go_generate }},
137
+ { name: "Build", value: -> { go_build }}
138
+ ]
139
+ end
140
+ def action = false
141
+ end
142
+
143
+ state :edit_links_select_project do
144
+ def display = false
145
+ def choices
146
+ [
147
+ {name: "return to Main Menu", value: -> { go_main_menu }},
148
+ *( projects.map do |project|
149
+ { name: "Edit '#{ project.name }' links", value: -> { @selected_project = project ; go_edit_links } }
150
+ end)
151
+ ]
152
+ end
153
+ def action = false
154
+ end
155
+
156
+ state :edit_links do
157
+ def display = false
158
+ def choices = false
159
+ def action
160
+ selected = prompt.multi_select("Select links") do |menu|
161
+ menu.default *@selected_project.links
162
+ projects.each do |project|
163
+ menu.choice project.name unless project.name == @selected_project.name
164
+ end
165
+ end
166
+ @selected_project.set_links selected
167
+ go_main_menu
168
+ end
169
+ end
170
+
171
+ state :edit_rails_model do
172
+ def display
173
+ ap @selected_rails_project.models.collect {|x| x[:name]}
174
+ end
175
+ def choices
176
+ [
177
+ {name: "return to Main Menu", value: -> { go_main_menu }},
178
+ {name: "return to rails project edit", value: -> { go_edit_rails_project }},
179
+ {name: "Toggle timestamps", value: -> { go_toggle_rails_model_timestamps }},
180
+ *( @selected_rails_project.models.map do |model|
181
+ { name: "Edit '#{ model.name }' model", value: -> { @selected_rails_model = model ; go_edit_rails_model } }
182
+ end)
183
+ ]
184
+ end
185
+ def action = false
186
+ end
187
+
188
+ state :edit_rails_project do
189
+ def display
190
+ @selected_rails_project.display
191
+ end
192
+ def choices
193
+ [
194
+ {name: "return to Main Menu", value: -> { go_main_menu }},
195
+ {name: "Toggle API mode", value: -> { go_toggle_rails_api_mode }},
196
+ {name: "Add Model", value: -> { go_rails_add_model }},
197
+ {name: "Add Controller", value: -> { go_rails_add_controller }}
198
+ ]
199
+ end
200
+ def action = false
201
+ end
202
+
203
+ state :add_prime_stack_rails_project do
204
+ def display
205
+ spacer
206
+ end
207
+ def choices = false
208
+ def action
209
+ project_name = prompt.ask("new Prime Stack Rails project name:")
210
+ @selected_rails_project = project.add_prime_stack_rails_project project_name
211
+ go_edit_rails_project
212
+ end
213
+ end
214
+
215
+ state :add_rack_project do
216
+ def display
217
+ spacer
218
+ end
219
+ def choices = false
220
+ def action
221
+ project_name = prompt.ask("new Rack project name:")
222
+ project.add_rack_project project_name
223
+ go_main_menu
224
+ end
225
+ end
226
+
227
+ state :add_omakase_stack_rails_project do
228
+ def display
229
+ spacer
230
+ end
231
+ def choices = false
232
+ def action
233
+ project_name = prompt.ask("new Omakase Stack Rails project name:")
234
+ @selected_rails_project = project.add_omakase_stack_rails_project project_name
235
+ go_edit_rails_project
236
+ end
237
+ end
238
+
239
+ state :add_postgresql_instance do
240
+ def display
241
+ spacer
242
+ end
243
+ def choices = false
244
+ def action
245
+ project_name = prompt.ask("new postgresql instance name:")
246
+ project.add_postgresql_instance project_name
247
+ go_main_menu
248
+ end
249
+ end
250
+
251
+ state :add_mysql_instance do
252
+ def display
253
+ spacer
254
+ end
255
+ def choices = false
256
+ def action
257
+ project_name = prompt.ask("new mysql instance name:")
258
+ project.add_mysql_instance project_name
259
+ go_main_menu
260
+ end
261
+ end
262
+
263
+ state :add_redis_instance do
264
+ def display
265
+ spacer
266
+ end
267
+ def choices = false
268
+ def action
269
+ project_name = prompt.ask("new redis instance name:")
270
+ project.add_redis_instance project_name
271
+ go_main_menu
272
+ end
273
+ end
274
+
275
+ state :toggle_rails_api_mode do
276
+ def display
277
+ Mobilis.logger.info "Toggled rails API mode for '#{@selected_rails_project.name}'"
278
+ end
279
+ def choices = false
280
+ def action
281
+ @selected_rails_project.toggle_rails_api_mode
282
+ go_edit_rails_project
283
+ end
284
+ end
285
+
286
+ state :rails_add_model do
287
+ def display
288
+ ap @selected_rails_project.models.collect {|x| x[:name]}
289
+ end
290
+ def choices = false
291
+ def action
292
+ name = prompt.ask("new model name")
293
+ @selected_rails_model = add_model name
294
+ go_edit_rails_model
295
+ end
296
+ end
297
+
298
+ state :rails_add_controller do
299
+ def display
300
+ ap @selected_rails_project.controllers.collect {|x| x[:name]}
301
+ end
302
+ def choices = false
303
+ def action
304
+ name = prompt.ask("new controller name:")
305
+ @selected_rails_controller = answer.add_controller name
306
+ go_edit_rails_controller
307
+ end
308
+ end
309
+
310
+ state :generate do
311
+ def display
312
+ spacer
313
+ end
314
+ def choices = false
315
+ def action
316
+ project.generate_files
317
+ go_main_menu
318
+ end
319
+ end
320
+
321
+ state :build do
322
+ def display
323
+ spacer
324
+ end
325
+ def choices = false
326
+ def action
327
+ project.build
328
+ go_main_menu
329
+ end
330
+ end
331
+
332
+ state :save_project do
333
+ def display
334
+ spacer
335
+ end
336
+ def choices = false
337
+ def action
338
+ project.save_project
339
+ go_main_menu
340
+ end
341
+ end
342
+ end
343
+
344
+ def initialize
345
+ super()
346
+ @prompt = TTY::Prompt.new
347
+ @project = Project.new
348
+ end
349
+
350
+
351
+ def choose_destination
352
+ Mobilis.logger.info "#choose_destination"
353
+
354
+ blank_space
355
+ spacer
356
+ display
357
+ spacer
358
+ blank_space
359
+
360
+ if some_choices = choices then
361
+ prompt.select("Choose your Path", some_choices, per_page: 20)
362
+ else
363
+ Mobilis.logger.info "No choices found, running action instead"
364
+ action
365
+ end
366
+ end
367
+
368
+ def new_relic_license_key
369
+ ENV.fetch "NEW_RELIC_LICENSE_KEY", false
370
+ end
371
+
372
+ def spacer
373
+ puts "|+--------------------------------------------------------+|"
374
+ end
375
+
376
+ def blank_space
377
+ puts ""
378
+ end
379
+
380
+ end
381
+ end
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'logger'
4
+
5
+ module Mobilis
6
+ class << self
7
+ def logger
8
+ @logger ||= Logger.new($stdout).tap do |log|
9
+ log.progname = 'mobilis'
10
+ end
11
+ end
12
+ end
13
+ end
14
+
@@ -0,0 +1,49 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "mobilis/generic_project"
4
+
5
+ module Mobilis
6
+ class MysqlInstance < GenericProject
7
+
8
+ def generate
9
+ FileUtils.mkdir_p data_dir
10
+ end
11
+
12
+ def child_env_vars
13
+ [ ]
14
+ end
15
+
16
+ def env_vars
17
+ vars = []
18
+ if linked_to_rails_project
19
+ vars << "MYSQL_DATABASE=#{ linked_to_rails_project.name }_production"
20
+ end
21
+ vars.concat [
22
+ "MYSQL_USER=#{ name }",
23
+ "MYSQL_PASSWORD=#{ name }_password",
24
+ "MYSQL_RANDOM_ROOT_PASSWORD=true"
25
+ ]
26
+ end
27
+
28
+ def data_dir
29
+ "./data/#{ name }"
30
+ end
31
+
32
+ def has_local_build
33
+ false
34
+ end
35
+
36
+ def url
37
+ "mysql2://#{ username }:#{ password }@#{ name }:3306/?pool=5"
38
+ end
39
+
40
+ def username
41
+ name
42
+ end
43
+
44
+ def password
45
+ "#{name}_password"
46
+ end
47
+
48
+ end
49
+ end
@@ -0,0 +1,18 @@
1
+ module Mobilis
2
+
3
+ module NewRelic
4
+
5
+ def new_relic &block
6
+ instance_eval &block
7
+ end
8
+
9
+ def set_license_key license_key
10
+ @new_relic_license_key = license_key
11
+ end
12
+
13
+ def enable_distributed_tracing
14
+ @new_relic_destributed_tracing = true
15
+ end
16
+
17
+ end
18
+ end
data/lib/mobilis/os.rb ADDED
@@ -0,0 +1,26 @@
1
+ module Mobilis
2
+ module OS
3
+ # https://stackoverflow.com/questions/170956/how-can-i-find-which-operating-system-my-ruby-program-is-running-on
4
+
5
+ def OS.windows?
6
+ (/cygwin|mswin|mingw|bccwin|wince|emx/ =~ RUBY_PLATFORM) != nil
7
+ end
8
+
9
+ def OS.mac?
10
+ (/darwin/ =~ RUBY_PLATFORM) != nil
11
+ end
12
+
13
+ def OS.unix?
14
+ !OS.windows?
15
+ end
16
+
17
+ def OS.linux?
18
+ OS.unix? and not OS.mac?
19
+ end
20
+
21
+ def OS.jruby?
22
+ RUBY_ENGINE == 'jruby'
23
+ end
24
+
25
+ end
26
+ end
@@ -0,0 +1,38 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "mobilis/generic_project"
4
+
5
+ module Mobilis
6
+ class PostgresqlInstance < GenericProject
7
+
8
+ def generate
9
+ FileUtils.mkdir_p data_dir
10
+ end
11
+
12
+ def child_env_vars
13
+ [ ]
14
+ end
15
+
16
+ def data_dir
17
+ "./data/#{ name }"
18
+ end
19
+
20
+ def has_local_build
21
+ false
22
+ end
23
+
24
+ def url
25
+ "postgres://#{ username }:#{ password }@#{ name }:5432/"
26
+ end
27
+
28
+ def username
29
+ name
30
+ end
31
+
32
+ def password
33
+ "#{name}_password"
34
+ end
35
+
36
+
37
+ end
38
+ end