wco_models 3.1.0.31

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.
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: []