syc-ontact 0.0.1 → 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- metadata +2 -76
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 80e73e81f14547f26d98fe5b679b99f01ead7983
|
4
|
+
data.tar.gz: f45271ffbf6dd223f03b3d93fce00be6e953a192
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8bc9da0fa153b04b30783d8237dc6ace3af4d5a697318815bed2e469e41ac54965a56ebdcd5acbf76ceebed83166ce9efe0deeb3830df7ff5debacd32e5d809c
|
7
|
+
data.tar.gz: ec13459becd9acf3d567cbe8f661e67f3ad78754817e26c4652a19da4fd84232793ced15ae702916b2c99169ce4e31e9a0c07976b2d1ffa59caa2533601918f2
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: syc-ontact
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Pierre Sugar
|
@@ -24,81 +24,7 @@ dependencies:
|
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '0'
|
27
|
-
description:
|
28
|
-
up contacts from any source that is providing contact information.\n\nInstallation\n============\n`gem
|
29
|
-
install sycontact`\n\nSetup\n=====\nTo use `sycontact` a source-file has to be provided.
|
30
|
-
The source-file is Ruby script retrieving the data from the source. A source can
|
31
|
-
be anything that can be read from the Ruby script, e.g. a web site, an LDAP server,
|
32
|
-
a file with contact data.\n\n**Note:** Without a user defined Ruby script file (a
|
33
|
-
Ruby module) `sycontact` will do nothing but \n creating a configuration
|
34
|
-
file, a source directory and displaying the help page.\n\nTo get `sycontact` to
|
35
|
-
life you have to follow these setup steps:\n\n1. start `sycontact` once. This will
|
36
|
-
create the configuration file and the working directory\n2. provide a Ruby module
|
37
|
-
describing how to retrieve the data from the source. The module name has\n to
|
38
|
-
be `some_name_source.rb`.\n\nThe Ruby source code below describes a source-file
|
39
|
-
that is retrieving contact data from a contact directory with the name *test-contacts*
|
40
|
-
below the module's directory.\n\n\n```\nmodule AddressSource\n\n # Where to find
|
41
|
-
the contact files\n URL = File.join(File.dirname(__FILE__), \"test-contacts\")\n\n
|
42
|
-
\ # Regex to extract contact data from the contact files\n REGEX = { cn: /(?<=<common_name>)[\\w
|
43
|
-
-]*(?=<\\common_name>)/,\n sn: /(?<=<surname>)[\\w -]*(?=<\\/surname>)/,\n
|
44
|
-
\ gn: /(?<=<given_name>)[\\w -]*(?=<\\/given_name>)/,\n c:
|
45
|
-
/(?<=<country>)[\\w]*(?=<\\/country>)/,\n l: /(?<=<location>)[\\w]*(?=<\\/location>)/,\n
|
46
|
-
\ st: /(?<=<state>)[\\w]*(?=<\\/state>)/,\n street: /(?<=<street>)[\\w
|
47
|
-
.]*(?=<\\/street>)/,\n o: /(?<=<organization>)[\\w -]*(?=<\\/organization>)/,\n
|
48
|
-
\ ou: /(?<=<department>)[\\w -]*(?=<\\/department>)/,\n title:
|
49
|
-
/(?<=<title>)[\\w .-]*(?=<\\/title>)/,\n description: /(?<=<description>)[\\w
|
50
|
-
-+]*(?=<\\/description>)/,\n telephone: /(?<=<telephone>)[\\w +()-]*(?=<\\/telephone>)/,\n
|
51
|
-
\ mobile: /(?<=<mobile>)[\\w +()-]*(?=<\\/mobile>)/,\n mail:
|
52
|
-
/(?<=<email>)[\\w @.-]*(?=<\\/email>)/\n }\n\n # Mandatory method! Will
|
53
|
-
be invoked by `sycontact`.\n # Will lookup the contact based on the pattern provided\n
|
54
|
-
\ def lookup(pattern = {})\n contacts = []\n create_source_files(pattern).each
|
55
|
-
do |source_file|\n\n next unless File.exist? source_file\n\n source =
|
56
|
-
File.read(source_file)\n\n next if source.empty?\n\n values = {}\n\n REGEX.each
|
57
|
-
do |key, regex|\n value = source.scan(regex)[0]\n values[key] = value
|
58
|
-
if value\n end\n\n contacts << values\n end\n\n contacts.keep_if
|
59
|
-
do |contact|\n pattern.each.reduce(true) do |match, pattern| \n contact_does_not_have_key
|
60
|
-
= contact[pattern[0]].nil?\n regex = Regexp.new(pattern[1].strip.downcase)\n
|
61
|
-
\ pos = regex =~ contact[pattern[0]].strip.downcase unless contact_does_not_have_key\n
|
62
|
-
\ match and (not pos.nil? or contact_does_not_have_key)\n end\n end\n
|
63
|
-
\ end\n\n private\n\n # Creates the contact file name. In this case the contact
|
64
|
-
files have to be in the form\n # firstname_lastname.contact or lastname_firstname.contact.
|
65
|
-
If neather is given all *_*.contact\n # files are retrieved\n def create_source_files(pattern)\n
|
66
|
-
\ source_files = []\n if pattern[:cn]\n names = pattern[:cn].scan(/(^[a-zA-Z]*)[^a-zA-Z]*([a-zA-Z]*)/).flatten\n
|
67
|
-
\ names[0] = '*' if names[0].empty?\n names[1] = '*' if names[1].empty?\n
|
68
|
-
\ names.permutation do |names|\n file = File.join(URL, \"#{names.join('_').downcase}.contact\")\n
|
69
|
-
\ Dir.glob(file).each { |file| source_files << file }\n end\n elsif
|
70
|
-
pattern[:sn] or pattern[:gn]\n sn = pattern[:sn] ? pattern[:sn].strip.downcase
|
71
|
-
: '*'\n gn = pattern[:gn] ? pattern[:gn].strip.downcase : '*'\n Dir.glob(File.join(URL,
|
72
|
-
\"#{gn}_#{sn}.contact\")).each do |file|\n source_files << file\n end\n
|
73
|
-
\ else\n Dir.glob(File.join(URL, \"*_*.contact\")).each do |file|\n source_files
|
74
|
-
<< file\n end\n end\n source_files\n end\nend\n```\n\n**Listing
|
75
|
-
1: Source-file to provide information about how to retrieve contact information**\n\nBelow
|
76
|
-
a contact file that can be read by the above source module.\n\n```\n<common_name>Sugar
|
77
|
-
Pierre</common_name>\n<given_name>Pierre</given_name>\n<surname>Sugar</surname>\n<country>CA</country>\n<location>Vancouver</location>\n<state>BC</state>\n<street>Robson
|
78
|
-
Street</street>\n<organization>SugarYourCoffee</organization>\n<department>DevOps</department>\n<telephone>+001
|
79
|
-
(123) 4567</telephone>\n<mobile>+001 (765) 4321</mobile>\n<email>pierre@sugaryourcoffee.de</email>\n```\n\n**Listing
|
80
|
-
2: Contact file that can be read by the `AddressSource` module**\n\nUsage\n=====\n\nGet
|
81
|
-
help for sycontact\n\n $ sycontact -h\n\n```\nUsage: sycontact [options]\n -p,
|
82
|
-
--print RAW|SUMMARY|ALL Print contact attributes\n SUMMARY
|
83
|
-
(default)\n --cn COMMON_NAME Common name e.g. 'Jane Doe' or 'Doe,
|
84
|
-
Jane'\n --sn SURNAME Surname e.g. 'Doe'\n --gn GIVEN_NAME
|
85
|
-
\ Given name e.g. 'Jane'\n --uid USER_ID User
|
86
|
-
ID\n -c COUNTRY Country in ISO 3166 e.g. 'CA' for Canada\n
|
87
|
-
\ -l LOCATION City e.g. 'Vancouver'\n --st STATE State
|
88
|
-
e.g. 'British Columbia'\n --street STREET Street e.g. 'Robson
|
89
|
-
Street'\n -o ORGANIZATION Organization e.g. 'Northstar'\n --ou
|
90
|
-
ORGANIZATIONAL_UNIT Department e.g. 'R&D'\n --title TITLE Title
|
91
|
-
e.g. 'Dr.'\n --description DESCRIPTION Description e.g. 'Head of R&D'\n
|
92
|
-
\ --telephone TELEPHONE Telephone number e.g. '+001 (252) 4354'\n --mobile
|
93
|
-
MOBILE_PHONE Mobile number e.g. '+001 (252) 4345'\n --mail E-MAIL
|
94
|
-
\ E-Mail address e.g. 'jane@northstart.ca'\n -h, --help Show
|
95
|
-
his message\n```\n\nLookup a contact with summary output\n\n $ sycontact --cn
|
96
|
-
sugar\n $ sycontact --cn \"sugar, pierre\"\n $ sycontact --cn \"pierre sugar\"\n\nAny
|
97
|
-
of the above commands result in the following output\n\n```\nAddressSource\n\nCN..................Sugar
|
98
|
-
Pierre\nC...................DE\nL...................Vancouver\nO...................SugarYourCoffee\nOU..................DevOps\nTELEPHONE...........+001
|
99
|
-
(123) 4567\nMOBILE..............+001 (765) 4321\nMAIL................pierre@sugaryourcoffee.de\n```\nSources\n=======\nHome
|
100
|
-
page: <http://syc.dyndns.org/drupal/wiki/sycontact-lookup-contacts-any-source>\n\nSource:
|
101
|
-
<https://github.com/sugaryourcoffee/syc-ontact>\n\nContact\n=======\n\n<pierre@sugaryourcoffee.de>\n"
|
27
|
+
description:
|
102
28
|
email: pierre@sugaryourcoffee.de
|
103
29
|
executables:
|
104
30
|
- sycontact
|