highrise_wrapper 0.0.2 → 0.0.9

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 CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- NzMzODE2ZmYyNDE5OGQwNTRiNDIxN2VhMjY2NjgxYzViZTE3YTNjYw==
4
+ N2RkZWQ4M2U3YWRjMTg1NzcwMGZkNTZjZjg5NjJjNzUwM2VhMzBmNQ==
5
5
  data.tar.gz: !binary |-
6
- ZmIyODg2NDg1N2YzNGJkMGVkNmQwMDliNGQxYjYwNDhmZjI3NTc4OQ==
6
+ Y2JhMGZiYzBmNmM0MzYxMzVkMDI4YTYxOWE5ZDVhMjU3MmU4MmI4OA==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- OGNjODFlZDc4ZTMzMWQ3ODg4ZDY3ODNlZTc1M2ViMmQwYjIwNjNhZTE5NDll
10
- YjIwN2NlZmVhNDkxZTY0YzU0MmIwMjQ3NDU5NmNhNTMyZmYzNzYyZDY3Yjg2
11
- ZjdjYzczZGM2Yzg5MzJkN2YxM2E0OTE2MmJjYmY2NTdlMDA5NDI=
9
+ YWJiNDk5YTcyNTVlY2Q3NzcyOWM3ZjI5ZDY5YjAxZWI4ZWRhMTE0MzE0N2Y0
10
+ NGRjNmZkNTJlNTBkM2JhYzA2NTAxMmI0MzdmMGZhODFkNjUwMjI3ZDRhODUw
11
+ ZmNjZTQ3NzBmNDdkMmZhZjI3MmQ0YTViMmM3OWI2NGQwZmQ2Y2U=
12
12
  data.tar.gz: !binary |-
13
- ZDI2YmY3NGY5NWYwNDIzYTU1YTVmNDhiNzZmYzE5Y2VlNWZlNjM1NzUwOWIz
14
- ZjBhYmRiNGM5N2JhYmNhYzI0ZjYxYTQwYmM2ZTkzMGU2NzdlYzRkNzZiMjcw
15
- NDVkOGM4OWI3YmFhMmZhZTYwOTI3MjMzMGM1ODNhYjlkYzAzMzQ=
13
+ MmNkZjIxNDc4NDVjOWQwYTVhMzVjMjZlYWRlMjM3ZGJjM2EyN2Y5ZWM3MjVm
14
+ MGM4M2FmZGE0NDA4MDRjMGU0NTE1ZTEzYWRlOTc1YjI5MjY0OThlOWZiMTI1
15
+ YWQ4NzBiNzE1NGZjN2UyZGE0ZWZmNGRkZGUyYmUyNDUxZDY4MWI=
data/README.md CHANGED
@@ -19,7 +19,63 @@ Or install it yourself as:
19
19
 
20
20
  ## Usage
21
21
 
22
- TODO: Write usage instructions here
22
+ You can start to use with just a few steps. All you need is to
23
+ have a class including our `Contact` module that:
24
+
25
+ - implements a `highrise_hash` method that returns a hash with the contact information using the format the highrise_api ( https://github.com/basecamp/highrise-api ) uses
26
+ - has `highrise_token` and `highrise_base_url` available
27
+
28
+ ### Example code
29
+
30
+ ```ruby
31
+ class Contact < ActiveRecord::Base
32
+ include HighriseWrapper::ActiveRecord
33
+
34
+ belongs_to :company
35
+
36
+ def fullname
37
+ "#{first_name} #{last_name}"
38
+ end
39
+
40
+ def highrise_hash
41
+ {
42
+ 'first_name' => first_name,
43
+ 'last_name' => last_name,
44
+ 'title' => job_title,
45
+ 'company_name' => company_name,
46
+ 'contact_data' => {
47
+ 'email_addresses' => [{
48
+ 'address' => email,
49
+ 'location' => 'Work'
50
+ }],
51
+ 'phone_numbers' => [{
52
+ 'number' => phone,
53
+ 'location' => 'Work'
54
+ }],
55
+ 'web_addresses' => [{
56
+ 'location' => 'Work',
57
+ 'url' => website
58
+ }]
59
+ }
60
+ }
61
+ end
62
+
63
+ def highrise_token
64
+ company.highrise_token
65
+ end
66
+
67
+ def highrise_base_url
68
+ company.highrise_base_url
69
+ end
70
+ end
71
+ ```
72
+
73
+ ### Sample app
74
+
75
+ There is an example application you can take a look at:
76
+
77
+ - Source: http://github.com/rhlobo/loboapp
78
+ - Demo: http://loboapp.herokuapp.com
23
79
 
24
80
  ## Contributing
25
81
 
data/TODO CHANGED
@@ -1,11 +1,11 @@
1
1
  MAIN SCOPE:
2
2
  ✔ Test integration (highrise gem usage) @done (14-03-20 16:32)
3
3
  ✔ Make project read to implementation @done (14-03-20 16:36)
4
- ??
5
- Criar metodo de conexão com highrise
6
- Cadastramento de um contato
7
- Descadastramento de um contato
8
- Fazer com que chamada a api seja assincrona (outra thread, ou etc)
4
+ Experiment with conversion methods @done (14-04-02 18:05)
5
+ Criar metodo de conexão com highrise @done (14-04-02 18:05)
6
+ Cadastramento de um contato @done (14-04-02 18:06)
7
+ Descadastramento de um contato @done (14-04-02 18:06)
8
+ Fazer com que chamada a api seja assincrona (outra thread, ou etc) @cancelled (14-04-02 18:06)
9
9
  ☐ Remover script de testes
10
10
 
11
11
  DOCUMENTATION:
@@ -6,7 +6,7 @@ require 'highrise_wrapper/version'
6
6
 
7
7
  Gem::Specification.new do |spec|
8
8
  spec.name = "highrise_wrapper"
9
- spec.version = Highrise_wrapper::VERSION
9
+ spec.version = HighriseWrapper::VERSION
10
10
  spec.authors = ["rhlobo"]
11
11
  spec.email = ["rhlobo+github@gmail.com"]
12
12
  spec.summary = "Gem to provide easy usage of Highrise API"
@@ -25,8 +25,10 @@ Gem::Specification.new do |spec|
25
25
  spec.require_paths = ["lib"]
26
26
 
27
27
  spec.add_development_dependency "bundler", "~> 1.5"
28
- spec.add_development_dependency "rake"
29
- spec.add_development_dependency "rspec"
28
+ spec.add_development_dependency "rake", "~> 0"
29
+ spec.add_development_dependency "rspec", "~> 0"
30
30
 
31
- spec.add_dependency "highrise", "~>3.1"
31
+ spec.add_dependency "highrise", "~> 3.1.0"
32
+ #spec.add_dependency "simple_attribute_mapper", "~> 0.0"
33
+ #spec.add_dependency "virtus", "~> 1.0"
32
34
  end
@@ -1,5 +1,6 @@
1
+ require 'highrise'
1
2
  require "highrise_wrapper/version"
2
3
  require "highrise_wrapper/contact"
3
4
 
4
- module Highrise_wrapper
5
+ module HighriseWrapper
5
6
  end
@@ -1,19 +1,48 @@
1
- module Highrise_wrapper
1
+ module HighriseWrapper
2
+ module ActiveRecord
3
+ def on_highrise?
4
+ !self.highrise_id.nil?
5
+ end
2
6
 
3
- module InstanceMethods
4
7
  def highrise_save
5
- puts 'Saving'
6
- sleep(10.seconds)
8
+ logger.info 'Saving #{fullname} to highrise'
9
+
10
+ begin
11
+ setup_highrise
12
+ person = Highrise::Person.new(self.highrise_hash)
13
+ person.save!
14
+ self.highrise_id = person.attributes['id']
15
+ self.save!
16
+ rescue Exception => exception
17
+ logger.error(
18
+ "It was not possible to save contact to highrise: " +
19
+ "#{exception.class} (#{exception.message})")
20
+ return false
21
+ end
7
22
  end
8
23
 
9
24
  def highrise_remove
10
- puts 'Removing'
11
- sleep(10.seconds)
12
- end
25
+ logger.info 'Removing #{fullname} from highrise'
13
26
 
14
- def it_works
15
- return 42
27
+ begin
28
+ setup_highrise
29
+ person = Highrise::Person.find(highrise_id)
30
+ person.destroy
31
+ self.highrise_id = nil
32
+ self.save!
33
+ rescue Exception => exception
34
+ logger.error(
35
+ "It was not possible to remove contact from highrise: " +
36
+ "#{exception.class} (#{exception.message})")
37
+ return false
16
38
  end
17
- end
39
+ end
18
40
 
41
+ private
42
+ def setup_highrise
43
+ Highrise::Base.site = self.highrise_base_url
44
+ Highrise::Base.user = self.highrise_token
45
+ Highrise::Base.format = :xml
46
+ end
47
+ end
19
48
  end
@@ -1,3 +1,3 @@
1
- module Highrise_wrapper
2
- VERSION = "0.0.2"
1
+ module HighriseWrapper
2
+ VERSION = "0.0.9"
3
3
  end
data/mytests.rb CHANGED
@@ -1,74 +1,214 @@
1
+
1
2
  require 'highrise'
3
+ require 'highrise_wrapper'
4
+
5
+ require 'virtus'
6
+ require 'simple_attribute_mapper'
2
7
 
8
+
9
+ ########### highrise setup
3
10
  Highrise::Base.site = 'https://personal1788.highrisehq.com'
4
11
  Highrise::Base.user = 'ee54dd83345c800c14b6fda0a650659e'
5
12
  Highrise::Base.format = :xml
6
13
 
7
14
  #@people = Highrise::Person.find_all_across_pages(:params => {:tag_id => 12345})
8
- @people = Highrise::Person.find_all_across_pages
15
+ #@people = Highrise::Person.find_all_across_pages
9
16
 
10
17
  # [#<Highrise::Person:0x9db1d80 @attributes={"author_id"=>1018065, "background"=>nil, "company_id"=>nil, "created_at"=>2014-03-17 22:11:22 UTC, "first_name"=>"A", "group_id"=>nil, "id"=>201374388, "last_name"=>"A", "owner_id"=>nil, "title"=>nil, "updated_at"=>2014-03-17 22:11:22 UTC, "visible_to"=>"Everyone", "company_name"=>nil, "linkedin_url"=>nil, "avatar_url"=>"http://dge9rmgqjs8m1.cloudfront.net/highrise/missing/avatar.gif?r=3", "contact_data"=>#<Highrise::Person::ContactData:0x9db0a98 @attributes={"instant_messengers"=>[], "twitter_accounts"=>[], "email_addresses"=>[], "phone_numbers"=>[], "addresses"=>[], "web_addresses"=>[]}, @prefix_options={}, @persisted=true>, "subject_datas"=>[#<Highrise::Person::SubjectData:0x9dafc88 @attributes={"id"=>118062439, "subject_field_id"=>878834, "subject_field_label"=>"Customer ID", "value"=>"A"}, @prefix_options={}, @persisted=true>]}, @prefix_options={}, @persisted=true>]
11
18
 
12
19
 
20
+ ########### conversion tests
21
+ ###################### contact
13
22
  class Contact
14
- attr_accessor :name, :last_name, :email, :company, :job_title, :phone, :website
23
+ include HighriseWrapper::ActiveRecord
24
+ include Virtus.model
25
+
26
+ attribute :name, String
27
+ attribute :last_name, String
28
+ attribute :company_name, String
29
+ attribute :job_title, String
30
+ attribute :phone, String
31
+ attribute :website, String
32
+ attribute :email, String
33
+
34
+ def initialize attributes
35
+ attributes.each { |k, v| instance_variable_set("@#{k}", v) }
36
+ end
37
+ end
38
+
39
+ c = Contact.new({
40
+ :email => "ha@hihi.com",
41
+ :name => "Astolfo",
42
+ :last_name => "Aguiar",
43
+ :company_name => "AspasCorp",
44
+ :job_title => "Auxiliar",
45
+ :phone => "",
46
+ :website => ""})
47
+
48
+ puts 'the contact'
49
+ puts c.as_json
50
+ puts
51
+
52
+ ###################### mapping v1
53
+ class Person
54
+ attr_accessor :test_name, :test_last_name
55
+
56
+ def initialize site, user, attributes
57
+ @site = site
58
+ @user = user
59
+ attributes.each { |k, v| instance_variable_set("@test_#{k}", v) }
60
+ end
61
+ end
62
+
63
+ p = Person.new "site", "user", c.as_json
64
+ puts 'the person'
65
+ puts p.as_json
66
+ puts
67
+
68
+ ###################### mapping v2
69
+ class PersonMapper
70
+ include Virtus.model
71
+
72
+ attribute :first_name, String
73
+ attribute :last_name, String
74
+ attribute :title, String
75
+ attribute :company_name, String
76
+ attribute :avatar_url, String
77
+ attribute :email, String
78
+ attribute :home_phone, String
79
+ end
80
+
81
+ mapper = SimpleAttributeMapper::Mapper.new({
82
+ :name => :first_name,
83
+ :job_title => :title,
84
+ :phone => :home_phone
85
+ })
15
86
 
16
- def initialize site, user, attributes
17
- @site = site
18
- @user = user
19
- attributes.each { |k, v| instance_variable_set("@#{k}", v) }
20
- end
87
+ p2 = mapper.map(c, PersonMapper)
88
+ puts 'the person (mapped)'
89
+ puts p2.as_json
90
+ puts
21
91
 
22
- def save
23
- end
92
+ ###################### mapping v3
93
+
94
+ hmapper = SimpleAttributeMapper::Mapper.new({
95
+ :name => :first_name,
96
+ })
97
+
98
+ hp = hmapper.map(c, Highrise::Person)
99
+ puts 'the highrise person (mapped directly)'
100
+ puts hp.as_json
101
+ puts
102
+
103
+ ###################### mapping v4
104
+
105
+ hp2 = Highrise::Person.new(p2.attributes)
106
+ puts 'the highrise person (mapped with person mapper)'
107
+ puts hp2.as_json
108
+ puts
109
+
110
+ ###################### mapping v5
111
+
112
+ class ContactDataMapper
113
+ include Virtus.model
114
+
115
+ attribute :email_addresses, Array
116
+ attribute :phone_numbers, Array
117
+ attribute :web_addresses, Array
118
+ end
119
+
120
+ class PersonMapper2
121
+ include Virtus.model
122
+
123
+ attribute :first_name, String
124
+ attribute :last_name, String
125
+ attribute :title, String
126
+ attribute :company_name, String
127
+ attribute :avatar_url, String
128
+ attribute :email, String
129
+ attribute :contact_data, ContactDataMapper
130
+ end
131
+
132
+ SimpleAttributeMapper.from(c).to(PersonMapper2).with({
133
+ :name => :first_name,
134
+ :job_title => :title,
135
+ })
136
+
137
+
138
+ ###################### mapping v6
139
+
140
+ def highrise_hash(contact)
141
+ {
142
+ 'first_name' => contact.name,
143
+ 'last_name' => contact.last_name,
144
+ 'title' => contact.job_title,
145
+ 'company_name' => contact.company_name,
146
+ 'contact_data' => {
147
+ 'email_addresses' => [{
148
+ 'address' => contact.email,
149
+ 'location' => 'Work'
150
+ }],
151
+ 'phone_numbers' => [{
152
+ 'number' => contact.phone,
153
+ 'location' => 'Work'
154
+ }],
155
+ 'web_addresses' => [{
156
+ 'location' => 'Work',
157
+ 'url' => contact.website
158
+ }]
159
+ }
160
+ }
24
161
  end
25
162
 
26
- #c = Contact.new "site", "user", {name: "fernando"}
27
- #puts c.name
28
- puts @people.to_json
163
+ hp3 = Highrise::Person.new(highrise_hash(c))
164
+ puts 'the highrise person (mapped with hash)'
165
+ puts hp3.as_json
166
+ puts
167
+
29
168
 
169
+ #puts @people.to_json
30
170
  =begin
31
171
  {
32
- "author_id":1018065,
33
- "background":null,
34
- "company_id":202863650,
35
- "created_at":"2014-03-17T22:11:22Z",
36
- "first_name":"Roberto",
37
- "group_id":null,
38
- "id":201374388,
39
- "last_name":"Lobo",
40
- "owner_id":null,
41
- "title":"Project Manager",
42
- "updated_at":"2014-03-29T20:40:56Z",
43
- "visible_to":"Everyone",
44
- "company_name":"Empresa",
45
- "linkedin_url":null,
46
- "avatar_url":"http://dge9rmgqjs8m1.cloudfront.net/highrise/missing/avatar.gif?r=3",
47
- "contact_data": {
48
- "instant_messengers":[],
49
- "twitter_accounts":[],
50
- "email_addresses":[{
51
- "address":"rhlobo+highrise@gmail.com",
52
- "id":103683105,
53
- "location":"Home"
54
- }],
55
- "phone_numbers":[{
56
- "id":164635766,
57
- "location":"Work",
58
- "number":"84442234"
59
- }],
60
- "addresses":[],
61
- "web_addresses":[{
62
- "id":164635767,
63
- "location":"Work",
64
- "url":"http://how.i.drycode.it"
65
- }]
66
- },
67
- "subject_datas":[{
68
- "id":118062439,
69
- "subject_field_id":878834,
70
- "subject_field_label":"Customer ID",
71
- "value":"ID"
72
- }]
172
+ "author_id":1018065,
173
+ "background":null,
174
+ "company_id":202863650,
175
+ "created_at":"2014-03-17T22:11:22Z",
176
+ "first_name":"Roberto",
177
+ "group_id":null,
178
+ "id":201374388,
179
+ "last_name":"Lobo",
180
+ "owner_id":null,
181
+ "title":"Project Manager",
182
+ "updated_at":"2014-03-29T20:40:56Z",
183
+ "visible_to":"Everyone",
184
+ "company_name":"Empresa",
185
+ "linkedin_url":null,
186
+ "avatar_url":"http://dge9rmgqjs8m1.cloudfront.net/highrise/missing/avatar.gif?r=3",
187
+ "contact_data": {
188
+ "instant_messengers":[],
189
+ "twitter_accounts":[],
190
+ "email_addresses":[{
191
+ "address":"rhlobo+highrise@gmail.com",
192
+ "id":103683105,
193
+ "location":"Home"
194
+ }],
195
+ "phone_numbers":[{
196
+ "id":164635766,
197
+ "location":"Work",
198
+ "number":"84442234"
199
+ }],
200
+ "addresses":[],
201
+ "web_addresses":[{
202
+ "id":164635767,
203
+ "location":"Work",
204
+ "url":"http://how.i.drycode.it"
205
+ }]
206
+ },
207
+ "subject_datas":[{
208
+ "id":118062439,
209
+ "subject_field_id":878834,
210
+ "subject_field_label":"Customer ID",
211
+ "value":"ID"
212
+ }]
73
213
  }
74
214
  =end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: highrise_wrapper
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - rhlobo
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-03-30 00:00:00.000000000 Z
11
+ date: 2014-04-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -28,28 +28,28 @@ dependencies:
28
28
  name: rake
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ! '>='
31
+ - - ~>
32
32
  - !ruby/object:Gem::Version
33
33
  version: '0'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - ! '>='
38
+ - - ~>
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rspec
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - ! '>='
45
+ - - ~>
46
46
  - !ruby/object:Gem::Version
47
47
  version: '0'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - ! '>='
52
+ - - ~>
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
55
  - !ruby/object:Gem::Dependency
@@ -58,14 +58,14 @@ dependencies:
58
58
  requirements:
59
59
  - - ~>
60
60
  - !ruby/object:Gem::Version
61
- version: '3.1'
61
+ version: 3.1.0
62
62
  type: :runtime
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - ~>
67
67
  - !ruby/object:Gem::Version
68
- version: '3.1'
68
+ version: 3.1.0
69
69
  description: ! "Gem to provide easy usage of Highrise API.\n Built
70
70
  wrapping the highrise gem, it is a POC\n created by me in
71
71
  order to study rubys platform"