estated 0.2.0 → 0.3.0
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 +4 -4
- data/.env.sample +1 -0
- data/.gitignore +3 -0
- data/Gemfile.lock +6 -0
- data/README.md +15 -0
- data/estated.gemspec +2 -0
- data/lib/estated.rb +5 -0
- data/lib/estated/client.rb +29 -3
- data/lib/estated/config.rb +10 -1
- data/lib/estated/request_cache.rb +53 -0
- data/lib/estated/version.rb +1 -1
- metadata +32 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2bda40363bc8b3099785ae4cbae1c0f63b430e2d8356139b665719c1e71fb72d
|
4
|
+
data.tar.gz: cff05669b537733cf977ad1a7851ef97c7137f37654e331f421a95ea1c1475df
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: de9bb73bb6f5c6b73ab1ac32688723f78e789c8fa8160a7dbda8ae1f530db1e768f8becd4375029062c01cc1df6d65bbd76aad9b605305ee18a8ba9f75e5017c
|
7
|
+
data.tar.gz: fe0fe3715744ff12df6ae1723306041ecec07c6a1bb9ce7dec1189c171fb8cf17c9282433734b8d7575c0c9d448e9d6b6346b24939956405fd88e2a3a63266a6
|
data/.env.sample
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
ESTATED_API_KEY=
|
data/.gitignore
CHANGED
data/Gemfile.lock
CHANGED
@@ -3,16 +3,19 @@ PATH
|
|
3
3
|
specs:
|
4
4
|
estated (0.2.0)
|
5
5
|
httparty
|
6
|
+
mongo
|
6
7
|
|
7
8
|
GEM
|
8
9
|
remote: https://rubygems.org/
|
9
10
|
specs:
|
10
11
|
addressable (2.7.0)
|
11
12
|
public_suffix (>= 2.0.2, < 5.0)
|
13
|
+
bson (4.4.2)
|
12
14
|
byebug (11.0.1)
|
13
15
|
crack (0.4.3)
|
14
16
|
safe_yaml (~> 1.0.0)
|
15
17
|
diff-lcs (1.3)
|
18
|
+
dotenv (2.7.2)
|
16
19
|
hashdiff (0.4.0)
|
17
20
|
httparty (0.17.0)
|
18
21
|
mime-types (~> 3.0)
|
@@ -20,6 +23,8 @@ GEM
|
|
20
23
|
mime-types (3.2.2)
|
21
24
|
mime-types-data (~> 3.2015)
|
22
25
|
mime-types-data (3.2019.0331)
|
26
|
+
mongo (2.8.0)
|
27
|
+
bson (>= 4.4.2, < 5.0.0)
|
23
28
|
multi_xml (0.6.0)
|
24
29
|
public_suffix (4.0.1)
|
25
30
|
rake (12.3.3)
|
@@ -48,6 +53,7 @@ PLATFORMS
|
|
48
53
|
|
49
54
|
DEPENDENCIES
|
50
55
|
byebug
|
56
|
+
dotenv
|
51
57
|
estated!
|
52
58
|
rake (~> 12.0)
|
53
59
|
rspec (~> 3.0)
|
data/README.md
CHANGED
@@ -22,6 +22,8 @@ Or install it yourself as:
|
|
22
22
|
|
23
23
|
### Configuration
|
24
24
|
|
25
|
+
#### API key
|
26
|
+
|
25
27
|
```ruby
|
26
28
|
Estated.configure do |config|
|
27
29
|
config.api_key = 'YOUR_API_KEY'
|
@@ -32,6 +34,19 @@ The API key can also be set through the `ESTATED_API_KEY` environment variable.
|
|
32
34
|
|
33
35
|
In case the API key is set in the environment variable _and_ in the configuration block, the configuration will take precedence.
|
34
36
|
|
37
|
+
#### Request cache
|
38
|
+
|
39
|
+
<!-- TODO -->
|
40
|
+
```ruby
|
41
|
+
Estated.configure do |config|
|
42
|
+
config.mongo_client = ...
|
43
|
+
config.mongo_collection = ...
|
44
|
+
config.cache_ttl = ... # in seconds
|
45
|
+
end
|
46
|
+
|
47
|
+
Estated::RequestCache.setup
|
48
|
+
```
|
49
|
+
|
35
50
|
### Usage
|
36
51
|
|
37
52
|
For documentation on parameters, please check the [Estated API docs](https://estated.com/developers/docs/v4/property/overview) on how to retrieve properties.
|
data/estated.gemspec
CHANGED
@@ -27,8 +27,10 @@ Gem::Specification.new do |spec|
|
|
27
27
|
spec.require_paths = ["lib"]
|
28
28
|
|
29
29
|
spec.add_dependency "httparty"
|
30
|
+
spec.add_dependency "mongo"
|
30
31
|
|
31
32
|
spec.add_development_dependency "byebug"
|
33
|
+
spec.add_development_dependency "dotenv"
|
32
34
|
spec.add_development_dependency "vcr"
|
33
35
|
spec.add_development_dependency "webmock"
|
34
36
|
end
|
data/lib/estated.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
require 'estated/client'
|
2
2
|
require 'estated/config'
|
3
|
+
require 'estated/request_cache'
|
3
4
|
require 'estated/version'
|
4
5
|
|
5
6
|
module Estated
|
@@ -14,4 +15,8 @@ module Estated
|
|
14
15
|
def self.configure
|
15
16
|
yield(config)
|
16
17
|
end
|
18
|
+
|
19
|
+
def self.root
|
20
|
+
File.expand_path('../..', __FILE__)
|
21
|
+
end
|
17
22
|
end
|
data/lib/estated/client.rb
CHANGED
@@ -6,9 +6,35 @@ module Estated
|
|
6
6
|
|
7
7
|
base_uri 'https://apis.estated.com/v4'
|
8
8
|
|
9
|
-
def self.get_property(params)
|
10
|
-
|
11
|
-
|
9
|
+
def self.get_property(params, skip_cache: false)
|
10
|
+
with_cache('/property', params, skip_cache: skip_cache) do
|
11
|
+
query = params.merge(token: Estated.config.api_key)
|
12
|
+
response = self.get('/property', query: query)
|
13
|
+
|
14
|
+
if response.parsed_response.is_a?(Hash)
|
15
|
+
json = response.parsed_response
|
16
|
+
|
17
|
+
# Don't cache if there's no data
|
18
|
+
[json, !!json['data']]
|
19
|
+
else
|
20
|
+
[{ 'response' => response }, false]
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
def self.with_cache(path, params, skip_cache:)
|
26
|
+
if !skip_cache && Estated.config.cache_enabled?
|
27
|
+
json = RequestCache.read(path, params)
|
28
|
+
return json if json
|
29
|
+
end
|
30
|
+
|
31
|
+
result, result_is_cacheable = yield
|
32
|
+
|
33
|
+
if Estated.config.cache_enabled? && result_is_cacheable
|
34
|
+
RequestCache.write(path, params, result)
|
35
|
+
end
|
36
|
+
|
37
|
+
result
|
12
38
|
end
|
13
39
|
end
|
14
40
|
end
|
data/lib/estated/config.rb
CHANGED
@@ -1,9 +1,18 @@
|
|
1
1
|
module Estated
|
2
2
|
class Config
|
3
|
-
attr_writer :api_key
|
3
|
+
attr_writer :api_key, :cache_ttl
|
4
|
+
attr_accessor :mongo_client, :mongo_collection
|
5
|
+
|
6
|
+
def cache_ttl
|
7
|
+
@cache_ttl ||= 30 * 24 * 3600 # 30 days
|
8
|
+
end
|
4
9
|
|
5
10
|
def api_key
|
6
11
|
@api_key ||= ENV['ESTATED_API_KEY']
|
7
12
|
end
|
13
|
+
|
14
|
+
def cache_enabled?
|
15
|
+
!!mongo_client
|
16
|
+
end
|
8
17
|
end
|
9
18
|
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
require 'mongo'
|
2
|
+
|
3
|
+
module Estated
|
4
|
+
class RequestCache
|
5
|
+
class << self
|
6
|
+
def read(path, params)
|
7
|
+
document = cache_store.
|
8
|
+
find(cache_key: cache_key(path, params)).
|
9
|
+
limit(1).
|
10
|
+
first
|
11
|
+
|
12
|
+
document['payload'] if document
|
13
|
+
end
|
14
|
+
|
15
|
+
def write(path, params, payload)
|
16
|
+
cache_store.update_one(
|
17
|
+
{
|
18
|
+
cache_key: cache_key(path, params)
|
19
|
+
},
|
20
|
+
{
|
21
|
+
cache_key: cache_key(path, params),
|
22
|
+
payload: payload,
|
23
|
+
created_at: Time.now
|
24
|
+
},
|
25
|
+
upsert: true
|
26
|
+
)
|
27
|
+
true
|
28
|
+
end
|
29
|
+
|
30
|
+
def setup
|
31
|
+
cache_store.indexes.create_one({ cache_key: 1 }, unique: true)
|
32
|
+
cache_store.indexes.create_one(
|
33
|
+
{ created_at: 1 },
|
34
|
+
expire_after_seconds: Estated.config.cache_ttl)
|
35
|
+
end
|
36
|
+
|
37
|
+
private
|
38
|
+
|
39
|
+
def cache_store
|
40
|
+
Estated.config.mongo_client[Estated.config.mongo_collection]
|
41
|
+
end
|
42
|
+
|
43
|
+
def cache_key(path, params)
|
44
|
+
query = params.
|
45
|
+
sort_by { |k, _| k }.
|
46
|
+
map {|k, v| "#{k}=#{v}"}.
|
47
|
+
join('|')
|
48
|
+
|
49
|
+
"path=#{path}|" + query
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
data/lib/estated/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: estated
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Alex VKO
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: exe
|
12
12
|
cert_chain: []
|
13
|
-
date: 2020-03-
|
13
|
+
date: 2020-03-16 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: httparty
|
@@ -26,6 +26,20 @@ dependencies:
|
|
26
26
|
- - ">="
|
27
27
|
- !ruby/object:Gem::Version
|
28
28
|
version: '0'
|
29
|
+
- !ruby/object:Gem::Dependency
|
30
|
+
name: mongo
|
31
|
+
requirement: !ruby/object:Gem::Requirement
|
32
|
+
requirements:
|
33
|
+
- - ">="
|
34
|
+
- !ruby/object:Gem::Version
|
35
|
+
version: '0'
|
36
|
+
type: :runtime
|
37
|
+
prerelease: false
|
38
|
+
version_requirements: !ruby/object:Gem::Requirement
|
39
|
+
requirements:
|
40
|
+
- - ">="
|
41
|
+
- !ruby/object:Gem::Version
|
42
|
+
version: '0'
|
29
43
|
- !ruby/object:Gem::Dependency
|
30
44
|
name: byebug
|
31
45
|
requirement: !ruby/object:Gem::Requirement
|
@@ -40,6 +54,20 @@ dependencies:
|
|
40
54
|
- - ">="
|
41
55
|
- !ruby/object:Gem::Version
|
42
56
|
version: '0'
|
57
|
+
- !ruby/object:Gem::Dependency
|
58
|
+
name: dotenv
|
59
|
+
requirement: !ruby/object:Gem::Requirement
|
60
|
+
requirements:
|
61
|
+
- - ">="
|
62
|
+
- !ruby/object:Gem::Version
|
63
|
+
version: '0'
|
64
|
+
type: :development
|
65
|
+
prerelease: false
|
66
|
+
version_requirements: !ruby/object:Gem::Requirement
|
67
|
+
requirements:
|
68
|
+
- - ">="
|
69
|
+
- !ruby/object:Gem::Version
|
70
|
+
version: '0'
|
43
71
|
- !ruby/object:Gem::Dependency
|
44
72
|
name: vcr
|
45
73
|
requirement: !ruby/object:Gem::Requirement
|
@@ -75,6 +103,7 @@ executables: []
|
|
75
103
|
extensions: []
|
76
104
|
extra_rdoc_files: []
|
77
105
|
files:
|
106
|
+
- ".env.sample"
|
78
107
|
- ".gitignore"
|
79
108
|
- ".rspec"
|
80
109
|
- ".travis.yml"
|
@@ -89,6 +118,7 @@ files:
|
|
89
118
|
- lib/estated.rb
|
90
119
|
- lib/estated/client.rb
|
91
120
|
- lib/estated/config.rb
|
121
|
+
- lib/estated/request_cache.rb
|
92
122
|
- lib/estated/version.rb
|
93
123
|
homepage: https://github.com/navut/estated-ruby-client
|
94
124
|
licenses:
|