webget_spreadsheet_import_export_helpers 1.0.3
Sign up to get free protection for your applications and to get access to all the features.
data.tar.gz.sig
ADDED
Binary file
|
@@ -0,0 +1,132 @@
|
|
1
|
+
# = SpreadsheetImportExportHelpers
|
2
|
+
#
|
3
|
+
# Author:: Joel Parker Henderson, joelparkerhenderson@gmail.com
|
4
|
+
# Copyright:: Copyright (c) 2006-2009 Joel Parker Henderson
|
5
|
+
# License:: CreativeCommons License, Non-commercial Share Alike
|
6
|
+
# License:: LGPL, GNU Lesser General Public License
|
7
|
+
#
|
8
|
+
#
|
9
|
+
##
|
10
|
+
|
11
|
+
module SpreadsheetImportExportHelpers
|
12
|
+
|
13
|
+
# Parse a string to a date, with some cleanup
|
14
|
+
def import_date(s)
|
15
|
+
return nil if s==nil or s.strip==''
|
16
|
+
return Date.parse(s)
|
17
|
+
end
|
18
|
+
|
19
|
+
|
20
|
+
# There's a typical import use case where a column is
|
21
|
+
# a boolean, in a variety of formats like "X" for on,
|
22
|
+
# "Y" for yes, "T" for true, etc.
|
23
|
+
#
|
24
|
+
# @return a boolean
|
25
|
+
#
|
26
|
+
# We use these rules:
|
27
|
+
# - x y yes t true on + => true
|
28
|
+
# - blank n no f false off - => false
|
29
|
+
# - anything else => nil
|
30
|
+
#
|
31
|
+
# ==Examples
|
32
|
+
# import_flag('Yes') => true
|
33
|
+
# import_flag('No') => false
|
34
|
+
# import_flag('X') => true
|
35
|
+
# import_flag('') => false
|
36
|
+
# import_flag('Hello') => nil
|
37
|
+
|
38
|
+
def import_flag(s)
|
39
|
+
case s.strip.downcase
|
40
|
+
when 'x','y','yes','t','true','on','+'
|
41
|
+
return true,''
|
42
|
+
when '','n','no','f','false','off','-'
|
43
|
+
return false
|
44
|
+
else
|
45
|
+
return nil
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
|
50
|
+
# There's a typical import use case where a column
|
51
|
+
# can contain two different data types:
|
52
|
+
# - a boolean, in a variety of formats (see _import_flag_)
|
53
|
+
# - a note, in plain text
|
54
|
+
#
|
55
|
+
# We need to separate these two.
|
56
|
+
#
|
57
|
+
# This method returns two items: a boolean and a note.
|
58
|
+
#
|
59
|
+
# We use these rules:
|
60
|
+
# - x y yes t true on + => [true, '']
|
61
|
+
# - blank n no f false off - => [false, '']
|
62
|
+
# - anything else => nil, note
|
63
|
+
#
|
64
|
+
# ==Example
|
65
|
+
# import_flag_or_note('Yes') => [true,'']
|
66
|
+
# import_flag_or_note('No') => [false,'']
|
67
|
+
# import_flag_or_note('X') => [true,'']
|
68
|
+
# import_flag_or_note('') => [false,'']
|
69
|
+
# import_flag_or_note('Hello') => [nil,'Hello']
|
70
|
+
|
71
|
+
def import_flag_or_note(s)
|
72
|
+
flag = import_flag(s)
|
73
|
+
return flag ? [flag, ''] : [nil, s]
|
74
|
+
end
|
75
|
+
|
76
|
+
|
77
|
+
# There's a common import use case where a column can be of two types:
|
78
|
+
# - a date, in a variety of format like "Jan 1, 2008", "1/1/2008", etc.
|
79
|
+
# - a note, in plain text
|
80
|
+
#
|
81
|
+
# This method returns two items: a date (Date class) and a note (String class).
|
82
|
+
#
|
83
|
+
# ==Example
|
84
|
+
# import_date_or_note('1/1/2007') => [Date(2007,01,01),'']
|
85
|
+
# import_date_or_note('hello') => [nil,'hello']
|
86
|
+
|
87
|
+
def import_date_or_note(s)
|
88
|
+
begin
|
89
|
+
d=import_date(s)
|
90
|
+
rescue
|
91
|
+
d=nil
|
92
|
+
end
|
93
|
+
return d ? [d,''] : [nil,s]
|
94
|
+
end
|
95
|
+
|
96
|
+
|
97
|
+
# Corresponds to import_flag_or_note
|
98
|
+
#
|
99
|
+
# ==Return
|
100
|
+
# - flag==true => 'X'
|
101
|
+
# - flag==false => ''
|
102
|
+
# - otherwise return note
|
103
|
+
#
|
104
|
+
# ==Example
|
105
|
+
# t=true
|
106
|
+
# f=false
|
107
|
+
# export_flag_or_note(t,'hello') => 'X'
|
108
|
+
# export_flag_or_note(f,'hello') => ''
|
109
|
+
# export_flag_or_note(nil,'hello') => 'hello'
|
110
|
+
|
111
|
+
def export_flag_or_note(flag,note=nil)
|
112
|
+
return flag==true ? 'X' : flag==false ? '' : note
|
113
|
+
end
|
114
|
+
|
115
|
+
|
116
|
+
# Corresponds to import_date_or_note
|
117
|
+
#
|
118
|
+
# ==Return
|
119
|
+
# - date exists => date to yyyy-mm-dd format
|
120
|
+
# - otherwise return note
|
121
|
+
#
|
122
|
+
# ==Example
|
123
|
+
# d=Date.parse('1/1/2007')
|
124
|
+
# export_date_or_note(d,'hello') => '2007-01-01'
|
125
|
+
# export_date_or_note(nil,'hello') => 'hello'
|
126
|
+
|
127
|
+
def export_date_or_note(date,note=nil)
|
128
|
+
return date ? date.strftime("%Y-%m-%d") : note
|
129
|
+
end
|
130
|
+
|
131
|
+
|
132
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
require 'test/unit'
|
2
|
+
require 'date'
|
3
|
+
require 'webget_spreadsheet_import_export_helpers'
|
4
|
+
|
5
|
+
class SpreadsheetImportExportHelpersTest < Test::Unit::TestCase
|
6
|
+
|
7
|
+
include SpreadsheetImportExportHelpers
|
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
|
+
end
|
18
|
+
|
19
|
+
def test_import_flag_or_note
|
20
|
+
assert_equal([true,''], import_flag_or_note('X'))
|
21
|
+
assert_equal([false,''], import_flag_or_note(''))
|
22
|
+
assert_equal([true,''], import_flag_or_note('yes'))
|
23
|
+
assert_equal([false,''], import_flag_or_note('no'))
|
24
|
+
assert_equal([true,''], import_flag_or_note('+'))
|
25
|
+
assert_equal([false,''], import_flag_or_note('-'))
|
26
|
+
assert_equal([nil,'hello'], import_flag_or_note('hello'))
|
27
|
+
end
|
28
|
+
|
29
|
+
def test_import_date_or_note
|
30
|
+
d=Date.parse('2007/12/31')
|
31
|
+
assert_equal([d,''], import_date_or_note('2007/12/31'))
|
32
|
+
assert_equal([nil,'hello'], import_date_or_note('hello'))
|
33
|
+
end
|
34
|
+
|
35
|
+
def test_export_flag_or_note
|
36
|
+
assert_equal('X', export_flag_or_note(true,'hello'))
|
37
|
+
assert_equal('', export_flag_or_note(false,'hello'))
|
38
|
+
assert_equal('hello', export_flag_or_note(nil,'hello'))
|
39
|
+
end
|
40
|
+
|
41
|
+
def test_export_date_or_note
|
42
|
+
d=Date.parse('2007/12/31')
|
43
|
+
assert_equal('2007-12-31', export_date_or_note(d,'hello'))
|
44
|
+
assert_equal('hello', export_date_or_note(nil,'hello'))
|
45
|
+
end
|
46
|
+
|
47
|
+
end
|
metadata
ADDED
@@ -0,0 +1,78 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: webget_spreadsheet_import_export_helpers
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.0.3
|
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-01-28 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
|
+
- lib/webget_spreadsheet_import_export_helpers/webget_spreadsheet_import_export_helpers.rb
|
49
|
+
has_rdoc: true
|
50
|
+
homepage: http://webget.com/
|
51
|
+
licenses: []
|
52
|
+
|
53
|
+
post_install_message:
|
54
|
+
rdoc_options: []
|
55
|
+
|
56
|
+
require_paths:
|
57
|
+
- lib
|
58
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
59
|
+
requirements:
|
60
|
+
- - ">="
|
61
|
+
- !ruby/object:Gem::Version
|
62
|
+
version: "0"
|
63
|
+
version:
|
64
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: "0"
|
69
|
+
version:
|
70
|
+
requirements: []
|
71
|
+
|
72
|
+
rubyforge_project:
|
73
|
+
rubygems_version: 1.3.5
|
74
|
+
signing_key:
|
75
|
+
specification_version: 3
|
76
|
+
summary: "WebGet spreadsheet_import_export_helpers gem: parsers and prettifiers for spreadsheets"
|
77
|
+
test_files:
|
78
|
+
- test/webget_spreadsheet_import_export_helpers/unit/webget_spreadsheet_import_export_helpers_test.rb
|
metadata.gz.sig
ADDED