twi 0.7.0 → 0.8.0

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: 4c06bf91d26d756f01fff17c5740c7ea254ce49474b3be83ea8d57dd3e6ed472
4
- data.tar.gz: 0125a4facf8ed3d4bdc592e11c1c0bb376e43f451f985c13ec90e01de9a9047e
3
+ metadata.gz: e1f97b3f51774f71277566ba6e50329a019493a1a8f36578aeb1079ae6fe0da1
4
+ data.tar.gz: 0bc82156d7cd71fd36a62bdf6595146424ba553fb0033981f7eea3d0d227e101
5
5
  SHA512:
6
- metadata.gz: 62883cef19ef0ee4520ddbcfb62fcf0a64186836f3e8389242007e4c76f8ddfbd70d848832788358524ed19f4d5e74dfb8aa468b7372dd80631052ff0b63eede
7
- data.tar.gz: 2db626b561d48b858ba37d8703d3c03f11e2e3b6886a8ccfbce728caa5bf6f2f5a503fc418949a3990a0a5be58bda125507a17d61de8cc05203a85d10bbfb0fe
6
+ metadata.gz: 3f2b6f37100f53f86b3f2b7792c15591e2d60d7cb6d9e5d1658862d2af84446d5590ba67846f6c26c788038cc43592f41e0ef01c0f39f8cb72f51fde389c6277
7
+ data.tar.gz: 00ed8b8c2b73e63547942266681009205140046043b84a75488d41cd91997ae563e42e40084bf74cea037a0fe3b1580dc74cdcd03f237dd84dcdf22e73c53865
data/CHANGELOG.md CHANGED
@@ -1,3 +1,8 @@
1
+ ## [0.8.0] - 2026-09-11
2
+
3
+ - [New] Send media with a message: `Twi.create_message media_url:` carries it as an MMS
4
+ - [New] Record what was sent on Twi.mock.messages, so a suite can assert it
5
+
1
6
  ## [0.7.0] - 2026-08-19
2
7
 
3
8
  - [New] Add Twi.reset_mock, to stop a mocked answer outliving the test that arranged it
data/lib/twi/message.rb CHANGED
@@ -40,8 +40,7 @@ module Twi
40
40
 
41
41
  # Sends a message.
42
42
  def create
43
- message = api_client.messages.create messaging_service_sid: Twi.lio.messaging_sid.to_s,
44
- from: "+1#{@params[:sender]}", to: "+1#{@params[:recipient]}", body: @params[:content]
43
+ message = api_client.messages.create **create_params
45
44
 
46
45
  @params = { 'MessageSid' => message.sid }
47
46
  @id = message.sid
@@ -62,6 +61,17 @@ module Twi
62
61
 
63
62
  private
64
63
 
64
+ # Twilio fetches whatever `media_url` names and carries it as an MMS, so a vCard among
65
+ # them arrives as a contact card the reader can save rather than a link they must open.
66
+ # @return [Hash] the arguments Twilio takes for one outbound message.
67
+ def create_params
68
+ media = Array @params[:media_url]
69
+
70
+ { messaging_service_sid: Twi.lio.messaging_sid.to_s, from: "+1#{@params[:sender]}",
71
+ to: "+1#{@params[:recipient]}", body: @params[:content] }
72
+ .merge(media.any? ? { media_url: media } : {})
73
+ end
74
+
65
75
  def self.media_params_for(media = [])
66
76
  media.each_with_index.inject({ NumMedia: media.size.to_s }) do |hash, (item, index)|
67
77
  url_key = "MediaUrl#{index}".to_sym
@@ -7,6 +7,8 @@ module Twi
7
7
  def sid = @params[:id]
8
8
 
9
9
  def create
10
+ Twi.mock.messages << @params.slice(:sender, :recipient, :content, :media_url)
11
+
10
12
  if error = Twi.mock.message_error
11
13
  Twi.mock.message_error = nil
12
14
  raise Error, error
data/lib/twi/mock.rb CHANGED
@@ -4,5 +4,8 @@ module Twi
4
4
  attr_accessor :message, :message_error
5
5
  attr_accessor :conversation, :conversation_error
6
6
  attr_accessor :medium
7
+
8
+ # @return [Array<Hash>] every message sent since the mock was reset, in order.
9
+ def messages = @messages ||= []
7
10
  end
8
11
  end
data/lib/twi/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Twi
4
- VERSION = '0.7.0'
4
+ VERSION = '0.8.0'
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: twi
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.0
4
+ version: 0.8.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Claudio Baccigalupo