con_sync 0.0.8 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 82e367702922374dd78c4d389a9eefd78460e909
|
4
|
+
data.tar.gz: 54714bd28231601afeaaeee6fb374a6938baa4a3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3d1bbe854d843f33f5ef44b3a3c95e9c65da9647b24d3ce218f5070a971363b15b6ea4ee94fb4dd4f17a84c30f2af611d6cd993e28dbe5723e747c3e07a6306f
|
7
|
+
data.tar.gz: 51aa12a4ff92dad07cd5624ce2708a90c2672f38725f2c13cac870bb31344077699a9e4cb591f33ee13ee32d41a2c8f4038371d96dd08065c9200664b0526fdd
|
data/app/models/user.rb
CHANGED
@@ -1,108 +1,3 @@
|
|
1
1
|
class User < ActiveRecord::Base
|
2
2
|
has_many :contacts
|
3
|
-
|
4
|
-
|
5
|
-
def sync_contacts(contact_hash = {})
|
6
|
-
result = {:new => {success:[], failed:[]}, modified: {success:[], failed:[]}, deleted: {success:[], failed:[]}}
|
7
|
-
raise ArgumentError, "You need to provide contacts hash." if contact_hash.blank?
|
8
|
-
|
9
|
-
##########################################################################
|
10
|
-
#########################Create new Contacts##############################
|
11
|
-
if !contact_hash[:new].blank?
|
12
|
-
contacts = contact_hash[:new]
|
13
|
-
contacts.each do |aContact|
|
14
|
-
phones = aContact[:phones]
|
15
|
-
emails = aContact[:emails]
|
16
|
-
|
17
|
-
aContact.delete :phones
|
18
|
-
aContact.delete :emails
|
19
|
-
|
20
|
-
newContact = Contact.new(contact_params(aContact))
|
21
|
-
if phones
|
22
|
-
phones.each do |aPhone|
|
23
|
-
newContact.phones.build(phone_params(aPhone))
|
24
|
-
end
|
25
|
-
end
|
26
|
-
if emails
|
27
|
-
emails.each do |anEmail|
|
28
|
-
newContact.emails.build(email_params(anEmail))
|
29
|
-
end
|
30
|
-
end
|
31
|
-
if newContact.save
|
32
|
-
# result[:new][:success] << newContact.record_id
|
33
|
-
self.contacts << newContact
|
34
|
-
else
|
35
|
-
result[:new][:failed] << newContact.record_id
|
36
|
-
end
|
37
|
-
end
|
38
|
-
end
|
39
|
-
##########################################################################
|
40
|
-
########################Modify Contacts###################################
|
41
|
-
if !contact_hash[:modified].blank?
|
42
|
-
modified_contacts = contact_hash[:modified]
|
43
|
-
modified_contacts.each do |con|
|
44
|
-
theContact = self.contacts.find_by_record_id(con[:record_id])
|
45
|
-
if ! theContact.blank?
|
46
|
-
if !theContact.update_attributes(contact_params(con))
|
47
|
-
result[:modified][:failed] << theContact.record_id
|
48
|
-
puts "Error Updating Contact."
|
49
|
-
else
|
50
|
-
# result[:modified][:success] << theContact.record_id
|
51
|
-
end
|
52
|
-
end
|
53
|
-
end
|
54
|
-
end
|
55
|
-
##########################################################################
|
56
|
-
########################Delete Contacts###################################
|
57
|
-
if !contact_hash[:deleted].blank?
|
58
|
-
delete_contacts = contact_hash[:deleted]
|
59
|
-
delete_contacts.each do |con|
|
60
|
-
if self.contacts.find_by_record_id(con[:record_id].to_i).destroy
|
61
|
-
# result[:deleted][:success] << con[:record_id]
|
62
|
-
else
|
63
|
-
result[:deleted][:failed] << con[:record_id]
|
64
|
-
end
|
65
|
-
end
|
66
|
-
end
|
67
|
-
after_contact_sync
|
68
|
-
self.save
|
69
|
-
return result
|
70
|
-
end
|
71
|
-
|
72
|
-
def matched_contacts
|
73
|
-
matched_contacts = []
|
74
|
-
user_phones = []
|
75
|
-
user_emails = []
|
76
|
-
self.contacts.each do |con|
|
77
|
-
user_phones.concat con.phones
|
78
|
-
user_emails.concat con.emails
|
79
|
-
end
|
80
|
-
|
81
|
-
user_phones.each do |phone|
|
82
|
-
u = User.where(phone_number: phone.number.encrypt(:symmetric)).limit(1).first
|
83
|
-
matched_contacts << u unless u.blank?
|
84
|
-
end
|
85
|
-
user_emails.each do |mail|
|
86
|
-
u = User.where(email: mail.email).limit(1).first
|
87
|
-
matched_contacts << u unless u.blank?
|
88
|
-
end
|
89
|
-
return matched_contacts
|
90
|
-
end
|
91
|
-
|
92
|
-
private
|
93
|
-
def contact_params(aContact)
|
94
|
-
aContact.permit(:composite_name, :first_name, :middle_name, :last_name, :prefix, :suffix, :nickname, :job_title, :department, :organization, :birthdate, :note, :creation_date, :modification_date, :record_id)
|
95
|
-
end
|
96
|
-
|
97
|
-
def phone_params aPhone
|
98
|
-
aPhone.permit(:label, :number)
|
99
|
-
end
|
100
|
-
|
101
|
-
def email_params anEmail
|
102
|
-
anEmail.permit(:label, :email)
|
103
|
-
end
|
104
|
-
|
105
|
-
def after_contact_sync
|
106
|
-
self.last_contact_sync = DateTime.now.utc
|
107
|
-
end
|
108
3
|
end
|
data/lib/con_sync/version.rb
CHANGED
data/lib/con_sync.rb
CHANGED
@@ -1,4 +1,117 @@
|
|
1
1
|
require "con_sync/engine"
|
2
2
|
require 'api_constraints'
|
3
3
|
module ConSync
|
4
|
+
module ActsAsSyncable
|
5
|
+
def acts_as_syncable
|
6
|
+
include Syncable
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
module Syncable
|
11
|
+
def sync_contacts(contact_hash = {})
|
12
|
+
result = {:new => {success:[], failed:[]}, modified: {success:[], failed:[]}, deleted: {success:[], failed:[]}}
|
13
|
+
raise ArgumentError, "You need to provide contacts hash." if contact_hash.blank?
|
14
|
+
|
15
|
+
##########################################################################
|
16
|
+
#########################Create new Contacts##############################
|
17
|
+
if !contact_hash[:new].blank?
|
18
|
+
contacts = contact_hash[:new]
|
19
|
+
contacts.each do |aContact|
|
20
|
+
phones = aContact[:phones]
|
21
|
+
emails = aContact[:emails]
|
22
|
+
|
23
|
+
aContact.delete :phones
|
24
|
+
aContact.delete :emails
|
25
|
+
|
26
|
+
newContact = Contact.new(contact_params(aContact))
|
27
|
+
if phones
|
28
|
+
phones.each do |aPhone|
|
29
|
+
newContact.phones.build(phone_params(aPhone))
|
30
|
+
end
|
31
|
+
end
|
32
|
+
if emails
|
33
|
+
emails.each do |anEmail|
|
34
|
+
newContact.emails.build(email_params(anEmail))
|
35
|
+
end
|
36
|
+
end
|
37
|
+
if newContact.save
|
38
|
+
# result[:new][:success] << newContact.record_id
|
39
|
+
self.contacts << newContact
|
40
|
+
else
|
41
|
+
result[:new][:failed] << newContact.record_id
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
##########################################################################
|
46
|
+
########################Modify Contacts###################################
|
47
|
+
if !contact_hash[:modified].blank?
|
48
|
+
modified_contacts = contact_hash[:modified]
|
49
|
+
modified_contacts.each do |con|
|
50
|
+
theContact = self.contacts.find_by_record_id(con[:record_id])
|
51
|
+
if ! theContact.blank?
|
52
|
+
if !theContact.update_attributes(contact_params(con))
|
53
|
+
result[:modified][:failed] << theContact.record_id
|
54
|
+
puts "Error Updating Contact."
|
55
|
+
else
|
56
|
+
# result[:modified][:success] << theContact.record_id
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
##########################################################################
|
62
|
+
########################Delete Contacts###################################
|
63
|
+
if !contact_hash[:deleted].blank?
|
64
|
+
delete_contacts = contact_hash[:deleted]
|
65
|
+
delete_contacts.each do |con|
|
66
|
+
if self.contacts.find_by_record_id(con[:record_id].to_i).destroy
|
67
|
+
# result[:deleted][:success] << con[:record_id]
|
68
|
+
else
|
69
|
+
result[:deleted][:failed] << con[:record_id]
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
73
|
+
after_contact_sync
|
74
|
+
self.save
|
75
|
+
return result
|
76
|
+
end
|
77
|
+
|
78
|
+
def matched_contacts
|
79
|
+
matched_contacts = []
|
80
|
+
user_phones = []
|
81
|
+
user_emails = []
|
82
|
+
self.contacts.each do |con|
|
83
|
+
user_phones.concat con.phones
|
84
|
+
user_emails.concat con.emails
|
85
|
+
end
|
86
|
+
|
87
|
+
user_phones.each do |phone|
|
88
|
+
u = User.where(phone_number: phone.number.encrypt(:symmetric)).limit(1).first
|
89
|
+
matched_contacts << u unless u.blank?
|
90
|
+
end
|
91
|
+
user_emails.each do |mail|
|
92
|
+
u = User.where(email: mail.email).limit(1).first
|
93
|
+
matched_contacts << u unless u.blank?
|
94
|
+
end
|
95
|
+
return matched_contacts
|
96
|
+
end
|
97
|
+
|
98
|
+
private
|
99
|
+
def contact_params(aContact)
|
100
|
+
aContact.permit(:composite_name, :first_name, :middle_name, :last_name, :prefix, :suffix, :nickname, :job_title, :department, :organization, :birthdate, :note, :creation_date, :modification_date, :record_id)
|
101
|
+
end
|
102
|
+
|
103
|
+
def phone_params aPhone
|
104
|
+
aPhone.permit(:label, :number)
|
105
|
+
end
|
106
|
+
|
107
|
+
def email_params anEmail
|
108
|
+
anEmail.permit(:label, :email)
|
109
|
+
end
|
110
|
+
|
111
|
+
def after_contact_sync
|
112
|
+
self.last_contact_sync = DateTime.now.utc
|
113
|
+
end
|
114
|
+
end
|
4
115
|
end
|
116
|
+
|
117
|
+
ActiveRecord::Base.send :extend, ConSync::ActsAsSyncable
|
@@ -10,7 +10,7 @@ class InstallConSyncGenerator < Rails::Generators::Base
|
|
10
10
|
source_root File.expand_path('../templates', __FILE__)
|
11
11
|
|
12
12
|
def generate_migration
|
13
|
-
migration_template "create_con_sync_schema.rb", "db/migrate/
|
13
|
+
migration_template "create_con_sync_schema.rb", "db/migrate/create_con_sync_schema.rb"
|
14
14
|
end
|
15
15
|
|
16
16
|
def generate_routes
|
@@ -1,5 +1,5 @@
|
|
1
1
|
class CreateConSyncSchema < ActiveRecord::Migration
|
2
|
-
def
|
2
|
+
def up
|
3
3
|
create_table :contacts do |t|
|
4
4
|
t.string :composite_name
|
5
5
|
t.string :first_name
|
@@ -39,11 +39,23 @@ class CreateConSyncSchema < ActiveRecord::Migration
|
|
39
39
|
t.timestamps
|
40
40
|
end
|
41
41
|
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
42
|
+
if table_exists? :users
|
43
|
+
add_column :users, :last_contact_sync, :datetime
|
44
|
+
add_column :users, :encrypted_number, :string
|
45
|
+
add_column :users, :cc_prefix, :string
|
46
|
+
add_index :users, :encrypted_number
|
47
|
+
else
|
48
|
+
create_table :users do |t|
|
49
|
+
t.string :first_name
|
50
|
+
t.string :middle_name
|
51
|
+
t.string :last_name
|
52
|
+
t.string :email
|
53
|
+
t.string :encrypted_number
|
54
|
+
t.string :cc_prefix
|
55
|
+
t.datetime :last_contact_sync
|
56
|
+
end
|
57
|
+
add_index :users, :encrypted_number
|
58
|
+
end
|
47
59
|
|
48
60
|
add_index :contacts, [:record_id, :device_id], name: "unique_device_contact", unique: true
|
49
61
|
add_index :contacts, :user_id
|
@@ -51,4 +63,8 @@ class CreateConSyncSchema < ActiveRecord::Migration
|
|
51
63
|
add_index :emails, :encrypted_email
|
52
64
|
|
53
65
|
end
|
66
|
+
|
67
|
+
def down
|
68
|
+
|
69
|
+
end
|
54
70
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: con_sync
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Saad Masood
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-05-
|
11
|
+
date: 2015-05-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -24,6 +24,34 @@ dependencies:
|
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: 4.2.1
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: global_phone
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - '='
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 1.0.1
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - '='
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 1.0.1
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: encrypted_strings
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - '='
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: 0.3.3
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - '='
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: 0.3.3
|
27
55
|
- !ruby/object:Gem::Dependency
|
28
56
|
name: sqlite3
|
29
57
|
requirement: !ruby/object:Gem::Requirement
|