sf_migrate 1.2.3 → 1.2.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.
- checksums.yaml +15 -0
- data/lib/import.rb +159 -137
- metadata +73 -103
checksums.yaml
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
---
|
2
|
+
!binary "U0hBMQ==":
|
3
|
+
metadata.gz: !binary |-
|
4
|
+
ZWFjNmY0ZGE4YmY3YjQwN2E3YmRmODliNmZhZjc1OTQ3YzQ4MjkzNw==
|
5
|
+
data.tar.gz: !binary |-
|
6
|
+
ODFmNWI4NDM2NzNmMjVhOTZiMDNkNzdmYjYwYzI1ZDFmZDQ3YzkzYg==
|
7
|
+
SHA512:
|
8
|
+
metadata.gz: !binary |-
|
9
|
+
ZThkZjExNDhhMjVmY2E4NzUxZGViMGVlODgzNTlkNGIxNjk2NzBjYjkzMDMz
|
10
|
+
M2I2MDExOGM1ZTkxMTJkZjVkNDgzMmQwZmUyNTY1Mzc0MDVhMWJjYzA4NjE0
|
11
|
+
YjFkZDUyZTMwOTkyNmVhMTU3NzQ5ZDQ3MTVlMGJlODMxNTI1MTM=
|
12
|
+
data.tar.gz: !binary |-
|
13
|
+
YWM3Y2Y5NWJmNDMwM2NlMWUzYWMxZjJmOTg0ZTllOTMyMmQ0NTg0MDU2OTdi
|
14
|
+
MmIxYmM0Yzg4OTBhOTEzZTJiOGRmZGVmNWMzMmZkOGEwYmZhN2ZiYjM5NWVi
|
15
|
+
YzhmN2FiNzExZDlkN2Q2ZTJhNDQ5M2VkMzExOGQ3ZmY0Y2M1ODI=
|
data/lib/import.rb
CHANGED
@@ -43,7 +43,7 @@ module SalesforceMigration
|
|
43
43
|
import_agents
|
44
44
|
import_merchants
|
45
45
|
|
46
|
-
|
46
|
+
puts_records_in_iso_groups
|
47
47
|
end
|
48
48
|
|
49
49
|
# Import methods. They load the csv file, for the given type
|
@@ -525,6 +525,14 @@ module SalesforceMigration
|
|
525
525
|
end
|
526
526
|
end
|
527
527
|
end
|
528
|
+
|
529
|
+
# Assign all records, to their ISO's SecurityGroup
|
530
|
+
#
|
531
|
+
def puts_records_in_iso_groups
|
532
|
+
put_isos_into_iso_group
|
533
|
+
put_agents_into_iso_group
|
534
|
+
put_merchants_into_iso_group
|
535
|
+
end
|
528
536
|
|
529
537
|
# Create the actual records and users in SugarCRM. Populates the var_pool
|
530
538
|
#
|
@@ -570,6 +578,32 @@ module SalesforceMigration
|
|
570
578
|
end
|
571
579
|
end
|
572
580
|
|
581
|
+
# Populates the var_pool with Sugar Objects.
|
582
|
+
# Reason being, is that if you abort the current process (error or some other reason)
|
583
|
+
# You won't be able to continue from the same place and be able to correctly associate the objects
|
584
|
+
# To prevent this, we can just load back every object for every type and continue uninterrupted
|
585
|
+
#
|
586
|
+
# @param [String] id - SalesForce id of the object, that we want to retrieve
|
587
|
+
# @param [String] type - type of the object, that we want to retrieve (module type)
|
588
|
+
def populate_var_poll_from_sugar(id, type)
|
589
|
+
obj = find_sugarcrm_object(type, 'sf_id', id)
|
590
|
+
populate_var_pool(obj, type) if obj
|
591
|
+
end
|
592
|
+
|
593
|
+
# Populates Users as SugarCRM objects.
|
594
|
+
# We use them later on, when associating objects with Security Groups
|
595
|
+
#
|
596
|
+
# @param [SugarCRM::Namespace::Object] Already created user object
|
597
|
+
# @param [String] type type of the object
|
598
|
+
def populate_user_pool(user, type)
|
599
|
+
case type
|
600
|
+
when 'iso'
|
601
|
+
@iso_users << user
|
602
|
+
when 'agent'
|
603
|
+
@agent_users << user
|
604
|
+
end
|
605
|
+
end
|
606
|
+
|
573
607
|
# Create association for agent, merchant, settlement bank Account, Email, Payment Method
|
574
608
|
# If it is agent, it will find the ISO by id and create the association
|
575
609
|
# If it is merchant, it will find the Agent, Payment Method, User and create the associations
|
@@ -603,21 +637,42 @@ module SalesforceMigration
|
|
603
637
|
obj
|
604
638
|
end
|
605
639
|
|
606
|
-
#
|
607
|
-
|
608
|
-
|
609
|
-
|
610
|
-
|
611
|
-
|
612
|
-
|
613
|
-
|
614
|
-
|
615
|
-
|
616
|
-
|
640
|
+
# Creates the Security Group object in SugarCRM
|
641
|
+
#
|
642
|
+
# @param [SugarCRM::Namespace::EmpIso] Iso object
|
643
|
+
def create_security_group_iso(iso)
|
644
|
+
@logger.info("Creating SecurityGroup #{iso.name}")
|
645
|
+
security_group = SugarCRM::SecurityGroup.new(:name => iso.name) unless find_sugarcrm_object('security_group','name', iso.name)
|
646
|
+
security_group.save! if security_group
|
647
|
+
end
|
648
|
+
|
649
|
+
# Create user associated with SugarCRM object
|
650
|
+
# Default email: mail@example.com, default password: 123456
|
651
|
+
#
|
652
|
+
# @param [SugarCRM::Namespace::Object] obj object for which a user will be created
|
653
|
+
# @param [String] type type of the object
|
654
|
+
def create_user(obj, type)
|
655
|
+
@logger.info("Creating user for #{type} #{obj.name}")
|
656
|
+
if (defined?(obj.emerchantpay_iso_id) && (obj.emerchantpay_iso_id.blank? || obj.email_address.blank?)) ||
|
657
|
+
(defined?(obj.emerchantpay_agent_id) && (obj.emerchantpay_agent_id.blank? || obj.email_address.blank?))
|
658
|
+
@logger.error("Record |#{obj.name}| with type |#{type}| have empty fields (which are required), thus its skipped!")
|
659
|
+
else
|
660
|
+
user = SugarCRM::User.new
|
661
|
+
user.user_name = (type == 'agent') ? obj.emerchantpay_agent_id : obj.emerchantpay_iso_id
|
662
|
+
user.last_name = obj.name
|
663
|
+
user.emp_type = type
|
664
|
+
user.email1 = obj.email_address || ""
|
665
|
+
user.status = 'Inactive'
|
666
|
+
user.salesforce_id = obj.sf_id
|
667
|
+
user.system_generated_password = false
|
668
|
+
user.save!
|
669
|
+
obj.assigned_user_id = user.id
|
670
|
+
obj.save!
|
671
|
+
|
672
|
+
populate_user_pool(user, type)
|
617
673
|
end
|
618
|
-
end
|
619
674
|
end
|
620
|
-
|
675
|
+
|
621
676
|
# Find records(payment methods, emails) in the junction object arrays, given the merchant_id
|
622
677
|
# Both payment methods and emails have a many-to-many relationship with the merchant in Salesforce
|
623
678
|
|
@@ -646,39 +701,19 @@ module SalesforceMigration
|
|
646
701
|
end
|
647
702
|
end
|
648
703
|
|
649
|
-
|
650
|
-
|
651
|
-
|
652
|
-
|
653
|
-
|
654
|
-
|
655
|
-
|
656
|
-
relation_data.each do |record|
|
657
|
-
# Check if we are dealing with file-relations (stored as Array)
|
658
|
-
# OR if we're using SugarCRM records (store as Object)
|
659
|
-
|
660
|
-
record_id = (relation_data.first.is_a?(Hash)) ? record['sf_id'] : record.sf_id
|
661
|
-
relate_id = (relation_data.first.is_a?(Hash)) ? record[relation_field] : record.send(relation_field.to_sym)
|
662
|
-
|
663
|
-
search_results << record_id if compare_salesforce_ids(relate_id, related_to_id)
|
664
|
-
end
|
665
|
-
when "update"
|
666
|
-
# Check if we are dealing with file-relations (stored as Array)
|
667
|
-
if relation_data.first.is_a?(Hash)
|
668
|
-
relation_data.each { |record| search_results << record['sf_id'] if compare_salesforce_ids(record[relation_field], related_to_id) }
|
669
|
-
# OR extract the objects from SugarCRM
|
704
|
+
# Associate an object with selected ids
|
705
|
+
def associate_module_by_ids!(object, type, list_of_ids, assign_to_user = false, reverse_association = false)
|
706
|
+
if list_of_ids.is_a?(Array)
|
707
|
+
list_of_ids.each do |record_id|
|
708
|
+
sugar_object = find_sugarcrm_object(type, 'sf_id', record_id)
|
709
|
+
if reverse_association
|
710
|
+
sugar_object.associate! object if sugar_object and object
|
670
711
|
else
|
671
|
-
|
672
|
-
|
673
|
-
if records.is_a?(Array)
|
674
|
-
records.each { |record| search_results << record.sf_id }
|
675
|
-
else
|
676
|
-
search_results << records.sf_id
|
677
|
-
end
|
712
|
+
object.associate! sugar_object if sugar_object and object
|
678
713
|
end
|
714
|
+
assign_user_as_owner_to_record(object, sugar_object) if assign_to_user
|
715
|
+
end
|
679
716
|
end
|
680
|
-
|
681
|
-
return search_results
|
682
717
|
end
|
683
718
|
|
684
719
|
# Assign user to an object, by providing a source and target objects
|
@@ -707,89 +742,41 @@ module SalesforceMigration
|
|
707
742
|
object_to_assign.save!
|
708
743
|
end
|
709
744
|
|
710
|
-
|
711
|
-
|
712
|
-
# @param [String] salesforce_id - salesforce id to compare to
|
713
|
-
# @param [String] target_id - id
|
714
|
-
#
|
715
|
-
# @return [Boolean] true on match, every other case - false
|
716
|
-
def compare_salesforce_ids(salesforce_id, target_id)
|
717
|
-
return false unless salesforce_id and target_id
|
745
|
+
def find_related_records(relation_data, relation_field, related_to_id)
|
746
|
+
return unless relation_data and relation_field and related_to_id
|
718
747
|
|
719
|
-
|
720
|
-
|
721
|
-
|
722
|
-
|
723
|
-
|
724
|
-
|
725
|
-
|
726
|
-
|
727
|
-
|
728
|
-
|
729
|
-
|
748
|
+
search_results = []
|
749
|
+
|
750
|
+
case @action
|
751
|
+
when "initial_run"
|
752
|
+
relation_data.each do |record|
|
753
|
+
# Check if we are dealing with file-relations (stored as Array)
|
754
|
+
# OR if we're using SugarCRM records (store as Object)
|
755
|
+
|
756
|
+
record_id = (relation_data.first.is_a?(Hash)) ? record['sf_id'] : record.sf_id
|
757
|
+
relate_id = (relation_data.first.is_a?(Hash)) ? record[relation_field] : record.send(relation_field.to_sym)
|
758
|
+
|
759
|
+
search_results << record_id if compare_salesforce_ids(relate_id, related_to_id)
|
730
760
|
end
|
731
|
-
|
732
|
-
|
761
|
+
when "update"
|
762
|
+
# Check if we are dealing with file-relations (stored as Array)
|
763
|
+
if relation_data.first.is_a?(Hash)
|
764
|
+
relation_data.each { |record| search_results << record['sf_id'] if compare_salesforce_ids(record[relation_field], related_to_id) }
|
765
|
+
# OR extract the objects from SugarCRM
|
766
|
+
else
|
767
|
+
records = find_sugarcrm_object(relation_data, relation_field, related_to_id)
|
768
|
+
|
769
|
+
return if records.blank?
|
770
|
+
|
771
|
+
if records.is_a?(Array)
|
772
|
+
records.each { |record| search_results << record.sf_id }
|
773
|
+
else
|
774
|
+
search_results << records.sf_id
|
775
|
+
end
|
733
776
|
end
|
734
777
|
end
|
735
|
-
|
736
|
-
false
|
737
|
-
end
|
738
|
-
|
739
|
-
# Creates the Security Group object in SugarCRM
|
740
|
-
#
|
741
|
-
# @param [SugarCRM::Namespace::EmpIso] Iso object
|
742
|
-
def create_security_group_iso(iso)
|
743
|
-
@logger.info("Creating SecurityGroup #{iso.name}")
|
744
|
-
security_group = SugarCRM::SecurityGroup.new(:name => iso.name) unless find_sugarcrm_object('security_group','name', iso.name)
|
745
|
-
security_group.save! if security_group
|
746
|
-
end
|
747
|
-
|
748
|
-
# Assign all records, to their ISO's SecurityGroup
|
749
|
-
def associate_records_to_groups
|
750
|
-
put_isos_into_iso_group
|
751
|
-
put_agents_into_iso_group
|
752
|
-
put_merchants_into_iso_group
|
753
|
-
end
|
754
778
|
|
755
|
-
|
756
|
-
# Default email: mail@example.com, default password: 123456
|
757
|
-
#
|
758
|
-
# @param [SugarCRM::Namespace::Object] obj object for which a user will be created
|
759
|
-
# @param [String] type type of the object
|
760
|
-
def create_user(obj, type)
|
761
|
-
@logger.info("Creating user for #{type} #{obj.name}")
|
762
|
-
if (defined?(obj.emerchantpay_iso_id) && (obj.emerchantpay_iso_id.blank? || obj.email_address.blank?)) ||
|
763
|
-
(defined?(obj.emerchantpay_agent_id) && (obj.emerchantpay_agent_id.blank? || obj.email_address.blank?))
|
764
|
-
@logger.error("Record |#{obj.name}| with type |#{type}| have empty fields (which are required), thus its skipped!")
|
765
|
-
else
|
766
|
-
user = SugarCRM::User.new
|
767
|
-
user.user_name = (type == 'agent') ? obj.emerchantpay_agent_id : obj.emerchantpay_iso_id
|
768
|
-
user.last_name = obj.name
|
769
|
-
user.emp_type = type
|
770
|
-
user.email1 = obj.email_address || ""
|
771
|
-
user.status = 'Inactive'
|
772
|
-
user.salesforce_id = obj.sf_id
|
773
|
-
user.system_generated_password = false
|
774
|
-
user.save!
|
775
|
-
obj.assigned_user_id = user.id
|
776
|
-
obj.save!
|
777
|
-
|
778
|
-
populate_user_pool(user, type)
|
779
|
-
end
|
780
|
-
end
|
781
|
-
|
782
|
-
# Populates Users as SugarCRM objects.
|
783
|
-
# We use them later on, when associating objects with Security Groups
|
784
|
-
# @param [SugarCRM::Namespace::Object] Already created user object
|
785
|
-
# @param [String] type type of the object
|
786
|
-
def populate_user_pool(user, type)
|
787
|
-
case type
|
788
|
-
when 'iso'
|
789
|
-
@iso_users << user
|
790
|
-
when 'agent'
|
791
|
-
@agent_users << user
|
792
|
-
end
|
779
|
+
search_results
|
793
780
|
end
|
794
781
|
|
795
782
|
def put_isos_into_iso_group
|
@@ -864,6 +851,7 @@ module SalesforceMigration
|
|
864
851
|
put_email_objects_into_iso_group(security_group, 'merchant', merchant)
|
865
852
|
put_payment_methods_objects_into_iso_group(security_group, merchant)
|
866
853
|
put_bank_accounts_into_iso_group(security_group, merchant)
|
854
|
+
put_contracts_into_iso_group(security_group, merchant)
|
867
855
|
else
|
868
856
|
@logger.error("Couldn't find a ISO SecurityGroup for Merchant - #{merchant.name}")
|
869
857
|
end
|
@@ -872,10 +860,27 @@ module SalesforceMigration
|
|
872
860
|
end
|
873
861
|
end
|
874
862
|
|
863
|
+
def put_contracts_into_iso_group(security_group, merchant)
|
864
|
+
return unless security_group and merchant
|
865
|
+
|
866
|
+
@logger.info("Putting Contracts for #{merchant.name} into #{security_group.name} group")
|
867
|
+
|
868
|
+
case @action
|
869
|
+
when "initial_run"
|
870
|
+
contracts_for_merchant_id = find_related_records(@contracts, 'sf_account_id', merchant.sf_id)
|
871
|
+
when "update"
|
872
|
+
contracts_for_merchant_id = find_related_records('contract', 'sf_account_id', merchant.sf_id)
|
873
|
+
end
|
874
|
+
|
875
|
+
return if contracts_for_merchant_id.blank?
|
876
|
+
|
877
|
+
associate_module_by_ids!(security_group, 'contract', contracts_for_merchant_id, false, true)
|
878
|
+
end
|
879
|
+
|
875
880
|
def put_bank_accounts_into_iso_group(security_group, merchant)
|
876
881
|
return unless security_group and merchant
|
877
882
|
|
878
|
-
@logger.info("Puting Bank
|
883
|
+
@logger.info("Puting Bank Accounts for #{merchant.name} into #{security_group.name} group")
|
879
884
|
|
880
885
|
case @action
|
881
886
|
when "initial_run"
|
@@ -892,7 +897,7 @@ module SalesforceMigration
|
|
892
897
|
def put_email_objects_into_iso_group(security_group, type, obj)
|
893
898
|
return unless security_group and type and obj
|
894
899
|
|
895
|
-
@logger.info("Puting Emails for #{obj.name} into
|
900
|
+
@logger.info("Puting Emails for #{obj.name} into #{security_group.name} group")
|
896
901
|
|
897
902
|
case type
|
898
903
|
when "agent"
|
@@ -919,7 +924,7 @@ module SalesforceMigration
|
|
919
924
|
def put_payment_methods_objects_into_iso_group(security_group, merchant)
|
920
925
|
return unless security_group and merchant
|
921
926
|
|
922
|
-
@logger.info("Puting Payment Methods for #{merchant.name} into
|
927
|
+
@logger.info("Puting Payment Methods for #{merchant.name} into #{security_group.name} group")
|
923
928
|
|
924
929
|
payment_methods = find_related_records(@payment_to_merchants, 'sf_merchant_id', merchant.sf_id)
|
925
930
|
|
@@ -927,6 +932,35 @@ module SalesforceMigration
|
|
927
932
|
|
928
933
|
associate_module_by_ids!(security_group, 'payment_method', payment_methods, false, true)
|
929
934
|
end
|
935
|
+
|
936
|
+
# Compare SalesForce Ids - SalesForce have two type of ids - 15 digit case-sensitive and 18-digit case-insensitive
|
937
|
+
#
|
938
|
+
# @param [String] salesforce_id - salesforce id to compare to
|
939
|
+
# @param [String] target_id - id
|
940
|
+
#
|
941
|
+
# @return [Boolean] true on match, every other case - false
|
942
|
+
def compare_salesforce_ids(salesforce_id, target_id)
|
943
|
+
return false unless salesforce_id and target_id
|
944
|
+
|
945
|
+
case salesforce_id.length
|
946
|
+
when 15
|
947
|
+
if target_id.length == 18
|
948
|
+
target_id = target_id[0..-4]
|
949
|
+
end
|
950
|
+
if salesforce_id == target_id
|
951
|
+
return true
|
952
|
+
end
|
953
|
+
when 18
|
954
|
+
if target_id.length == 15
|
955
|
+
salesforce_id = salesforce_id[0..-4]
|
956
|
+
end
|
957
|
+
if salesforce_id.casecmp(target_id) == 0
|
958
|
+
return true
|
959
|
+
end
|
960
|
+
end
|
961
|
+
|
962
|
+
false
|
963
|
+
end
|
930
964
|
|
931
965
|
# Returns the SugarCRM module namespace
|
932
966
|
# @param [String] type type of the module object
|
@@ -958,17 +992,5 @@ module SalesforceMigration
|
|
958
992
|
SugarCRM.connection.get_entry_list(module_type, "#{module_type.downcase}.#{attribute} = '#{search_string}'")
|
959
993
|
end
|
960
994
|
|
961
|
-
# Populates the var_pool with Sugar Objects.
|
962
|
-
# Reason being, is that if you abort the current process (error or some other reason)
|
963
|
-
# You won't be able to continue from the same place and be able to correctly associate the objects
|
964
|
-
# To prevent this, we can just load back every object for every type and continue uninterrupted
|
965
|
-
#
|
966
|
-
# @param [String] id - SalesForce id of the object, that we want to retrieve
|
967
|
-
# @param [String] type - type of the object, that we want to retrieve (module type)
|
968
|
-
def populate_var_poll_from_sugar(id, type)
|
969
|
-
obj = find_sugarcrm_object(type, 'sf_id', id)
|
970
|
-
populate_var_pool(obj, type) if obj
|
971
|
-
end
|
972
|
-
|
973
995
|
end
|
974
996
|
end
|
metadata
CHANGED
@@ -1,113 +1,94 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: sf_migrate
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
5
|
-
prerelease:
|
6
|
-
segments:
|
7
|
-
- 1
|
8
|
-
- 2
|
9
|
-
- 3
|
10
|
-
version: 1.2.3
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.2.4
|
11
5
|
platform: ruby
|
12
|
-
authors:
|
6
|
+
authors:
|
13
7
|
- Emil Petkov
|
14
8
|
- Petar Manchev
|
15
9
|
autorequire:
|
16
10
|
bindir: bin
|
17
11
|
cert_chain: []
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
- !ruby/object:Gem::Dependency
|
12
|
+
date: 2014-02-07 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
22
15
|
name: sugarcrm_emp
|
23
|
-
|
24
|
-
|
25
|
-
none: false
|
26
|
-
requirements:
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
requirements:
|
27
18
|
- - ~>
|
28
|
-
- !ruby/object:Gem::Version
|
29
|
-
hash: 61
|
30
|
-
segments:
|
31
|
-
- 0
|
32
|
-
- 10
|
33
|
-
- 5
|
19
|
+
- !ruby/object:Gem::Version
|
34
20
|
version: 0.10.5
|
35
21
|
type: :runtime
|
36
|
-
version_requirements: *id001
|
37
|
-
- !ruby/object:Gem::Dependency
|
38
|
-
name: databasedotcom_emp
|
39
22
|
prerelease: false
|
40
|
-
|
41
|
-
|
42
|
-
|
23
|
+
version_requirements: !ruby/object:Gem::Requirement
|
24
|
+
requirements:
|
25
|
+
- - ~>
|
26
|
+
- !ruby/object:Gem::Version
|
27
|
+
version: 0.10.5
|
28
|
+
- !ruby/object:Gem::Dependency
|
29
|
+
name: databasedotcom_emp
|
30
|
+
requirement: !ruby/object:Gem::Requirement
|
31
|
+
requirements:
|
43
32
|
- - ~>
|
44
|
-
- !ruby/object:Gem::Version
|
45
|
-
hash: 25
|
46
|
-
segments:
|
47
|
-
- 1
|
48
|
-
- 3
|
49
|
-
- 1
|
33
|
+
- !ruby/object:Gem::Version
|
50
34
|
version: 1.3.1
|
51
35
|
type: :runtime
|
52
|
-
version_requirements: *id002
|
53
|
-
- !ruby/object:Gem::Dependency
|
54
|
-
name: mail
|
55
36
|
prerelease: false
|
56
|
-
|
57
|
-
|
58
|
-
requirements:
|
37
|
+
version_requirements: !ruby/object:Gem::Requirement
|
38
|
+
requirements:
|
59
39
|
- - ~>
|
60
|
-
- !ruby/object:Gem::Version
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
40
|
+
- !ruby/object:Gem::Version
|
41
|
+
version: 1.3.1
|
42
|
+
- !ruby/object:Gem::Dependency
|
43
|
+
name: mail
|
44
|
+
requirement: !ruby/object:Gem::Requirement
|
45
|
+
requirements:
|
46
|
+
- - ~>
|
47
|
+
- !ruby/object:Gem::Version
|
66
48
|
version: 2.5.3
|
67
49
|
type: :runtime
|
68
|
-
version_requirements: *id003
|
69
|
-
- !ruby/object:Gem::Dependency
|
70
|
-
name: roo
|
71
50
|
prerelease: false
|
72
|
-
|
73
|
-
|
74
|
-
requirements:
|
51
|
+
version_requirements: !ruby/object:Gem::Requirement
|
52
|
+
requirements:
|
75
53
|
- - ~>
|
76
|
-
- !ruby/object:Gem::Version
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
54
|
+
- !ruby/object:Gem::Version
|
55
|
+
version: 2.5.3
|
56
|
+
- !ruby/object:Gem::Dependency
|
57
|
+
name: roo
|
58
|
+
requirement: !ruby/object:Gem::Requirement
|
59
|
+
requirements:
|
60
|
+
- - ~>
|
61
|
+
- !ruby/object:Gem::Version
|
82
62
|
version: 1.10.2
|
83
63
|
type: :runtime
|
84
|
-
version_requirements: *id004
|
85
|
-
- !ruby/object:Gem::Dependency
|
86
|
-
name: unix-crypt
|
87
64
|
prerelease: false
|
88
|
-
|
89
|
-
|
90
|
-
|
65
|
+
version_requirements: !ruby/object:Gem::Requirement
|
66
|
+
requirements:
|
67
|
+
- - ~>
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: 1.10.2
|
70
|
+
- !ruby/object:Gem::Dependency
|
71
|
+
name: unix-crypt
|
72
|
+
requirement: !ruby/object:Gem::Requirement
|
73
|
+
requirements:
|
91
74
|
- - ~>
|
92
|
-
- !ruby/object:Gem::Version
|
93
|
-
hash: 27
|
94
|
-
segments:
|
95
|
-
- 1
|
96
|
-
- 3
|
97
|
-
- 0
|
75
|
+
- !ruby/object:Gem::Version
|
98
76
|
version: 1.3.0
|
99
77
|
type: :runtime
|
100
|
-
|
78
|
+
prerelease: false
|
79
|
+
version_requirements: !ruby/object:Gem::Requirement
|
80
|
+
requirements:
|
81
|
+
- - ~>
|
82
|
+
- !ruby/object:Gem::Version
|
83
|
+
version: 1.3.0
|
101
84
|
description: SalesForce to SugarCRM migration tool
|
102
|
-
email:
|
85
|
+
email:
|
103
86
|
- p.manchev@emerchantpay.com
|
104
|
-
executables:
|
87
|
+
executables:
|
105
88
|
- sf_migrate
|
106
89
|
extensions: []
|
107
|
-
|
108
90
|
extra_rdoc_files: []
|
109
|
-
|
110
|
-
files:
|
91
|
+
files:
|
111
92
|
- README.md
|
112
93
|
- Gemfile
|
113
94
|
- bin/sf_migrate
|
@@ -119,36 +100,25 @@ files:
|
|
119
100
|
- config/credentials.yaml.example
|
120
101
|
homepage:
|
121
102
|
licenses: []
|
122
|
-
|
103
|
+
metadata: {}
|
123
104
|
post_install_message:
|
124
105
|
rdoc_options: []
|
125
|
-
|
126
|
-
require_paths:
|
106
|
+
require_paths:
|
127
107
|
- lib
|
128
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
none: false
|
139
|
-
requirements:
|
140
|
-
- - ">="
|
141
|
-
- !ruby/object:Gem::Version
|
142
|
-
hash: 3
|
143
|
-
segments:
|
144
|
-
- 0
|
145
|
-
version: "0"
|
108
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
109
|
+
requirements:
|
110
|
+
- - ! '>='
|
111
|
+
- !ruby/object:Gem::Version
|
112
|
+
version: '0'
|
113
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - ! '>='
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0'
|
146
118
|
requirements: []
|
147
|
-
|
148
119
|
rubyforge_project:
|
149
|
-
rubygems_version: 1.
|
120
|
+
rubygems_version: 2.1.11
|
150
121
|
signing_key:
|
151
|
-
specification_version:
|
122
|
+
specification_version: 4
|
152
123
|
summary: Makes a bridge between Salesforce and SugarCRM
|
153
124
|
test_files: []
|
154
|
-
|