wco_models 3.1.0.31

Sign up to get free protection for your applications and to get access to all the features.
Files changed (52) hide show
  1. checksums.yaml +7 -0
  2. data/README.txt +2 -0
  3. data/Rakefile +15 -0
  4. data/app/assets/config/wco_models_manifest.js +4 -0
  5. data/app/assets/stylesheets/wco_models/application.css +22 -0
  6. data/app/assets/stylesheets/wco_models/utils.scss +53 -0
  7. data/app/controllers/ish_models/application_controller.rb +4 -0
  8. data/app/controllers/wco/products_controller.rb +7 -0
  9. data/app/helpers/ish_models/application_helper.rb +4 -0
  10. data/app/jobs/wco_hosting/certbot_job.rb +24 -0
  11. data/app/mailers/ish_models/application_mailer.rb +6 -0
  12. data/app/models/wco/gallery.rb +56 -0
  13. data/app/models/wco/lead.rb +7 -0
  14. data/app/models/wco/leadset.rb +45 -0
  15. data/app/models/wco/newsitem.rb +9 -0
  16. data/app/models/wco/office_action.rb +32 -0
  17. data/app/models/wco/photo.rb +85 -0
  18. data/app/models/wco/premium_item.rb +13 -0
  19. data/app/models/wco/premium_tier.rb +13 -0
  20. data/app/models/wco/price.rb +25 -0
  21. data/app/models/wco/product.rb +18 -0
  22. data/app/models/wco/profile.rb +22 -0
  23. data/app/models/wco/publisher.rb +49 -0
  24. data/app/models/wco/site.rb +57 -0
  25. data/app/models/wco/subscription.rb +22 -0
  26. data/app/models/wco/tag.rb +16 -0
  27. data/app/models/wco/utils.rb +45 -0
  28. data/app/models/wco_email/campaign.rb +55 -0
  29. data/app/models/wco_email/context.rb +114 -0
  30. data/app/models/wco_email/conversation.rb +48 -0
  31. data/app/models/wco_email/email_filter.rb +45 -0
  32. data/app/models/wco_email/message_template.rb +6 -0
  33. data/app/models/wco_email/scheduled_email_action.rb +64 -0
  34. data/app/models/wco_email/tag.rb-trash +15 -0
  35. data/app/models/wco_hosting/appliance.rb +44 -0
  36. data/app/models/wco_hosting/appliance_tmpl.rb +57 -0
  37. data/app/models/wco_hosting/domain.rb +24 -0
  38. data/app/models/wco_hosting/serverhost.rb +205 -0
  39. data/app/views/layouts/ish_models/application.html.erb +15 -0
  40. data/app/views/wco/application/_alerts_notices.haml +22 -0
  41. data/app/views/wco/application/_meta.haml +13 -0
  42. data/app/views/wco_hosting/docker-compose/dc-any.erb +16 -0
  43. data/app/views/wco_hosting/docker-compose/dc-helloworld.erb +16 -0
  44. data/app/views/wco_hosting/docker-compose/dc-wordpress.erb +16 -0
  45. data/app/views/wco_hosting/scripts/create_subdomain.json.erb-trash +16 -0
  46. data/app/views/wco_hosting/scripts/create_volume.erb +21 -0
  47. data/app/views/wco_hosting/scripts/nginx_site.conf.erb +10 -0
  48. data/config/routes.rb +3 -0
  49. data/lib/tasks/ish_models_tasks.rake +4 -0
  50. data/lib/wco/engine.rb +4 -0
  51. data/lib/wco_models.rb +12 -0
  52. metadata +250 -0
@@ -0,0 +1,205 @@
1
+
2
+ require 'net/scp'
3
+ require 'open3'
4
+ require 'droplet_kit'
5
+
6
+ class WcoHosting::Serverhost
7
+ include Mongoid::Document
8
+ include Mongoid::Timestamps
9
+ # include Mongoid::Autoinc
10
+ store_in collection: 'wco_serverhosts'
11
+
12
+ WORKDIR = "/opt/projects/docker"
13
+
14
+ field :name, type: :string
15
+ validates :name, uniqueness: { scope: :leadset }, presence: true
16
+
17
+ has_and_belongs_to_many :leadsets, class_name: 'Wco::Leadset'
18
+
19
+ field :next_port, type: :integer, default: 8000
20
+
21
+ field :nginx_root, default: '/opt/nginx'
22
+ field :public_ip
23
+
24
+ ## net-ssh, sshkit
25
+ field :ssh_host
26
+ # field :ssh_username
27
+ # field :ssh_key
28
+
29
+ has_many :appliances, class_name: 'WcoHosting::Appliance'
30
+
31
+ def create_appliance app
32
+ # puts! app, 'Serverhost#create_appliance'
33
+
34
+ create_subdomain( app )
35
+ create_volume( app )
36
+ add_docker_service( app )
37
+ add_nginx_site( app )
38
+ # load_database( app )
39
+
40
+ update({ next_port: app.serverhost.next_port + 1 })
41
+ end
42
+
43
+ def create_subdomain app
44
+ client = DropletKit::Client.new(access_token: DO_TOKEN_1)
45
+ record = DropletKit::DomainRecord.new(
46
+ type: 'A',
47
+ name: app.subdomain,
48
+ data: app.serverhost.public_ip,
49
+ )
50
+ client.domain_records.create(record, for_domain: app.domain )
51
+ end
52
+
53
+ ## obsolete _vp_ 2023-12-23
54
+ def aws_create_subdomain app
55
+ ac = ActionController::Base.new
56
+ ac.instance_variable_set( :@app, app )
57
+ rendered_str = ac.render_to_string("wco_hosting/scripts/create_subdomain.json")
58
+ # puts '+++ create_subdomain rendered_str:'; print rendered_str
59
+
60
+ file = Tempfile.new('prefix')
61
+ file.write rendered_str
62
+ file.close
63
+
64
+ cmd = "aws route53 change-resource-record-sets \
65
+ --hosted-zone-id #{ app.route53_zone } \
66
+ --change-batch file://#{ file.path } \
67
+ --profile route53 "
68
+ do_exec( cmd )
69
+ end
70
+
71
+
72
+ def add_nginx_site app
73
+ ac = ActionController::Base.new
74
+ ac.instance_variable_set( :@app, app )
75
+ rendered_str = ac.render_to_string("wco_hosting/scripts/nginx_site.conf")
76
+ puts '+++ add_nginx_site rendered_str:'
77
+ print rendered_str
78
+
79
+ file = Tempfile.new('prefix')
80
+ file.write rendered_str
81
+ file.close
82
+
83
+ cmd = "scp #{file.path} #{ssh_host}:/etc/nginx/sites-available/#{app.service_name}.conf "
84
+ puts! cmd, 'cmd'
85
+ `#{cmd}`
86
+
87
+ cmd = "ssh #{ssh_host} 'ln -s /etc/nginx/sites-available/#{app.service_name}.conf /etc/nginx/sites-enabled/#{app.service_name}.conf ' "
88
+ puts! cmd, 'cmd'
89
+ `#{cmd}`
90
+
91
+ cmd = "ssh #{ssh_host} 'nginx -s reload ' "
92
+ puts! cmd, 'cmd'
93
+ `#{cmd}`
94
+ end
95
+
96
+ def add_docker_service app
97
+ puts! app, '#add_docker_service'
98
+
99
+ ac = ActionController::Base.new
100
+ ac.instance_variable_set( :@app, app )
101
+ ac.instance_variable_set( :@workdir, WORKDIR )
102
+ rendered_str = ac.render_to_string("wco_hosting/docker-compose/dc-#{app.tmpl.kind}")
103
+ puts '+++ add_docker_service rendered_str:'
104
+ print rendered_str
105
+
106
+ file = Tempfile.new('prefix')
107
+ file.write rendered_str
108
+ file.close
109
+ puts! file.path, 'file.path'
110
+
111
+ cmd = "scp #{file.path} #{ssh_host}:#{WORKDIR}/dc-#{app.service_name}.yml "
112
+ puts! cmd, 'cmd'
113
+ `#{cmd}`
114
+
115
+ cmd = "ssh #{ssh_host} 'cd #{WORKDIR} ; \
116
+ docker compose -f dc-#{app.service_name}.yml up -d #{app.service_name} ; \
117
+ echo ok #add_docker_service ' "
118
+ puts! cmd, 'cmd'
119
+ `#{cmd}`
120
+
121
+ puts "ok '#add_docker_service'"
122
+ end
123
+
124
+ def create_wordpress_volume app
125
+ ac = ActionController::Base.new
126
+ ac.instance_variable_set( :@app, app )
127
+ ac.instance_variable_set( :@workdir, WORKDIR )
128
+ rendered_str = ac.render_to_string("wco_hosting/scripts/create_volume")
129
+ # puts '+++ create_volume rendered_str:'
130
+ # print rendered_str
131
+
132
+ file = Tempfile.new('prefix')
133
+ file.write rendered_str
134
+ file.close
135
+ # puts! file.path, 'file.path'
136
+
137
+ cmd = "scp #{file.path} #{ssh_host}:#{WORKDIR}/scripts/create_volume"
138
+ puts! cmd, 'cmd'
139
+ `#{cmd}`
140
+
141
+ cmd = "ssh #{ssh_host} 'chmod a+x #{WORKDIR}/scripts/create_volume ; \
142
+ #{WORKDIR}/wco_hosting/scripts/create_volume ' "
143
+ puts! cmd, 'cmd'
144
+ `#{cmd}`
145
+
146
+ puts 'ok #create_volume'
147
+ end
148
+
149
+ def create_volume app
150
+ # puts! app.service_name, 'Serverhost#create_volume'
151
+
152
+ ac = ActionController::Base.new
153
+ ac.instance_variable_set( :@app, app )
154
+ ac.instance_variable_set( :@workdir, WORKDIR )
155
+ rendered_str = ac.render_to_string("wco_hosting/scripts/create_volume")
156
+ puts '+++ create_volume rendered_str:'
157
+ print rendered_str
158
+
159
+ file = Tempfile.new('prefix')
160
+ file.write rendered_str
161
+ file.close
162
+ # puts! file.path, 'file.path'
163
+
164
+ cmd = "scp #{file.path} #{ssh_host}:#{WORKDIR}/scripts/create_volume"
165
+ do_exec( cmd )
166
+
167
+ cmd = "ssh #{ssh_host} 'chmod a+x #{WORKDIR}/scripts/create_volume ; #{WORKDIR}/scripts/create_volume ' "
168
+ do_exec( cmd )
169
+
170
+ puts 'ok #create_volume'
171
+ return done_exec
172
+ end
173
+
174
+ def self.list
175
+ [[nil,nil]] + all.map { |s| [s.name, s.id] }
176
+ # all.map { |s| [s.name, s.id] }
177
+ end
178
+
179
+ def do_exec cmd
180
+ # @messages ||= []
181
+ # @errors ||= []
182
+ # @statuses ||= []
183
+
184
+ puts! cmd, '#do_exec'
185
+ stdout, stderr, status = Open3.capture3(cmd)
186
+ status = status.to_s.split.last.to_i
187
+ puts "+++ +++ stdout"
188
+ puts stdout
189
+ # @messages.push( stdout )
190
+ puts "+++ +++ stderr"
191
+ puts stderr
192
+ # @errors.push( stderr )
193
+ puts! status, 'status'
194
+ # @statuses.push( status )
195
+ end
196
+
197
+ def done_exec
198
+ @messages ||= []
199
+ @errors ||= []
200
+ @statuses ||= []
201
+ OpenStruct.new( statuses: @statuses, errors: @errors, messages: @messages )
202
+ end
203
+
204
+
205
+ end
@@ -0,0 +1,15 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>Ish models</title>
5
+ <%= csrf_meta_tags %>
6
+ <%= csp_meta_tag %>
7
+
8
+ <%= stylesheet_link_tag "ish_models/application", media: "all" %>
9
+ </head>
10
+ <body>
11
+
12
+ <%= yield %>
13
+
14
+ </body>
15
+ </html>
@@ -0,0 +1,22 @@
1
+
2
+ -# 2023-12-25 v.0.0.0
3
+ .wco--alerts-notices.maxwidth
4
+
5
+ - if notice&.class == String
6
+ .notice
7
+ = notice
8
+ .close [x]
9
+ - if notice&.class == Array
10
+ - notice.each do |i|
11
+ .notice
12
+ = i
13
+ .close [x]
14
+ - if alert&.class == String
15
+ .alert
16
+ = alert
17
+ .close [x]
18
+ - if alert&.class == Array
19
+ - alert.each do |i|
20
+ .alert
21
+ = i
22
+ .close [x]
@@ -0,0 +1,13 @@
1
+
2
+ .meta
3
+
4
+ <b>On</b> #{item.created_at.to_s[0...10]}
5
+ - if defined?( item.profile ) && !item.profile.blank?
6
+ <b>By</b>
7
+ = link_to item.profile.name, edit_profile_path( item.profile )
8
+
9
+ -# - if item.tags.length > 0
10
+ -# <b>Tags:</b> #{ item.tags.map(&:name).join(', ') }
11
+
12
+ - if defined?(item.premium_tier) && item.premium_tier > 0
13
+ <b>Tier $#{item.premium_tier}</b>
@@ -0,0 +1,16 @@
1
+ version: '3.2'
2
+
3
+ services:
4
+
5
+ <%= @app.service_name %>:
6
+ image: <%= @app.tmpl.image %>
7
+ volumes:
8
+ - type: bind
9
+ source: volumes/<%= @app.service_name %>_data
10
+ target: /var/www/html
11
+ ports:
12
+ - <%= @app.port %>:80
13
+ restart: always
14
+
15
+
16
+
@@ -0,0 +1,16 @@
1
+ version: '3.2'
2
+
3
+ services:
4
+
5
+ <%= @app.service_name %>:
6
+ image: <%= @app.tmpl.image %>
7
+ volumes:
8
+ - type: bind
9
+ source: volumes/<%= @app.service_name %>_data
10
+ target: /var/www/html
11
+ ports:
12
+ - <%= @app.port %>:80
13
+ restart: always
14
+
15
+
16
+
@@ -0,0 +1,16 @@
1
+ version: '3.2'
2
+
3
+ services:
4
+
5
+ <%= @app.service_name %>:
6
+ image: <%= @app.tmpl.image %>
7
+ volumes:
8
+ - type: bind
9
+ source: volumes/<%= @app.service_name %>_data
10
+ target: /var/www/html
11
+ ports:
12
+ - <%= @app.port %>:80
13
+ restart: always
14
+
15
+
16
+
@@ -0,0 +1,16 @@
1
+
2
+
3
+ {
4
+ "Comment": "optional",
5
+ "Changes": [
6
+ {
7
+ "Action": "CREATE",
8
+ "ResourceRecordSet": {
9
+ "Name": "<%= @app.host %>",
10
+ "Type": "A",
11
+ "TTL": 3600,
12
+ "ResourceRecords": [{ "Value": "<%= @app.serverhost.public_ip %>" }]
13
+ }
14
+ }
15
+ ]
16
+ }
@@ -0,0 +1,21 @@
1
+ #!/bin/bash
2
+
3
+ set -ex
4
+
5
+ cd <%= @workdir %>
6
+ rm -rf __MACOSX
7
+
8
+ ## cache/overwrite
9
+ [ ! -e <%= @app.kind %>__prototype.zip ] && curl <%= @app.tmpl.volume_zip %> > <%= @app.kind %>__prototype.zip
10
+ # curl <%= @app.tmpl.volume_zip %> > <%= @app.kind %>__prototype.zip
11
+
12
+ ## cache/overwrite
13
+ [ ! -e <%= @app.kind %>__prototype ] && rm -rf <%= @app.kind %>__prototype && unzip <%= @app.kind %>__prototype.zip
14
+ # rm -rf <%= @app.kind %>__prototype && unzip <%= @app.kind %>__prototype.zip
15
+
16
+ mv <%= @app.kind %>__prototype ./volumes/<%= @app.service_name %>_data
17
+
18
+ set +ex
19
+ echo ok #create_volume
20
+
21
+
@@ -0,0 +1,10 @@
1
+
2
+ server {
3
+ listen 443 ssl;
4
+ server_name <%= @app.host %> ;
5
+ location / {
6
+ proxy_pass http://127.0.0.1:<%= @app.port %>/;
7
+ }
8
+ ssl_certificate /etc/letsencrypt/live/pox.bar/fullchain.pem; # managed by Certbot
9
+ ssl_certificate_key /etc/letsencrypt/live/pox.bar/privkey.pem; # managed by Certbot
10
+ }
data/config/routes.rb ADDED
@@ -0,0 +1,3 @@
1
+
2
+ Wco::Engine.routes.draw do
3
+ end
@@ -0,0 +1,4 @@
1
+ # desc "Explaining what the task does"
2
+ # task :ish_models do
3
+ # # Task goes here
4
+ # end
data/lib/wco/engine.rb ADDED
@@ -0,0 +1,4 @@
1
+
2
+ class Wco::Engine < ::Rails::Engine
3
+ isolate_namespace Wco
4
+ end
data/lib/wco_models.rb ADDED
@@ -0,0 +1,12 @@
1
+
2
+ # require 'mongoid'
3
+ require 'stripe'
4
+
5
+ require "wco/engine"
6
+
7
+ module IshModels; end
8
+ module Wco; end
9
+ module WcoEmail; end
10
+ module WcoHosting; end
11
+
12
+
metadata ADDED
@@ -0,0 +1,250 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: wco_models
3
+ version: !ruby/object:Gem::Version
4
+ version: 3.1.0.31
5
+ platform: ruby
6
+ authors:
7
+ - Victor Pudeyev
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2023-12-26 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rails
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: 6.1.0
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: 6.1.0
27
+ - !ruby/object:Gem::Dependency
28
+ name: mongoid
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: 7.3.0
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: 7.3.0
41
+ - !ruby/object:Gem::Dependency
42
+ name: mongoid_paranoia
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: mongoid-autoinc
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '6.0'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '6.0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: mongoid-paperclip
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: kaminari-mongoid
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: 1.0.1
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: 1.0.1
97
+ - !ruby/object:Gem::Dependency
98
+ name: aws-sdk-s3
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :runtime
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: net-ssh
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - "~>"
116
+ - !ruby/object:Gem::Version
117
+ version: 7.2.0
118
+ type: :runtime
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - "~>"
123
+ - !ruby/object:Gem::Version
124
+ version: 7.2.0
125
+ - !ruby/object:Gem::Dependency
126
+ name: net-scp
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - "~>"
130
+ - !ruby/object:Gem::Version
131
+ version: 4.0.0
132
+ type: :runtime
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - "~>"
137
+ - !ruby/object:Gem::Version
138
+ version: 4.0.0
139
+ - !ruby/object:Gem::Dependency
140
+ name: droplet_kit
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - "~>"
144
+ - !ruby/object:Gem::Version
145
+ version: 3.20.0
146
+ type: :runtime
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - "~>"
151
+ - !ruby/object:Gem::Version
152
+ version: 3.20.0
153
+ - !ruby/object:Gem::Dependency
154
+ name: stripe
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - "~>"
158
+ - !ruby/object:Gem::Version
159
+ version: 10.4.0
160
+ type: :runtime
161
+ prerelease: false
162
+ version_requirements: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - "~>"
165
+ - !ruby/object:Gem::Version
166
+ version: 10.4.0
167
+ description: https://wasya.co
168
+ email:
169
+ - victor@wasya.co
170
+ executables: []
171
+ extensions: []
172
+ extra_rdoc_files: []
173
+ files:
174
+ - README.txt
175
+ - Rakefile
176
+ - app/assets/config/wco_models_manifest.js
177
+ - app/assets/stylesheets/wco_models/application.css
178
+ - app/assets/stylesheets/wco_models/utils.scss
179
+ - app/controllers/ish_models/application_controller.rb
180
+ - app/controllers/wco/products_controller.rb
181
+ - app/helpers/ish_models/application_helper.rb
182
+ - app/jobs/wco_hosting/certbot_job.rb
183
+ - app/mailers/ish_models/application_mailer.rb
184
+ - app/models/wco/gallery.rb
185
+ - app/models/wco/lead.rb
186
+ - app/models/wco/leadset.rb
187
+ - app/models/wco/newsitem.rb
188
+ - app/models/wco/office_action.rb
189
+ - app/models/wco/photo.rb
190
+ - app/models/wco/premium_item.rb
191
+ - app/models/wco/premium_tier.rb
192
+ - app/models/wco/price.rb
193
+ - app/models/wco/product.rb
194
+ - app/models/wco/profile.rb
195
+ - app/models/wco/publisher.rb
196
+ - app/models/wco/site.rb
197
+ - app/models/wco/subscription.rb
198
+ - app/models/wco/tag.rb
199
+ - app/models/wco/utils.rb
200
+ - app/models/wco_email/campaign.rb
201
+ - app/models/wco_email/context.rb
202
+ - app/models/wco_email/conversation.rb
203
+ - app/models/wco_email/email_filter.rb
204
+ - app/models/wco_email/message_template.rb
205
+ - app/models/wco_email/scheduled_email_action.rb
206
+ - app/models/wco_email/tag.rb-trash
207
+ - app/models/wco_hosting/appliance.rb
208
+ - app/models/wco_hosting/appliance_tmpl.rb
209
+ - app/models/wco_hosting/domain.rb
210
+ - app/models/wco_hosting/serverhost.rb
211
+ - app/views/layouts/ish_models/application.html.erb
212
+ - app/views/wco/application/_alerts_notices.haml
213
+ - app/views/wco/application/_meta.haml
214
+ - app/views/wco_hosting/docker-compose/dc-any.erb
215
+ - app/views/wco_hosting/docker-compose/dc-helloworld.erb
216
+ - app/views/wco_hosting/docker-compose/dc-wordpress.erb
217
+ - app/views/wco_hosting/scripts/create_subdomain.json.erb-trash
218
+ - app/views/wco_hosting/scripts/create_volume.erb
219
+ - app/views/wco_hosting/scripts/nginx_site.conf.erb
220
+ - config/routes.rb
221
+ - lib/tasks/ish_models_tasks.rake
222
+ - lib/wco/engine.rb
223
+ - lib/wco_models.rb
224
+ homepage: https://wasya.co
225
+ licenses:
226
+ - MIT
227
+ metadata:
228
+ homepage_uri: https://wasya.co
229
+ source_code_uri: https://wasya.co
230
+ changelog_uri: https://wasya.co
231
+ post_install_message:
232
+ rdoc_options: []
233
+ require_paths:
234
+ - lib
235
+ required_ruby_version: !ruby/object:Gem::Requirement
236
+ requirements:
237
+ - - ">="
238
+ - !ruby/object:Gem::Version
239
+ version: '0'
240
+ required_rubygems_version: !ruby/object:Gem::Requirement
241
+ requirements:
242
+ - - ">="
243
+ - !ruby/object:Gem::Version
244
+ version: '0'
245
+ requirements: []
246
+ rubygems_version: 3.1.6
247
+ signing_key:
248
+ specification_version: 4
249
+ summary: https://wasya.co
250
+ test_files: []