sourcescrub 0.0.2 → 0.0.3

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,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 107c70bcbc69c0b446ae0941bb148b73589cc8e1523d39e49a86db3747b6bf86
4
- data.tar.gz: 1d8f9cd07245567aca8a939a337e0c9b5382ac2f818a35f289b9e4743b2d3e56
3
+ metadata.gz: 545d2b8b334ea07bbe2685f9a3b6d272aac07d1bf844b5193cd8253359365ba6
4
+ data.tar.gz: 49b57da12028f5755a3339451eda02029f65e66b5adb594d2b097434d526fa5f
5
5
  SHA512:
6
- metadata.gz: 18acb6bd965321c23ff581d164bd155091675c3ba8ca1cf81d43a3e590477aa3c5c1cba0aaeaea17a5b077be811ce4474345ab75c513223e0845699718f5f829
7
- data.tar.gz: df208a12a4ec65fae1372f4969321c0bff6ce859013989810095301d0c2fbc0927719db4dedaebe8efeadbe3019eb3c89771aaebc42703f24300f114548dcb08
6
+ metadata.gz: 1d75bb44c81093c2d4ce1a757a5c83741c8b7f0699625cb7551d17fb87b4828aec2e7515ccfc1a771d38de96c78aaa88f7d860c7782c051dd5f4185f3247a0f5
7
+ data.tar.gz: 8d2bf71686def7d5743d537babfab8eba380584aa0654dd33f92cbaac424b6e559df15e352da1aaae5856404b39335165e25a689b366631ddb328443f3dcc83d
@@ -22,3 +22,6 @@ Metrics/MethodLength:
22
22
  # URISchemes: http, https
23
23
  Layout/LineLength:
24
24
  Max: 135
25
+
26
+ Metrics/BlockLength:
27
+ Max: 500
@@ -1,6 +1,20 @@
1
1
  # Change Log
2
2
 
3
- ## [0.0.1] - 2020-06-20
3
+ ## [0.0.3] - 2020-06-20
4
4
 
5
5
  - Implement API to request token by user certificate
6
- - Get company data by domain
6
+ - Get company data by domain - `client.company(ekohe.com)`
7
+ - Get company's relationship data by domain - `client.company(ekohe.com, {card_id: 'people'})`
8
+ - Retrieve request limit data from header
9
+
10
+ ```
11
+ # .date
12
+ # .content_type
13
+ # .server
14
+ # .content_length
15
+ # .request_context
16
+ # .strict_transport_security
17
+ # .x_ratelimit_limit
18
+ # .x_ratelimit_remaining
19
+ # .x_ratelimit_reset
20
+ ```
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- sourcescrub (0.0.1)
4
+ sourcescrub (0.0.3)
5
5
  faraday
6
6
  faraday_middleware
7
7
 
data/README.md CHANGED
@@ -4,6 +4,9 @@ Sourcescrub is a ruby wrapper based on Source Scrub API, Here is API documentati
4
4
 
5
5
  However, we need to request an access account from Sourcescrub.
6
6
 
7
+ [![Gem Version](https://badge.fury.io/rb/sourcescrub.svg)](https://badge.fury.io/rb/sourcescrub)
8
+ [![Build Status](https://travis-ci.org/ekohe/sourcescrub.svg?branch=master)](https://travis-ci.org/ekohe/sourcescrub)
9
+
7
10
  ## Installation
8
11
 
9
12
  Add this line to your application's Gemfile:
@@ -59,6 +62,7 @@ pry(main)> client.headers
59
62
  ```ruby
60
63
  <!-- Company -->
61
64
  response = client.companies('ekohe.com')
65
+ response = client.company_cards('ekohe.com', { card_id: 'sources' })
62
66
 
63
67
  <!-- Get the JSON response of Company -->
64
68
 
@@ -71,6 +75,27 @@ response.as_json
71
75
 
72
76
  ```ruby
73
77
  pry(main)> response = client.companies('ekohe.com')
78
+ pry(main)> #<Sourcescrub::Models::Company:0x00007fcd31bcd238
79
+ @city="Xinzhuang",
80
+ @companyType="Private",
81
+ @country="China",
82
+ @crunchbase=nil,
83
+ @currentEmployeeCount=41,
84
+ @currentEmployeeRange="11-50",
85
+ @currentJobOpenings=0,
86
+ @description=
87
+ "Ekohe, Ltd. is a cutting-edge web and mobile design and development agency. It specialize in digital strategy, innovative technology and user-centered design experiences from conceptualization to market launch.",
88
+ @domain="ekohe.com",
89
+ @facebook=nil,
90
+ @firmTags=[],
91
+ @foundingYear=2007,
92
+ @id="LZ281NVD",
93
+ @informalName="Ekohe",
94
+ @investors=nil,
95
+ @linkedIn="https://www.linkedin.com/company/ekohe",
96
+ @location="Xinzhuang, Shanghai Shi, China",
97
+ @name="Ekohe, Ltd.",
98
+ .....>
74
99
  pry(main)> response.name
75
100
  => "Ekohe, Ltd."
76
101
  pry(main)> response.domain
@@ -85,7 +110,7 @@ After checking out the repo, run `bin/setup` to install dependencies. Then, run
85
110
 
86
111
  ## Contributing
87
112
 
88
- Bug reports and pull requests are welcome on GitHub at https://github.com/[USERNAME]/sourcescrub. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [code of conduct](https://github.com/[USERNAME]/sourcescrub/blob/master/CODE_OF_CONDUCT.md).
113
+ Bug reports and pull requests are welcome on GitHub at https://github.com/ekohe/sourcescrub. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [code of conduct](https://github.com/ekohe/sourcescrub/blob/master/CODE_OF_CONDUCT.md).
89
114
 
90
115
 
91
116
  ## License
@@ -94,4 +119,4 @@ The gem is available as open source under the terms of the [MIT License](https:/
94
119
 
95
120
  ## Code of Conduct
96
121
 
97
- Everyone interacting in the Sourcescrub project's codebases, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct](https://github.com/[USERNAME]/sourcescrub/blob/master/CODE_OF_CONDUCT.md).
122
+ Everyone interacting in the Sourcescrub project's codebases, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct](https://github.com/ekohe/sourcescrub/blob/master/CODE_OF_CONDUCT.md).
@@ -5,7 +5,9 @@ require 'sourcescrub/version'
5
5
  require 'sourcescrub/account'
6
6
  require 'sourcescrub/client'
7
7
  require 'sourcescrub/models'
8
+ require 'sourcescrub/utils/veriables'
8
9
 
10
+ # Sourcescrub
9
11
  module Sourcescrub
10
12
  TOKEN_URL = 'https://identity.sourcescrub.com'
11
13
  TOKEN_URI = '/connect/token'
@@ -14,5 +16,6 @@ module Sourcescrub
14
16
  API_URI = 'https://api.sourcescrub.com/'
15
17
 
16
18
  class Error < StandardError; end
17
- # Your code goes here...
19
+
20
+ include Utils::Veriables
18
21
  end
@@ -21,7 +21,7 @@ module Sourcescrub
21
21
 
22
22
  def request_url
23
23
  [
24
- kclass_name::ENDPOINT,
24
+ Models::Company::ENDPOINT,
25
25
  @domain,
26
26
  @card_id
27
27
  ].compact.join('/')
@@ -17,16 +17,34 @@ module Sourcescrub
17
17
  { 'Authorization' => "Bearer #{@token}" }
18
18
  end
19
19
 
20
- def companies(domain, args = {})
20
+ def company(domain, args = {})
21
21
  api = companies_api(domain, args)
22
22
 
23
23
  api.sobject.parse_response get(api.request_url, api.args)
24
24
  end
25
25
 
26
+ def company_cards(domain, args = {})
27
+ api = companies_api(domain, args.merge(model_type: card_mappings[args[:card_id]]))
28
+
29
+ Models::CompanyItems.new.parse_response_items(domain, api.kclass_name, get(api.request_url, api.args))
30
+ end
31
+
26
32
  private
27
33
 
28
34
  def companies_api(domain, args)
29
- @companies_api || Apis::Companies.new(domain, args.merge(model_type: 'company'))
35
+ @companies_api || Apis::Companies.new(domain,
36
+ { model_type: 'company' }.merge(args))
37
+ end
38
+
39
+ def card_mappings
40
+ {
41
+ 'sources' => 'source',
42
+ 'people' => 'person',
43
+ 'financials' => 'financial',
44
+ 'investments' => 'investment',
45
+ 'employees' => 'employee',
46
+ 'tags' => 'tag'
47
+ }
30
48
  end
31
49
  end
32
50
  end
@@ -3,9 +3,11 @@
3
3
  module Sourcescrub
4
4
  # Models
5
5
  module Models
6
- autoload :Entity, 'sourcescrub/models/concerns/entity'
7
- autoload :Company, 'sourcescrub/models/company'
8
- autoload :Source, 'sourcescrub/models/source'
9
- autoload :Tag, 'sourcescrub/models/tag'
6
+ autoload :Entity, 'sourcescrub/models/concerns/entity'
7
+ autoload :Company, 'sourcescrub/models/company'
8
+ autoload :CompanyItems, 'sourcescrub/models/concerns/company_items'
9
+ autoload :Source, 'sourcescrub/models/source'
10
+ autoload :Tag, 'sourcescrub/models/tag'
11
+ autoload :Person, 'sourcescrub/models/person'
10
12
  end
11
13
  end
@@ -0,0 +1,56 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Sourcescrub
4
+ # Models
5
+ module Models
6
+ # Tag
7
+ class CompanyItems < Entity
8
+ attr_accessor :domain, :total, :items, :type
9
+
10
+ def parse_response_items(domain, kclass_name, response)
11
+ headers = response.dig('headers')
12
+ headers&.keys&.each do |attr_name|
13
+ self.class.send(:define_method, attr_name.gsub('-', '_').to_sym) do
14
+ headers[attr_name]
15
+ end
16
+ end
17
+
18
+ dynamic_define_method(self, 'domain', domain)
19
+ dynamic_define_method(self, 'type', kclass_name)
20
+ dynamic_define_method(self, 'total', response.dig(total_key))
21
+ dynamic_define_method(self, 'items', company_items(kclass_name, response.dig(items_key)))
22
+ self
23
+ end
24
+
25
+ private
26
+
27
+ def company_items(kclass_name, items)
28
+ items.each_with_object([]) do |item, results|
29
+ results << kclass_name.new.parse_response(item)
30
+ end
31
+ end
32
+
33
+ def total_key
34
+ case type_name
35
+ when 'Person'
36
+ 'totalPeople'
37
+ else
38
+ 'total'
39
+ end
40
+ end
41
+
42
+ def items_key
43
+ case type_name
44
+ when 'Person'
45
+ 'peopleAllocations'
46
+ else
47
+ 'items'
48
+ end
49
+ end
50
+
51
+ def type_name
52
+ type.name.split('::')[-1]
53
+ end
54
+ end
55
+ end
56
+ end
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Sourcescrub
4
+ # Models
5
+ module Models
6
+ # Employee
7
+ class Employee < Entity
8
+ ENDPOINT = 'employees'
9
+
10
+ def field_ids
11
+ %w[
12
+ count
13
+ date
14
+ ]
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Sourcescrub
4
+ # Models
5
+ module Models
6
+ # Financial
7
+ class Financial < Entity
8
+ ENDPOINT = 'financials'
9
+
10
+ def field_ids
11
+ %w[
12
+ year
13
+ revenue
14
+ growth
15
+ growthTimePeriod
16
+ ]
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Sourcescrub
4
+ # Models
5
+ module Models
6
+ # Investment
7
+ class Investment < Entity
8
+ ENDPOINT = 'investments'
9
+
10
+ def field_ids
11
+ %w[
12
+ amount
13
+ dateOfRaise
14
+ round
15
+ investors
16
+ valuation
17
+ ]
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Sourcescrub
4
+ # Models
5
+ module Models
6
+ # Person
7
+ class Person < Entity
8
+ ENDPOINT = 'people'
9
+
10
+ def field_ids
11
+ %w[
12
+ personId
13
+ firstName
14
+ firstName
15
+ lastName
16
+ linkedIn
17
+ startDate
18
+ endDate
19
+ email
20
+ emailConfirmed
21
+ title
22
+ role
23
+ ]
24
+ end
25
+ end
26
+ end
27
+ end
@@ -23,6 +23,9 @@ module Sourcescrub
23
23
  companyCount
24
24
  companiesCrmCount
25
25
  companiesTaggedCount
26
+ boothNumber
27
+ affiliation
28
+ rank
26
29
  ]
27
30
  end
28
31
  end
@@ -21,43 +21,48 @@ module Sourcescrub
21
21
  #
22
22
  #
23
23
  def get(uri, *args)
24
- response = Faraday.new(url: API_URI) do |faraday|
25
- faraday.headers = headers
26
- faraday.request :json
27
- faraday.response :json
28
- faraday.response :logger, ::Logger.new(STDOUT), bodies: true if debug_mode?
24
+ response = Faraday.new(
25
+ url: API_URI,
26
+ headers: headers,
27
+ request: {
28
+ timeout: 10,
29
+ open_timeout: 5
30
+ }
31
+ ) do |faraday|
32
+ faraday.response :json
33
+ faraday.response :logger, ::Logger.new(STDOUT), bodies: true if debug_mode?
29
34
  end.get(uri, *args)
30
35
 
31
- return response.body if response.status == 200
36
+ return response.body.merge('headers' => response.headers) if response.status == 200
32
37
 
33
38
  raise Error, response.body
34
39
  end
35
40
 
36
- def put(uri, args)
37
- response = Faraday.new(url: API_URI) do |faraday|
38
- faraday.headers = headers
39
- faraday.request :json
40
- faraday.response :json
41
- faraday.response :logger, ::Logger.new(STDOUT), bodies: true if debug_mode?
42
- end.put(uri, args)
41
+ # def put(uri, args)
42
+ # response = Faraday.new(url: API_URI) do |faraday|
43
+ # faraday.headers = headers
44
+ # faraday.request :json
45
+ # faraday.response :json
46
+ # faraday.response :logger, ::Logger.new(STDOUT), bodies: true if debug_mode?
47
+ # end.put(uri, args)
43
48
 
44
- return response.body if response.status == 200
49
+ # return response.body if response.status == 200
45
50
 
46
- raise Error, response.body
47
- end
51
+ # raise Error, response.body
52
+ # end
48
53
 
49
- def delete(uri, args)
50
- response = Faraday.new(url: API_URI) do |faraday|
51
- faraday.headers = headers
52
- faraday.request :json
53
- faraday.response :json
54
- faraday.response :logger, ::Logger.new(STDOUT), bodies: true if debug_mode?
55
- end.delete(uri, args)
54
+ # def delete(uri, args)
55
+ # response = Faraday.new(url: API_URI) do |faraday|
56
+ # faraday.headers = headers
57
+ # faraday.request :json
58
+ # faraday.response :json
59
+ # faraday.response :logger, ::Logger.new(STDOUT), bodies: true if debug_mode?
60
+ # end.delete(uri, args)
56
61
 
57
- return response.body if response.status == 200
62
+ # return response.body if response.status == 200
58
63
 
59
- raise Error, response.body
60
- end
64
+ # raise Error, response.body
65
+ # end
61
66
 
62
67
  # Authentication Token
63
68
  #
@@ -73,18 +78,19 @@ module Sourcescrub
73
78
  def authenticate
74
79
  body = "grant_type=password&username=#{Sourcescrub.account.username}&password=#{Sourcescrub.account.password}&scope=client_api"
75
80
 
76
- response = Faraday.new(url: TOKEN_URL) do |faraday|
77
- faraday.headers = {
81
+ response = Faraday.new(
82
+ url: TOKEN_URL,
83
+ headers: {
78
84
  'Content-Type' => 'application/x-www-form-urlencoded',
79
85
  'Authorization' => Sourcescrub.account.basic
80
86
  }
81
- faraday.adapter Faraday.default_adapter
82
- faraday.request :json
83
- faraday.response :json
87
+ ) do |faraday|
88
+ faraday.adapter Faraday.default_adapter
89
+ faraday.response :json
84
90
  faraday.response :logger, ::Logger.new(STDOUT), bodies: true if debug_mode?
85
91
  end.post(TOKEN_URI, body)
86
92
 
87
- raise 'Apptopia error: Service Unavailable' unless response.status == 200
93
+ raise 'Sourcescrub error: Service Unavailable' unless response.status == 200
88
94
 
89
95
  @token = response.body['access_token']
90
96
  end
@@ -8,6 +8,25 @@ module Sourcescrub
8
8
  module_function
9
9
 
10
10
  def dynamic_attributes(object, attribute_names, response)
11
+ # Retrieve request limit data from header
12
+ #
13
+ # .date
14
+ # .content_type
15
+ # .server
16
+ # .content_length
17
+ # .request_context
18
+ # .strict_transport_security
19
+ # .x_ratelimit_limit
20
+ # .x_ratelimit_remaining
21
+ # .x_ratelimit_reset
22
+ headers = response.dig('headers')
23
+ headers&.keys&.each do |attr_name|
24
+ object.class.send(:define_method, attr_name.gsub('-', '_').to_sym) do
25
+ headers[attr_name]
26
+ end
27
+ end
28
+
29
+ # Setup attributes
11
30
  attribute_names.each do |attr_name|
12
31
  attr_value = response.dig(attr_name)
13
32
 
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Sourcescrub
4
+ # Utils
5
+ module Utils
6
+ # Veriables
7
+ module Veriables
8
+ # Description of operators
9
+ PEOPLE_ROLES = {
10
+ 'founder' => 'Founder',
11
+ 'employee' => 'Employee',
12
+ 'board_member' => 'Board Member',
13
+ 'advisor' => 'Advisor'
14
+ }.freeze
15
+ end
16
+ end
17
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Sourcescrub
4
- VERSION = '0.0.2'
4
+ VERSION = '0.0.3'
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sourcescrub
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Encore Shao
@@ -121,12 +121,18 @@ files:
121
121
  - lib/sourcescrub/client.rb
122
122
  - lib/sourcescrub/models.rb
123
123
  - lib/sourcescrub/models/company.rb
124
+ - lib/sourcescrub/models/concerns/company_items.rb
124
125
  - lib/sourcescrub/models/concerns/entity.rb
126
+ - lib/sourcescrub/models/employee.rb
127
+ - lib/sourcescrub/models/financial.rb
128
+ - lib/sourcescrub/models/investment.rb
129
+ - lib/sourcescrub/models/person.rb
125
130
  - lib/sourcescrub/models/source.rb
126
131
  - lib/sourcescrub/models/tag.rb
127
132
  - lib/sourcescrub/utils/request.rb
128
133
  - lib/sourcescrub/utils/response.rb
129
134
  - lib/sourcescrub/utils/ss_model.rb
135
+ - lib/sourcescrub/utils/veriables.rb
130
136
  - lib/sourcescrub/version.rb
131
137
  - sourcescrub.gemspec
132
138
  homepage: https://github.com/ekohe/sourcescrub