typelib 0.0.3 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: c6c56c6fd9daadf03661c3db85605d8bddc730a5f9788d94a289b1e26d5dee2b
4
+ data.tar.gz: 12f7cdc9baed7a9a1c3a2ca3347a0a180a0276ea24ef3ae2766d454784a3cd9c
5
+ SHA512:
6
+ metadata.gz: e0794762a0e037c2723b1c35cb2847813000205b56e3bff52cf3706cc68fe4ef0364f08a9e9df6f3e1e612510fae2851ecd9c713ae36ae3b6ffaf9e5015494c4
7
+ data.tar.gz: 2c5fbb32eed282c6bef0eaf4cbe4c59fbbea3b89e3c2d354a34453376a886b70a2fe130404fc7dcb69860fec63e752907fe0c741bab4c71f669bf5b5f74f3681
data/Rakefile CHANGED
@@ -1,80 +1,99 @@
1
- # $Id$
2
- $:.push 'lib'
3
- require 'rake/testtask'
4
- require 'rake/packagetask'
5
- require 'rake/gempackagetask'
6
- require 'rdoc/task'
7
- require 'fileutils'
8
- require 'typelib'
1
+ require 'rubygems'
2
+ require 'rake'
9
3
 
10
- include FileUtils::Verbose
4
+ version = (File.exist?('VERSION') ? File.read('VERSION') : "").chomp
11
5
 
12
- task :default => [ :test, :dist ]
6
+ begin
7
+ require 'jeweler'
8
+ Jeweler::Tasks.new do |gem|
9
+ gem.name = "typelib"
10
+ gem.authors = ["Erik Hollensbe"]
11
+ gem.email = "erik@hollensbe.org"
12
+ gem.summary = "An on-demand arbitrary check and conversion library that won't destroy your data."
13
+ gem.homepage = "http://github.com/RDBI/typelib"
14
+ gem.authors = ["Erik Hollensbe"]
13
15
 
14
- task :fixperms do
15
- chmod(0755, Dir['bin/*'])
16
- end
16
+ gem.add_development_dependency 'test-unit'
17
+ gem.add_development_dependency 'rdoc'
17
18
 
18
- #
19
- # Tests
20
- #
19
+ # gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
20
+ end
21
+ Jeweler::GemcutterTasks.new
22
+ rescue LoadError
23
+ puts "Jeweler (or a dependency) not available. Install it with: gem install jeweler"
24
+ end
21
25
 
22
- Rake::TestTask.new do |t|
23
- t.libs << 'lib'
24
- t.test_files = FileList['test/test*.rb']
25
- t.verbose = true
26
+ begin
27
+ gem 'test-unit'
28
+ require 'rake/testtask'
29
+ Rake::TestTask.new(:test) do |test|
30
+ test.libs << 'lib' << 'test'
31
+ test.pattern = 'test/**/test_*.rb'
32
+ test.verbose = true
33
+ end
34
+ rescue LoadError
35
+ task :test do
36
+ abort "test-unit gem is not available. In order to run test-unit, you must: sudo gem install test-unit"
37
+ end
26
38
  end
27
39
 
28
- #
29
- # Distribution
30
- #
31
40
 
32
- task :dist => [:fixperms, :repackage, :gem, :rdoc]
33
- task :distclean => [:clobber_package, :clobber_rdoc]
34
- task :clean => [:distclean]
41
+ begin
42
+ require 'rcov/rcovtask'
43
+ Rcov::RcovTask.new do |test|
44
+ test.libs << 'test'
45
+ test.pattern = 'test/**/test_*.rb'
46
+ test.verbose = true
47
+ end
48
+ rescue LoadError
49
+ task :rcov do
50
+ abort "RCov is not available. In order to run rcov, you must: sudo gem install spicycode-rcov"
51
+ end
52
+ end
35
53
 
36
- #
37
- # Documentation
38
- #
54
+ task :test => :check_dependencies
39
55
 
40
- RDoc::Task.new do |rd|
41
- rd.rdoc_dir = "rdoc"
42
- rd.main = "README.rdoc"
43
- rd.rdoc_files.include("README.rdoc")
44
- rd.rdoc_files.include("./lib/**/*.rb")
45
- rd.options = %w(-a)
56
+ begin
57
+ require 'roodi'
58
+ require 'roodi_task'
59
+ RoodiTask.new do |t|
60
+ t.verbose = false
61
+ end
62
+ rescue LoadError
63
+ task :roodi do
64
+ abort "Roodi is not available. In order to run roodi, you must: sudo gem install roodi"
65
+ end
46
66
  end
47
67
 
48
- #
49
- # Packaging
50
- #
51
-
52
- spec = Gem::Specification.new do |s|
53
- s.name = "typelib"
54
- s.version = TypeLib::VERSION
55
- s.author = "Erik Hollensbe"
56
- s.email = "erik@hollensbe.org"
57
- s.summary = "An on-demand arbitrary check and conversion library that won't destroy your data."
58
- s.homepage = "http://erik.hollensbe.org/docs/typelib/"
59
- s.files = Dir["Rakefile"] + Dir["README.rdoc"] + Dir["lib/**/*"] + Dir['test/**/*']
60
-
61
- s.has_rdoc = true
62
- s.add_development_dependency 'test-unit'
63
- s.rdoc_options = %w(-a)
64
- end
68
+ task :default => :test
65
69
 
66
- Rake::GemPackageTask.new(spec) do |s|
67
- end
70
+ begin
71
+ require 'rdoc/task'
72
+ RDoc::Task.new do |rdoc|
73
+ version = File.exist?('VERSION') ? File.read('VERSION') : ""
68
74
 
69
- Rake::PackageTask.new(spec.name, spec.version) do |p|
70
- p.need_tar_gz = true
71
- p.need_zip = true
72
- p.package_files.include("./bin/**/*")
73
- p.package_files.include("./Rakefile")
74
- p.package_files.include("./lib/**/*.rb")
75
- p.package_files.include("README")
75
+ rdoc.main = 'README.rdoc'
76
+ rdoc.rdoc_dir = 'rdoc'
77
+ rdoc.title = "RDBI #{version} Documentation"
78
+ rdoc.rdoc_files.include('README*')
79
+ rdoc.rdoc_files.include('lib/**/*.rb')
80
+ end
81
+ rescue LoadError => e
82
+ rdoc_missing = lambda do
83
+ # no-op
84
+ end
85
+ task :rdoc, &rdoc_missing
86
+ task :clobber_rdoc, &rdoc_missing
76
87
  end
77
88
 
78
89
  task :to_blog => [:clobber_rdoc, :rdoc] do
79
- sh "rm -fr $git/blog/content/docs/typelib && mv rdoc $git/blog/content/docs/typelib"
90
+ sh "rm -fr $git/blog/content/docs/typelib && mv doc $git/blog/content/docs/typelib"
80
91
  end
92
+
93
+ task :install => [:test, :build]
94
+
95
+ task :docview => [:rerdoc] do
96
+ sh "open rdoc/index.html"
97
+ end
98
+
99
+ # vim: syntax=ruby ts=2 et sw=2 sts=2
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.1.1
@@ -22,7 +22,7 @@ module TypeLib
22
22
  end
23
23
 
24
24
  check = proc do |obj|
25
- (DateTime.strptime(obj, format).strftime(format) == obj) rescue false
25
+ (DateTime.strptime(obj, format).strftime(format) == obj) rescue false
26
26
  end
27
27
 
28
28
  convert = proc { |obj| DateTime.strptime(obj, format) }
@@ -40,6 +40,7 @@ module TypeLib
40
40
  IS_STRING = proc { |obj| obj.kind_of?(String) }
41
41
  IS_NUMERIC = proc { |obj| obj.kind_of?(Numeric) }
42
42
  IS_INTEGER = proc { |obj| obj.kind_of?(Integer) }
43
+ IS_BOOLEAN = proc { |obj| obj.kind_of?(TrueClass) || obj.kind_of?(FalseClass) }
43
44
  end
44
45
 
45
46
  # Canned Conversions.
@@ -49,8 +50,9 @@ module TypeLib
49
50
  TO_STRING = proc { |obj| obj.to_s }
50
51
  TO_BINARY = proc { |obj| obj.to_s(2) }
51
52
  TO_HEX = proc { |obj| obj.to_s(16) }
53
+ TO_BOOLEAN = proc { |obj| !!obj }
52
54
 
53
- STR_TO_BIGDECIMAL = proc { |obj| BigDecimal.new(obj.to_s) }
55
+ STR_TO_BIGDECIMAL = proc { |obj| BigDecimal(obj.to_s) }
54
56
  end
55
57
 
56
58
  # Fully canned filters.
data/lib/typelib.rb CHANGED
@@ -1,5 +1,3 @@
1
- require 'delegate'
2
-
3
1
  # Typelib is a way of checking and converting data. It operates as a "filter
4
2
  # chain" system which allows it to gradually normalize disparate data into a
5
3
  # common type. Each chain is optionally a part of a list which allows it to
@@ -12,32 +10,22 @@ require 'delegate'
12
10
  #
13
11
  module TypeLib
14
12
 
15
- VERSION = "0.0.3"
13
+ def self.execute_filterlist(filters, obj)
14
+ f = filters.find { |filter| filter.check(obj) }
15
+ f ? f.convert(obj) : obj
16
+ end
16
17
 
17
18
  # A FilterList is a ... list of filters. It includes all the methods that
18
19
  # Array contains, plus an additional method -- execute. See
19
20
  # TypeLib::Filter.
20
- class FilterList < DelegateClass(Array)
21
- # Create a new FilterList. An array of TypeLib::Filter objects is
22
- # accepted for construction.
23
- def initialize(ary=[])
24
- @filters = ary
25
- super(@filters)
26
- end
27
-
21
+ class FilterList < Array
28
22
  # Execute the checks in this list against +obj+, passing in +addl+
29
23
  # if any additional arguments are provided. If the check passes, the
30
24
  # conversion is run and the chain supplied to the constructor is
31
25
  # followed. If no checks pass, the original item is returned.
32
- def execute(obj, *addl)
33
- ret = obj
34
- @filters.each do |filter|
35
- if filter.check(obj, *addl)
36
- ret = filter.convert(obj, *addl)
37
- break
38
- end
39
- end
40
- return ret
26
+ def execute(obj)
27
+ f = find { |filter| filter.check(obj) }
28
+ f ? f.convert(obj) : obj
41
29
  end
42
30
  end
43
31
 
@@ -59,26 +47,23 @@ module TypeLib
59
47
 
60
48
  # Check this object against the filter. If additional data is supplied,
61
49
  # it will be provided to the Filter#check_proc.
62
- def check(obj, *addl)
63
- check_proc.call(obj, *addl)
50
+ def check(obj)
51
+ check_proc.call(obj)
64
52
  end
65
53
 
66
54
  # Convert this object unconditionally. If additional data is supplied,
67
55
  # it will be provided to the Filter#convert_proc.
68
- def convert(obj, *addl)
69
- ret = convert_proc.call(obj, *addl)
70
- filters.execute(ret, *addl)
56
+ def convert(obj)
57
+ ret = convert_proc.call(obj)
58
+ filters.execute(ret)
71
59
  end
72
60
 
73
61
  #
74
62
  # Same as TypeLib::FilterList#execute, only just for this filter.
75
63
  #
76
- def execute(obj, *addl)
77
- ret = obj
78
- if check(obj, *addl)
79
- ret = convert(obj, *addl)
80
- end
81
- return ret
64
+ def execute(obj)
65
+ return convert(obj) if check(obj)
66
+ return obj
82
67
  end
83
68
  end
84
69
  end
@@ -61,16 +61,6 @@ class TestBasic < Test::Unit::TestCase
61
61
  assert_raises(ArgumentError) { filters.execute("1.25") }
62
62
  end
63
63
 
64
- def test_04_args
65
- check = proc { |obj, *addl| addl[0] }
66
- convert = proc { |obj, *addl| addl[0] }
67
- filter = TypeLib::Filter.new(check, convert)
68
-
69
- assert(filter.check(true, true))
70
- assert(!filter.check(true, false))
71
- assert_equal("fart", filter.convert(true, "fart"))
72
- end
73
-
74
64
  def test_05_chains
75
65
  filters = TypeLib::FilterList.new
76
66
 
@@ -30,7 +30,7 @@ class TestCanned < Test::Unit::TestCase
30
30
  assert_kind_of(Float, filters.execute("1"))
31
31
 
32
32
  filters = create_filterlist(STR_TO_DEC)
33
- assert_equal(BigDecimal.new("1.0"), filters.execute("1"))
33
+ assert_equal(BigDecimal("1.0"), filters.execute("1"))
34
34
  assert_kind_of(BigDecimal, filters.execute("1"))
35
35
  end
36
36
 
data/typelib.gemspec ADDED
@@ -0,0 +1,45 @@
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE DIRECTLY
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
+ # -*- encoding: utf-8 -*-
5
+ # stub: typelib 0.1.1 ruby lib
6
+
7
+ Gem::Specification.new do |s|
8
+ s.name = "typelib".freeze
9
+ s.version = "0.1.1"
10
+
11
+ s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
12
+ s.require_paths = ["lib".freeze]
13
+ s.authors = ["Erik Hollensbe".freeze]
14
+ s.date = "2023-06-05"
15
+ s.email = "erik@hollensbe.org".freeze
16
+ s.extra_rdoc_files = [
17
+ "README.rdoc"
18
+ ]
19
+ s.files = [
20
+ "README.rdoc",
21
+ "Rakefile",
22
+ "VERSION",
23
+ "lib/typelib.rb",
24
+ "lib/typelib/canned.rb",
25
+ "test/test_01_basic.rb",
26
+ "test/test_02_canned.rb",
27
+ "typelib.gemspec"
28
+ ]
29
+ s.homepage = "http://github.com/RDBI/typelib".freeze
30
+ s.rubygems_version = "3.3.7".freeze
31
+ s.summary = "An on-demand arbitrary check and conversion library that won't destroy your data.".freeze
32
+
33
+ if s.respond_to? :specification_version then
34
+ s.specification_version = 4
35
+ end
36
+
37
+ if s.respond_to? :add_runtime_dependency then
38
+ s.add_development_dependency(%q<test-unit>.freeze, [">= 0"])
39
+ s.add_development_dependency(%q<rdoc>.freeze, [">= 0"])
40
+ else
41
+ s.add_dependency(%q<test-unit>.freeze, [">= 0"])
42
+ s.add_dependency(%q<rdoc>.freeze, [">= 0"])
43
+ end
44
+ end
45
+
metadata CHANGED
@@ -1,85 +1,79 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: typelib
3
- version: !ruby/object:Gem::Version
4
- hash: 25
5
- prerelease: false
6
- segments:
7
- - 0
8
- - 0
9
- - 3
10
- version: 0.0.3
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.1
11
5
  platform: ruby
12
- authors:
6
+ authors:
13
7
  - Erik Hollensbe
14
- autorequire:
8
+ autorequire:
15
9
  bindir: bin
16
10
  cert_chain: []
17
-
18
- date: 2010-06-18 00:00:00 -04:00
19
- default_executable:
20
- dependencies:
21
- - !ruby/object:Gem::Dependency
11
+ date: 2023-06-05 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
22
14
  name: test-unit
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :development
23
21
  prerelease: false
24
- requirement: &id001 !ruby/object:Gem::Requirement
25
- none: false
26
- requirements:
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
27
24
  - - ">="
28
- - !ruby/object:Gem::Version
29
- hash: 3
30
- segments:
31
- - 0
32
- version: "0"
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rdoc
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
33
34
  type: :development
34
- version_requirements: *id001
35
- description:
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ description:
36
42
  email: erik@hollensbe.org
37
43
  executables: []
38
-
39
44
  extensions: []
40
-
41
- extra_rdoc_files: []
42
-
43
- files:
44
- - Rakefile
45
+ extra_rdoc_files:
45
46
  - README.rdoc
46
- - lib/typelib/canned.rb
47
+ files:
48
+ - README.rdoc
49
+ - Rakefile
50
+ - VERSION
47
51
  - lib/typelib.rb
52
+ - lib/typelib/canned.rb
48
53
  - test/test_01_basic.rb
49
54
  - test/test_02_canned.rb
50
- has_rdoc: true
51
- homepage: http://erik.hollensbe.org/docs/typelib/
55
+ - typelib.gemspec
56
+ homepage: http://github.com/RDBI/typelib
52
57
  licenses: []
53
-
54
- post_install_message:
55
- rdoc_options:
56
- - -a
57
- require_paths:
58
+ metadata: {}
59
+ post_install_message:
60
+ rdoc_options: []
61
+ require_paths:
58
62
  - lib
59
- required_ruby_version: !ruby/object:Gem::Requirement
60
- none: false
61
- requirements:
63
+ required_ruby_version: !ruby/object:Gem::Requirement
64
+ requirements:
62
65
  - - ">="
63
- - !ruby/object:Gem::Version
64
- hash: 3
65
- segments:
66
- - 0
67
- version: "0"
68
- required_rubygems_version: !ruby/object:Gem::Requirement
69
- none: false
70
- requirements:
66
+ - !ruby/object:Gem::Version
67
+ version: '0'
68
+ required_rubygems_version: !ruby/object:Gem::Requirement
69
+ requirements:
71
70
  - - ">="
72
- - !ruby/object:Gem::Version
73
- hash: 3
74
- segments:
75
- - 0
76
- version: "0"
71
+ - !ruby/object:Gem::Version
72
+ version: '0'
77
73
  requirements: []
78
-
79
- rubyforge_project:
80
- rubygems_version: 1.3.7
81
- signing_key:
82
- specification_version: 3
83
- summary: An on-demand arbitrary check and conversion library that won't destroy your data.
74
+ rubygems_version: 3.3.7
75
+ signing_key:
76
+ specification_version: 4
77
+ summary: An on-demand arbitrary check and conversion library that won't destroy your
78
+ data.
84
79
  test_files: []
85
-