casper-unique-file 0.1.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 +7 -0
- data/README.md +40 -0
- data/Rakefile +30 -0
- data/casper-unique-file.gemspec +54 -0
- data/ext/casper_unique_file/Makefile +239 -0
- data/ext/casper_unique_file/casper_unique_file.c +88 -0
- data/ext/casper_unique_file/extconf.rb +41 -0
- data/ext/casper_unique_file/mkmf.log +33 -0
- data/lib/casper-unique-file.rb +20 -0
- data/lib/casper/unique/file.rb +27 -0
- data/lib/casper/unique/file/version.rb +25 -0
- data/lib/casper_unique_file/casper_unique_file.bundle +0 -0
- metadata +111 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: c6f40e1bb9c655ef5d48ab596e80fcaf50113700
|
4
|
+
data.tar.gz: 3b08d72f017cce1e66b78b27e751af54291baa57
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 727465c523206dcde4d55cdcb89a892ae3695e98803f57acebaa167d9b7f509078468c1c08658aa2afcba4e5d06c085555e2b3bea7c4356e43b74bc464c8a820
|
7
|
+
data.tar.gz: 99856eb3d572e39d6f701d0d93b94b8ed94c607ab22c7ef1ac4cd350bc5ac402e5de135db4d0a4bbe5f317afbe6c22f1add66c96d65f9e6585be6904800d490d
|
data/README.md
ADDED
@@ -0,0 +1,40 @@
|
|
1
|
+
# Casper::Unique::File
|
2
|
+
|
3
|
+
Helper to use mkstemp on MRI ruby. This gem provides the create module method that creates a uniquely named file inside the specified folder.
|
4
|
+
The filename has six characters and the created file is empty.
|
5
|
+
|
6
|
+
## Installation
|
7
|
+
|
8
|
+
Add this line to your application's Gemfile:
|
9
|
+
|
10
|
+
```ruby
|
11
|
+
gem 'casper-unique-file'
|
12
|
+
```
|
13
|
+
|
14
|
+
And then execute:
|
15
|
+
|
16
|
+
$ bundle
|
17
|
+
|
18
|
+
Or install it yourself as:
|
19
|
+
|
20
|
+
$ gem install casper-unique-file
|
21
|
+
|
22
|
+
## Usage
|
23
|
+
|
24
|
+
Just call Casper::Unique::File::create passing the name of the folder where the file should be created and the extension if needed. Returns the unique file name. On failure returns nil.
|
25
|
+
```sh
|
26
|
+
[ casper-unique-file ⇣⇡ master ᚶ ] $ ./bin/console
|
27
|
+
2.1.5 :001 > Casper::Unique::File::create('/tmp', '.pdf')
|
28
|
+
=> "/tmp/ZtkM4u.pdf"
|
29
|
+
2.1.5 :002 >
|
30
|
+
```
|
31
|
+
|
32
|
+
## Development
|
33
|
+
|
34
|
+
After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake clean compile` compile the C code. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
|
35
|
+
|
36
|
+
To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
|
37
|
+
|
38
|
+
## Contributing
|
39
|
+
|
40
|
+
Bug reports and pull requests are welcome on GitHub at https://github.com/casper2020/casper-unique-file.
|
data/Rakefile
ADDED
@@ -0,0 +1,30 @@
|
|
1
|
+
#
|
2
|
+
# Copyright (c) 2018 Cloudware S.A. All rights reserved.
|
3
|
+
#
|
4
|
+
# This file is part of casper-unique-file.
|
5
|
+
#
|
6
|
+
# casper-unique-file is free software: you can redistribute it and/or modify
|
7
|
+
# it under the terms of the GNU Affero General Public License as published by
|
8
|
+
# the Free Software Foundation, either version 3 of the License, or
|
9
|
+
# (at your option) any later version.
|
10
|
+
#
|
11
|
+
# casper-unique-file is distributed in the hope that it will be useful,
|
12
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
13
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
14
|
+
# GNU General Public License for more details.
|
15
|
+
#
|
16
|
+
# You should have received a copy of the GNU Affero General Public License
|
17
|
+
# along with casper-unique-file. If not, see <http://www.gnu.org/licenses/>.
|
18
|
+
#
|
19
|
+
require 'bundler/gem_tasks'
|
20
|
+
require 'rake/extensiontask'
|
21
|
+
|
22
|
+
gemspec = Gem::Specification.load('casper_unique_file.gemspec')
|
23
|
+
|
24
|
+
Rake::ExtensionTask.new('casper_unique_file') do |ext|
|
25
|
+
ext.name = 'casper_unique_file'
|
26
|
+
ext.source_pattern = "*.{c,h}"
|
27
|
+
ext.ext_dir = 'ext/casper_unique_file'
|
28
|
+
ext.lib_dir = 'lib/casper_unique_file'
|
29
|
+
ext.gem_spec = gemspec
|
30
|
+
end
|
@@ -0,0 +1,54 @@
|
|
1
|
+
#
|
2
|
+
# Copyright (c) 2018 Cloudware S.A. All rights reserved.
|
3
|
+
#
|
4
|
+
# This file is part of casper-unique-file.
|
5
|
+
#
|
6
|
+
# casper-unique-file is free software: you can redistribute it and/or modify
|
7
|
+
# it under the terms of the GNU Affero General Public License as published by
|
8
|
+
# the Free Software Foundation, either version 3 of the License, or
|
9
|
+
# (at your option) any later version.
|
10
|
+
#
|
11
|
+
# casper-unique-file is distributed in the hope that it will be useful,
|
12
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
13
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
14
|
+
# GNU General Public License for more details.
|
15
|
+
#
|
16
|
+
# You should have received a copy of the GNU Affero General Public License
|
17
|
+
# along with casper-unique-file. If not, see <http://www.gnu.org/licenses/>.
|
18
|
+
#
|
19
|
+
|
20
|
+
lib = File.expand_path("../lib", __FILE__)
|
21
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
22
|
+
require "casper/unique/file/version"
|
23
|
+
|
24
|
+
Gem::Specification.new do |spec|
|
25
|
+
spec.name = "casper-unique-file"
|
26
|
+
spec.version = Casper::Unique::File::VERSION
|
27
|
+
spec.authors = ["Eurico Inocencio"]
|
28
|
+
spec.email = ["eurico.inocencio@gmail.com"]
|
29
|
+
|
30
|
+
spec.summary = %q{Helper to make safe unique filenames in ruby}
|
31
|
+
spec.homepage = "https://github.com/casper2020/casper-unique-file"
|
32
|
+
|
33
|
+
# this tells RubyGems to build an extension upon install
|
34
|
+
spec.extensions = %w[ext/casper_unique_file/extconf.rb]
|
35
|
+
|
36
|
+
#spec.files = `git ls-files -z`.split("\x0").reject do |f|
|
37
|
+
# f.match(%r{^(ext|test|spec|features)/})
|
38
|
+
#end
|
39
|
+
spec.files = Dir.glob("ext/**/*") + Dir.glob("lib/**/*") + %w[
|
40
|
+
README.md
|
41
|
+
Rakefile
|
42
|
+
casper-unique-file.gemspec
|
43
|
+
]
|
44
|
+
|
45
|
+
spec.bindir = "exe"
|
46
|
+
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
47
|
+
spec.require_paths = ["lib"]
|
48
|
+
|
49
|
+
spec.add_development_dependency "bundler", "~> 1.16"
|
50
|
+
spec.add_development_dependency "rake", "~> 10.0"
|
51
|
+
spec.add_development_dependency "rspec"
|
52
|
+
spec.add_development_dependency 'rake-compiler'
|
53
|
+
|
54
|
+
end
|
@@ -0,0 +1,239 @@
|
|
1
|
+
|
2
|
+
SHELL = /bin/sh
|
3
|
+
|
4
|
+
# V=0 quiet, V=1 verbose. other values don't work.
|
5
|
+
V = 0
|
6
|
+
Q1 = $(V:1=)
|
7
|
+
Q = $(Q1:0=@)
|
8
|
+
ECHO1 = $(V:1=@:)
|
9
|
+
ECHO = $(ECHO1:0=@echo)
|
10
|
+
|
11
|
+
#### Start of system configuration section. ####
|
12
|
+
|
13
|
+
srcdir = .
|
14
|
+
topdir = /Users/emi/.rvm/rubies/ruby-2.1.5/include/ruby-2.1.0
|
15
|
+
hdrdir = $(topdir)
|
16
|
+
arch_hdrdir = /Users/emi/.rvm/rubies/ruby-2.1.5/include/ruby-2.1.0/x86_64-darwin16.0
|
17
|
+
PATH_SEPARATOR = :
|
18
|
+
VPATH = $(srcdir):$(arch_hdrdir)/ruby:$(hdrdir)/ruby
|
19
|
+
prefix = $(DESTDIR)/Users/emi/.rvm/rubies/ruby-2.1.5
|
20
|
+
rubysitearchprefix = $(rubylibprefix)/$(sitearch)
|
21
|
+
rubyarchprefix = $(rubylibprefix)/$(arch)
|
22
|
+
rubylibprefix = $(libdir)/$(RUBY_BASE_NAME)
|
23
|
+
exec_prefix = $(prefix)
|
24
|
+
vendorarchhdrdir = $(vendorhdrdir)/$(sitearch)
|
25
|
+
sitearchhdrdir = $(sitehdrdir)/$(sitearch)
|
26
|
+
rubyarchhdrdir = $(rubyhdrdir)/$(arch)
|
27
|
+
vendorhdrdir = $(rubyhdrdir)/vendor_ruby
|
28
|
+
sitehdrdir = $(rubyhdrdir)/site_ruby
|
29
|
+
rubyhdrdir = $(includedir)/$(RUBY_VERSION_NAME)
|
30
|
+
vendorarchdir = $(vendorlibdir)/$(sitearch)
|
31
|
+
vendorlibdir = $(vendordir)/$(ruby_version)
|
32
|
+
vendordir = $(rubylibprefix)/vendor_ruby
|
33
|
+
sitearchdir = $(sitelibdir)/$(sitearch)
|
34
|
+
sitelibdir = $(sitedir)/$(ruby_version)
|
35
|
+
sitedir = $(rubylibprefix)/site_ruby
|
36
|
+
rubyarchdir = $(rubylibdir)/$(arch)
|
37
|
+
rubylibdir = $(rubylibprefix)/$(ruby_version)
|
38
|
+
sitearchincludedir = $(includedir)/$(sitearch)
|
39
|
+
archincludedir = $(includedir)/$(arch)
|
40
|
+
sitearchlibdir = $(libdir)/$(sitearch)
|
41
|
+
archlibdir = $(libdir)/$(arch)
|
42
|
+
ridir = $(datarootdir)/$(RI_BASE_NAME)
|
43
|
+
mandir = $(datarootdir)/man
|
44
|
+
localedir = $(datarootdir)/locale
|
45
|
+
libdir = $(exec_prefix)/lib
|
46
|
+
psdir = $(docdir)
|
47
|
+
pdfdir = $(docdir)
|
48
|
+
dvidir = $(docdir)
|
49
|
+
htmldir = $(docdir)
|
50
|
+
infodir = $(datarootdir)/info
|
51
|
+
docdir = $(datarootdir)/doc/$(PACKAGE)
|
52
|
+
oldincludedir = $(DESTDIR)/usr/include
|
53
|
+
includedir = $(prefix)/include
|
54
|
+
localstatedir = $(prefix)/var
|
55
|
+
sharedstatedir = $(prefix)/com
|
56
|
+
sysconfdir = $(prefix)/etc
|
57
|
+
datadir = $(datarootdir)
|
58
|
+
datarootdir = $(prefix)/share
|
59
|
+
libexecdir = $(exec_prefix)/libexec
|
60
|
+
sbindir = $(exec_prefix)/sbin
|
61
|
+
bindir = $(exec_prefix)/bin
|
62
|
+
archdir = $(rubyarchdir)
|
63
|
+
|
64
|
+
|
65
|
+
CC = gcc
|
66
|
+
CXX = g++
|
67
|
+
LIBRUBY = $(LIBRUBY_SO)
|
68
|
+
LIBRUBY_A = lib$(RUBY_SO_NAME)-static.a
|
69
|
+
LIBRUBYARG_SHARED = -l$(RUBY_SO_NAME)
|
70
|
+
LIBRUBYARG_STATIC = -l$(RUBY_SO_NAME)-static -framework CoreFoundation
|
71
|
+
empty =
|
72
|
+
OUTFLAG = -o $(empty)
|
73
|
+
COUTFLAG = -o $(empty)
|
74
|
+
|
75
|
+
RUBY_EXTCONF_H =
|
76
|
+
cflags = $(optflags) $(debugflags) $(warnflags)
|
77
|
+
optflags = -O3 -fno-fast-math
|
78
|
+
debugflags = -ggdb3
|
79
|
+
warnflags = -Wall -Wextra -Wno-unused-parameter -Wno-parentheses -Wno-long-long -Wno-missing-field-initializers -Wunused-variable -Wpointer-arith -Wwrite-strings -Wdeclaration-after-statement -Wshorten-64-to-32 -Wimplicit-function-declaration -Wdivision-by-zero -Wextra-tokens
|
80
|
+
CCDLFLAGS = -fno-common
|
81
|
+
CFLAGS = $(CCDLFLAGS) $(cflags) -fno-common -pipe $(ARCH_FLAG)
|
82
|
+
INCFLAGS = -I. -I$(arch_hdrdir) -I$(hdrdir)/ruby/backward -I$(hdrdir) -I$(srcdir)
|
83
|
+
DEFS =
|
84
|
+
CPPFLAGS = -DHAVE_MKSTEMP -O2 -g -I/usr/local/opt/libyaml/include -I/usr/local/opt/readline/include -I/usr/local/opt/libksba/include -I/usr/local/opt/openssl/include -I/usr/local/opt/libyaml/include -I/usr/local/opt/readline/include -I/usr/local/opt/libksba/include -I/usr/local/opt/openssl/include -D_XOPEN_SOURCE -D_DARWIN_C_SOURCE -D_DARWIN_UNLIMITED_SELECT -D_REENTRANT $(DEFS) $(cppflags)
|
85
|
+
CXXFLAGS = $(CCDLFLAGS) $(cxxflags) $(ARCH_FLAG)
|
86
|
+
ldflags = -L. -fstack-protector -L/usr/local/opt/libyaml/lib -L/usr/local/opt/readline/lib -L/usr/local/opt/libksba/lib -L/usr/local/opt/openssl/lib -L/usr/local/opt/libyaml/lib -L/usr/local/opt/readline/lib -L/usr/local/opt/libksba/lib -L/usr/local/opt/openssl/lib
|
87
|
+
dldflags = -Wl,-undefined,dynamic_lookup -Wl,-multiply_defined,suppress -L/usr/local/opt/libyaml/lib -L/usr/local/opt/readline/lib -L/usr/local/opt/libksba/lib -L/usr/local/opt/openssl/lib -L/usr/local/opt/libyaml/lib -L/usr/local/opt/readline/lib -L/usr/local/opt/libksba/lib -L/usr/local/opt/openssl/lib
|
88
|
+
ARCH_FLAG =
|
89
|
+
DLDFLAGS = $(ldflags) $(dldflags) $(ARCH_FLAG)
|
90
|
+
LDSHARED = $(CC) -dynamic -bundle
|
91
|
+
LDSHAREDXX = $(CXX) -dynamic -bundle
|
92
|
+
AR = ar
|
93
|
+
EXEEXT =
|
94
|
+
|
95
|
+
RUBY_INSTALL_NAME = ruby
|
96
|
+
RUBY_SO_NAME = ruby.2.1.0
|
97
|
+
RUBYW_INSTALL_NAME =
|
98
|
+
RUBY_VERSION_NAME = $(RUBY_BASE_NAME)-$(ruby_version)
|
99
|
+
RUBYW_BASE_NAME = rubyw
|
100
|
+
RUBY_BASE_NAME = ruby
|
101
|
+
|
102
|
+
arch = x86_64-darwin16.0
|
103
|
+
sitearch = $(arch)
|
104
|
+
ruby_version = 2.1.0
|
105
|
+
ruby = $(bindir)/ruby
|
106
|
+
RUBY = $(ruby)
|
107
|
+
ruby_headers = $(hdrdir)/ruby.h $(hdrdir)/ruby/ruby.h $(hdrdir)/ruby/defines.h $(hdrdir)/ruby/missing.h $(hdrdir)/ruby/intern.h $(hdrdir)/ruby/st.h $(hdrdir)/ruby/subst.h $(arch_hdrdir)/ruby/config.h
|
108
|
+
|
109
|
+
RM = rm -f
|
110
|
+
RM_RF = $(RUBY) -run -e rm -- -rf
|
111
|
+
RMDIRS = rmdir -p
|
112
|
+
MAKEDIRS = mkdir -p
|
113
|
+
INSTALL = /usr/bin/install -c
|
114
|
+
INSTALL_PROG = $(INSTALL) -m 0755
|
115
|
+
INSTALL_DATA = $(INSTALL) -m 644
|
116
|
+
COPY = cp
|
117
|
+
TOUCH = exit >
|
118
|
+
|
119
|
+
#### End of system configuration section. ####
|
120
|
+
|
121
|
+
preload =
|
122
|
+
|
123
|
+
libpath = . $(libdir) /usr/local/opt/libyaml/lib /usr/local/opt/readline/lib /usr/local/opt/libksba/lib /usr/local/opt/openssl/lib
|
124
|
+
LIBPATH = -L. -L$(libdir) -L/usr/local/opt/libyaml/lib -L/usr/local/opt/readline/lib -L/usr/local/opt/libksba/lib -L/usr/local/opt/openssl/lib
|
125
|
+
DEFFILE =
|
126
|
+
|
127
|
+
CLEANFILES = mkmf.log
|
128
|
+
DISTCLEANFILES =
|
129
|
+
DISTCLEANDIRS =
|
130
|
+
|
131
|
+
extout =
|
132
|
+
extout_prefix =
|
133
|
+
target_prefix = /casper_unique_file
|
134
|
+
LOCAL_LIBS =
|
135
|
+
LIBS = $(LIBRUBYARG_SHARED) -lpthread -ldl -lobjc
|
136
|
+
ORIG_SRCS = casper_unique_file.c
|
137
|
+
SRCS = $(ORIG_SRCS) casper_unique_file.c
|
138
|
+
OBJS = casper_unique_file.o
|
139
|
+
HDRS =
|
140
|
+
TARGET = casper_unique_file
|
141
|
+
TARGET_NAME = casper_unique_file
|
142
|
+
TARGET_ENTRY = Init_$(TARGET_NAME)
|
143
|
+
DLLIB = $(TARGET).bundle
|
144
|
+
EXTSTATIC =
|
145
|
+
STATIC_LIB =
|
146
|
+
|
147
|
+
TIMESTAMP_DIR = .
|
148
|
+
BINDIR = $(bindir)
|
149
|
+
RUBYCOMMONDIR = $(sitedir)$(target_prefix)
|
150
|
+
RUBYLIBDIR = $(sitelibdir)$(target_prefix)
|
151
|
+
RUBYARCHDIR = $(sitearchdir)$(target_prefix)
|
152
|
+
HDRDIR = $(rubyhdrdir)/ruby$(target_prefix)
|
153
|
+
ARCHHDRDIR = $(rubyhdrdir)/$(arch)/ruby$(target_prefix)
|
154
|
+
|
155
|
+
TARGET_SO = $(DLLIB)
|
156
|
+
CLEANLIBS = $(TARGET).bundle
|
157
|
+
CLEANOBJS = *.o *.bak
|
158
|
+
|
159
|
+
all: $(DLLIB)
|
160
|
+
static: $(STATIC_LIB)
|
161
|
+
.PHONY: all install static install-so install-rb
|
162
|
+
.PHONY: clean clean-so clean-static clean-rb
|
163
|
+
|
164
|
+
clean-static::
|
165
|
+
clean-rb-default::
|
166
|
+
clean-rb::
|
167
|
+
clean-so::
|
168
|
+
clean: clean-so clean-static clean-rb-default clean-rb
|
169
|
+
-$(Q)$(RM) $(CLEANLIBS) $(CLEANOBJS) $(CLEANFILES) .*.time
|
170
|
+
|
171
|
+
distclean-rb-default::
|
172
|
+
distclean-rb::
|
173
|
+
distclean-so::
|
174
|
+
distclean-static::
|
175
|
+
distclean: clean distclean-so distclean-static distclean-rb-default distclean-rb
|
176
|
+
-$(Q)$(RM) Makefile $(RUBY_EXTCONF_H) conftest.* mkmf.log
|
177
|
+
-$(Q)$(RM) core ruby$(EXEEXT) *~ $(DISTCLEANFILES)
|
178
|
+
-$(Q)$(RMDIRS) $(DISTCLEANDIRS) 2> /dev/null || true
|
179
|
+
|
180
|
+
realclean: distclean
|
181
|
+
install: install-so install-rb
|
182
|
+
|
183
|
+
install-so: $(DLLIB) $(TIMESTAMP_DIR)/.RUBYARCHDIR.-.casper_unique_file.time
|
184
|
+
$(INSTALL_PROG) $(DLLIB) $(RUBYARCHDIR)
|
185
|
+
clean-static::
|
186
|
+
-$(Q)$(RM) $(STATIC_LIB)
|
187
|
+
install-rb: pre-install-rb install-rb-default
|
188
|
+
install-rb-default: pre-install-rb-default
|
189
|
+
pre-install-rb: Makefile
|
190
|
+
pre-install-rb-default: Makefile
|
191
|
+
pre-install-rb-default:
|
192
|
+
$(ECHO) installing default casper_unique_file libraries
|
193
|
+
$(TIMESTAMP_DIR)/.RUBYARCHDIR.-.casper_unique_file.time:
|
194
|
+
$(Q) $(MAKEDIRS) $(@D) $(RUBYARCHDIR)
|
195
|
+
$(Q) $(TOUCH) $@
|
196
|
+
|
197
|
+
site-install: site-install-so site-install-rb
|
198
|
+
site-install-so: install-so
|
199
|
+
site-install-rb: install-rb
|
200
|
+
|
201
|
+
.SUFFIXES: .c .m .cc .mm .cxx .cpp .C .o
|
202
|
+
|
203
|
+
.cc.o:
|
204
|
+
$(ECHO) compiling $(<)
|
205
|
+
$(Q) $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -c $<
|
206
|
+
|
207
|
+
.mm.o:
|
208
|
+
$(ECHO) compiling $(<)
|
209
|
+
$(Q) $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -c $<
|
210
|
+
|
211
|
+
.cxx.o:
|
212
|
+
$(ECHO) compiling $(<)
|
213
|
+
$(Q) $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -c $<
|
214
|
+
|
215
|
+
.cpp.o:
|
216
|
+
$(ECHO) compiling $(<)
|
217
|
+
$(Q) $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -c $<
|
218
|
+
|
219
|
+
.C.o:
|
220
|
+
$(ECHO) compiling $(<)
|
221
|
+
$(Q) $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -c $<
|
222
|
+
|
223
|
+
.c.o:
|
224
|
+
$(ECHO) compiling $(<)
|
225
|
+
$(Q) $(CC) $(INCFLAGS) $(CPPFLAGS) $(CFLAGS) $(COUTFLAG)$@ -c $<
|
226
|
+
|
227
|
+
.m.o:
|
228
|
+
$(ECHO) compiling $(<)
|
229
|
+
$(Q) $(CC) $(INCFLAGS) $(CPPFLAGS) $(CFLAGS) $(COUTFLAG)$@ -c $<
|
230
|
+
|
231
|
+
$(DLLIB): $(OBJS) Makefile
|
232
|
+
$(ECHO) linking shared-object casper_unique_file/$(DLLIB)
|
233
|
+
-$(Q)$(RM) $(@)
|
234
|
+
$(Q) $(LDSHARED) -o $@ $(OBJS) $(LIBPATH) $(DLDFLAGS) $(LOCAL_LIBS) $(LIBS)
|
235
|
+
$(Q) $(POSTLINK)
|
236
|
+
|
237
|
+
|
238
|
+
|
239
|
+
$(OBJS): $(HDRS) $(ruby_headers)
|
@@ -0,0 +1,88 @@
|
|
1
|
+
/*
|
2
|
+
* Copyright (c) 2018 Cloudware S.A. All rights reserved.
|
3
|
+
*
|
4
|
+
* This file is part of casper-unique-file.
|
5
|
+
*
|
6
|
+
* casper-unique-file is free software: you can redistribute it and/or modify
|
7
|
+
* it under the terms of the GNU Affero General Public License as published by
|
8
|
+
* the Free Software Foundation, either version 3 of the License, or
|
9
|
+
* (at your option) any later version.
|
10
|
+
*
|
11
|
+
* casper-unique-file is distributed in the hope that it will be useful,
|
12
|
+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
13
|
+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
14
|
+
* GNU General Public License for more details.
|
15
|
+
*
|
16
|
+
* You should have received a copy of the GNU Affero General Public License
|
17
|
+
* along with casper-unique-file. If not, see <http://www.gnu.org/licenses/>.
|
18
|
+
*/
|
19
|
+
#include <ruby.h>
|
20
|
+
#include <ruby/intern.h>
|
21
|
+
#include <ruby/encoding.h>
|
22
|
+
#include <stdio.h>
|
23
|
+
#include <unistd.h>
|
24
|
+
#include <fcntl.h>
|
25
|
+
#include <string.h>
|
26
|
+
|
27
|
+
/**
|
28
|
+
* @brief Creates a uniquely named file inside the specified folder. The created file is empty
|
29
|
+
*
|
30
|
+
* @param a_self Object handle, ignored
|
31
|
+
* @param a_folder Folder where the file will be created
|
32
|
+
* @param a_suffix file suffix, warning must include the .
|
33
|
+
* @return Absolute file path
|
34
|
+
*/
|
35
|
+
VALUE _casper_unique_filename (VALUE a_self, VALUE a_folder, VALUE a_suffix)
|
36
|
+
{
|
37
|
+
const char* template = "XXXXXX"; /* file template */
|
38
|
+
char fname[PATH_MAX]; /* path to be created */
|
39
|
+
char fpath[PATH_MAX]; /* full file path */
|
40
|
+
int fd; /* file descriptor */
|
41
|
+
char* folder; /* base folder where we'll create the file */
|
42
|
+
char* suffix; /* base folder where we'll create the file */
|
43
|
+
VALUE rv; /* Return value to ruby */
|
44
|
+
|
45
|
+
if ( NIL_P(a_folder) || TYPE(a_folder) != T_STRING ) {
|
46
|
+
rb_raise(rb_eArgError, "expecting a string as a_folder argument");
|
47
|
+
}
|
48
|
+
folder = StringValueCStr(a_folder);
|
49
|
+
|
50
|
+
if ( NIL_P(a_suffix) || TYPE(a_suffix) != T_STRING ) {
|
51
|
+
rb_raise(rb_eArgError, "expecting a string as a_suffix argument");
|
52
|
+
}
|
53
|
+
suffix = StringValueCStr(a_suffix);
|
54
|
+
|
55
|
+
/* concats argument path with file template */
|
56
|
+
snprintf(fname, sizeof(fname) - 1, "%s/%s%s", folder, template, suffix);
|
57
|
+
|
58
|
+
/* create file */
|
59
|
+
fd = mkstemps(fname, (int) strlen(suffix));
|
60
|
+
|
61
|
+
/* get file full name */
|
62
|
+
if (fcntl(fd, F_GETPATH, fpath) != -1) {
|
63
|
+
close(fd);
|
64
|
+
rv = rb_enc_str_new_cstr(fpath, rb_enc_find("UTF-8"));
|
65
|
+
/* exit with success */
|
66
|
+
return rv;
|
67
|
+
|
68
|
+
} else {
|
69
|
+
close(fd);
|
70
|
+
/* exit with error */
|
71
|
+
return Qnil;
|
72
|
+
}
|
73
|
+
}
|
74
|
+
|
75
|
+
/**
|
76
|
+
* @brief This defines the C functions as extensions.
|
77
|
+
*
|
78
|
+
* @note The name of the Init_ function is important. What follows Init_ must match
|
79
|
+
* the file name (including case) so ruby knows what method to call to define
|
80
|
+
* the extensions.
|
81
|
+
*/
|
82
|
+
void Init_casper_unique_file ()
|
83
|
+
{
|
84
|
+
VALUE rb_mCasper = rb_const_get(rb_cObject, rb_intern("Casper"));
|
85
|
+
VALUE rb_mUnique = rb_const_get(rb_mCasper, rb_intern("Unique"));
|
86
|
+
VALUE rb_mFile = rb_const_get(rb_mUnique, rb_intern("File"));
|
87
|
+
rb_define_module_function(rb_mFile, "create", _casper_unique_filename, 2);
|
88
|
+
}
|
@@ -0,0 +1,41 @@
|
|
1
|
+
#
|
2
|
+
# Copyright (c) 2018 Cloudware S.A. All rights reserved.
|
3
|
+
#
|
4
|
+
# This file is part of casper-unique-file.
|
5
|
+
#
|
6
|
+
# casper-unique-file is free software: you can redistribute it and/or modify
|
7
|
+
# it under the terms of the GNU Affero General Public License as published by
|
8
|
+
# the Free Software Foundation, either version 3 of the License, or
|
9
|
+
# (at your option) any later version.
|
10
|
+
#
|
11
|
+
# casper-unique-file is distributed in the hope that it will be useful,
|
12
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
13
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
14
|
+
# GNU General Public License for more details.
|
15
|
+
#
|
16
|
+
# You should have received a copy of the GNU Affero General Public License
|
17
|
+
# along with casper-unique-file. If not, see <http://www.gnu.org/licenses/>.
|
18
|
+
#
|
19
|
+
require 'mkmf'
|
20
|
+
|
21
|
+
# have_func returns false if a C function cannot be found. Sometimes this
|
22
|
+
# will be OK (the function changed names between versions) and sometimes it is
|
23
|
+
# not so you need to exit without creating the Makefile.
|
24
|
+
|
25
|
+
abort 'missing mkstemp()' unless have_func 'mkstemp'
|
26
|
+
abort 'missing snprintf()' unless have_func 'snprintf'
|
27
|
+
abort 'missing fcntl()' unless have_func 'fcntl'
|
28
|
+
|
29
|
+
$defs.push('-O2 -g')
|
30
|
+
|
31
|
+
$objs = %w[
|
32
|
+
casper_unique_file.o
|
33
|
+
]
|
34
|
+
|
35
|
+
extension_name = 'casper_unique_file'
|
36
|
+
|
37
|
+
# Now we create the Makefile that will install the extension as
|
38
|
+
# lib/casper_unique_file/casper_unique_file.so.
|
39
|
+
|
40
|
+
create_makefile('casper_unique_file/casper_unique_file')
|
41
|
+
|
@@ -0,0 +1,33 @@
|
|
1
|
+
have_func: checking for mkstemp()... -------------------- yes
|
2
|
+
|
3
|
+
"gcc -o conftest -I/Users/emi/.rvm/rubies/ruby-2.1.5/include/ruby-2.1.0/x86_64-darwin16.0 -I/Users/emi/.rvm/rubies/ruby-2.1.5/include/ruby-2.1.0/ruby/backward -I/Users/emi/.rvm/rubies/ruby-2.1.5/include/ruby-2.1.0 -I. -I/usr/local/opt/libyaml/include -I/usr/local/opt/readline/include -I/usr/local/opt/libksba/include -I/usr/local/opt/openssl/include -I/usr/local/opt/libyaml/include -I/usr/local/opt/readline/include -I/usr/local/opt/libksba/include -I/usr/local/opt/openssl/include -D_XOPEN_SOURCE -D_DARWIN_C_SOURCE -D_DARWIN_UNLIMITED_SELECT -D_REENTRANT -O3 -fno-fast-math -ggdb3 -Wall -Wextra -Wno-unused-parameter -Wno-parentheses -Wno-long-long -Wno-missing-field-initializers -Wunused-variable -Wpointer-arith -Wwrite-strings -Wdeclaration-after-statement -Wshorten-64-to-32 -Wimplicit-function-declaration -Wdivision-by-zero -Wextra-tokens -fno-common -pipe conftest.c -L. -L/Users/emi/.rvm/rubies/ruby-2.1.5/lib -L/usr/local/opt/libyaml/lib -L/usr/local/opt/readline/lib -L/usr/local/opt/libksba/lib -L/usr/local/opt/openssl/lib -L. -fstack-protector -L/usr/local/opt/libyaml/lib -L/usr/local/opt/readline/lib -L/usr/local/opt/libksba/lib -L/usr/local/opt/openssl/lib -L/usr/local/opt/libyaml/lib -L/usr/local/opt/readline/lib -L/usr/local/opt/libksba/lib -L/usr/local/opt/openssl/lib -lruby.2.1.0 -lpthread -ldl -lobjc "
|
4
|
+
checked program was:
|
5
|
+
/* begin */
|
6
|
+
1: #include "ruby.h"
|
7
|
+
2:
|
8
|
+
3: int main(int argc, char **argv)
|
9
|
+
4: {
|
10
|
+
5: return 0;
|
11
|
+
6: }
|
12
|
+
/* end */
|
13
|
+
|
14
|
+
"gcc -o conftest -I/Users/emi/.rvm/rubies/ruby-2.1.5/include/ruby-2.1.0/x86_64-darwin16.0 -I/Users/emi/.rvm/rubies/ruby-2.1.5/include/ruby-2.1.0/ruby/backward -I/Users/emi/.rvm/rubies/ruby-2.1.5/include/ruby-2.1.0 -I. -I/usr/local/opt/libyaml/include -I/usr/local/opt/readline/include -I/usr/local/opt/libksba/include -I/usr/local/opt/openssl/include -I/usr/local/opt/libyaml/include -I/usr/local/opt/readline/include -I/usr/local/opt/libksba/include -I/usr/local/opt/openssl/include -D_XOPEN_SOURCE -D_DARWIN_C_SOURCE -D_DARWIN_UNLIMITED_SELECT -D_REENTRANT -O3 -fno-fast-math -ggdb3 -Wall -Wextra -Wno-unused-parameter -Wno-parentheses -Wno-long-long -Wno-missing-field-initializers -Wunused-variable -Wpointer-arith -Wwrite-strings -Wdeclaration-after-statement -Wshorten-64-to-32 -Wimplicit-function-declaration -Wdivision-by-zero -Wextra-tokens -fno-common -pipe conftest.c -L. -L/Users/emi/.rvm/rubies/ruby-2.1.5/lib -L/usr/local/opt/libyaml/lib -L/usr/local/opt/readline/lib -L/usr/local/opt/libksba/lib -L/usr/local/opt/openssl/lib -L. -fstack-protector -L/usr/local/opt/libyaml/lib -L/usr/local/opt/readline/lib -L/usr/local/opt/libksba/lib -L/usr/local/opt/openssl/lib -L/usr/local/opt/libyaml/lib -L/usr/local/opt/readline/lib -L/usr/local/opt/libksba/lib -L/usr/local/opt/openssl/lib -lruby.2.1.0 -lpthread -ldl -lobjc "
|
15
|
+
checked program was:
|
16
|
+
/* begin */
|
17
|
+
1: #include "ruby.h"
|
18
|
+
2:
|
19
|
+
3: /*top*/
|
20
|
+
4: extern int t(void);
|
21
|
+
5: int main(int argc, char **argv)
|
22
|
+
6: {
|
23
|
+
7: if (argc > 1000000) {
|
24
|
+
8: printf("%p", &t);
|
25
|
+
9: }
|
26
|
+
10:
|
27
|
+
11: return 0;
|
28
|
+
12: }
|
29
|
+
13: int t(void) { void ((*volatile p)()); p = (void ((*)()))mkstemp; return 0; }
|
30
|
+
/* end */
|
31
|
+
|
32
|
+
--------------------
|
33
|
+
|
@@ -0,0 +1,20 @@
|
|
1
|
+
#
|
2
|
+
# Copyright (c) 2018 Cloudware S.A. All rights reserved.
|
3
|
+
#
|
4
|
+
# This file is part of casper-unique-file.
|
5
|
+
#
|
6
|
+
# casper-unique-file is free software: you can redistribute it and/or modify
|
7
|
+
# it under the terms of the GNU Affero General Public License as published by
|
8
|
+
# the Free Software Foundation, either version 3 of the License, or
|
9
|
+
# (at your option) any later version.
|
10
|
+
#
|
11
|
+
# casper-unique-file is distributed in the hope that it will be useful,
|
12
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
13
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
14
|
+
# GNU General Public License for more details.
|
15
|
+
#
|
16
|
+
# You should have received a copy of the GNU Affero General Public License
|
17
|
+
# along with casper-unique-file. If not, see <http://www.gnu.org/licenses/>.
|
18
|
+
#
|
19
|
+
require 'casper/unique/file/version'
|
20
|
+
require 'casper_unique_file/casper_unique_file'
|
@@ -0,0 +1,27 @@
|
|
1
|
+
#
|
2
|
+
# Copyright (c) 2018 Cloudware S.A. All rights reserved.
|
3
|
+
#
|
4
|
+
# This file is part of casper-unique-file.
|
5
|
+
#
|
6
|
+
# casper-unique-file is free software: you can redistribute it and/or modify
|
7
|
+
# it under the terms of the GNU Affero General Public License as published by
|
8
|
+
# the Free Software Foundation, either version 3 of the License, or
|
9
|
+
# (at your option) any later version.
|
10
|
+
#
|
11
|
+
# casper-unique-file is distributed in the hope that it will be useful,
|
12
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
13
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
14
|
+
# GNU General Public License for more details.
|
15
|
+
#
|
16
|
+
# You should have received a copy of the GNU Affero General Public License
|
17
|
+
# along with casper-unique-file. If not, see <http://www.gnu.org/licenses/>.
|
18
|
+
#
|
19
|
+
require "casper/unique/file/version"
|
20
|
+
|
21
|
+
module Casper
|
22
|
+
module Unique
|
23
|
+
module File
|
24
|
+
# Your code goes here...
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
#
|
2
|
+
# Copyright (c) 2018 Cloudware S.A. All rights reserved.
|
3
|
+
#
|
4
|
+
# This file is part of casper-unique-file.
|
5
|
+
#
|
6
|
+
# casper-unique-file is free software: you can redistribute it and/or modify
|
7
|
+
# it under the terms of the GNU Affero General Public License as published by
|
8
|
+
# the Free Software Foundation, either version 3 of the License, or
|
9
|
+
# (at your option) any later version.
|
10
|
+
#
|
11
|
+
# casper-unique-file is distributed in the hope that it will be useful,
|
12
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
13
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
14
|
+
# GNU General Public License for more details.
|
15
|
+
#
|
16
|
+
# You should have received a copy of the GNU Affero General Public License
|
17
|
+
# along with casper-unique-file. If not, see <http://www.gnu.org/licenses/>.
|
18
|
+
#
|
19
|
+
module Casper
|
20
|
+
module Unique
|
21
|
+
module File
|
22
|
+
VERSION = "0.1.3"
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
Binary file
|
metadata
ADDED
@@ -0,0 +1,111 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: casper-unique-file
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.3
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Eurico Inocencio
|
8
|
+
autorequire:
|
9
|
+
bindir: exe
|
10
|
+
cert_chain: []
|
11
|
+
date: 2018-02-07 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: bundler
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1.16'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1.16'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rake
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '10.0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '10.0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rspec
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :development
|
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: rake-compiler
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
description:
|
70
|
+
email:
|
71
|
+
- eurico.inocencio@gmail.com
|
72
|
+
executables: []
|
73
|
+
extensions:
|
74
|
+
- ext/casper_unique_file/extconf.rb
|
75
|
+
extra_rdoc_files: []
|
76
|
+
files:
|
77
|
+
- README.md
|
78
|
+
- Rakefile
|
79
|
+
- casper-unique-file.gemspec
|
80
|
+
- ext/casper_unique_file/Makefile
|
81
|
+
- ext/casper_unique_file/casper_unique_file.c
|
82
|
+
- ext/casper_unique_file/extconf.rb
|
83
|
+
- ext/casper_unique_file/mkmf.log
|
84
|
+
- lib/casper-unique-file.rb
|
85
|
+
- lib/casper/unique/file.rb
|
86
|
+
- lib/casper/unique/file/version.rb
|
87
|
+
- lib/casper_unique_file/casper_unique_file.bundle
|
88
|
+
homepage: https://github.com/casper2020/casper-unique-file
|
89
|
+
licenses: []
|
90
|
+
metadata: {}
|
91
|
+
post_install_message:
|
92
|
+
rdoc_options: []
|
93
|
+
require_paths:
|
94
|
+
- lib
|
95
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
96
|
+
requirements:
|
97
|
+
- - ">="
|
98
|
+
- !ruby/object:Gem::Version
|
99
|
+
version: '0'
|
100
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
101
|
+
requirements:
|
102
|
+
- - ">="
|
103
|
+
- !ruby/object:Gem::Version
|
104
|
+
version: '0'
|
105
|
+
requirements: []
|
106
|
+
rubyforge_project:
|
107
|
+
rubygems_version: 2.4.8
|
108
|
+
signing_key:
|
109
|
+
specification_version: 4
|
110
|
+
summary: Helper to make safe unique filenames in ruby
|
111
|
+
test_files: []
|