texd 0.4.2 → 0.5.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -53,6 +53,33 @@ module Texd
53
53
  add(Attachment::File, path, rename)
54
54
  end
55
55
 
56
+ # Includes a file with the given `content` to the list. This is useful
57
+ # if you generate the content on-the-fly (like creating CSV data from
58
+ # database records), and don't want to save that content to disk first.
59
+ #
60
+ # In short, these examples should be mostly equivalent:
61
+ #
62
+ # # use a temporary file to write contents to, and attach that file:
63
+ # tmp = Tempfile.new ["foo", ".csv"]
64
+ # tmp.write @record.to_csv
65
+ # tmp.flush
66
+ # tmp.close
67
+ # text_attach tmp.name
68
+ #
69
+ # # skip writing to disk and inline the file:
70
+ # texd_inline @record.to_csv, "foo.csv"
71
+ #
72
+ # @param [<Type>] contents <description>
73
+ # @param [<Type>] path <description>
74
+ #
75
+ # @return [<Type>] <description>
76
+ def inline(contents, path)
77
+ att = Attachment::Dynamic.new(path, contents)
78
+
79
+ items[att.name] ||= att
80
+ items[att.name]
81
+ end
82
+
56
83
  # Adds a file reference with the given path to the list. Similar to #attach,
57
84
  # the file path must either be an absolute filename or be relative to
58
85
  # app/tex/ of the host application.
@@ -130,12 +157,33 @@ module Texd
130
157
  end
131
158
  end
132
159
 
160
+ # Computes the file name of a given path, and returns it with or without
161
+ # file extension.
162
+ #
163
+ # @param [String, Pathname] path A Pathname instance or just a plain file name.
164
+ # @param [Boolean] with_extension If true, returns the file path's basename
165
+ # unmodified, otherwise the file extension, including its ".", is removed.
166
+ # @return [String] File path with or without extension.
167
+ def self.name(path, with_extension = true) # rubocop:disable Style/OptionalBooleanParameter
168
+ basename = ::File.basename(path)
169
+ return basename if with_extension
170
+
171
+ dot = basename.rindex(".")
172
+ return basename if dot == 0 # file starts with "."
173
+
174
+ basename.slice(0, dot)
175
+ end
176
+
133
177
  Dynamic = Struct.new(:name, :contents) do
134
178
  def to_upload_io(**)
135
179
  Multipart::Post::UploadIO.new(StringIO.new(contents), nil, name).tap { |io|
136
180
  io.instance_variable_set :@original_filename, name
137
181
  }
138
182
  end
183
+
184
+ def name(with_extension = true) # rubocop:disable Style/OptionalBooleanParameter
185
+ Attachment.name(self[:name], with_extension)
186
+ end
139
187
  end
140
188
 
141
189
  class Base
@@ -164,13 +212,7 @@ module Texd
164
212
  # @param [Boolean] with_extension
165
213
  # @return [String] output file name
166
214
  def name(with_extension = true) # rubocop:disable Style/OptionalBooleanParameter
167
- basename = ::File.basename(@name)
168
- return basename if with_extension
169
-
170
- dot = basename.rindex(".")
171
- return basename if dot == 0 # file starts with "."
172
-
173
- basename.slice(0, dot)
215
+ Attachment.name(@name, with_extension)
174
216
  end
175
217
  end
176
218
 
data/lib/texd/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Texd
4
- VERSION = "0.4.2"
4
+ VERSION = "0.5.1"
5
5
  end
data/lib/texd.rb CHANGED
@@ -80,6 +80,10 @@ module Texd
80
80
  attachments.attach(path, rename).name(with_extension)
81
81
  end
82
82
 
83
+ define_method :texd_inline do |data, name, with_extension: true|
84
+ attachments.inline(data, name).name(with_extension)
85
+ end
86
+
83
87
  define_method :texd_reference do |path, rename: true, with_extension: true|
84
88
  attachments.reference(path, rename).name(with_extension)
85
89
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: texd
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.2
4
+ version: 0.5.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dominik Menke
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-06-28 00:00:00.000000000 Z
11
+ date: 2022-10-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: multipart-post
@@ -117,12 +117,14 @@ files:
117
117
  - Makefile
118
118
  - README.md
119
119
  - Rakefile
120
- - gemfiles/rails-6.0
121
- - gemfiles/rails-6.0.lock
122
- - gemfiles/rails-6.1
123
- - gemfiles/rails-6.1.lock
124
- - gemfiles/rails-7.0
125
- - gemfiles/rails-7.0.lock
120
+ - gemfiles/rails-6.0/Gemfile
121
+ - gemfiles/rails-6.0/Gemfile.lock
122
+ - gemfiles/rails-6.1/Gemfile
123
+ - gemfiles/rails-6.1/Gemfile.lock
124
+ - gemfiles/rails-7.0/Gemfile
125
+ - gemfiles/rails-7.0/Gemfile.lock
126
+ - gemfiles/rails-main/Gemfile
127
+ - gemfiles/rails-main/Gemfile.lock
126
128
  - lib/texd.rb
127
129
  - lib/texd/attachment.rb
128
130
  - lib/texd/cache.rb
@@ -141,7 +143,7 @@ metadata:
141
143
  rubygems_mfa_required: 'true'
142
144
  homepage_uri: https://github.com/digineo/texd-ruby
143
145
  source_code_uri: https://github.com/digineo/texd-ruby
144
- changelog_uri: https://github.com/digineo/texd-ruby/blob/v0.4.2/CHANGELOG.md
146
+ changelog_uri: https://github.com/digineo/texd-ruby/blob/v0.5.1/CHANGELOG.md
145
147
  post_install_message:
146
148
  rdoc_options: []
147
149
  require_paths: