summaryrefslogtreecommitdiffhomepage
path: root/mrbgems
diff options
context:
space:
mode:
Diffstat (limited to 'mrbgems')
-rw-r--r--mrbgems/mruby-sleep/.gitignore4
-rw-r--r--mrbgems/mruby-sleep/.travis.yml29
-rw-r--r--mrbgems/mruby-sleep/.travis_build_config.rb6
-rw-r--r--mrbgems/mruby-sleep/README.md27
-rw-r--r--mrbgems/mruby-sleep/Rakefile29
-rw-r--r--mrbgems/mruby-sleep/example/sleep.rb3
-rw-r--r--mrbgems/mruby-sleep/mrbgem.rake5
-rw-r--r--mrbgems/mruby-sleep/src/mrb_sleep.c137
-rw-r--r--mrbgems/mruby-sleep/src/mrb_sleep.h12
-rw-r--r--mrbgems/mruby-sleep/test/sleep_test.rb36
10 files changed, 288 insertions, 0 deletions
diff --git a/mrbgems/mruby-sleep/.gitignore b/mrbgems/mruby-sleep/.gitignore
new file mode 100644
index 000000000..b9f9e71df
--- /dev/null
+++ b/mrbgems/mruby-sleep/.gitignore
@@ -0,0 +1,4 @@
+/mruby
+
+*.so
+*.a \ No newline at end of file
diff --git a/mrbgems/mruby-sleep/.travis.yml b/mrbgems/mruby-sleep/.travis.yml
new file mode 100644
index 000000000..ad6b007b6
--- /dev/null
+++ b/mrbgems/mruby-sleep/.travis.yml
@@ -0,0 +1,29 @@
+dist: trusty
+
+language: c
+compiler:
+ - gcc
+ - clang
+env:
+ - MRUBY_VERSION=1.2.0
+ - MRUBY_VERSION=master
+matrix:
+ allow_failures:
+ - env: MRUBY_VERSION=master
+branches:
+ only:
+ - master
+addons:
+ apt:
+ packages:
+ - rake
+ - bison
+ - git
+ - gperf
+ # - aclocal
+ # - automake
+ # - autoconf
+ # - autotools-dev
+
+script:
+ - rake test \ No newline at end of file
diff --git a/mrbgems/mruby-sleep/.travis_build_config.rb b/mrbgems/mruby-sleep/.travis_build_config.rb
new file mode 100644
index 000000000..b32e38a9d
--- /dev/null
+++ b/mrbgems/mruby-sleep/.travis_build_config.rb
@@ -0,0 +1,6 @@
+MRuby::Build.new do |conf|
+ toolchain :gcc
+ conf.gembox 'default'
+ conf.gem '../mruby-sleep'
+ conf.enable_test
+end
diff --git a/mrbgems/mruby-sleep/README.md b/mrbgems/mruby-sleep/README.md
new file mode 100644
index 000000000..4543c49cf
--- /dev/null
+++ b/mrbgems/mruby-sleep/README.md
@@ -0,0 +1,27 @@
+# Sleep Module for mruby
+mruby sleep module
+
+## install by mrbgems
+ - add conf.gem line to `build_config.rb`
+```ruby
+MRuby::Build.new do |conf|
+
+ # ... (snip) ...
+
+ conf.gem :git => 'https://github.com/matsumoto-r/mruby-sleep.git'
+end
+```
+
+## example
+
+```ruby
+Sleep::sleep(10)
+Sleep::usleep(10000)
+```
+
+# License
+under the MIT License:
+
+* http://www.opensource.org/licenses/mit-license.php
+
+
diff --git a/mrbgems/mruby-sleep/Rakefile b/mrbgems/mruby-sleep/Rakefile
new file mode 100644
index 000000000..5e3c46173
--- /dev/null
+++ b/mrbgems/mruby-sleep/Rakefile
@@ -0,0 +1,29 @@
+MRUBY_CONFIG=File.expand_path(ENV["MRUBY_CONFIG"] || ".travis_build_config.rb")
+MRUBY_VERSION=ENV["MRUBY_VERSION"] || "1.2.0"
+
+file :mruby do
+ cmd = "git clone --depth=1 git://github.com/mruby/mruby.git"
+ if MRUBY_VERSION != 'master'
+ cmd << " && cd mruby"
+ cmd << " && git fetch --tags && git checkout $(git rev-parse #{MRUBY_VERSION})"
+ end
+ sh cmd
+end
+
+desc "compile binary"
+task :compile => :mruby do
+ sh "cd mruby && MRUBY_CONFIG=#{MRUBY_CONFIG} rake all"
+end
+
+desc "test"
+task :test => :mruby do
+ sh "cd mruby && MRUBY_CONFIG=#{MRUBY_CONFIG} rake all test"
+end
+
+desc "cleanup"
+task :clean do
+ exit 0 unless File.directory?('mruby')
+ sh "cd mruby && rake deep_clean"
+end
+
+task :default => :compile
diff --git a/mrbgems/mruby-sleep/example/sleep.rb b/mrbgems/mruby-sleep/example/sleep.rb
new file mode 100644
index 000000000..dfe86af27
--- /dev/null
+++ b/mrbgems/mruby-sleep/example/sleep.rb
@@ -0,0 +1,3 @@
+Sleep::sleep(10)
+Sleep::usleep(10000)
+
diff --git a/mrbgems/mruby-sleep/mrbgem.rake b/mrbgems/mruby-sleep/mrbgem.rake
new file mode 100644
index 000000000..8827b3580
--- /dev/null
+++ b/mrbgems/mruby-sleep/mrbgem.rake
@@ -0,0 +1,5 @@
+MRuby::Gem::Specification.new('mruby-sleep') do |spec|
+ spec.license = 'MIT'
+ spec.authors = 'MATSUMOTO Ryosuke'
+ spec.version = '0.0.1'
+end
diff --git a/mrbgems/mruby-sleep/src/mrb_sleep.c b/mrbgems/mruby-sleep/src/mrb_sleep.c
new file mode 100644
index 000000000..b711dd5c9
--- /dev/null
+++ b/mrbgems/mruby-sleep/src/mrb_sleep.c
@@ -0,0 +1,137 @@
+/*
+** mrb_sleep - sleep class for mruby
+**
+** Copyright (c) mod_mruby developers 2012-
+**
+** Permission is hereby granted, free of charge, to any person obtaining
+** a copy of this software and associated documentation files (the
+** "Software"), to deal in the Software without restriction, including
+** without limitation the rights to use, copy, modify, merge, publish,
+** distribute, sublicense, and/or sell copies of the Software, and to
+** permit persons to whom the Software is furnished to do so, subject to
+** the following conditions:
+**
+** The above copyright notice and this permission notice shall be
+** included in all copies or substantial portions of the Software.
+**
+** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+** SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+**
+** [ MIT license: http://www.opensource.org/licenses/mit-license.php ]
+*/
+
+#include <time.h>
+#ifdef _WIN32
+ #include <windows.h>
+ #define sleep(x) Sleep(x * 1000)
+ #define usleep(x) Sleep(((x)<1000) ? 1 : ((x)/1000))
+#else
+ #include <unistd.h>
+ #include <sys/time.h>
+#endif
+
+#include "mruby.h"
+
+mrb_value mrb_f_sleep_sleep(mrb_state *mrb, mrb_value self)
+{
+ time_t beg, end;
+ mrb_value *argv;
+ mrb_int argc;
+ int iargc;
+
+ beg = time(0);
+ mrb_get_args(mrb, "*", &argv, &argc);
+
+ iargc = (int)argc;
+
+ /* not implemented forever sleep (called without an argument)*/
+ if (iargc == 0 || iargc >= 2) {
+ mrb_raise(mrb, E_ARGUMENT_ERROR, "wrong number of arguments");
+ }
+
+ if (mrb_fixnum_p(argv[0]) && mrb_fixnum(argv[0]) >= 0) {
+ sleep(mrb_fixnum(argv[0]));
+ } else {
+ mrb_raise(mrb, E_ARGUMENT_ERROR, "time interval must be positive integer");
+ }
+ end = time(0) - beg;
+
+ return mrb_fixnum_value(end);
+}
+
+mrb_value mrb_f_usleep_usleep(mrb_state *mrb, mrb_value self)
+{
+ mrb_int argc;
+ mrb_value *argv;
+#ifdef _WIN32
+ FILETIME st_ft,ed_ft;
+ unsigned __int64 st_time = 0;
+ unsigned __int64 ed_time = 0;
+#else
+ struct timeval st_tm,ed_tm;
+#endif
+ time_t slp_tm;
+
+#ifdef _WIN32
+ GetSystemTimeAsFileTime(&st_ft);
+#else
+ gettimeofday( &st_tm, NULL );
+#endif
+
+ mrb_get_args(mrb, "*", &argv, &argc);
+
+ /* not implemented forever sleep (called without an argument)*/
+ if(argc == 0 || argc >= 2) {
+ mrb_raise(mrb, E_ARGUMENT_ERROR, "wrong number of arguments");
+ }
+
+ if (mrb_fixnum_p(argv[0]) && mrb_fixnum(argv[0]) >= 0) {
+ usleep(mrb_fixnum(argv[0]));
+ } else {
+ mrb_raise(mrb, E_ARGUMENT_ERROR, "time interval must be positive integer");
+ }
+
+#ifdef _WIN32
+ GetSystemTimeAsFileTime(&ed_ft);
+
+ st_time |= st_ft.dwHighDateTime;
+ st_time <<=32;
+ st_time |= st_ft.dwLowDateTime;
+ ed_time |= ed_ft.dwHighDateTime;
+ ed_time <<=32;
+ ed_time |= ed_ft.dwLowDateTime;
+
+ slp_tm = (ed_time - st_time) / 10;
+#else
+ gettimeofday( &ed_tm, NULL );
+
+ if ( st_tm.tv_usec > ed_tm.tv_usec ) {
+ slp_tm = 1000000 + ed_tm.tv_usec - st_tm.tv_usec;
+ } else {
+ slp_tm = ed_tm.tv_usec - st_tm.tv_usec;
+ }
+#endif
+
+ return mrb_fixnum_value(slp_tm);
+}
+
+void mrb_mruby_sleep_gem_init(mrb_state *mrb)
+{
+ struct RClass *sleep;
+
+ sleep = mrb_define_module(mrb, "Sleep");
+ mrb_define_class_method(mrb, sleep, "sleep", mrb_f_sleep_sleep, MRB_ARGS_REQ(1));
+ mrb_define_class_method(mrb, sleep, "usleep", mrb_f_usleep_usleep, MRB_ARGS_REQ(1));
+
+ mrb_define_method(mrb, mrb->kernel_module, "sleep", mrb_f_sleep_sleep, MRB_ARGS_REQ(1));
+ mrb_define_method(mrb, mrb->kernel_module, "usleep", mrb_f_usleep_usleep, MRB_ARGS_REQ(1));
+}
+
+void mrb_mruby_sleep_gem_final(mrb_state *mrb)
+{
+}
diff --git a/mrbgems/mruby-sleep/src/mrb_sleep.h b/mrbgems/mruby-sleep/src/mrb_sleep.h
new file mode 100644
index 000000000..bf71d91f4
--- /dev/null
+++ b/mrbgems/mruby-sleep/src/mrb_sleep.h
@@ -0,0 +1,12 @@
+/*
+// mrb_sleep.h - to provide sleep methods
+//
+// See Copyright Notice in mrb_sleep.c
+*/
+
+#ifndef MRB_SLEEP_H
+#define MRB_SLEEP_H
+
+void mrb_mruby_sleep_gem_init(mrb_state *mrb);
+
+#endif
diff --git a/mrbgems/mruby-sleep/test/sleep_test.rb b/mrbgems/mruby-sleep/test/sleep_test.rb
new file mode 100644
index 000000000..e5ea5f69e
--- /dev/null
+++ b/mrbgems/mruby-sleep/test/sleep_test.rb
@@ -0,0 +1,36 @@
+def run_with_catching_error &b
+ e = nil
+ begin
+ b.call
+ rescue => _e
+ e = _e
+ end
+
+ return e
+end
+
+assert("sleep works") do
+ e = run_with_catching_error { sleep 1 }
+
+ assert_nil e
+end
+
+assert("sleep would not accept negative value") do
+ e = run_with_catching_error { sleep -1 }
+
+ assert_not_equal e, nil
+ assert_equal e.class, ArgumentError
+end
+
+assert("usleep works") do
+ e = run_with_catching_error { usleep 100 }
+
+ assert_nil e
+end
+
+assert("usleep would not accept negative value") do
+ e = run_with_catching_error { usleep -100 }
+
+ assert_not_equal e, nil
+ assert_equal e.class, ArgumentError
+end