ish_models 0.0.33.303 → 3.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 8b412037faff703b47b7fa0233f65fdba3a6c1172323c19fbc60ec719c180fa9
4
- data.tar.gz: 0c68af161d244280a3cd3a109f5b880dc778c5e2ca03338222a4a1262b1461f8
3
+ metadata.gz: 7c1a22259e454aa8350407614eb6da60e10cc87fd5b7a349655e8d4fea281632
4
+ data.tar.gz: 9898d3663b786e614852aaf8be16a4fb1daa3aa5130b1139642550d6aeb8232c
5
5
  SHA512:
6
- metadata.gz: 7199e68751b9367d9b6ca3a6c9967d8ae0aea6515869f820e34b8c7283b80939e004622f666fdf08ddc13418d7a6b2480af2dea9a399f7171d8933d3911bbd20
7
- data.tar.gz: 1a1518f3581dd67a240cb4e333f35ba405523777f048b21e5e91bb432c84d1ed11cf4ca5832234abd213300f99eb8eaec6f81ce2900f604b56eb17f81a66322a
6
+ metadata.gz: 40579c613c11cdd8db789db9dd0804d1b1ee3e40f46f8abd1cd83b8ada329a99cc35cf330eb44aff2e63274861b815b6e45f560f2ae2e595feafc299dac46a6b
7
+ data.tar.gz: 55a7d4590ac60a32fcbfc7aa9002b4d46ecb59fbfddeaa38caf5131281ea8407cd9ff2a3070e019716e8fcd0502327dcc41d69a6886d1d4cf9f1325a40fa6de4
@@ -8,8 +8,6 @@ class ::Gameui::Asset3d
8
8
  include Mongoid::Paperclip
9
9
  include Ish::Utils
10
10
 
11
- field :filename
12
-
13
11
  belongs_to :marker, class_name: 'Gameui::Marker', optional: true
14
12
  belongs_to :invoice, class_name: 'Ish::Invoice', optional: true
15
13
  belongs_to :email_message, class_name: 'Office::EmailMessage', optional: true, inverse_of: :asset3ds
@@ -2,7 +2,7 @@
2
2
  ##
3
3
  ## for alerting
4
4
  ##
5
- class Iro::Alert
5
+ class Iro::OptionWatch
6
6
  include Mongoid::Document
7
7
  include Mongoid::Timestamps
8
8
  store_in collection: 'iro_option_watches'
@@ -28,23 +28,24 @@ class Ish::UserProfile
28
28
 
29
29
  field :scratchpad, default: ''
30
30
 
31
- field :fb_access_token
32
- field :fb_long_access_token
33
- field :fb_expires_in
34
-
35
31
  field :lang, default: 'en'
36
- field :leadset_id, type: Integer
37
- def organization_name
38
- 'Some Org'
39
- # ::Leadset.find( leadset_id )&.name || 'Some Org'
40
- end
41
- # def leadset
42
- # ::Leadset.find( leadset_id )
32
+
33
+ field :leadset_id, type: Integer ## old sql
34
+ belongs_to :leadset, class_name: '::Wco::Leadset'
35
+
36
+ ##
37
+ ## PiousboxCRM, Email:
38
+ ##
39
+ # has_many :lead_ties, class_name: '::Wco::EmailConversationLead' ## need to name it better.
40
+
41
+ ##
42
+ ## wco hosting:
43
+ ##
44
+
45
+ ## 2023-08-21 _vp_ @TODO: change:
46
+ # def next_serverhost
47
+ # ::Wco::Serverhost.where({ leadset_id: leadset_id }).first
43
48
  # end
44
- # @TODO: change _vp_ 2023-08-21
45
- def next_serverhost
46
- Wco::Serverhost.where({ leadset_id: leadset_id }).first
47
- end
48
49
 
49
50
  ROLE_GUY = :guy
50
51
  ROLE_MANAGER = :manager
@@ -69,6 +70,7 @@ class Ish::UserProfile
69
70
  has_and_belongs_to_many :friends, :class_name => '::Ish::UserProfile', inverse_of: :friendeds
70
71
  has_and_belongs_to_many :friendeds, :class_name => '::Ish::UserProfile', inverse_of: :friends
71
72
 
73
+
72
74
  def sudoer?
73
75
  %w( piousbox@gmail.com victor@wasya.co ).include?( self.email )
74
76
  end
@@ -77,15 +79,15 @@ class Ish::UserProfile
77
79
  out = self.all
78
80
  [['', nil]] + out.map { |item| [ item.email, item.id ] }
79
81
  end
80
- def self.list_lg
81
- out = self.all
82
- [['', nil]] + out.map { |item| [ "#{item.email} :: #{item.name}", item.id ] }
83
- end
82
+ # def self.list_lg
83
+ # out = self.all
84
+ # [['', nil]] + out.map { |item| [ "#{item.email} :: #{item.name}", item.id ] }
85
+ # end
84
86
 
85
87
  field :n_unlocks, type: Integer, default: 0
86
88
 
87
89
  has_many :payments, :class_name => '::Ish::Payment'
88
- has_many :subscriptions, class_name: 'Wco::Subscription', inverse_of: :profile
90
+ has_many :subscriptions, class_name: '::Wco::Subscription', inverse_of: :profile
89
91
 
90
92
  def has_premium_purchase item
91
93
  payments.confirmed.where( item: item ).exists?
@@ -143,4 +145,5 @@ class Ish::UserProfile
143
145
 
144
146
  end
145
147
 
146
- Profile = Ish::UserProfile
148
+ Profile = Ish::UserProfile
149
+ Wco::Lead = Ish::UserProfile
data/lib/ish_models.rb CHANGED
@@ -40,7 +40,7 @@ require 'gameui/asset3d'
40
40
  require 'gameui/map'
41
41
  require 'gameui/marker'
42
42
 
43
- # require 'iro/alert'
43
+ require 'iro/option_watch'
44
44
 
45
45
  require 'ish/cache_key'
46
46
  require 'ish/crawler'
@@ -76,6 +76,8 @@ require 'office/email_conversation_tag'
76
76
  require 'office/email_filter'
77
77
  require 'office/email_message'
78
78
  require 'office/email_message_stub'
79
+ require 'office/emailtag'
80
+ require 'office/emailtag_email_conversation'
79
81
  require 'office/lead_action'
80
82
  require 'office/lead_action_template'
81
83
  require 'office/obfuscated_redirect'
@@ -84,6 +86,8 @@ require 'office/scheduled_email_action'
84
86
 
85
87
  require 'wco/appliance'
86
88
  require 'wco/appliance_tmpl'
89
+ require 'wco/dns_domain'
90
+ require 'wco/email_conversation_lead'
87
91
  require 'wco/leadset'
88
92
  require 'wco/price'
89
93
  require 'wco/product'
@@ -93,3 +97,4 @@ require 'wco/subscription'
93
97
 
94
98
 
95
99
 
100
+
@@ -20,62 +20,78 @@ class Office::EmailConversation
20
20
 
21
21
  field :preview, default: ''
22
22
 
23
- has_many :lead_ties, class_name: 'Office::EmailConversationLead'
24
- # def lead_ids
25
- # email_conversation_leads.map( &:lead_id )
26
- # end
27
- # field :lead_ids, type: :array, default: []
23
+ # @deprecated, @TODO: remove
24
+ has_many :lead_ties, class_name: 'Office::EmailConversationLead'
25
+ has_many :wco_lead_ties, class_name: '::Wco::EmailConversationLead'
26
+
27
+
28
28
  def leads
29
29
  Lead.find( lead_ties.map( &:lead_id ) )
30
30
  end
31
31
 
32
32
  has_many :email_messages, class_name: 'Office::EmailMessage'
33
33
  has_many :email_conversation_tags, class_name: 'Office::EmailConversationTag'
34
-
35
- def wp_term_ids ## @TODO: remove _vp_ 2023-09-23
36
- email_conversation_tags.map( &:wp_term_id )
37
- end
34
+ has_many :emailtag_ties, class_name: 'Office::EmailtagEmailConversation'
38
35
 
39
36
  def tags
40
- WpTag.find( email_conversation_tags.map( &:wp_term_id ) )
37
+ Emailtag.find( emailtag_ties.map &:emailtag_id )
41
38
  end
42
39
 
43
- ## Tested manually ok, does not pass the spec. @TODO: hire to make pass spec? _vp_ 2023-03-07
40
+ # ## Tested manually ok, does not pass the spec. @TODO: hire to make pass spec? _vp_ 2023-03-07
41
+ # def add_tag which
42
+ # tag = WpTag.iso_get which
43
+ # # puts!( tag.slug, "Adding tag" ) if DEBUG
44
+ # Office::EmailConversationTag.find_or_create_by!({
45
+ # email_conversation_id: id,
46
+ # wp_term_id: tag.id,
47
+ # })
48
+ # end
44
49
  def add_tag which
45
- tag = WpTag.iso_get which
46
- # puts!( tag.slug, "Adding tag" ) if DEBUG
47
- Office::EmailConversationTag.find_or_create_by!({
48
- email_conversation_id: id,
49
- wp_term_id: tag.id,
50
- })
50
+ ::EmailtagTie.create!({ emailtag: which, email_conversation: self })
51
51
  end
52
52
 
53
+ # def remove_tag which
54
+ # tag = WpTag.iso_get which
55
+ # # puts!( tag.slug, "Removing tag" ) if DEBUG
56
+ # Office::EmailConversationTag.where({
57
+ # email_conversation_id: id,
58
+ # wp_term_id: tag.id,
59
+ # }).first&.delete
60
+ # end
53
61
  def remove_tag which
54
- tag = WpTag.iso_get which
55
- # puts!( tag.slug, "Removing tag" ) if DEBUG
56
- Office::EmailConversationTag.where({
57
- email_conversation_id: id,
58
- wp_term_id: tag.id,
59
- }).first&.delete
62
+ ::EmailtagTie.find_by({ emailtag: which, email_conversation: self }).delete
60
63
  end
61
- ## @deprecated, do not use. _vp_ 2023-10-29
62
64
  def rmtag which; remove_tag which; end
63
65
 
66
+ # def in_emailtag? which
67
+ # tag = WpTag.iso_get( which )
68
+ # email_conversation_tags.where({ wp_term_id: tag.id }).present?
69
+ # end
64
70
  def in_emailtag? which
65
- tag = WpTag.iso_get( which )
66
- email_conversation_tags.where({ wp_term_id: tag.id }).present?
71
+ if which.class == String
72
+ which = Office::Emailtag.find_by({ slug: which })
73
+ end
74
+ !!::EmailtagTie.where({ emailtag: which, email_conversation: self }).first
67
75
  end
68
76
 
69
- def self.in_emailtag which
70
- tag = WpTag.iso_get( which )
71
- email_conversation_tags = Office::EmailConversationTag.where({ wp_term_id: tag.id })
72
- where({ :id.in => email_conversation_tags.map(&:email_conversation_id) })
77
+ # def self.in_emailtag which
78
+ # tag = WpTag.iso_get( which )
79
+ # email_conversation_tags = Office::EmailConversationTag.where({ wp_term_id: tag.id })
80
+ # where({ :id.in => email_conversation_tags.map(&:email_conversation_id) })
81
+ # end
82
+ def self.in_emailtag which, page: 1, per: 25
83
+ conv_ids = ::EmailtagTie.find_by({ emailtag: which }).map( &:email_conversation_id )
84
+ Conv.where({ id: conv_ids }).order_by({ updated_at: :desc }).page( page ).per( per )
73
85
  end
74
86
 
75
- def self.not_in_emailtag which
76
- tag = WpTag.iso_get( which )
77
- email_conversation_tags = Office::EmailConversationTag.where({ wp_term_id: tag.id })
78
- where({ :id.nin => email_conversation_tags.map(&:email_conversation_id) })
87
+ # def self.not_in_emailtag which
88
+ # tag = WpTag.iso_get( which )
89
+ # email_conversation_tags = Office::EmailConversationTag.where({ wp_term_id: tag.id })
90
+ # where({ :id.nin => email_conversation_tags.map(&:email_conversation_id) })
91
+ # end
92
+ def self.not_in_emailtag which, page: 1, per: 25
93
+ conv_ids = ::EmailtagTie.find_by({ emailtag: which }).map( &:email_conversation_id )
94
+ Conv.where({ :id.nin => conv_ids }).order_by({ updated_at: :desc }).page( page ).per( per )
79
95
  end
80
96
 
81
97
 
@@ -135,13 +135,23 @@ class Office::EmailMessage
135
135
  # "text/calendar; charset=utf-8; method=REQUEST"
136
136
  def churn_subpart part
137
137
  if part.content_disposition&.include?('attachment')
138
- save_attachment( part, filename: "subpart-attachment" )
138
+ ## @TODO: attachments !
139
+ ;
139
140
  else
140
- if part.content_type.include?("multipart")
141
+ if part.content_type.include?("multipart/related") ||
142
+ part.content_type.include?("multipart/alternative")
143
+
141
144
  part.parts.each do |subpart|
142
145
  churn_subpart( subpart )
143
146
  end
144
147
  else
148
+ # attachment = Office::EmailAttachment.new({
149
+ # content: part.decoded,
150
+ # content_type: part.content_type,
151
+ # email_message: self,
152
+ # })
153
+ # attachment.save
154
+
145
155
  if part.content_type.include?('text/html')
146
156
  self.part_html = part.decoded
147
157
 
@@ -149,19 +159,15 @@ class Office::EmailMessage
149
159
  self.part_txt = part.decoded
150
160
 
151
161
  elsif part.content_type.include?("text/calendar")
152
- save_attachment( part, filename: 'subpart-calendar.ics' )
153
-
162
+ ;
154
163
  elsif part.content_type.include?("application/pdf")
155
- save_attachment( part, filename: 'subpart.pdf' )
156
-
164
+ ;
157
165
  elsif part.content_type.include?("image/jpeg")
158
- save_attachment( part, filename: 'subpart.jpg' )
159
-
166
+ ;
160
167
  elsif part.content_type.include?("image/png")
161
- save_attachment( part, filename: 'subpart.png' )
168
+ ;
162
169
 
163
170
  else
164
- save_attachment( part, filename: 'subpart-unspecified' )
165
171
  self.logs.push "444 No action for a part with content_type #{part.content_type}"
166
172
 
167
173
  end
@@ -169,49 +175,6 @@ class Office::EmailMessage
169
175
  end
170
176
  end
171
177
 
172
- def save_attachment att, filename: "no-filename-specified"
173
- content_type = att.content_type.split(';')[0]
174
- if content_type.include? 'image'
175
- photo = Photo.new({
176
- content_type: content_type,
177
- email_message_id: @message.id,
178
- image_data: att.body.encoded,
179
- original_filename: att.content_type_parameters[:name],
180
- })
181
- photo.decode_base64_image
182
- photo.save
183
- else
184
-
185
- filename = CGI.escape( att.filename || filename )
186
- attachment = Office::EmailAttachment.new({
187
- content: att.body.decoded,
188
- content_type: att.content_type,
189
- email_message: @message,
190
- filename: filename,
191
- })
192
- begin
193
- attachment.save
194
- rescue Encoding::UndefinedConversionError
195
- @message.logs.push "Could not save an attachment"
196
- @message.save
197
- end
198
-
199
- sio = StringIO.new att.body.decoded
200
- File.open("/tmp/#{filename}", 'w:UTF-8:ASCII-8BIT') do |f|
201
- f.puts(sio.read)
202
- end
203
- asset3d = ::Gameui::Asset3d.new({
204
- email_message: @message,
205
- filename: filename,
206
- object: File.open("/tmp/#{filename}"),
207
- })
208
- if !asset3d.save
209
- @message.logs.push "Could not save an asset3d"
210
- @message.save
211
- end
212
-
213
- end
214
- end
215
178
 
216
179
  def body_sanitized
217
180
  ActionView::Base.full_sanitizer.sanitize( part_html||'' ).squish
@@ -0,0 +1,27 @@
1
+
2
+ class Office::Emailtag
3
+ include Mongoid::Document
4
+ include Mongoid::Timestamps
5
+
6
+ # field :name
7
+ # validates :name, presence: true
8
+
9
+ field :slug
10
+ validates :slug, presence: true
11
+
12
+ INBOX = 'inbox'
13
+ TRASH = 'trash'
14
+ EMAILTAGS = [ INBOX, TRASH ]
15
+
16
+ def self.inbox
17
+ Office::Emailtag.find_by({ slug: INBOX })
18
+ end
19
+
20
+ def self.trash
21
+ Office::Emailtag.find_by({ slug: TRASH })
22
+ end
23
+
24
+ has_many :emailtag_ties, class_name: 'Office::EmailtagEmailConversation'
25
+
26
+ end
27
+ Tag = Office::Emailtag
@@ -0,0 +1,10 @@
1
+
2
+ class Office::EmailtagEmailConversation
3
+ include Mongoid::Document
4
+ include Mongoid::Timestamps
5
+
6
+ belongs_to :emailtag, class_name: 'Office::Emailtag'
7
+ belongs_to :email_conversation, class_name: 'Office::EmailConversation'
8
+
9
+ end
10
+ EmailtagTie = Office::EmailtagEmailConversation
data/lib/wco/appliance.rb CHANGED
@@ -3,24 +3,29 @@ class Wco::Appliance
3
3
  include Mongoid::Document
4
4
  include Mongoid::Timestamps
5
5
 
6
+ field :kind
7
+ validates :kind, presence: true
8
+
9
+ field :environment
10
+
6
11
  field :name
7
12
  validates :name, uniqueness: { scope: :leadset_id }, presence: true
8
13
 
9
- field :kind
14
+ # field :service_name
15
+ def service_name
16
+ # "#{@appliance[:kind]}_#{@appliance[:environment]}_#{@appliance[:name]}"
17
+ "#{kind}_#{environment}_#{name}"
18
+ end
10
19
 
11
- field :service_name
12
- field :environment
13
20
 
14
21
  field :subdomain
15
22
  field :domain
16
- def host
23
+ def origin
17
24
  "#{subdomain}.#{domain}"
18
25
  end
19
26
 
20
- field :leadset_id
21
- def leadset
22
- Leadset.find leadset_id
23
- end
27
+ field :leadset_id # old sql
28
+ belongs_to :leadset, class_name: 'Wco::Leadset', inverse_of: :appliances
24
29
 
25
30
  belongs_to :appliance_tmpl, class_name: 'Wco::ApplianceTmpl'
26
31
  def tmpl
@@ -28,16 +33,20 @@ class Wco::Appliance
28
33
  end
29
34
 
30
35
  belongs_to :serverhost, class_name: 'Wco::Serverhost'
31
- belongs_to :wco_leadset, class_name: 'Wco::Leadset', inverse_of: :appliances
32
36
 
33
- # field :ip
37
+
34
38
  field :port
35
39
 
36
40
  STATE_PENDING = 'state-pending'
37
41
  STATE_LIVE = 'state-live'
38
42
  STATE_TERM = 'state-term'
43
+ STATES = %w| state-pending state-live state-term |
39
44
  field :state, default: STATE_PENDING
40
45
 
46
+ def route53_zone
47
+ Wco::DnsDomain.find_by({ name: domain })[0].route53_zone
48
+ end
49
+
41
50
  end
42
51
 
43
52
 
@@ -18,13 +18,33 @@ class Wco::ApplianceTmpl
18
18
  field :volume_zip
19
19
  validates :volume_zip, presence: true
20
20
 
21
- KIND_CORPHOME1 = 'corphome1'
21
+ ## Only underscores! These become variable names.
22
+ # KIND_CRM = 'kind_crm'
23
+ # KIND_DRUPAL = 'kind_drupal'
24
+ # KIND_HELLOWORLD = 'kind_helloworld'
25
+ # KIND_IROWOR = 'kind_irowor'
26
+ # KIND_JENKINS = 'kind_jenkins'
27
+ # KIND_MATOMO = 'kind_matomo'
28
+ # KIND_MOODLE = 'kind_moodle'
29
+ # KIND_PRESTASHOP = 'kind_prestashop'
30
+ # KIND_SMT = 'kind_smt'
31
+ # KIND_WORDPRESS = 'kind_wordpress'
32
+
33
+ ## 2023-12-08 :: These names are impossible to change already.
34
+ KIND_CRM = 'crm'
22
35
  KIND_DRUPAL = 'drupal'
23
36
  KIND_HELLOWORLD = 'helloworld'
24
- # KINDS = [ 'smt', 'emailcrm', KIND_CORPHOME1, KIND_HELLOWORLD, KIND_DRUPAL,
25
- # 'mautic', 'matomo',
26
- # 'irowor', 'eCommerce' ]
27
- KINDS = [ KIND_HELLOWORLD ]
37
+ KIND_IROWOR = 'irowor'
38
+ KIND_JENKINS = 'jenkins'
39
+ KIND_MATOMO = 'matomo'
40
+ KIND_MOODLE = 'moodle'
41
+ KIND_PRESTASHOP = 'prestashop'
42
+ KIND_SMT = 'smt'
43
+ KIND_WORDPRESS = 'wordpress'
44
+
45
+ KINDS = [ KIND_CRM, KIND_DRUPAL, KIND_HELLOWORLD, KIND_IROWOR,
46
+ KIND_JENKINS, KIND_MATOMO, KIND_MOODLE, KIND_PRESTASHOP, KIND_SMT,
47
+ KIND_WORDPRESS ]
28
48
 
29
49
  has_many :appliances, class_name: 'Wco::Appliance'
30
50
 
@@ -0,0 +1,23 @@
1
+
2
+ class Wco::DnsDomain
3
+ include Mongoid::Document
4
+ include Mongoid::Timestamps
5
+
6
+ field :name
7
+ validates :name, uniqueness: true
8
+
9
+ ## orbital.city : Z0145070C3DD1OJWHTXJ
10
+ ## oquaney-splicing.com : Z060228025Y0JHUA35GN5
11
+ field :route53_zone
12
+ validates :route53_zone, presence: true
13
+
14
+ STATE_ACTIVE = 'active'
15
+ STATE_INACTIVE = 'inactive'
16
+ STATES = [ 'active', 'inactive' ]
17
+ field :state, default: STATE_ACTIVE
18
+
19
+ def self.list
20
+ [[nil,nil]] + all.where({ state: STATE_ACTIVE }).map { |i| [i.name, i.name ] }
21
+ end
22
+
23
+ end
@@ -0,0 +1,10 @@
1
+
2
+ class Wco::EmailConversationLead
3
+ include Mongoid::Document
4
+ include Mongoid::Timestamps
5
+
6
+ belongs_to :email_conversation, class_name: 'Office::EmailConversation'
7
+ belongs_to :wco_lead, class_name: 'Ish::UserProfile'
8
+
9
+
10
+ end
data/lib/wco/leadset.rb CHANGED
@@ -1,11 +1,20 @@
1
1
 
2
+ ##
3
+ ## 2023-11-30 _vp_ For use in hosting!
4
+ ## 2023-11-30 _vp_ For future use in email!
5
+ ##
2
6
  class Wco::Leadset
3
7
  include Mongoid::Document
4
8
  include Mongoid::Timestamps
5
9
 
6
10
  field :name
7
11
 
8
- field :domains, type: :string, default: 'orbital.city'
12
+ field :company_url
13
+ validates :company_url, presence: true, uniqueness: true
14
+
15
+ has_many :wco_leads, class_name: 'Ish::UserProfile'
16
+
17
+ # field :domains, type: :string, default: 'orbital.city'
9
18
 
10
19
  has_many :serverhosts, class_name: 'Wco::Serverhost', inverse_of: :wco_leadset
11
20
  def next_serverhost
@@ -16,50 +16,54 @@ class Wco::Serverhost
16
16
 
17
17
  field :next_port, type: :integer, default: 8000
18
18
 
19
+ field :nginx_root, default: '/opt/nginx'
20
+ field :public_ip
21
+
19
22
  ## net-ssh, sshkit
20
23
  field :ssh_host
21
24
  # field :ssh_username
22
25
  # field :ssh_key
23
- field :nginx_root, default: '/opt/nginx'
24
26
 
25
27
  has_many :appliances, class_name: 'Wco::Appliance'
26
28
 
27
- # def nginx_add_site rendered_str=nil, config={}
28
- # # puts! config, '#nginx_add_site'
29
- # File.write( "/usr/local/etc/nginx/sites-available/#{config[:service_name]}", rendered_str )
30
- # out = `sudo nginx enable-site #{config[:service_name]} ; \
31
- # nginx -s reload ; \
32
- # echo ok
33
- # `;
34
- # puts! out, 'out'
35
- # end
29
+ def add_nginx_site app
30
+ ac = ActionController::Base.new
31
+ ac.instance_variable_set( :@app, app )
32
+ rendered_str = ac.render_to_string("scripts/nginx_site.conf")
33
+ puts '+++ add_nginx_site rendered_str:'
34
+ print rendered_str
36
35
 
37
- def nginx_add_site rendered_str=nil, config={}
38
- puts! rendered_str, '#nginx_add_site // rendered_str'
39
- puts! config, '#nginx_add_site // config'
36
+ file = Tempfile.new('prefix')
37
+ file.write rendered_str
38
+ file.close
40
39
 
41
- File.write( "tmp/#{config[:service_name]}", rendered_str )
42
- Net::SSH.start( ssh_host, ssh_username, keys: ssh_key ) do |ssh|
40
+ cmd = "scp #{file.path} #{ssh_host}:/etc/nginx/sites-available/#{app.service_name}.conf "
41
+ puts! cmd, 'cmd'
42
+ `#{cmd}`
43
43
 
44
- out = ssh.scp.upload! "tmp/#{config[:service_name]}", "#{nginx_root}/conf/sites-available/"
45
- puts! out, 'out'
44
+ cmd = "ssh #{ssh_host} 'ln -s /etc/nginx/sites-available/#{app.service_name}.conf /etc/nginx/sites-enabled/#{app.service_name}.conf ' "
45
+ puts! cmd, 'cmd'
46
+ `#{cmd}`
46
47
 
47
- out = ssh.exec! "#{nginx_root}/nginx enable-site #{config[:service_name]} ; #{nginx_root}/nginx -s reload"
48
- puts! out, 'out'
48
+ cmd = "ssh #{ssh_host} 'nginx -s reload ' "
49
+ puts! cmd, 'cmd'
50
+ `#{cmd}`
49
51
 
50
- end
52
+ cmd = "ssh #{ssh_host} 'certbot run -d #{app.origin} --nginx -n ' "
53
+ puts! cmd, 'cmd'
54
+ `#{cmd}`
51
55
 
52
56
  end
53
57
 
54
58
  WORKDIR = "/opt/projects/docker"
55
59
 
56
- def add_docker_service app={}
60
+ def add_docker_service app
57
61
  puts! app, '#add_docker_service'
58
62
 
59
63
  ac = ActionController::Base.new
60
64
  ac.instance_variable_set( :@app, app )
61
65
  ac.instance_variable_set( :@workdir, WORKDIR )
62
- rendered_str = ac.render_to_string("docker-compose/dc-#{app[:kind]}")
66
+ rendered_str = ac.render_to_string("docker-compose/dc-#{app.kind}")
63
67
  puts '+++ add_docker_service rendered_str:'
64
68
  print rendered_str
65
69
 
@@ -68,15 +72,45 @@ class Wco::Serverhost
68
72
  file.close
69
73
  puts! file.path, 'file.path'
70
74
 
71
- `scp #{file.path} #{ssh_host}:#{WORKDIR}/dc-#{app[:service_name]}.yml`
72
- `ssh #{ssh_host} 'cd #{WORKDIR} ; \
73
- docker compose -f dc-#{app[:service_name]}.yml up -d #{app[:service_name]} ; \
74
- echo ok #add_docker_service ' `
75
+ cmd = "scp #{file.path} #{ssh_host}:#{WORKDIR}/dc-#{app.service_name}.yml "
76
+ puts! cmd, 'cmd'
77
+ `#{cmd}`
78
+
79
+ cmd = "ssh #{ssh_host} 'cd #{WORKDIR} ; \
80
+ docker compose -f dc-#{app.service_name}.yml up -d #{app.service_name} ; \
81
+ echo ok #add_docker_service ' "
82
+ puts! cmd, 'cmd'
83
+ `#{cmd}`
84
+
85
+ puts "ok '#add_docker_service'"
75
86
  end
76
87
 
77
- def create_volume app={}
78
- # puts! app, '#create_volume'
88
+ def create_wordpress_volume app
89
+ ac = ActionController::Base.new
90
+ ac.instance_variable_set( :@app, app )
91
+ ac.instance_variable_set( :@workdir, WORKDIR )
92
+ rendered_str = ac.render_to_string("scripts/create_volume")
93
+ # puts '+++ create_volume rendered_str:'
94
+ # print rendered_str
95
+
96
+ file = Tempfile.new('prefix')
97
+ file.write rendered_str
98
+ file.close
99
+ # puts! file.path, 'file.path'
100
+
101
+ cmd = "scp #{file.path} #{ssh_host}:#{WORKDIR}/scripts/create_volume"
102
+ puts! cmd, 'cmd'
103
+ `#{cmd}`
79
104
 
105
+ cmd = "ssh #{ssh_host} 'chmod a+x #{WORKDIR}/scripts/create_volume ; \
106
+ #{WORKDIR}/scripts/create_volume ' "
107
+ puts! cmd, 'cmd'
108
+ `#{cmd}`
109
+
110
+ puts 'ok #create_volume'
111
+ end
112
+
113
+ def create_volume app
80
114
  ac = ActionController::Base.new
81
115
  ac.instance_variable_set( :@app, app )
82
116
  ac.instance_variable_set( :@workdir, WORKDIR )
@@ -89,11 +123,17 @@ class Wco::Serverhost
89
123
  file.close
90
124
  # puts! file.path, 'file.path'
91
125
 
92
- `scp #{file.path} #{ssh_host}:#{WORKDIR}/scripts/create_volume`
93
- `ssh #{ssh_host} 'chmod a+x #{WORKDIR}/scripts/create_volume ; \
94
- #{WORKDIR}/scripts/create_volume ' `
126
+ cmd = "scp #{file.path} #{ssh_host}:#{WORKDIR}/scripts/create_volume"
127
+ puts! cmd, 'cmd'
128
+ `#{cmd}`
129
+
130
+ cmd = "ssh #{ssh_host} 'chmod a+x #{WORKDIR}/scripts/create_volume ; \
131
+ #{WORKDIR}/scripts/create_volume ' "
132
+ puts! cmd, 'cmd'
133
+ `#{cmd}`
134
+
135
+ puts 'ok #create_volume'
95
136
  end
96
- # alias_method :create_volume, :create_volume_2
97
137
 
98
138
 
99
139
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ish_models
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.33.303
4
+ version: 3.0.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - piousbox
@@ -191,7 +191,7 @@ files:
191
191
  - lib/gameui/map.rb
192
192
  - lib/gameui/map_bookmark.rb
193
193
  - lib/gameui/marker.rb
194
- - lib/iro/alert.rb-bk
194
+ - lib/iro/option_watch.rb
195
195
  - lib/ish/cache_key.rb
196
196
  - lib/ish/configuration.rb
197
197
  - lib/ish/crawler.rb
@@ -226,6 +226,8 @@ files:
226
226
  - lib/office/email_filter.rb
227
227
  - lib/office/email_message.rb
228
228
  - lib/office/email_message_stub.rb
229
+ - lib/office/emailtag.rb
230
+ - lib/office/emailtag_email_conversation.rb
229
231
  - lib/office/lead_action.rb
230
232
  - lib/office/lead_action_template.rb
231
233
  - lib/office/obfuscated_redirect.rb
@@ -235,6 +237,8 @@ files:
235
237
  - lib/video.rb
236
238
  - lib/wco/appliance.rb
237
239
  - lib/wco/appliance_tmpl.rb
240
+ - lib/wco/dns_domain.rb
241
+ - lib/wco/email_conversation_lead.rb
238
242
  - lib/wco/leadset.rb
239
243
  - lib/wco/price.rb
240
244
  - lib/wco/product.rb
@@ -242,7 +246,7 @@ files:
242
246
  - lib/wco/subscription.rb
243
247
  homepage: https://wasya.co
244
248
  licenses:
245
- - Proprietary
249
+ - CC-BY-NC-SA-4.0
246
250
  metadata: {}
247
251
  post_install_message:
248
252
  rdoc_options: []