apihub 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
  SHA1:
3
- metadata.gz: e2fea1e6fc0edcfddc46493756c86cb3bf655c58
4
- data.tar.gz: 1ac941bd3036128b03c33f11e6603abbe52c5c40
3
+ metadata.gz: d7fcd2e39fb3f5ab4c9b47a7a9d04da231f994ea
4
+ data.tar.gz: e1652e4f2d388b899629ff272948f7124ac77b36
5
5
  SHA512:
6
- metadata.gz: 72ff7541653d6f7cf5ee22436a5b9f597fcdc2ffe95a7a5cb439e54f014ab487e7cdd1ce3af8cf6664e3e861baece31427da4611145834f25d18d1add20c9fab
7
- data.tar.gz: f98cf398160db54dcf7375adbf7e7ef66931eb0f72798ef2471f5cefeb48e14a5e97eb0feb01480f7d3bcb3fddab71e76bc1b2afac02d2ab9e04ec249bcc55c5
6
+ metadata.gz: 4a5710248e6297795a27b5229c839443046ad598c50e649da888786759e54ed6c0dfeaebdbd056e7d0ca85498a22f16b1eda1581875866281bad17a4c3456045
7
+ data.tar.gz: 88738052c23d0804d0c49bb0a79366cd70e80d9ab8480b27999f0ce1763adf975357548ab261536326b9d10f63595b614e530dc3c1bf89cd79a33bf37f186e27
data/README.md CHANGED
@@ -20,7 +20,7 @@ Or install it yourself as:
20
20
 
21
21
  First authorize requests by setting the API key found on your [account's settings page](https://apihub.co/profile).
22
22
 
23
- APIHub.api_key = ENV['SOURCING_KEY']
23
+ APIHub.api_key = ENV['APIHUB_KEY']
24
24
 
25
25
  Then you can lookup people by email address:
26
26
 
@@ -4,8 +4,8 @@ require 'apihub/version'
4
4
  module APIHub
5
5
  def self.api_key=(value)
6
6
  Base.options Base.options.merge(
7
- :auth_type => :bearer,
8
- :password => value
7
+ auth_type: :bearer,
8
+ password: value
9
9
  )
10
10
  end
11
11
 
@@ -13,11 +13,9 @@ module APIHub
13
13
  self.api_key = value
14
14
  end
15
15
 
16
- class Base < Nestful::Resource
17
- endpoint 'https://api.apihub.co'
18
- options :format => :json
19
- end
20
-
21
- autoload :Person, 'apihub/person'
16
+ autoload :Base, 'apihub/base'
22
17
  autoload :Company, 'apihub/company'
18
+ autoload :Mash, 'apihub/mash'
19
+ autoload :Person, 'apihub/person'
20
+ autoload :Resource, 'apihub/resource'
23
21
  end
@@ -0,0 +1,6 @@
1
+ module APIHub
2
+ class Base < Resource
3
+ endpoint 'https://api.apihub.co'
4
+ options :format => :json
5
+ end
6
+ end
@@ -1,6 +1,6 @@
1
1
  module APIHub
2
2
  class Company < Base
3
- endpoint 'https://company.apihub.co'
3
+ endpoint 'https://company-stream.apihub.co'
4
4
  path '/v1/companies'
5
5
 
6
6
  def self.find(values, options = {})
@@ -21,11 +21,7 @@ module APIHub
21
21
  raise ArgumentError, 'Invalid values'
22
22
  end
23
23
 
24
- if response.status == 202
25
- self.new(pending: true)
26
- else
27
- self.new(response)
28
- end
24
+ self.new(response)
29
25
 
30
26
  rescue Nestful::ResourceNotFound
31
27
  end
@@ -0,0 +1,180 @@
1
+ module APIHub
2
+ class Mash < Hash
3
+ def self.new(value = nil, *args)
4
+ if value.respond_to?(:each) &&
5
+ !value.respond_to?(:each_pair)
6
+ value.map {|v| super(v) }
7
+ else
8
+ super
9
+ end
10
+ end
11
+
12
+ alias_method :to_s, :inspect
13
+
14
+ def initialize(source_hash = nil, default = nil, &blk)
15
+ deep_update(source_hash.to_hash) if source_hash
16
+ default ? super(default) : super(&blk)
17
+ end
18
+
19
+ class << self; alias [] new; end
20
+
21
+ def id #:nodoc:
22
+ self['id']
23
+ end
24
+
25
+ def type #:nodoc:
26
+ self['type']
27
+ end
28
+
29
+ alias_method :regular_reader, :[]
30
+ alias_method :regular_writer, :[]=
31
+
32
+ # Retrieves an attribute set in the Mash. Will convert
33
+ # any key passed in to a string before retrieving.
34
+ def custom_reader(key)
35
+ value = regular_reader(convert_key(key))
36
+ yield value if block_given?
37
+ value
38
+ end
39
+
40
+ # Sets an attribute in the Mash. Key will be converted to
41
+ # a string before it is set, and Hashes will be converted
42
+ # into Mashes for nesting purposes.
43
+ def custom_writer(key,value) #:nodoc:
44
+ regular_writer(convert_key(key), convert_value(value))
45
+ end
46
+
47
+ alias_method :[], :custom_reader
48
+ alias_method :[]=, :custom_writer
49
+
50
+ # This is the bang method reader, it will return a new Mash
51
+ # if there isn't a value already assigned to the key requested.
52
+ def initializing_reader(key)
53
+ ck = convert_key(key)
54
+ regular_writer(ck, self.class.new) unless key?(ck)
55
+ regular_reader(ck)
56
+ end
57
+
58
+ # This is the under bang method reader, it will return a temporary new Mash
59
+ # if there isn't a value already assigned to the key requested.
60
+ def underbang_reader(key)
61
+ ck = convert_key(key)
62
+ if key?(ck)
63
+ regular_reader(ck)
64
+ else
65
+ self.class.new
66
+ end
67
+ end
68
+
69
+ def fetch(key, *args)
70
+ super(convert_key(key), *args)
71
+ end
72
+
73
+ def delete(key)
74
+ super(convert_key(key))
75
+ end
76
+
77
+ alias_method :regular_dup, :dup
78
+ # Duplicates the current mash as a new mash.
79
+ def dup
80
+ self.class.new(self, self.default)
81
+ end
82
+
83
+ def key?(key)
84
+ super(convert_key(key))
85
+ end
86
+ alias_method :has_key?, :key?
87
+ alias_method :include?, :key?
88
+ alias_method :member?, :key?
89
+
90
+ # Performs a deep_update on a duplicate of the
91
+ # current mash.
92
+ def deep_merge(other_hash, &blk)
93
+ dup.deep_update(other_hash, &blk)
94
+ end
95
+ alias_method :merge, :deep_merge
96
+
97
+ # Recursively merges this mash with the passed
98
+ # in hash, merging each hash in the hierarchy.
99
+ def deep_update(other_hash, &blk)
100
+ other_hash.each_pair do |k,v|
101
+ key = convert_key(k)
102
+ if regular_reader(key).is_a?(Mash) and v.is_a?(::Hash)
103
+ custom_reader(key).deep_update(v, &blk)
104
+ else
105
+ value = convert_value(v, true)
106
+ value = blk.call(key, self[k], value) if blk
107
+ custom_writer(key, value)
108
+ end
109
+ end
110
+ self
111
+ end
112
+ alias_method :deep_merge!, :deep_update
113
+ alias_method :update, :deep_update
114
+ alias_method :merge!, :update
115
+
116
+ # Performs a shallow_update on a duplicate of the current mash
117
+ def shallow_merge(other_hash)
118
+ dup.shallow_update(other_hash)
119
+ end
120
+
121
+ # Merges (non-recursively) the hash from the argument,
122
+ # changing the receiving hash
123
+ def shallow_update(other_hash)
124
+ other_hash.each_pair do |k,v|
125
+ regular_writer(convert_key(k), convert_value(v, true))
126
+ end
127
+ self
128
+ end
129
+
130
+ def replace(other_hash)
131
+ (keys - other_hash.keys).each { |key| delete(key) }
132
+ other_hash.each { |key, value| self[key] = value }
133
+ self
134
+ end
135
+
136
+ # Will return true if the Mash has had a key
137
+ # set in addition to normal respond_to? functionality.
138
+ def respond_to?(method_name, include_private=false)
139
+ return true if key?(method_name) || method_name.to_s.slice(/[=?!_]\Z/)
140
+ super
141
+ end
142
+
143
+ def method_missing(method_name, *args, &blk)
144
+ return self.[](method_name, &blk) if key?(method_name)
145
+ match = method_name.to_s.match(/(.*?)([?=!_]?)$/)
146
+ case match[2]
147
+ when "="
148
+ self[match[1]] = args.first
149
+ when "?"
150
+ !!self[match[1]]
151
+ when "!"
152
+ initializing_reader(match[1])
153
+ when "_"
154
+ underbang_reader(match[1])
155
+ else
156
+ default(method_name, *args, &blk)
157
+ end
158
+ end
159
+
160
+ protected
161
+
162
+ def convert_key(key) #:nodoc:
163
+ key.to_s
164
+ end
165
+
166
+ def convert_value(val, duping=false) #:nodoc:
167
+ case val
168
+ when self.class
169
+ val.dup
170
+ when ::Hash
171
+ val = val.dup if duping
172
+ Mash.new(val)
173
+ when ::Array
174
+ val.map {|e| convert_value(e) }
175
+ else
176
+ val
177
+ end
178
+ end
179
+ end
180
+ end
@@ -1,6 +1,6 @@
1
1
  module APIHub
2
2
  class Person < Base
3
- endpoint 'https://person.apihub.co'
3
+ endpoint 'https://person-stream.apihub.co'
4
4
  path '/v1/people'
5
5
 
6
6
  def self.find(values, options = {})
@@ -27,11 +27,7 @@ module APIHub
27
27
  raise ArgumentError, 'Invalid values'
28
28
  end
29
29
 
30
- if response.status == 202
31
- self.new(pending: true)
32
- else
33
- self.new(response)
34
- end
30
+ self.new(response)
35
31
 
36
32
  rescue Nestful::ResourceNotFound
37
33
  end
@@ -0,0 +1,64 @@
1
+ module APIHub
2
+ class Resource < Mash
3
+ def self.endpoint(value = nil)
4
+ @endpoint = value if value
5
+ return @endpoint if @endpoint
6
+ superclass.respond_to?(:endpoint) ? superclass.endpoint : nil
7
+ end
8
+
9
+ def self.path(value = nil)
10
+ @path = value if value
11
+ return @path if @path
12
+ superclass.respond_to?(:path) ? superclass.path : nil
13
+ end
14
+
15
+ def self.options(value = nil)
16
+ @options = value if value
17
+ return @options if @options
18
+ superclass.respond_to?(:options) ? superclass.options : {}
19
+ end
20
+
21
+ class << self
22
+ alias_method :endpoint=, :endpoint
23
+ alias_method :path=, :path
24
+ alias_method :options=, :options
25
+ end
26
+
27
+ def self.url
28
+ URI.join(endpoint.to_s, path.to_s).to_s
29
+ end
30
+
31
+ def self.uri(*parts)
32
+ # If an absolute URI already
33
+ if (uri = parts.first) && uri.is_a?(URI)
34
+ return uri if uri.host
35
+ end
36
+
37
+ URI.parse(Nestful::Helpers.to_path(url, *parts))
38
+ end
39
+
40
+ def self.get(action = '', params = {}, options = {})
41
+ request(uri(action), options.merge(method: :get, params: params))
42
+ end
43
+
44
+ def self.put(action = '', params = {}, options = {})
45
+ request(uri(action), options.merge(method: :put, params: params))
46
+ end
47
+
48
+ def self.post(action = '', params = {}, options = {})
49
+ request(uri(action), options.merge(method: :post, params: params))
50
+ end
51
+
52
+ def self.delete(action = '', params = {}, options = {})
53
+ request(uri(action), options.merge(method: :delete, params: params))
54
+ end
55
+
56
+ def self.request(url, options = {})
57
+ options = Nestful::Helpers.deep_merge(self.options, options)
58
+
59
+ self.new Nestful::Request.new(
60
+ url, options
61
+ ).execute
62
+ end
63
+ end
64
+ end
@@ -1,3 +1,3 @@
1
1
  module APIHub
2
- VERSION = "0.0.2"
2
+ VERSION = "0.0.3"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: apihub
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
  - Alex MacCaw
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-06-13 00:00:00.000000000 Z
11
+ date: 2014-07-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -69,8 +69,11 @@ files:
69
69
  - bin/apihub
70
70
  - examples/email.rb
71
71
  - lib/apihub.rb
72
+ - lib/apihub/base.rb
72
73
  - lib/apihub/company.rb
74
+ - lib/apihub/mash.rb
73
75
  - lib/apihub/person.rb
76
+ - lib/apihub/resource.rb
74
77
  - lib/apihub/version.rb
75
78
  homepage: https://github.com/maccman/apihub-ruby
76
79
  licenses: