webget_ruby_spreadsheeting 1.0.4
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.tar.gz.sig +1 -0
- data/LICENSE.txt +12 -0
- data/README.rdoc +8 -0
- data/lib/webget_ruby_spreadsheeting.rb +139 -0
- data/test/webget_ruby_spreadsheeting_test.rb +49 -0
- metadata +80 -0
- metadata.gz.sig +1 -0
data.tar.gz.sig
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
$Nғj�r�a�\qb��)WNwn���~,/B�$�����;���F�����o����?��������X��6�r.��˱$�@.�'�
|
data/LICENSE.txt
ADDED
@@ -0,0 +1,12 @@
|
|
1
|
+
LICENSE
|
2
|
+
|
3
|
+
You may choose any of these licenses:
|
4
|
+
|
5
|
+
- CreativeCommons License, Non-commercial Share Alike
|
6
|
+
- LGPL, GNU Lesser General Public License
|
7
|
+
- MIT License
|
8
|
+
- Ruby License
|
9
|
+
|
10
|
+
THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR
|
11
|
+
IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
|
12
|
+
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
data/README.rdoc
ADDED
@@ -0,0 +1,8 @@
|
|
1
|
+
|
2
|
+
= WebGet Ruby Gem: Spreadsheeting import & export helpers
|
3
|
+
|
4
|
+
Author:: Joel Parker Henderson, joelparkerhenderson@gmail.com
|
5
|
+
Copyright:: Copyright (c) 2006-2010 Joel Parker Henderson
|
6
|
+
License:: CreativeCommons License, Non-commercial Share Alike
|
7
|
+
License:: LGPL, GNU Lesser General Public License
|
8
|
+
|
@@ -0,0 +1,139 @@
|
|
1
|
+
=begin rdoc
|
2
|
+
|
3
|
+
= WebGet Ruby Gem: Spreadsheeting import & export helpers
|
4
|
+
|
5
|
+
Author:: Joel Parker Henderson, joelparkerhenderson@gmail.com
|
6
|
+
Copyright:: Copyright (c) 2006-2010 Joel Parker Henderson
|
7
|
+
License:: CreativeCommons License, Non-commercial Share Alike
|
8
|
+
License:: LGPL, GNU Lesser General Public License
|
9
|
+
|
10
|
+
=end
|
11
|
+
|
12
|
+
|
13
|
+
module Spreadsheeting
|
14
|
+
|
15
|
+
# Parse a string to a date, with some cleanup
|
16
|
+
def import_date(s)
|
17
|
+
return nil if s==nil or s.strip==''
|
18
|
+
return Date.parse(s)
|
19
|
+
end
|
20
|
+
|
21
|
+
|
22
|
+
# There's a typical import use case where a column is
|
23
|
+
# a boolean, in a variety of formats like "X" for on,
|
24
|
+
# "Y" for yes, "T" for true, etc.
|
25
|
+
#
|
26
|
+
# @return a boolean
|
27
|
+
#
|
28
|
+
# We use these rules:
|
29
|
+
# - x y yes t true on + => true
|
30
|
+
# - blank n no f false off - => false
|
31
|
+
# - anything else => nil
|
32
|
+
#
|
33
|
+
# ==Examples
|
34
|
+
# import_flag('Yes') => true
|
35
|
+
# import_flag('No') => false
|
36
|
+
# import_flag('X') => true
|
37
|
+
# import_flag('') => false
|
38
|
+
# import_flag('Hello') => nil
|
39
|
+
# import_flag(nil) => nil
|
40
|
+
|
41
|
+
def import_flag(s)
|
42
|
+
s==nil and return nil
|
43
|
+
case s.strip.downcase
|
44
|
+
when 'x','y','yes','t','true','on','+'
|
45
|
+
return true
|
46
|
+
when '','n','no','f','false','off','-'
|
47
|
+
return false
|
48
|
+
else
|
49
|
+
return nil
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
|
54
|
+
# There's a typical import use case where a column
|
55
|
+
# can contain two different data types:
|
56
|
+
# - a boolean, in a variety of formats (see _import_flag_)
|
57
|
+
# - a note, in plain text
|
58
|
+
#
|
59
|
+
# We need to separate these two.
|
60
|
+
#
|
61
|
+
# This method returns two items: a boolean and a note.
|
62
|
+
#
|
63
|
+
# We use these rules:
|
64
|
+
# - x y yes t true on + => [true, '']
|
65
|
+
# - blank n no f false off - => [false, '']
|
66
|
+
# - any other string => [nil, note]
|
67
|
+
# - nil => [nil, nil]
|
68
|
+
#
|
69
|
+
# ==Example
|
70
|
+
# import_flag_or_note('Yes') => [true,'']
|
71
|
+
# import_flag_or_note('No') => [false,'']
|
72
|
+
# import_flag_or_note('X') => [true,'']
|
73
|
+
# import_flag_or_note('') => [false,'']
|
74
|
+
# import_flag_or_note('Hello') => [nil,'Hello']
|
75
|
+
# import_flag_or_note(nil) => [nil,nil]
|
76
|
+
|
77
|
+
def import_flag_or_note(s)
|
78
|
+
return [nil, nil] if s==nil
|
79
|
+
flag = import_flag(s)
|
80
|
+
return [flag, flag==nil ? s : '']
|
81
|
+
end
|
82
|
+
|
83
|
+
|
84
|
+
# There's a common import use case where a column can be of two types:
|
85
|
+
# - a date, in a variety of format like "Jan 1, 2008", "1/1/2008", etc.
|
86
|
+
# - a note, in plain text
|
87
|
+
#
|
88
|
+
# This method returns two items: a date (Date class) and a note (String class).
|
89
|
+
#
|
90
|
+
# ==Example
|
91
|
+
# import_date_or_note('1/1/2007') => [Date(2007,01,01),'']
|
92
|
+
# import_date_or_note('hello') => [nil,'hello']
|
93
|
+
|
94
|
+
def import_date_or_note(s)
|
95
|
+
begin
|
96
|
+
d=import_date(s)
|
97
|
+
rescue
|
98
|
+
d=nil
|
99
|
+
end
|
100
|
+
return d ? [d,''] : [nil,s]
|
101
|
+
end
|
102
|
+
|
103
|
+
|
104
|
+
# Corresponds to import_flag_or_note
|
105
|
+
#
|
106
|
+
# ==Return
|
107
|
+
# - flag==true => 'X'
|
108
|
+
# - flag==false => ''
|
109
|
+
# - otherwise return note
|
110
|
+
#
|
111
|
+
# ==Example
|
112
|
+
# t=true
|
113
|
+
# f=false
|
114
|
+
# export_flag_or_note(t,'hello') => 'X'
|
115
|
+
# export_flag_or_note(f,'hello') => ''
|
116
|
+
# export_flag_or_note(nil,'hello') => 'hello'
|
117
|
+
|
118
|
+
def export_flag_or_note(flag,note=nil)
|
119
|
+
return flag==true ? 'X' : flag==false ? '' : note
|
120
|
+
end
|
121
|
+
|
122
|
+
|
123
|
+
# Corresponds to import_date_or_note
|
124
|
+
#
|
125
|
+
# ==Return
|
126
|
+
# - date exists => date to yyyy-mm-dd format
|
127
|
+
# - otherwise return note
|
128
|
+
#
|
129
|
+
# ==Example
|
130
|
+
# d=Date.parse('1/1/2007')
|
131
|
+
# export_date_or_note(d,'hello') => '2007-01-01'
|
132
|
+
# export_date_or_note(nil,'hello') => 'hello'
|
133
|
+
|
134
|
+
def export_date_or_note(date,note=nil)
|
135
|
+
return date ? date.strftime("%Y-%m-%d") : note
|
136
|
+
end
|
137
|
+
|
138
|
+
|
139
|
+
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
require 'test/unit'
|
2
|
+
require 'date'
|
3
|
+
require 'webget_ruby_spreadsheeting'
|
4
|
+
|
5
|
+
class SpreadsheetingTest < Test::Unit::TestCase
|
6
|
+
|
7
|
+
include Spreadsheeting
|
8
|
+
|
9
|
+
def test_import_flag
|
10
|
+
assert_equal(true, import_flag('X'))
|
11
|
+
assert_equal(false, import_flag(''))
|
12
|
+
assert_equal(true, import_flag('yes'))
|
13
|
+
assert_equal(false, import_flag('no'))
|
14
|
+
assert_equal(true, import_flag('+'))
|
15
|
+
assert_equal(false, import_flag('-'))
|
16
|
+
assert_equal(nil, import_flag('hello'))
|
17
|
+
assert_equal(nil, import_flag(nil))
|
18
|
+
end
|
19
|
+
|
20
|
+
def test_import_flag_or_note
|
21
|
+
assert_equal([true,''], import_flag_or_note('X'))
|
22
|
+
assert_equal([false,''], import_flag_or_note(''))
|
23
|
+
assert_equal([true,''], import_flag_or_note('yes'))
|
24
|
+
assert_equal([false,''], import_flag_or_note('no'))
|
25
|
+
assert_equal([true,''], import_flag_or_note('+'))
|
26
|
+
assert_equal([false,''], import_flag_or_note('-'))
|
27
|
+
assert_equal([nil,'hello'], import_flag_or_note('hello'))
|
28
|
+
assert_equal([nil,nil], import_flag_or_note(nil))
|
29
|
+
end
|
30
|
+
|
31
|
+
def test_import_date_or_note
|
32
|
+
d=Date.parse('2007/12/31')
|
33
|
+
assert_equal([d,''], import_date_or_note('2007/12/31'))
|
34
|
+
assert_equal([nil,'hello'], import_date_or_note('hello'))
|
35
|
+
end
|
36
|
+
|
37
|
+
def test_export_flag_or_note
|
38
|
+
assert_equal('X', export_flag_or_note(true,'hello'))
|
39
|
+
assert_equal('', export_flag_or_note(false,'hello'))
|
40
|
+
assert_equal('hello', export_flag_or_note(nil,'hello'))
|
41
|
+
end
|
42
|
+
|
43
|
+
def test_export_date_or_note
|
44
|
+
d=Date.parse('2007/12/31')
|
45
|
+
assert_equal('2007-12-31', export_date_or_note(d,'hello'))
|
46
|
+
assert_equal('hello', export_date_or_note(nil,'hello'))
|
47
|
+
end
|
48
|
+
|
49
|
+
end
|
metadata
ADDED
@@ -0,0 +1,80 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: webget_ruby_spreadsheeting
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.0.4
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- WebGet
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain:
|
11
|
+
- |
|
12
|
+
-----BEGIN CERTIFICATE-----
|
13
|
+
MIIDvDCCAyWgAwIBAgIJAIlSqEkDQaZIMA0GCSqGSIb3DQEBBQUAMIGbMQswCQYD
|
14
|
+
VQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZyYW5j
|
15
|
+
aXNjbzETMBEGA1UEChMKV2ViR2V0LmNvbTETMBEGA1UECxMKV2ViR2V0LmNvbTET
|
16
|
+
MBEGA1UEAxMKV2ViR2V0LmNvbTEgMB4GCSqGSIb3DQEJARYRd2ViZ2V0QHdlYmdl
|
17
|
+
dC5jb20wHhcNMDkwMjI2MTk0NDU4WhcNMTExMTIzMTk0NDU4WjCBmzELMAkGA1UE
|
18
|
+
BhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBGcmFuY2lz
|
19
|
+
Y28xEzARBgNVBAoTCldlYkdldC5jb20xEzARBgNVBAsTCldlYkdldC5jb20xEzAR
|
20
|
+
BgNVBAMTCldlYkdldC5jb20xIDAeBgkqhkiG9w0BCQEWEXdlYmdldEB3ZWJnZXQu
|
21
|
+
Y29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDXCFYfW6hCQl0ToNjaMIXG
|
22
|
+
ZfPF6OoR20BO/Tg6V37qPi7gDSZ6vIC6Mxcs8LtEcju85cD9lnKKl/lo4S5/w9Ha
|
23
|
+
hGD2ZFFfbF8420X5Za5G2KuriS3GzRz7F5dKCTjb1NH9TPlgOc71bcrDmCwwtFJl
|
24
|
+
T+tdfBju0YxLSBiMXf4y5QIDAQABo4IBBDCCAQAwHQYDVR0OBBYEFHB1kXO/Xd4g
|
25
|
+
G+AJ2/wwh6JOWXzNMIHQBgNVHSMEgcgwgcWAFHB1kXO/Xd4gG+AJ2/wwh6JOWXzN
|
26
|
+
oYGhpIGeMIGbMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQG
|
27
|
+
A1UEBxMNU2FuIEZyYW5jaXNjbzETMBEGA1UEChMKV2ViR2V0LmNvbTETMBEGA1UE
|
28
|
+
CxMKV2ViR2V0LmNvbTETMBEGA1UEAxMKV2ViR2V0LmNvbTEgMB4GCSqGSIb3DQEJ
|
29
|
+
ARYRd2ViZ2V0QHdlYmdldC5jb22CCQCJUqhJA0GmSDAMBgNVHRMEBTADAQH/MA0G
|
30
|
+
CSqGSIb3DQEBBQUAA4GBADzVXlwuff0/w3yK4LflGKKhtC3oChIrwmSyP6tk628N
|
31
|
+
BHokpc4Kz63xSXqzYTnBS7rFBwlYThtNalQeWmoUjGh3Z0ZR0JlhU0ln8899LuJ3
|
32
|
+
DXnLFY0cVuBnNDMOOFl8vk1qIcZjcTovhzgcixpG6Uk5qmUsKHRLQf4oQJx7TfLK
|
33
|
+
-----END CERTIFICATE-----
|
34
|
+
|
35
|
+
date: 2010-02-19 00:00:00 -08:00
|
36
|
+
default_executable:
|
37
|
+
dependencies: []
|
38
|
+
|
39
|
+
description:
|
40
|
+
email: webget@webget.com
|
41
|
+
executables: []
|
42
|
+
|
43
|
+
extensions: []
|
44
|
+
|
45
|
+
extra_rdoc_files: []
|
46
|
+
|
47
|
+
files:
|
48
|
+
- README.rdoc
|
49
|
+
- LICENSE.txt
|
50
|
+
- lib/webget_ruby_spreadsheeting.rb
|
51
|
+
has_rdoc: true
|
52
|
+
homepage: http://webget.com/
|
53
|
+
licenses: []
|
54
|
+
|
55
|
+
post_install_message:
|
56
|
+
rdoc_options: []
|
57
|
+
|
58
|
+
require_paths:
|
59
|
+
- lib
|
60
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
61
|
+
requirements:
|
62
|
+
- - ">="
|
63
|
+
- !ruby/object:Gem::Version
|
64
|
+
version: "0"
|
65
|
+
version:
|
66
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
67
|
+
requirements:
|
68
|
+
- - ">="
|
69
|
+
- !ruby/object:Gem::Version
|
70
|
+
version: "0"
|
71
|
+
version:
|
72
|
+
requirements: []
|
73
|
+
|
74
|
+
rubyforge_project:
|
75
|
+
rubygems_version: 1.3.5
|
76
|
+
signing_key:
|
77
|
+
specification_version: 3
|
78
|
+
summary: "WebGet Ruby Gem: Spreadsheeting import export helpers, to parse and prettify"
|
79
|
+
test_files:
|
80
|
+
- test/webget_ruby_spreadsheeting_test.rb
|
metadata.gz.sig
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
կa�I�x���-k��V�e�jm�����,�(>T�2�A�m��ۻ��Y���,��>UI&��4z��?@g�S�V�������}הߵ+C@��|�������U�"��|Ĭ���}����7
|