rdoba 0.9 → 0.9.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -7
- data/.gitignore +1 -0
- data/README.md +58 -1
- data/Rakefile +26 -6
- data/features/support/env.rb +2 -0
- data/lib/rdoba.rb +43 -19
- data/lib/rdoba/_version_.rb +1 -1
- data/lib/rdoba/a.rb +54 -51
- data/lib/rdoba/common.rb +12 -43
- data/lib/rdoba/deploy.rb +1 -1
- data/lib/rdoba/dup.rb +1 -1
- data/lib/rdoba/gem.rb +36 -0
- data/lib/rdoba/io.rb +17 -47
- data/lib/rdoba/mixin.rb +57 -0
- data/lib/rdoba/numeric.rb +50 -60
- data/lib/rdoba/re.rb +1 -1
- data/lib/rdoba/require.rb +1 -1
- data/lib/rdoba/strings.rb +4 -5
- data/rdoba.gemspec +5 -2
- metadata +63 -48
- data/lib/rdoba/version.rb +0 -51
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
|
-
---
|
2
|
-
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
5
|
-
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 42b106c41e5273c7b2d1594996b557121eb37663
|
4
|
+
data.tar.gz: 6eefdf94d3d1dbc3f1aaafa054a2ff2e46bf2bc9
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: e9f284c473161858b14946754204530adae45f8f565716b03a192cb2a5c6ec0dbb319516effb2515e12766ae24a637491e06fae97cbb4824fb4a51327f9f5d30
|
7
|
+
data.tar.gz: 5167bd2b03969c63fd0412a11e76c649c41702a67f5143184ca79c6f545196ab57401688248c52d4a0446a8a264fefbd84796dfefc74eafa42d3988afd5f78e7
|
data/.gitignore
CHANGED
data/README.md
CHANGED
@@ -1,10 +1,20 @@
|
|
1
1
|
# Rdoba
|
2
|
+
<!---
|
3
|
+
![Web Component Logo](http://??.tinypic.com/??.png)
|
4
|
+
-->
|
5
|
+
[![Gem Version](https://badge.fury.io/rb/rdoba.png)](http://rubygems.org/gems/rdoba)
|
6
|
+
[![Build Status](https://travis-ci.org/3aHyga/rdoba.png?branch=master)](https://travis-ci.org/3aHyga/rdoba)
|
7
|
+
[![Coverage Status](https://coveralls.io/repos/3aHyga/rdoba/badge.png)](https://coveralls.io/r/3aHyga/rdoba)
|
8
|
+
[![Code Climate](https://codeclimate.com/github/3aHyga/rdoba.png)](https://codeclimate.com/github/3aHyga/rdoba)
|
9
|
+
[![Endorse Count](http://api.coderwall.com/3aHyga/endorsecount.png)](http://coderwall.com/3aHyga)
|
2
10
|
|
3
11
|
Rdoba, сирѣчь руби-добавокъ, есть библиотека, расширитяющая основныя классы Ruby такія какъ: Объектъ(Object), Ядро(Kernel), Строка(String), Словарь(Hash), Наборъ(Array), Пущь(NilClass) и т.д. Включаетъ модули и такія функціи:
|
4
12
|
* common - нѣкоторыя простыя методы къ Объекту, Ядру, Пущю, Набору, Строкѣ и Словрю;
|
5
13
|
* a - чтеніе и запись значеній въ Наборъ и Словарь по индексу;
|
6
14
|
* combinations - перечисленіе значеній Набора въ различномъ порядкѣ;
|
7
15
|
* log - функціи сборки отладочныхъ свѣдѣній приложенія;
|
16
|
+
* gem - нѣкоторыя методы бисера Rdoba, въ частности определенія оси и корневой папки бисера;
|
17
|
+
* mixin - примѣси, которыя могутъ быть подмѣшаны въ основныя классы рубинки;
|
8
18
|
* dup - функціи удвоенія Словаря и Набораъ, включая ихъ вложенія;
|
9
19
|
* hashorder - перечисленіе значеній Словаря въ заданномъ порядкѣ;
|
10
20
|
* numeric - разширенный переводъ числа въ строку и строки въ число;
|
@@ -85,6 +95,53 @@ Rdoba, сирѣчь руби-добавокъ, есть библиотека, р
|
|
85
95
|
|
86
96
|
A.new # » This is the Log
|
87
97
|
|
98
|
+
|
99
|
+
### Методы бисера Rdoba
|
100
|
+
#### Rdoba.os
|
101
|
+
Методъ возвращаетъ видъ оси, на которой былъ запущенъ руби.
|
102
|
+
|
103
|
+
require 'rdoba'
|
104
|
+
|
105
|
+
Rdoba.os # » "linux"
|
106
|
+
|
107
|
+
#### Rdoba.gemroot
|
108
|
+
Методъ принимаетъ на входѣ параметръ имени бисера, и возвращаетъ корневую папку онаго бисера.
|
109
|
+
|
110
|
+
require 'rdoba'
|
111
|
+
|
112
|
+
Rdoba.gemroot 'rdoba' # » "/home/malo/git/rdoba"
|
113
|
+
|
114
|
+
### Методы бисера Rdoba
|
115
|
+
Модуль содержитъ примѣсныя методы, которыя могутъ быть подмѣшаны въ основныя классы рубинки.
|
116
|
+
|
117
|
+
### Пусто ли? (Is it empty?)
|
118
|
+
Проверяет пуста ли переменная.
|
119
|
+
|
120
|
+
require 'rdoba'
|
121
|
+
rdoba :mixin => [ :empty ]
|
122
|
+
nil.empty? # » true
|
123
|
+
false.empty? # » false
|
124
|
+
Object.new.empty? # » false
|
125
|
+
|
126
|
+
### Пречинение Набора в Словарь (Array to Hash)
|
127
|
+
Преобразуетъ Набор в Словарь по определённымъ правиламъ.
|
128
|
+
|
129
|
+
require 'rdoba'
|
130
|
+
rdoba :mixin => [ :to_h ]
|
131
|
+
[ 'aa', 0,
|
132
|
+
'bb', 1 ].to_h # » {"aa"=>nil, 0=>nil, "bb"=>nil, 1=>nil
|
133
|
+
[ [ 'aa', 0, ],
|
134
|
+
[ 'bb', 1 ] ].to_h # » {"aa"=>0, "bb"=>1}
|
135
|
+
[ [ 'aa', 0, 1, ],
|
136
|
+
[ 'bb', [ 1, 0 ] ] ].to_h # » {"aa"=>[0, 1], "bb"=>[1, 0]}
|
137
|
+
[ [ 'aa', 0, ],
|
138
|
+
[ 'aa', 1 ] ].to_h # » {"aa"=>[0, 1]}
|
139
|
+
[ [ 'aa', 0, ],
|
140
|
+
[ 'aa', 0 ] ].to_h # » {"aa"=>[0, 1]}
|
141
|
+
[ [ 'aa', 0, ],
|
142
|
+
[ 'aa', 0 ] ].to_h( :save_unique => true ) # » {"aa"=>[0]}
|
143
|
+
|
144
|
+
|
88
145
|
### Одвоеніе Словаря и Набора
|
89
146
|
|
90
147
|
Позволяетъ выполнять какъ обычное, такъ и вложенное одвоеніе Словаря или Набора.
|
@@ -107,7 +164,7 @@ Rdoba, сирѣчь руби-добавокъ, есть библиотека, р
|
|
107
164
|
|
108
165
|
### Перечисленіе значеній Словаря въ заданномъ порядкѣ
|
109
166
|
|
110
|
-
|
167
|
+
Позволяетъ перебрать всѣ ключи и значенія Словаря по опредѣлённому порядку. Порядок сей задаётся свойствомъ Словаря :order. Если въ заданном порядкѣ не всѣ ключи опредѣлены, то сначала перебираются заданныя ключ, а затѣмъ уже остальныя въ порядкѣ какъ они заданы въ Словарѣ. Перебирать можно ключи, пары или значенія по ключамъ. 4 метода суть перебора: each, each_pair, each_key, each_value. Удаляется порядокъ методом disorder.
|
111
168
|
|
112
169
|
require 'rdoba/hashorder'
|
113
170
|
|
data/Rakefile
CHANGED
@@ -1,18 +1,37 @@
|
|
1
1
|
#!/usr/bin/env rake
|
2
2
|
|
3
3
|
desc "Prepare bundler"
|
4
|
-
task :
|
4
|
+
task :bundleup do
|
5
5
|
sh 'gem install bundler --version "~> 1.3.1" --no-ri --no-rdoc'
|
6
6
|
end
|
7
7
|
|
8
|
+
desc "Requires"
|
9
|
+
task :req do
|
10
|
+
$: << File.expand_path( '../lib', __FILE__ )
|
11
|
+
require 'bundler/gem_helper'
|
12
|
+
|
13
|
+
Bundler::GemHelper.install_tasks
|
14
|
+
end
|
15
|
+
|
8
16
|
desc "Prepare bundle environment"
|
9
|
-
task :
|
17
|
+
task :up do
|
10
18
|
sh 'bundle install'
|
11
19
|
end
|
12
20
|
|
21
|
+
desc "Test with cucumber"
|
22
|
+
task :test do
|
23
|
+
sh 'cucumber features/log.feature features/bcd.feature'
|
24
|
+
end
|
25
|
+
|
26
|
+
desc "Distilled clean"
|
27
|
+
task :distclean do
|
28
|
+
sh 'git clean -fd'
|
29
|
+
sh 'cat .gitignore | while read mask; do rm -rf $(find -iname "$mask"); done'
|
30
|
+
end
|
31
|
+
|
13
32
|
desc "Generate gem"
|
14
33
|
namespace :gem do
|
15
|
-
task :build do
|
34
|
+
task :build => [ :req ] do
|
16
35
|
sh 'gem build rdoba.gemspec'
|
17
36
|
end
|
18
37
|
|
@@ -21,7 +40,7 @@ namespace :gem do
|
|
21
40
|
sh "gem install rdoba-#{Rdoba::VERSION}.gem"
|
22
41
|
end
|
23
42
|
|
24
|
-
task :publish do
|
43
|
+
task :publish => [ :req ] do
|
25
44
|
require File.expand_path( '../lib/rdoba/_version_', __FILE__ )
|
26
45
|
sh "git tag v#{Rdoba::VERSION}"
|
27
46
|
sh "git push"
|
@@ -34,5 +53,6 @@ namespace :gem do
|
|
34
53
|
end
|
35
54
|
|
36
55
|
task(:default).clear
|
37
|
-
task :default => :
|
38
|
-
task :all => [ :
|
56
|
+
task :default => :test
|
57
|
+
task :all => [ :bundleup, :up, :test, :'gem:make', :distclean ]
|
58
|
+
task :build => [ :bundleup, :up, :test, :'gem:build', :'gem:install', :distclean ]
|
data/features/support/env.rb
CHANGED
data/lib/rdoba.rb
CHANGED
@@ -1,20 +1,7 @@
|
|
1
1
|
#encoding: utf-8
|
2
2
|
|
3
|
-
#require 'rdoba/a'
|
4
|
-
#require 'rdoba/dup'
|
5
|
-
#require 'rdoba/require'
|
6
|
-
#require 'rdoba/common'
|
7
|
-
#require 'rdoba/debug'
|
8
|
-
#require 'rdoba/yaml'
|
9
|
-
#require 'rdoba/strings'
|
10
|
-
#require 'rdoba/deploy'
|
11
|
-
#require 'rdoba/roman'
|
12
|
-
#require 'rdoba/combinations'
|
13
|
-
#require 'rdoba/hashorder'
|
14
|
-
#require 'rdoba/fenc'
|
15
|
-
|
16
3
|
module Kernel
|
17
|
-
Modules = [ :
|
4
|
+
Modules = [ :bcd ]
|
18
5
|
|
19
6
|
def rdoba *options
|
20
7
|
options.each do |option|
|
@@ -22,12 +9,49 @@ module Kernel
|
|
22
9
|
[ ( k = option.keys.shift ).to_s.to_sym, option[ k ] ] ||
|
23
10
|
[ option.to_s.to_sym ] )
|
24
11
|
case key
|
12
|
+
when :mixin
|
13
|
+
require "rdoba/mixin"
|
14
|
+
Rdoba.mixin value
|
25
15
|
when :log, :debug
|
26
16
|
require "rdoba/#{key}"
|
27
17
|
Rdoba.log( { :in => self }.merge( value || {} ) ) # TODO move log method into module
|
28
|
-
# and resolve some troubles with eval in main
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
18
|
+
# TODO and resolve some troubles with eval in main
|
19
|
+
else
|
20
|
+
Kernel.puts STDERR, "Unknown rdoba module named as '#{key.to_s}'"
|
21
|
+
nil; end ||
|
22
|
+
if Modules.include? key
|
33
23
|
require "rdoba/#{key}"; end; end; end; end
|
24
|
+
|
25
|
+
require 'rbconfig'
|
26
|
+
|
27
|
+
module Rdoba
|
28
|
+
def self.gemroot name = nil, path = ''
|
29
|
+
if !gem( name )
|
30
|
+
raise "Invalid gem named as #{name.inspect}" ; end
|
31
|
+
g = Gem::Specification.find_by_name( name )
|
32
|
+
File.join g.full_gem_path, path
|
33
|
+
end
|
34
|
+
|
35
|
+
def self.os
|
36
|
+
@@os ||= (
|
37
|
+
host_os = RbConfig::CONFIG['host_os']
|
38
|
+
case host_os
|
39
|
+
when /(mswin|msys|mingw|cygwin|bccwin|wince|emc)/
|
40
|
+
plat = $1 == 'mswin' && 'native' || $1
|
41
|
+
out = `ver`.encode( 'US-ASCII',
|
42
|
+
:invalid => :replace, :undef => :replace )
|
43
|
+
if out =~ /\[.* (\d+)\.([\d\.]+)\]/
|
44
|
+
"windows-#{plat}-#{$1 == '5' && 'xp' || 'vista'}-#{$1}.#{$2}"
|
45
|
+
else
|
46
|
+
"windows-#{plat}" ; end
|
47
|
+
when /darwin|mac os/
|
48
|
+
'macosx'
|
49
|
+
when /linux/
|
50
|
+
'linux'
|
51
|
+
when /(solaris|bsd)/
|
52
|
+
"unix-#{$1}"
|
53
|
+
else
|
54
|
+
raise "unknown os: #{host_os.inspect}"
|
55
|
+
end)
|
56
|
+
end ; end
|
57
|
+
|
data/lib/rdoba/_version_.rb
CHANGED
data/lib/rdoba/a.rb
CHANGED
@@ -1,56 +1,7 @@
|
|
1
1
|
#!/usr/bin/ruby -KU
|
2
|
-
|
2
|
+
#coding:utf-8
|
3
3
|
|
4
4
|
require 'rdoba/debug'
|
5
|
-
require 'rdoba/common'
|
6
|
-
|
7
|
-
class Object
|
8
|
-
def seta(index, value, options = {}) #TODO => [] + class Index
|
9
|
-
raise "Invalid class #{self.class} to set a value" unless
|
10
|
-
self.class == Hash or self.class == Array
|
11
|
-
dbp11 "[seta] <<< index: #{index.inspect}, value: #{value.inspect}, options: #{options.inspect}"
|
12
|
-
options[:сокр] ||= @сокр
|
13
|
-
|
14
|
-
return self[index] = value if index.class != Array # TODO spec index
|
15
|
-
|
16
|
-
back = 0
|
17
|
-
index = index.reverse.map do |x|
|
18
|
-
if x.empty?
|
19
|
-
back += 1
|
20
|
-
nil
|
21
|
-
elsif back > 0
|
22
|
-
back -= 1
|
23
|
-
nil
|
24
|
-
else
|
25
|
-
x
|
26
|
-
end
|
27
|
-
end.compact.reverse
|
28
|
-
dbp12 "[seta]> result index: #{index.inspect}"
|
29
|
-
|
30
|
-
par = self
|
31
|
-
par_idx = index.shift
|
32
|
-
index.each do |idx|
|
33
|
-
dbp14 "[seta]>> parent #{par.class} with idx: #{par_idx.inspect}"
|
34
|
-
obj = par[par_idx]
|
35
|
-
if not obj
|
36
|
-
obj = idx.to_s =~ /^\d+$/ && [] || {}
|
37
|
-
par[par_idx] = obj
|
38
|
-
dbp14 "[seta]>> new object #{obj.class}"
|
39
|
-
elsif obj.class != Hash and obj.class != Array
|
40
|
-
raise "Invalid class #{obj.class} for indexing"
|
41
|
-
end
|
42
|
-
|
43
|
-
par = obj
|
44
|
-
par_idx = idx
|
45
|
-
end
|
46
|
-
|
47
|
-
dbp14 "[seta]>> object #{par.class} with idx: #{par_idx.inspect}"
|
48
|
-
|
49
|
-
par[par_idx] = value
|
50
|
-
dbp11 "[seta] >>> #{self.inspect}"
|
51
|
-
self
|
52
|
-
end
|
53
|
-
end
|
54
5
|
|
55
6
|
class Array
|
56
7
|
def geta(index, options = {}) #TODO => [] + class Index
|
@@ -60,12 +11,13 @@ class Array
|
|
60
11
|
if index.class == Array
|
61
12
|
return self if index == [] or index == ['']
|
62
13
|
index = index.clone
|
63
|
-
value = self[index.shift
|
14
|
+
value = self[index.shift]
|
64
15
|
(value.class == Hash or value.class == Array) ? value.geta(index, options) : value
|
65
16
|
else
|
66
17
|
geta_value(index, options)
|
67
18
|
end
|
68
19
|
end
|
20
|
+
|
69
21
|
end
|
70
22
|
|
71
23
|
|
@@ -107,5 +59,56 @@ public
|
|
107
59
|
geta_value(index, options)
|
108
60
|
end
|
109
61
|
end
|
62
|
+
|
63
|
+
def seta(index, value, options = {}) #TODO => [] + class Index
|
64
|
+
dbp11 "[seta] <<< index: #{index.inspect}, value: #{value.inspect}, options: #{options.inspect}"
|
65
|
+
options[:сокр] ||= @сокр
|
66
|
+
|
67
|
+
return self[index] = value if index.class != Array # TODO spec index
|
68
|
+
|
69
|
+
back = 0
|
70
|
+
index = index.reverse.map do |x|
|
71
|
+
if x.empty?
|
72
|
+
back += 1
|
73
|
+
nil
|
74
|
+
elsif back > 0
|
75
|
+
back -= 1
|
76
|
+
nil
|
77
|
+
else
|
78
|
+
x
|
79
|
+
end
|
80
|
+
end.compact.reverse
|
81
|
+
dbp12 "[seta]> result index: #{index.inspect}"
|
82
|
+
|
83
|
+
obj = nil
|
84
|
+
o = self
|
85
|
+
dbp14 "[seta]>> self: #{o.inspect}"
|
86
|
+
set_idx = index.pop
|
87
|
+
par_class = set_idx =~ /^\d+$/ ? Array : Hash
|
88
|
+
par_idx = nil
|
89
|
+
index.each do |idx|
|
90
|
+
unless o
|
91
|
+
dbp14 "[seta]>> parent idx: #{par_idx.inspect}, idx: #{idx.inspect}, parent obj: #{o.inspect}"
|
92
|
+
o = idx =~ /^\d+$/ && [] || {}
|
93
|
+
obj[par_idx] = o
|
94
|
+
end
|
95
|
+
obj = o
|
96
|
+
o = (obj.class == Hash) ? obj.geta_value(idx, options) : obj[idx]
|
97
|
+
dbp14 "[seta]>> cur idx: #{idx.inspect}, parent obj: #{obj.inspect}, obj: #{o.inspect}"
|
98
|
+
unless o
|
99
|
+
if idx == index.last
|
100
|
+
o = par_class.new
|
101
|
+
obj[idx] = o
|
102
|
+
else
|
103
|
+
par_idx = idx =~ /^\d+$/ && idx.to_i || idx
|
104
|
+
end
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
108
|
+
raise "Invalid path" unless o # TODO special exception
|
109
|
+
|
110
|
+
o[set_idx] = value
|
111
|
+
end
|
112
|
+
|
110
113
|
end
|
111
114
|
|
data/lib/rdoba/common.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
#!/usr/bin/ruby -KU
|
2
|
-
|
2
|
+
#coding:utf-8
|
3
3
|
|
4
4
|
class Object
|
5
5
|
def xor(val1)
|
@@ -38,15 +38,17 @@ class Object
|
|
38
38
|
end
|
39
39
|
|
40
40
|
module Kernel
|
41
|
-
|
41
|
+
def wait_if(timeout = 30)
|
42
|
+
require 'timeout'
|
42
43
|
|
43
|
-
|
44
|
-
|
45
|
-
|
44
|
+
begin
|
45
|
+
Timeout::timeout(timeout) do
|
46
|
+
while yield(); end
|
47
|
+
end
|
48
|
+
true
|
49
|
+
rescue Timeout::Error
|
50
|
+
false
|
46
51
|
end
|
47
|
-
true
|
48
|
-
rescue Timeout::Error
|
49
|
-
false
|
50
52
|
end
|
51
53
|
end
|
52
54
|
|
@@ -102,17 +104,6 @@ class Array
|
|
102
104
|
return __set__(index.to_i, value, *args) if index.class == String and index =~ /^\d+$/
|
103
105
|
__set__(index, value, *args)
|
104
106
|
end
|
105
|
-
|
106
|
-
def glue!(inval)
|
107
|
-
self.each_index do |i|
|
108
|
-
begin
|
109
|
-
self[i] |= inval[i]
|
110
|
-
rescue
|
111
|
-
self[i] = inval[i]
|
112
|
-
end if inval[i]
|
113
|
-
end
|
114
|
-
self
|
115
|
-
end
|
116
107
|
end
|
117
108
|
|
118
109
|
class String
|
@@ -157,36 +148,14 @@ class String
|
|
157
148
|
end
|
158
149
|
|
159
150
|
class Hash
|
160
|
-
def glue!(inval)
|
161
|
-
self.replace self.glue(inval)
|
162
|
-
end
|
163
|
-
|
164
|
-
def glue(inval)
|
165
|
-
res = self.dup
|
166
|
-
inval.each_pair do |key, val|
|
167
|
-
if val.class == res[key].class
|
168
|
-
if val.class == Hash
|
169
|
-
res[key].glue! val
|
170
|
-
elsif val.class == Array
|
171
|
-
res[key].glue! val
|
172
|
-
else
|
173
|
-
res[key] = val
|
174
|
-
end
|
175
|
-
else
|
176
|
-
res[key] = val
|
177
|
-
end
|
178
|
-
end
|
179
|
-
res
|
180
|
-
end
|
181
|
-
|
182
151
|
def |(inval)
|
183
152
|
res = self.dup
|
184
153
|
inval.each_pair do |key, val|
|
185
154
|
if val.class == res[key].class
|
186
155
|
if val.class == Hash
|
187
|
-
res[key] |=
|
156
|
+
res[key] |= inval[key]
|
188
157
|
elsif val.class == Array
|
189
|
-
res[key]
|
158
|
+
res[key].concat val
|
190
159
|
else
|
191
160
|
res[key] = val
|
192
161
|
end
|
data/lib/rdoba/deploy.rb
CHANGED
data/lib/rdoba/dup.rb
CHANGED
data/lib/rdoba/gem.rb
ADDED
@@ -0,0 +1,36 @@
|
|
1
|
+
#!/usr/bin/ruby -KU
|
2
|
+
#encoding:utf-8
|
3
|
+
|
4
|
+
require 'rbconfig'
|
5
|
+
|
6
|
+
module Rdoba
|
7
|
+
def self.gemroot gemname = nil, path = ''
|
8
|
+
if !gem
|
9
|
+
raise "Undefined gem name" ; end
|
10
|
+
g = Gem::Specification.find_by_name( gemname )
|
11
|
+
File.join g.full_gem_path, 'share', 'settings.yaml'
|
12
|
+
end
|
13
|
+
|
14
|
+
def self.os
|
15
|
+
@@os ||= (
|
16
|
+
host_os = RbConfig::CONFIG['host_os']
|
17
|
+
case host_os
|
18
|
+
when /(mswin|msys|mingw|cygwin|bccwin|wince|emc)/
|
19
|
+
plat = $1 == 'mswin' && 'native' || $1
|
20
|
+
out = `ver`.encode( 'US-ASCII',
|
21
|
+
:invalid => :replace, :undef => :replace )
|
22
|
+
if out =~ /\[.* (\d+)\.([\d\.]+)\]/
|
23
|
+
"windows-#{plat}-#{$1 == '5' && 'xp' || 'vista'}-#{$1}.#{$2}"
|
24
|
+
else
|
25
|
+
"windows-#{plat}" ; end
|
26
|
+
when /darwin|mac os/
|
27
|
+
'macosx'
|
28
|
+
when /linux/
|
29
|
+
'linux'
|
30
|
+
when /(solaris|bsd)/
|
31
|
+
"unix-#{$1}"
|
32
|
+
else
|
33
|
+
raise "unknown os: #{host_os.inspect}"
|
34
|
+
end)
|
35
|
+
end ; end
|
36
|
+
|
data/lib/rdoba/io.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
|
-
#!/usr/bin/
|
2
|
-
#
|
1
|
+
#!/usr/bin/ruby -KU
|
2
|
+
#coding:utf-8
|
3
3
|
|
4
4
|
require 'strscan'
|
5
5
|
require 'rdoba/re'
|
@@ -11,7 +11,6 @@ module Kernel
|
|
11
11
|
def sprintf(format, *args)
|
12
12
|
nargs = []
|
13
13
|
nformat = ''
|
14
|
-
oargs = args.dup
|
15
14
|
|
16
15
|
fmt = format.split('%')
|
17
16
|
nformat = fmt.shift
|
@@ -19,46 +18,23 @@ module Kernel
|
|
19
18
|
while (not fmt.empty?)
|
20
19
|
part = fmt.shift
|
21
20
|
part = '%' + fmt.shift unless part
|
22
|
-
if part =~ /([0-9 #+\-*.]*)([
|
21
|
+
if part =~ /([0-9 #+\-*.]*)([bcdEefGgiopsuXxP])(.*)/ and $2 == 'P'
|
23
22
|
keys = $1 || ''
|
24
|
-
|
25
|
-
|
26
|
-
if keys =~ /(?:([0-9*]*)\.([0-9*]+)([+-])?|(-)?)/
|
27
|
-
indent = ( $1 == '*' && args.shift || $1 ).to_i
|
28
|
-
padding_size = $2 == '*' && args.shift.to_i || $2
|
23
|
+
str = $3 || ''
|
24
|
+
if keys =~ /(-)?([0-9*]*)\.?([0-9\*]*)(\+?)/
|
29
25
|
value = args.shift
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
Fixnum::NativeEndian
|
36
|
-
value.to_i.to_p( :padding => ( args[ 0 ] && args[ 0 ].to_i || 1 ),
|
37
|
-
:endian => endian )
|
38
|
-
when 's'
|
39
|
-
rs = value.to_s
|
40
|
-
pad = args[ 0 ] && args[ 0 ].to_i || 0
|
41
|
-
padl = rs.size >= pad && '' || ( "\0" * ( pad - rs.size ) )
|
42
|
-
args[ 1 ] && ( padl + rs ) || ( rs + padl )
|
43
|
-
when /(x|X)/
|
44
|
-
rs = value.ord.to_s( 16 )
|
45
|
-
rs = rs.upcase if $1 == 'X'
|
46
|
-
pad = args[ 0 ] && args[ 0 ].to_i || 0
|
47
|
-
( rs.size >= pad && '' || ( '0' * ( pad - rs.size ) ) ) + rs
|
48
|
-
end.gsub( Regexp.new( '%', Regexp::EXTENDED | Regexp::MULTILINE ),
|
49
|
-
'%%' )
|
50
|
-
end
|
51
|
-
plain = value && convert( value, char, padding_size, $3 ) || ''
|
52
|
-
indent = indent > plain.size && ( indent - plain.size ) || 0
|
53
|
-
nformat += ( $4 && ( plain + ' ' * indent ) ||
|
54
|
-
( ' ' * indent + plain ) ) + rest
|
26
|
+
indent = ' ' * ($2 == '*' ? args.shift : $2).to_i
|
27
|
+
plain = value && value.to_p(
|
28
|
+
:padding => ($3 == '*' ? args.shift : $3.empty? ? 1 : $3).to_i,
|
29
|
+
:be => $4.empty? ? nil : true) || ''
|
30
|
+
nformat += ($1 ? plain + indent : indent + plain) + str
|
55
31
|
else
|
56
|
-
nformat += '%' + keys +
|
32
|
+
nformat += '%' + keys + 'c' + str
|
57
33
|
nargs.push args.shift
|
58
34
|
end
|
59
35
|
else
|
60
36
|
nformat += '%' + part
|
61
|
-
l = $1 =~ /\*/
|
37
|
+
l = $1 =~ /\*/ ? 2 : 1
|
62
38
|
while l > 0
|
63
39
|
nargs.push args.shift
|
64
40
|
l -= 1
|
@@ -66,11 +42,8 @@ module Kernel
|
|
66
42
|
end
|
67
43
|
end
|
68
44
|
__sprintf__(nformat, *nargs).to_p
|
69
|
-
rescue ArgumentError
|
70
|
-
Kernel.puts "[sprintf] #{$!.class}: #{$!}\n\t" + $@.join("\n\t") +
|
71
|
-
"\n\tNew format string = #{nformat.inspect}, params = #{nargs.inspect}" +
|
72
|
-
"\n\tOld format string = #{format.inspect}, params = #{oargs.inspect}"
|
73
45
|
end
|
46
|
+
|
74
47
|
end
|
75
48
|
|
76
49
|
class String
|
@@ -80,7 +53,7 @@ class String
|
|
80
53
|
|
81
54
|
pos = 0
|
82
55
|
argfs = []
|
83
|
-
while fss.scan_until(/%([0-9 #+\-*]*)(?:\.([0-9]+)(
|
56
|
+
while fss.scan_until(/%([0-9 #+\-*]*)(?:\.([0-9]+)(\+)?)?([bcdefgiosuxr])/)
|
84
57
|
argfs << [ fss[1], fss[2], fss[3], fss[4] ]
|
85
58
|
# TODO add performing the special case in fss[1]
|
86
59
|
nformat += fss.pre_match[pos..-1].to_res + case fss[4]
|
@@ -97,7 +70,7 @@ class String
|
|
97
70
|
when 'g'
|
98
71
|
'([+\-]?[0-9]+(?:[eE][+\-]?[0-9]+|\.[0-9]*))'
|
99
72
|
when 'c'
|
100
|
-
fss[2] ? "(.{
|
73
|
+
fss[2] ? "(.{1,#{fss[2]}})" : "(.)"
|
101
74
|
when 'b'
|
102
75
|
'([01]+)b?'
|
103
76
|
when 'o'
|
@@ -115,7 +88,7 @@ class String
|
|
115
88
|
|
116
89
|
nformat += fss.rest
|
117
90
|
|
118
|
-
[
|
91
|
+
[ /#{nformat}/, argfs ]
|
119
92
|
end
|
120
93
|
|
121
94
|
(alias :__scanf__ :scanf) if self.instance_methods(false).include?(:scanf)
|
@@ -137,10 +110,7 @@ class String
|
|
137
110
|
when /[efg]/
|
138
111
|
value.to_f
|
139
112
|
when 'c'
|
140
|
-
|
141
|
-
argf[2] == '-' && Fixnum::LittleEndian ||
|
142
|
-
Fixnum::NativeEndian
|
143
|
-
value.to_i( endian )
|
113
|
+
argf[2] ? value.to_i(:be) : value.to_i
|
144
114
|
when 'b'
|
145
115
|
value.to_i(2)
|
146
116
|
when 'o'
|
data/lib/rdoba/mixin.rb
ADDED
@@ -0,0 +1,57 @@
|
|
1
|
+
#!/usr/bin/ruby -KU
|
2
|
+
#encoding:utf-8
|
3
|
+
|
4
|
+
module Rdoba
|
5
|
+
module Mixin
|
6
|
+
module To_hArray
|
7
|
+
def to_h options = {}
|
8
|
+
h = {}
|
9
|
+
self.each do |v|
|
10
|
+
if v.is_a? Array
|
11
|
+
if h.key? v[ 0 ]
|
12
|
+
if !h[ v[ 0 ] ].is_a? Array
|
13
|
+
h[ v[ 0 ] ] = [ h[ v[ 0 ] ] ] ; end
|
14
|
+
|
15
|
+
if v.size > 2
|
16
|
+
h[ v [ 0 ] ].concat v[ 1..-1 ]
|
17
|
+
else
|
18
|
+
h[ v [ 0 ] ] << v[ 1 ] ; end
|
19
|
+
else
|
20
|
+
h[ v[ 0 ] ] = v.size > 2 && v[ 1..-1] || v[ 1 ] ; end
|
21
|
+
else
|
22
|
+
if h.key? v
|
23
|
+
if !h[ v ].is_a? Array
|
24
|
+
h[ v ] = [ h[ v ] ] ; end
|
25
|
+
|
26
|
+
h[ v ] << v
|
27
|
+
else
|
28
|
+
h[ v ] = nil ; end ; end ; end
|
29
|
+
|
30
|
+
if options[ :save_unique ]
|
31
|
+
h.each_pair do |k,v|
|
32
|
+
if v.is_a? Array
|
33
|
+
v.uniq! ; end ; end ; end
|
34
|
+
|
35
|
+
h ; end ; end
|
36
|
+
|
37
|
+
module EmptyObject
|
38
|
+
def empty?
|
39
|
+
false ; end ; end
|
40
|
+
|
41
|
+
module EmptyNilClass
|
42
|
+
def empty?
|
43
|
+
true ; end ; end ; end
|
44
|
+
|
45
|
+
def self.mixin options
|
46
|
+
( options || [] ).each do |value|
|
47
|
+
case value
|
48
|
+
when :to_h
|
49
|
+
Array.send :include, Rdoba::Mixin::To_hArray
|
50
|
+
when :empty
|
51
|
+
Object.send :include, Rdoba::Mixin::EmptyObject
|
52
|
+
NilClass.send :include, Rdoba::Mixin::EmptyNilClass
|
53
|
+
else
|
54
|
+
Kernel.puts STDERR, "Invalid rdoba-mixin options key: #{value.to_s}"
|
55
|
+
end ; end ; end ; end
|
56
|
+
|
57
|
+
|
data/lib/rdoba/numeric.rb
CHANGED
@@ -1,51 +1,68 @@
|
|
1
1
|
#!/usr/bin/ruby -KU
|
2
|
-
|
2
|
+
#coding:utf-8
|
3
3
|
|
4
4
|
require 'rdoba/common'
|
5
5
|
require 'rdoba/strings'
|
6
6
|
|
7
|
-
class
|
8
|
-
|
9
|
-
|
10
|
-
|
7
|
+
class String
|
8
|
+
alias :_rdoba_to_i :to_i
|
9
|
+
def to_i(base = 10, *opts)
|
10
|
+
v = parse_opts(opts)
|
11
|
+
if v[:be]
|
12
|
+
(str, sign, num) = (self.match /\s*(-?)([0-9a-fx]+)/u).to_a
|
13
|
+
if str
|
14
|
+
n = num.reverse._rdoba_to_i(base)
|
15
|
+
sign.empty? && n || -n
|
16
|
+
else
|
17
|
+
0
|
18
|
+
end
|
19
|
+
else
|
20
|
+
_rdoba_to_i(base)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
11
24
|
|
25
|
+
class Fixnum
|
12
26
|
alias :_rdoba_to_s :to_s
|
13
|
-
def to_s(
|
14
|
-
|
15
|
-
return _rdoba_to_s( base ); end
|
27
|
+
def to_s(base = 10, *opts)
|
28
|
+
v = parse_opts(opts)
|
16
29
|
|
17
|
-
|
18
|
-
raise "Base of number can't be equal or less then zero"; end
|
19
|
-
if opts[ :padding ] <= 0
|
20
|
-
raise "Padding count numberr can't be equal or less then zero"; end
|
30
|
+
return _rdoba_to_s(base) unless v[:padding] or v[:style_formatting]
|
21
31
|
|
32
|
+
raise "Base of number can't be equal or less then zero" if base <= 0
|
33
|
+
raise "Padding count numberr can't be equal or less then zero" if v[:padding] <= 0
|
22
34
|
value = self
|
23
|
-
minus = value < 0
|
35
|
+
minus = if value < 0
|
36
|
+
value = -value
|
37
|
+
true
|
38
|
+
end
|
24
39
|
res = ''
|
25
40
|
while value != 0
|
26
41
|
value, rem = value.divmod(base)
|
27
42
|
rem += 0x40 - 0x39 if rem >= 10
|
28
|
-
res += (0x30 + rem).chr
|
29
|
-
|
30
|
-
if res.size <
|
31
|
-
|
32
|
-
|
33
|
-
res += 'x0'; end
|
34
|
-
if minus
|
35
|
-
res += '-';end
|
36
|
-
|
43
|
+
res += (0x30 + rem).chr
|
44
|
+
end
|
45
|
+
res += "0" * (v[:padding].to_i - res.size) if res.size < v[:padding].to_i
|
46
|
+
res += 'x0' if v[:style_formatting] and base == 16
|
47
|
+
res += '-' if minus
|
37
48
|
res.reverse
|
38
49
|
end
|
39
50
|
end
|
40
51
|
|
41
52
|
class Numeric
|
42
|
-
def to_p(
|
53
|
+
def to_p(*opts)
|
54
|
+
v = parse_opts(opts)
|
55
|
+
|
43
56
|
value = self
|
44
|
-
minus = value < 0
|
57
|
+
minus = if value < 0
|
58
|
+
value = -value
|
59
|
+
true
|
60
|
+
end
|
45
61
|
res = ''
|
46
62
|
while value != 0
|
47
63
|
value, rem = value.divmod(256)
|
48
|
-
res += rem.chr
|
64
|
+
res += rem.chr
|
65
|
+
end
|
49
66
|
|
50
67
|
pad_char = if minus
|
51
68
|
negres += ''
|
@@ -57,46 +74,19 @@ class Numeric
|
|
57
74
|
0
|
58
75
|
else
|
59
76
|
over = 0
|
60
|
-
negbyte
|
77
|
+
negbyte
|
78
|
+
end
|
79
|
+
end
|
61
80
|
res = negres
|
62
81
|
"\xFF"
|
63
82
|
else
|
64
|
-
"\0"
|
65
|
-
|
66
|
-
if res.size < ( padding = opts[ :padding ].to_i )
|
67
|
-
res += pad_char * ( padding - res.size ); end
|
83
|
+
"\0"
|
84
|
+
end
|
68
85
|
|
69
|
-
|
70
|
-
if ( endian = opts[ :endian ] || Fixnum::NativeEndian ) ==
|
71
|
-
Fixnum::NativeEndian
|
72
|
-
endian = Fixnum::LittleEndian; end
|
73
|
-
( ( endian == Fixnum::LittleEndian ) && res ||
|
74
|
-
res.reverse( String::ByteByByte ) ).to_p; end; end
|
86
|
+
res += pad_char * (v[:padding].to_i - res.size) if res.size < v[:padding].to_i
|
75
87
|
|
76
|
-
|
77
|
-
|
78
|
-
def to_i( base = 10 )
|
79
|
-
return 0 if self.empty?
|
80
|
-
|
81
|
-
#TODO add detection of endianness of current system
|
82
|
-
if base == Fixnum::NativeEndian
|
83
|
-
base = Fixnum::LittleEndian; end
|
84
|
-
res = 0
|
85
|
-
if base == Fixnum::BigEndian
|
86
|
-
self.each_byte do |b|
|
87
|
-
res = ( res << 8 ) | b
|
88
|
-
end
|
89
|
-
res
|
90
|
-
elsif base == Fixnum::LittleEndian
|
91
|
-
size = self.size
|
92
|
-
(1..size).each do |i|
|
93
|
-
b = self.getbyte( size - i )
|
94
|
-
res = ( res << 8 ) | b
|
95
|
-
end
|
96
|
-
res
|
97
|
-
else
|
98
|
-
_rdoba_to_i base
|
99
|
-
end
|
88
|
+
plain = (v[:be] ? res.reverse(String::ByteByByte) : res).to_p
|
89
|
+
plain
|
100
90
|
end
|
101
91
|
end
|
102
92
|
|
data/lib/rdoba/re.rb
CHANGED
data/lib/rdoba/require.rb
CHANGED
data/lib/rdoba/strings.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
#!/usr/bin/ruby -KU
|
2
|
-
|
2
|
+
#coding:utf-8
|
3
3
|
|
4
4
|
class String
|
5
5
|
|
@@ -92,16 +92,15 @@ class String
|
|
92
92
|
alias :to_p :to_s
|
93
93
|
|
94
94
|
ByteByByte = 0
|
95
|
-
alias :
|
96
|
-
def reverse(
|
97
|
-
# of Plain
|
95
|
+
alias :__reverse__ :reverse
|
96
|
+
def reverse(step = 1)
|
98
97
|
case step
|
99
98
|
when ByteByByte
|
100
99
|
arr = []
|
101
100
|
self.each_byte do |byte| arr << byte.chr end
|
102
101
|
arr.reverse.join
|
103
102
|
when 1
|
104
|
-
|
103
|
+
__reverse__
|
105
104
|
else
|
106
105
|
res = ''
|
107
106
|
offset = (self.size + 1) / step * step - step
|
data/rdoba.gemspec
CHANGED
@@ -23,7 +23,10 @@ Gem::Specification.new do |s|
|
|
23
23
|
s.extra_rdoc_files = [ 'README.md', 'LICENSE' ]
|
24
24
|
|
25
25
|
s.required_rubygems_version = '>= 1.6.0'
|
26
|
+
s.required_ruby_version = '>= 1.9.0'
|
26
27
|
|
27
|
-
s.add_development_dependency '
|
28
|
-
s.add_development_dependency '
|
28
|
+
s.add_development_dependency 'rake'
|
29
|
+
s.add_development_dependency 'bundler', '~> 1.3'
|
30
|
+
s.add_development_dependency 'cucumber', '~> 1.3'
|
31
|
+
s.add_development_dependency 'coveralls'
|
29
32
|
end
|
metadata
CHANGED
@@ -1,54 +1,65 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: rdoba
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.9.1
|
5
5
|
platform: ruby
|
6
|
-
authors:
|
7
|
-
-
|
6
|
+
authors:
|
7
|
+
- "\xD0\x9C\xD0\xB0\xD0\xBB\xD1\x8A \xD0\xA1\xD0\xBA\xD1\x80\xD1\x8B\xD0\xBB\xD1\x91\xD0\xB2\xD1\x8A (Malo Skrylevo)"
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
|
12
|
-
|
13
|
-
|
11
|
+
|
12
|
+
date: 2013-10-01 00:00:00 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: rake
|
16
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
17
|
+
requirements:
|
18
|
+
- &id005
|
19
|
+
- ">="
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: "0"
|
22
|
+
type: :development
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: *id001
|
25
|
+
- !ruby/object:Gem::Dependency
|
14
26
|
name: bundler
|
15
|
-
requirement: !ruby/object:Gem::Requirement
|
16
|
-
requirements:
|
27
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
28
|
+
requirements:
|
17
29
|
- - ~>
|
18
|
-
- !ruby/object:Gem::Version
|
19
|
-
version: 1.3
|
30
|
+
- &id003 !ruby/object:Gem::Version
|
31
|
+
version: "1.3"
|
20
32
|
type: :development
|
21
33
|
prerelease: false
|
22
|
-
version_requirements:
|
23
|
-
|
24
|
-
- - ~>
|
25
|
-
- !ruby/object:Gem::Version
|
26
|
-
version: 1.3.1
|
27
|
-
- !ruby/object:Gem::Dependency
|
34
|
+
version_requirements: *id002
|
35
|
+
- !ruby/object:Gem::Dependency
|
28
36
|
name: cucumber
|
29
|
-
requirement: !ruby/object:Gem::Requirement
|
30
|
-
requirements:
|
31
|
-
- -
|
32
|
-
-
|
33
|
-
|
37
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
38
|
+
requirements:
|
39
|
+
- - ~>
|
40
|
+
- *id003
|
41
|
+
type: :development
|
42
|
+
prerelease: false
|
43
|
+
version_requirements: *id004
|
44
|
+
- !ruby/object:Gem::Dependency
|
45
|
+
name: coveralls
|
46
|
+
requirement: &id006 !ruby/object:Gem::Requirement
|
47
|
+
requirements:
|
48
|
+
- *id005
|
34
49
|
type: :development
|
35
50
|
prerelease: false
|
36
|
-
version_requirements:
|
37
|
-
|
38
|
-
|
39
|
-
- !ruby/object:Gem::Version
|
40
|
-
version: '0'
|
41
|
-
description: Ruby extension library. It extends Kernel, Object, String, Hash, Array,
|
42
|
-
and some other classes. Also allows to log application state with debug lines to
|
43
|
-
an io
|
44
|
-
email:
|
51
|
+
version_requirements: *id006
|
52
|
+
description: Ruby extension library. It extends Kernel, Object, String, Hash, Array, and some other classes. Also allows to log application state with debug lines to an io
|
53
|
+
email:
|
45
54
|
- 3aHyga@gmail.com
|
46
55
|
executables: []
|
56
|
+
|
47
57
|
extensions: []
|
48
|
-
|
58
|
+
|
59
|
+
extra_rdoc_files:
|
49
60
|
- README.md
|
50
61
|
- LICENSE
|
51
|
-
files:
|
62
|
+
files:
|
52
63
|
- .document
|
53
64
|
- .gitignore
|
54
65
|
- CHANGES.md
|
@@ -71,45 +82,49 @@ files:
|
|
71
82
|
- lib/rdoba/deploy.rb
|
72
83
|
- lib/rdoba/dup.rb
|
73
84
|
- lib/rdoba/fe.rb
|
85
|
+
- lib/rdoba/gem.rb
|
74
86
|
- lib/rdoba/hashorder.rb
|
75
87
|
- lib/rdoba/io.rb
|
76
88
|
- lib/rdoba/log.rb
|
89
|
+
- lib/rdoba/mixin.rb
|
77
90
|
- lib/rdoba/numeric.rb
|
78
91
|
- lib/rdoba/re.rb
|
79
92
|
- lib/rdoba/require.rb
|
80
93
|
- lib/rdoba/roman.rb
|
81
94
|
- lib/rdoba/strings.rb
|
82
|
-
- lib/rdoba/version.rb
|
83
95
|
- lib/rdoba/yaml.rb
|
84
96
|
- rdoba.gemspec
|
85
97
|
- test/helper.rb
|
86
98
|
- test/rdoba_test.rb.stub
|
87
99
|
- test/test_rdoba.rb
|
88
100
|
homepage: https://github.com/3aHyga/rdoba
|
89
|
-
licenses:
|
101
|
+
licenses:
|
90
102
|
- MIT
|
91
103
|
metadata: {}
|
104
|
+
|
92
105
|
post_install_message:
|
93
106
|
rdoc_options: []
|
94
|
-
|
107
|
+
|
108
|
+
require_paths:
|
95
109
|
- lib
|
96
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
97
|
-
requirements:
|
98
|
-
- -
|
99
|
-
- !ruby/object:Gem::Version
|
100
|
-
version:
|
101
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
102
|
-
requirements:
|
103
|
-
- -
|
104
|
-
- !ruby/object:Gem::Version
|
110
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
111
|
+
requirements:
|
112
|
+
- - ">="
|
113
|
+
- !ruby/object:Gem::Version
|
114
|
+
version: 1.9.0
|
115
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
116
|
+
requirements:
|
117
|
+
- - ">="
|
118
|
+
- !ruby/object:Gem::Version
|
105
119
|
version: 1.6.0
|
106
120
|
requirements: []
|
121
|
+
|
107
122
|
rubyforge_project: rdoba
|
108
|
-
rubygems_version: 2.
|
123
|
+
rubygems_version: 2.1.4
|
109
124
|
signing_key:
|
110
125
|
specification_version: 4
|
111
126
|
summary: Ruby extension library (Ruby DOBAvka)
|
112
|
-
test_files:
|
127
|
+
test_files:
|
113
128
|
- features/bcd.feature
|
114
129
|
- features/log.feature
|
115
130
|
- features/step_definitions/bcd_steps.rb
|
data/lib/rdoba/version.rb
DELETED
@@ -1,51 +0,0 @@
|
|
1
|
-
#encoding: utf-8
|
2
|
-
|
3
|
-
class Version
|
4
|
-
attr_reader :subminor, :minor, :major
|
5
|
-
|
6
|
-
def self.parse value
|
7
|
-
case version.is_a?
|
8
|
-
when self
|
9
|
-
value
|
10
|
-
when Array
|
11
|
-
Version.new version[ 0 ].to_i, version[ 1 ].to_i, version[ 2 ].to_i
|
12
|
-
when Numeric
|
13
|
-
Version.new version >> 8, ( version >> 4 ) & 0xF, version & 0xF
|
14
|
-
else
|
15
|
-
if version.to_s =~ /(\d+)\.(\d+)(?:\.(\d+))?/
|
16
|
-
Version.new $1.to_i, $2.to_i, $3.to_i
|
17
|
-
elsif version.to_s =~ /([\da-z][\da-z])([\da-z])([\da-z])/i
|
18
|
-
Version.new $1.to_i( 16 ), $2.to_i( 16 ), $3.to_i( 16 )
|
19
|
-
else
|
20
|
-
Version.new 0, 0, 0; end; end; end
|
21
|
-
|
22
|
-
def == value
|
23
|
-
v = self.parse value
|
24
|
-
@major == v.major && @minor == v.minor && @subminor == v.subminor
|
25
|
-
end
|
26
|
-
|
27
|
-
def < value
|
28
|
-
v = self.parse value
|
29
|
-
@major < v.major || @major == v.major &&
|
30
|
-
( @minor < v.minor || @minor == v.minor &&
|
31
|
-
@subminor < v.subminor ); end
|
32
|
-
|
33
|
-
def > value
|
34
|
-
v = self.parse value
|
35
|
-
@major > v.major || @major == v.major &&
|
36
|
-
( @minor > v.minor || @minor == v.minor &&
|
37
|
-
@subminor > v.subminor ); end
|
38
|
-
|
39
|
-
def to_a
|
40
|
-
[ @major, @minor, @subminor ]; end
|
41
|
-
|
42
|
-
def to_s
|
43
|
-
"#{@major}.#{@minor}.#{@subminor}"; end
|
44
|
-
|
45
|
-
private
|
46
|
-
|
47
|
-
def initialize major, minor = 0, subminor = 0
|
48
|
-
@subminor = subminor
|
49
|
-
@minor = minor
|
50
|
-
@major = major; end; end
|
51
|
-
|