code-ruby 1.5.2 → 1.5.3

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: 581653fe0886e86410048da9af0e26e3f084a6539d6b1320cc5a39709683a561
4
- data.tar.gz: 61833954737c769eb64ccb4606023d4fa993ba3832f875dc74476cfb5a9ef1fb
3
+ metadata.gz: 58d866d9e727af5cd21ef84470e4c1d1ca184c50404487dbf9b0dd723285df75
4
+ data.tar.gz: ed804eeaabb172c04f01d37b30279ab108824aeeda15d844f45d9efdd53dbde2
5
5
  SHA512:
6
- metadata.gz: b7cf5543d7f2290ac8c4980a47b1bdfdbf16f056aaf0e4f9476a4a36a9c72eb021d49534d45c45a92bee63859d2778fbc04dcf8b7093ac66e0acfe719fc297b1
7
- data.tar.gz: 16e9a0c4848b02a7e6c9dd04f1b4a0ffc788b262b0bd1a8eddabd0433fac5b2d4a0f6b800debef0107372269fc3803a168dd929e296124b54286bedba345db96
6
+ metadata.gz: 22ff4dfc9525012aad11aafb6aa26489ce4ffec24c9d28b9dd1a0d0009766874b54345ddd4b5aa554fc67db095dbf090920d87926837877bb1df912a049499ea
7
+ data.tar.gz: d0c237a243258c2c9ea6fac040d7515aba786e73752754d6abba32f62658647623620008b250a943c144b38b79c6310cc6b94d15fe2aaf4f2fee4806d4d71da4
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- code-ruby (1.5.2)
4
+ code-ruby (1.5.3)
5
5
  activesupport
6
6
  base64
7
7
  bigdecimal
@@ -9,7 +9,9 @@ PATH
9
9
  dorian-arguments
10
10
  json
11
11
  language-ruby
12
+ mail
12
13
  net-http
14
+ net-smtp
13
15
  nokogiri
14
16
  uri
15
17
  zeitwerk
@@ -46,6 +48,7 @@ GEM
46
48
  bigdecimal
47
49
  rexml
48
50
  csv (3.3.4)
51
+ date (3.4.1)
49
52
  did-you-mean (0.1.1)
50
53
  levenshtein (>= 0.2.0)
51
54
  diff-lcs (1.6.2)
@@ -104,7 +107,12 @@ GEM
104
107
  libv8-node (23.6.1.0-x86_64-linux)
105
108
  lint_roller (1.1.0)
106
109
  logger (1.7.0)
107
- mini_portile2 (2.8.9)
110
+ mail (2.8.1)
111
+ mini_mime (>= 0.1.1)
112
+ net-imap
113
+ net-pop
114
+ net-smtp
115
+ mini_mime (1.1.5)
108
116
  mini_racer (0.18.1)
109
117
  libv8-node (~> 23.6.1.0)
110
118
  minitest (5.25.5)
@@ -112,9 +120,15 @@ GEM
112
120
  ruby2_keywords (~> 0.0.1)
113
121
  net-http (0.6.0)
114
122
  uri
115
- nokogiri (1.18.8)
116
- mini_portile2 (~> 2.8.2)
117
- racc (~> 1.4)
123
+ net-imap (0.5.8)
124
+ date
125
+ net-protocol
126
+ net-pop (0.1.2)
127
+ net-protocol
128
+ net-protocol (0.2.2)
129
+ timeout
130
+ net-smtp (0.5.1)
131
+ net-protocol
118
132
  nokogiri (1.18.8-arm64-darwin)
119
133
  racc (~> 1.4)
120
134
  nokogiri (1.18.8-x86_64-linux-gnu)
@@ -222,6 +236,7 @@ GEM
222
236
  unicode-display_width (>= 1.1.1, < 4)
223
237
  thor (1.3.2)
224
238
  tilt (2.6.0)
239
+ timeout (0.4.3)
225
240
  tzinfo (2.0.6)
226
241
  concurrent-ruby (~> 1.0)
227
242
  unicode-display_width (3.1.4)
@@ -240,7 +255,7 @@ GEM
240
255
 
241
256
  PLATFORMS
242
257
  arm64-darwin-23
243
- ruby
258
+ arm64-darwin-24
244
259
  x86_64-linux
245
260
 
246
261
  DEPENDENCIES
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.5.2
1
+ 1.5.3
data/code-ruby.gemspec CHANGED
@@ -20,7 +20,9 @@ Gem::Specification.new do |s|
20
20
  s.add_dependency "dorian-arguments"
21
21
  s.add_dependency "json"
22
22
  s.add_dependency "language-ruby"
23
+ s.add_dependency "mail"
23
24
  s.add_dependency "net-http"
25
+ s.add_dependency "net-smtp"
24
26
  s.add_dependency "nokogiri"
25
27
  s.add_dependency "uri"
26
28
  s.add_dependency "zeitwerk"
@@ -294,6 +294,10 @@ class Code
294
294
  code_to_string.raw
295
295
  end
296
296
 
297
+ def to_i
298
+ code_to_integer.raw
299
+ end
300
+
297
301
  def inspect
298
302
  code_inspect.raw
299
303
  end
@@ -138,6 +138,9 @@ class Code
138
138
  when "Http"
139
139
  sig(args) { Object.repeat }
140
140
  code_arguments.any? ? Http.new(*code_arguments.raw) : Class.new(Http)
141
+ when "Smtp"
142
+ sig(args) { Object.repeat }
143
+ code_arguments.any? ? Smtp.new(*code_arguments.raw) : Class.new(Smtp)
141
144
  when "Json"
142
145
  sig(args) { Object.repeat }
143
146
  code_arguments.any? ? Json.new(*code_arguments.raw) : Class.new(Json)
@@ -30,6 +30,9 @@ class Code
30
30
  when "<<", "append"
31
31
  sig(args) { Object }
32
32
  code_append(code_value)
33
+ when "-", "minus"
34
+ sig(args) { List }
35
+ code_minus(code_value)
33
36
  when "any?"
34
37
  sig(args) { Function.maybe }
35
38
  code_any?(code_value, **globals)
@@ -50,7 +53,13 @@ class Code
50
53
  code_shuffle
51
54
  when "flatten"
52
55
  sig(args) { Integer.maybe }
53
- code_flatten
56
+ code_flatten(code_value)
57
+ when "pop"
58
+ sig(args) { Integer.maybe }
59
+ code_pop(code_value)
60
+ when "shift"
61
+ sig(args) { Integer.maybe }
62
+ code_shift(code_value)
54
63
  when "include?"
55
64
  sig(args) { Object }
56
65
  code_include?(code_value)
@@ -142,6 +151,12 @@ class Code
142
151
  self
143
152
  end
144
153
 
154
+ def code_minus(other)
155
+ code_other = other.to_code
156
+
157
+ List.new(raw - code_other.raw)
158
+ end
159
+
145
160
  def code_detect(argument, **globals)
146
161
  code_argument = argument.to_code
147
162
 
@@ -214,6 +229,28 @@ class Code
214
229
  )
215
230
  end
216
231
 
232
+ def code_pop(n = nil)
233
+ code_n = n.to_code
234
+ n = code_n.raw
235
+
236
+ if code_n.nothing?
237
+ raw.pop || Nothing.new
238
+ else
239
+ List.new(raw.pop(n))
240
+ end
241
+ end
242
+
243
+ def code_shift(n = nil)
244
+ code_n = n.to_code
245
+ n = code_n.raw
246
+
247
+ if code_n.nothing?
248
+ raw.shift || Nothing.new
249
+ else
250
+ List.new(raw.shift(n))
251
+ end
252
+ end
253
+
217
254
  def code_include?(other)
218
255
  code_other = other.to_code
219
256
 
@@ -60,6 +60,9 @@ class Code
60
60
  when "step"
61
61
  sig(args) { Integer | Decimal }
62
62
  code_step(code_value)
63
+ when "sample"
64
+ sig(args)
65
+ code_sample
63
66
  when "to_list"
64
67
  sig(args)
65
68
  code_to_list
@@ -182,6 +185,10 @@ class Code
182
185
  def code_to_list
183
186
  List.new(raw.to_a)
184
187
  end
188
+
189
+ def code_sample
190
+ code_to_list.code_sample
191
+ end
185
192
  end
186
193
  end
187
194
  end
@@ -0,0 +1,87 @@
1
+ # frozen_string_literal: true
2
+
3
+ class Code
4
+ class Object
5
+ class Smtp < Dictionary
6
+ def call(**args)
7
+ code_operator = args.fetch(:operator, nil).to_code
8
+ code_arguments = args.fetch(:arguments, []).to_code
9
+ code_value = code_arguments.code_first
10
+
11
+ case code_operator.to_s
12
+ when "send"
13
+ sig(args) do
14
+ {
15
+ from: String.maybe,
16
+ to: String.maybe,
17
+ subject: String.maybe,
18
+ body: String.maybe,
19
+ body_text: String.maybe,
20
+ body_html: String.maybe
21
+ }
22
+ end
23
+
24
+ code_send(
25
+ from: code_value.code_get("from"),
26
+ to: code_value.code_get("to"),
27
+ subject: code_value.code_get("subject"),
28
+ body: code_value.code_get("body"),
29
+ body_text: code_value.code_get("body_text"),
30
+ body_html: code_value.code_get("body_html"),
31
+ )
32
+ else
33
+ super
34
+ end
35
+ end
36
+
37
+ def code_send(
38
+ from: nil,
39
+ to: nil,
40
+ subject: nil,
41
+ body: nil,
42
+ body_text: nil,
43
+ body_html: nil
44
+ )
45
+ code_from = from.to_code
46
+ code_to = to.to_code
47
+ code_subject = subject.to_code
48
+ code_body = body.to_code
49
+ code_body_text = body_text.to_code
50
+ code_body_html = body_html.to_code
51
+
52
+ mail = Mail.new
53
+ mail.from = code_from.to_s
54
+ mail.to = code_to.to_s
55
+ mail.subject = code_subject.to_s
56
+
57
+ text_part = Mail::Part.new
58
+ text_part.content_type = 'text/plain; charset=UTF-8'
59
+ text_part.body = code_body_text.to_s.presence || code_body.to_s
60
+
61
+ html_part = Mail::Part.new
62
+ html_part.content_type = 'text/html; charset=UTF-8'
63
+ html_part.body = code_body_html.to_s
64
+
65
+ mail.content_type = 'multipart/alternative'
66
+ mail.add_part(text_part)
67
+ mail.add_part(html_part) if code_body_html.to_s.present?
68
+
69
+ mail.delivery_method(
70
+ :smtp,
71
+ {
72
+ address: code_get("address").to_s,
73
+ port: code_get("port").to_i,
74
+ user_name: code_get("user_name").to_s,
75
+ password: code_get("password").to_s,
76
+ authentication: code_get("authentication").to_s,
77
+ enable_starttls_auto: code_get("enable_starttls_auto").truthy?,
78
+ },
79
+ )
80
+
81
+ mail.deliver!
82
+
83
+ Nothing.new
84
+ end
85
+ end
86
+ end
87
+ end
data/lib/code-ruby.rb CHANGED
@@ -7,6 +7,7 @@ require "bigdecimal/util"
7
7
  require "did_you_mean"
8
8
  require "json"
9
9
  require "language-ruby"
10
+ require "mail"
10
11
  require "net/http"
11
12
  require "nokogiri"
12
13
  require "stringio"
data/spec/code_spec.rb CHANGED
@@ -5,6 +5,8 @@ require "spec_helper"
5
5
  RSpec.describe Code do
6
6
  (
7
7
  %w[
8
+ Smtp
9
+ Smtp.new
8
10
  Time.monday?
9
11
  Time.tuesday?
10
12
  Time.wednesday?
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: code-ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.5.2
4
+ version: 1.5.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dorian Marié
8
8
  bindir: bin
9
9
  cert_chain: []
10
- date: 2025-05-16 00:00:00.000000000 Z
10
+ date: 2025-05-22 00:00:00.000000000 Z
11
11
  dependencies:
12
12
  - !ruby/object:Gem::Dependency
13
13
  name: activesupport
@@ -107,6 +107,20 @@ dependencies:
107
107
  - - ">="
108
108
  - !ruby/object:Gem::Version
109
109
  version: '0'
110
+ - !ruby/object:Gem::Dependency
111
+ name: mail
112
+ requirement: !ruby/object:Gem::Requirement
113
+ requirements:
114
+ - - ">="
115
+ - !ruby/object:Gem::Version
116
+ version: '0'
117
+ type: :runtime
118
+ prerelease: false
119
+ version_requirements: !ruby/object:Gem::Requirement
120
+ requirements:
121
+ - - ">="
122
+ - !ruby/object:Gem::Version
123
+ version: '0'
110
124
  - !ruby/object:Gem::Dependency
111
125
  name: net-http
112
126
  requirement: !ruby/object:Gem::Requirement
@@ -121,6 +135,20 @@ dependencies:
121
135
  - - ">="
122
136
  - !ruby/object:Gem::Version
123
137
  version: '0'
138
+ - !ruby/object:Gem::Dependency
139
+ name: net-smtp
140
+ requirement: !ruby/object:Gem::Requirement
141
+ requirements:
142
+ - - ">="
143
+ - !ruby/object:Gem::Version
144
+ version: '0'
145
+ type: :runtime
146
+ prerelease: false
147
+ version_requirements: !ruby/object:Gem::Requirement
148
+ requirements:
149
+ - - ">="
150
+ - !ruby/object:Gem::Version
151
+ version: '0'
124
152
  - !ruby/object:Gem::Dependency
125
153
  name: nokogiri
126
154
  requirement: !ruby/object:Gem::Requirement
@@ -248,6 +276,7 @@ files:
248
276
  - lib/code/object/nothing.rb
249
277
  - lib/code/object/parameter.rb
250
278
  - lib/code/object/range.rb
279
+ - lib/code/object/smtp.rb
251
280
  - lib/code/object/string.rb
252
281
  - lib/code/object/time.rb
253
282
  - lib/code/parser.rb