typelib 0.0.3 → 0.1.1

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 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
-