typed_accessors 0.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.
- data/COPYING +21 -0
- data/README +30 -0
- data/Rakefile +109 -0
- data/lib/typed_accessors.rb +93 -0
- metadata +58 -0
data/COPYING
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
The MIT License
|
2
|
+
|
3
|
+
Copyright (c) 2009 Patrick Ladd, Sean Dague <http://dague.net>
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
7
|
+
in the Software without restriction, including without limitation the rights
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
10
|
+
furnished to do so, subject to the following conditions:
|
11
|
+
|
12
|
+
The above copyright notice and this permission notice shall be included in
|
13
|
+
all copies or substantial portions of the Software.
|
14
|
+
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
21
|
+
THE SOFTWARE.
|
data/README
ADDED
@@ -0,0 +1,30 @@
|
|
1
|
+
This rails plugin creates a set of typed accessors for data types.
|
2
|
+
This is very handy when you are interacting with a service that
|
3
|
+
returns strings and you want them automatically turned into more
|
4
|
+
useful types.
|
5
|
+
|
6
|
+
Ex:
|
7
|
+
|
8
|
+
class Foo
|
9
|
+
float_accessor :float
|
10
|
+
date_accessor :date
|
11
|
+
end
|
12
|
+
|
13
|
+
>> f = Foo.new
|
14
|
+
=> #<Foo:0xb7a3dd44>
|
15
|
+
>> f.float = "1.4"
|
16
|
+
=> "1.4"
|
17
|
+
>> f.float
|
18
|
+
=> 1.4
|
19
|
+
>> f.float = "1"
|
20
|
+
=> "1"
|
21
|
+
>> f.float
|
22
|
+
=> 1.0
|
23
|
+
>> f.date = "2009-10-30"
|
24
|
+
=> "2009-10-30"
|
25
|
+
>> f.date
|
26
|
+
=> #<Date: 4910269/2,0,2299161>
|
27
|
+
>> f.date.to_s
|
28
|
+
=> "2009-10-30"
|
29
|
+
|
30
|
+
This work was done by Patt Ladd. Sean Dague has helped in packaging it.
|
data/Rakefile
ADDED
@@ -0,0 +1,109 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'rake'
|
3
|
+
require 'rake/testtask'
|
4
|
+
require 'rake/rdoctask'
|
5
|
+
require 'rake/clean'
|
6
|
+
require 'rake/contrib/sshpublisher'
|
7
|
+
|
8
|
+
PKG_VERSION = "0.1"
|
9
|
+
|
10
|
+
$VERBOSE = nil
|
11
|
+
TEST_CHANGES_SINCE = Time.now - 600 # Recent tests = changed in last 10 minutes
|
12
|
+
|
13
|
+
desc "Run all the unit tests"
|
14
|
+
task :default => [ :test, :lines ]
|
15
|
+
|
16
|
+
desc "Run the unit tests in test"
|
17
|
+
Rake::TestTask.new(:test) { |t|
|
18
|
+
t.libs << "test"
|
19
|
+
t.test_files = FileList['test/*_test.rb', 'test/component/*_test.rb']
|
20
|
+
t.verbose = true
|
21
|
+
}
|
22
|
+
|
23
|
+
# rcov code coverage
|
24
|
+
rcov_path = '/usr/local/bin/rcov'
|
25
|
+
rcov_test_output = "./test/coverage"
|
26
|
+
rcov_exclude = "interactive.rb,read_write.rb,fixtures"
|
27
|
+
|
28
|
+
# Add our created paths to the 'rake clobber' list
|
29
|
+
CLOBBER.include(rcov_test_output)
|
30
|
+
|
31
|
+
desc 'Removes all previous unit test coverage information'
|
32
|
+
task (:reset_unit_test_coverage) do |t|
|
33
|
+
rm_rf rcov_unit_test_output
|
34
|
+
mkdir rcov_unit_test_output
|
35
|
+
end
|
36
|
+
|
37
|
+
desc 'Run all unit tests with Rcov to measure coverage'
|
38
|
+
Rake::TestTask.new(:rcov) do |t|
|
39
|
+
t.libs << "test"
|
40
|
+
t.pattern = 'test/**/*_test.rb'
|
41
|
+
t.ruby_opts << rcov_path
|
42
|
+
t.ruby_opts << "-o #{rcov_test_output}"
|
43
|
+
t.ruby_opts << "-x #{rcov_exclude}"
|
44
|
+
t.verbose = true
|
45
|
+
end
|
46
|
+
|
47
|
+
# Generate the RDoc documentation
|
48
|
+
Rake::RDocTask.new(:doc) { |rdoc|
|
49
|
+
rdoc.main = 'README'
|
50
|
+
rdoc.rdoc_files.include('lib/**/*.rb', 'README')
|
51
|
+
rdoc.rdoc_files.include('COPYING')
|
52
|
+
rdoc.rdoc_dir = 'docs/api'
|
53
|
+
rdoc.title = "Typed Accessors"
|
54
|
+
rdoc.options << "--include=examples --line-numbers --inline-source"
|
55
|
+
rdoc.options << "--accessor=ical_component,ical_property,ical_multi_property"
|
56
|
+
}
|
57
|
+
|
58
|
+
Gem::manage_gems
|
59
|
+
require 'rake/gempackagetask'
|
60
|
+
|
61
|
+
spec = Gem::Specification.new do |s|
|
62
|
+
s.name = "typed_accessors"
|
63
|
+
s.version = PKG_VERSION
|
64
|
+
s.homepage = "http://github.com/sdague/typed_accessors"
|
65
|
+
s.platform = Gem::Platform::RUBY
|
66
|
+
s.summary = "Predefined typed accessors"
|
67
|
+
s.description = "Defines easy to use additional functions to creating typed accessors, which auto convert the attributes to non string types"
|
68
|
+
|
69
|
+
s.files = FileList["{test,lib,docs,examples}/**/*"].to_a
|
70
|
+
s.files += ["Rakefile", "README", "COPYING" ]
|
71
|
+
s.require_path = "lib"
|
72
|
+
s.autorequire = "typed_accessors"
|
73
|
+
s.has_rdoc = true
|
74
|
+
s.extra_rdoc_files = ["README", "COPYING"]
|
75
|
+
s.rdoc_options.concat ['--main', 'README']
|
76
|
+
|
77
|
+
s.author = "Pat Ladd"
|
78
|
+
end
|
79
|
+
|
80
|
+
Rake::GemPackageTask.new(spec) do |pkg|
|
81
|
+
pkg.gem_spec = spec
|
82
|
+
pkg.need_tar = true
|
83
|
+
pkg.need_zip = true
|
84
|
+
end
|
85
|
+
|
86
|
+
desc 'Install the gem globally (requires sudo)'
|
87
|
+
task :install => :package do |t|
|
88
|
+
`sudo gem install pkg/typed_accessors-#{PKG_VERSION}.gem`
|
89
|
+
end
|
90
|
+
|
91
|
+
task :lines do
|
92
|
+
lines = 0
|
93
|
+
codelines = 0
|
94
|
+
Dir.foreach("lib/typed_accessors") { |file_name|
|
95
|
+
next unless file_name =~ /.*rb/
|
96
|
+
|
97
|
+
f = File.open("lib/typed_accessors/" + file_name)
|
98
|
+
|
99
|
+
while line = f.gets
|
100
|
+
lines += 1
|
101
|
+
next if line =~ /^\s*$/
|
102
|
+
next if line =~ /^\s*#/
|
103
|
+
codelines += 1
|
104
|
+
end
|
105
|
+
}
|
106
|
+
puts "\n------------------------------\n"
|
107
|
+
puts "Total Lines: #{lines}"
|
108
|
+
puts "Lines of Code: #{codelines}"
|
109
|
+
end
|
@@ -0,0 +1,93 @@
|
|
1
|
+
class Class
|
2
|
+
def bool_yn_accessor( *symbols )
|
3
|
+
attr_reader( *symbols )
|
4
|
+
bool_yn_writer( *symbols )
|
5
|
+
end
|
6
|
+
|
7
|
+
def float_accessor( *symbols )
|
8
|
+
float_reader( *symbols )
|
9
|
+
float_writer( *symbols )
|
10
|
+
end
|
11
|
+
|
12
|
+
def int_accessor( *symbols )
|
13
|
+
int_reader( *symbols )
|
14
|
+
int_writer( *symbols )
|
15
|
+
end
|
16
|
+
|
17
|
+
def date_accessor( *symbols )
|
18
|
+
attr_reader( *symbols )
|
19
|
+
date_writer( *symbols )
|
20
|
+
end
|
21
|
+
|
22
|
+
private
|
23
|
+
|
24
|
+
def date_writer( *symbols )
|
25
|
+
symbols.each do |symbol|
|
26
|
+
class_eval(<<-EOS, __FILE__, __LINE__)
|
27
|
+
def #{symbol}=(val)
|
28
|
+
if val.class.to_s == 'String'
|
29
|
+
instance_variable_set("@#{symbol}", Date.parse(val))
|
30
|
+
else
|
31
|
+
instance_variable_set("@#{symbol}", val)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
EOS
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
def bool_yn_writer( *symbols )
|
39
|
+
symbols.each do |symbol|
|
40
|
+
class_eval(<<-EOS, __FILE__, __LINE__)
|
41
|
+
def #{symbol}=(val)
|
42
|
+
if val.upcase == 'Y' || val == true then
|
43
|
+
instance_variable_set("@#{symbol}", true)
|
44
|
+
else
|
45
|
+
instance_variable_set("@#{symbol}", false)
|
46
|
+
end
|
47
|
+
end
|
48
|
+
EOS
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
def float_reader( *symbols )
|
53
|
+
symbols.each do |symbol|
|
54
|
+
class_eval(<<-EOS, __FILE__, __LINE__)
|
55
|
+
def #{symbol}
|
56
|
+
instance_variable_get("@#{symbol}")
|
57
|
+
end
|
58
|
+
EOS
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
def float_writer( *symbols )
|
63
|
+
symbols.each do |symbol|
|
64
|
+
class_eval(<<-EOS, __FILE__, __LINE__)
|
65
|
+
def #{symbol}=(val)
|
66
|
+
if !val.respond_to?('to_f') then raise ArgumentError, "#{symbol} must be float" end
|
67
|
+
instance_variable_set("@#{symbol}", val.to_f)
|
68
|
+
end
|
69
|
+
EOS
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
def int_reader( *symbols )
|
74
|
+
symbols.each do |symbol|
|
75
|
+
class_eval(<<-EOS, __FILE__, __LINE__)
|
76
|
+
def #{symbol}
|
77
|
+
instance_variable_get("@#{symbol}")
|
78
|
+
end
|
79
|
+
EOS
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
def int_writer( *symbols )
|
84
|
+
symbols.each do |symbol|
|
85
|
+
class_eval(<<-EOS, __FILE__, __LINE__)
|
86
|
+
def #{symbol}=(val)
|
87
|
+
if !val.respond_to?('to_i') then raise ArgumentError, "#{symbol} must be int" end
|
88
|
+
instance_variable_set("@#{symbol}", val.to_i)
|
89
|
+
end
|
90
|
+
EOS
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
metadata
ADDED
@@ -0,0 +1,58 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: typed_accessors
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: "0.1"
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Pat Ladd
|
8
|
+
autorequire: typed_accessors
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
|
12
|
+
date: 2009-03-26 00:00:00 -04:00
|
13
|
+
default_executable:
|
14
|
+
dependencies: []
|
15
|
+
|
16
|
+
description: Defines easy to use additional functions to creating typed accessors, which auto convert the attributes to non string types
|
17
|
+
email:
|
18
|
+
executables: []
|
19
|
+
|
20
|
+
extensions: []
|
21
|
+
|
22
|
+
extra_rdoc_files:
|
23
|
+
- README
|
24
|
+
- COPYING
|
25
|
+
files:
|
26
|
+
- lib/typed_accessors.rb
|
27
|
+
- Rakefile
|
28
|
+
- README
|
29
|
+
- COPYING
|
30
|
+
has_rdoc: true
|
31
|
+
homepage: http://github.com/sdague/typed_accessors
|
32
|
+
post_install_message:
|
33
|
+
rdoc_options:
|
34
|
+
- --main
|
35
|
+
- README
|
36
|
+
require_paths:
|
37
|
+
- lib
|
38
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
39
|
+
requirements:
|
40
|
+
- - ">="
|
41
|
+
- !ruby/object:Gem::Version
|
42
|
+
version: "0"
|
43
|
+
version:
|
44
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
45
|
+
requirements:
|
46
|
+
- - ">="
|
47
|
+
- !ruby/object:Gem::Version
|
48
|
+
version: "0"
|
49
|
+
version:
|
50
|
+
requirements: []
|
51
|
+
|
52
|
+
rubyforge_project:
|
53
|
+
rubygems_version: 1.3.1
|
54
|
+
signing_key:
|
55
|
+
specification_version: 2
|
56
|
+
summary: Predefined typed accessors
|
57
|
+
test_files: []
|
58
|
+
|