sentimeta 0.0.8 → 0.1.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/Gemfile +0 -2
- data/lib/sentimeta/client/auth.rb +20 -0
- data/lib/sentimeta/client/data.rb +27 -0
- data/lib/sentimeta/client/prices.rb +12 -0
- data/lib/sentimeta/client.rb +3 -56
- data/lib/sentimeta/error/unreachable.rb +4 -1
- data/lib/sentimeta/init.rb +38 -0
- data/lib/sentimeta/logger.rb +3 -0
- data/lib/sentimeta/railtie.rb +13 -0
- data/lib/sentimeta/rest_client.rb +78 -0
- data/lib/sentimeta/version.rb +1 -1
- data/lib/sentimeta.rb +15 -38
- data/sentimeta.gemspec +7 -4
- metadata +33 -13
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b5ba96801f47ae4acb68c1b51368f60d5c0aeb4d
|
4
|
+
data.tar.gz: f6594b49b90b2bcb7529b5e38ec66cbc1bbe07e4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c1870bb4c69c251b3f6cf7bf39a96cea36c15749bb016072fb0a41cb7d3095a3c96615f8f080ebf721f638d4fb0970a85334f05b80898fe48a15e5195238113a
|
7
|
+
data.tar.gz: fc182ccfa23c1f65612a38c2b797627490d382df701e9f8fd401a077cfb1ecbcf6625d0e9a7abad992565a0e3d84eef28066c89c591f62bad3d2d25f75e102c8
|
data/Gemfile
CHANGED
@@ -0,0 +1,20 @@
|
|
1
|
+
module Sentimeta::Client::Auth
|
2
|
+
extend self
|
3
|
+
extend Sentimeta::RestClient
|
4
|
+
|
5
|
+
def namespace
|
6
|
+
:auth
|
7
|
+
end
|
8
|
+
|
9
|
+
def user token
|
10
|
+
get :users, id: token
|
11
|
+
end
|
12
|
+
|
13
|
+
def signup attrs
|
14
|
+
post :users, user: attrs
|
15
|
+
end
|
16
|
+
|
17
|
+
def signin attrs
|
18
|
+
post :sessions, user: attrs
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
module Sentimeta::Client::Data
|
2
|
+
extend self
|
3
|
+
extend Sentimeta::RestClient
|
4
|
+
|
5
|
+
%i(criteria spheres objects catalog).each do |endpoint|
|
6
|
+
define_method endpoint do |options={}|
|
7
|
+
get(endpoint, options)[endpoint.to_s]
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
def attributes options={}
|
12
|
+
get(:attributes, options)['values']
|
13
|
+
end
|
14
|
+
|
15
|
+
##
|
16
|
+
# Usage:
|
17
|
+
# search text: 'pitt' [, where: 'actors' ]
|
18
|
+
def search options={}
|
19
|
+
result = get :search, options
|
20
|
+
if options.has_key? :where
|
21
|
+
result[options[:where]]
|
22
|
+
else
|
23
|
+
result
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
data/lib/sentimeta/client.rb
CHANGED
@@ -1,57 +1,4 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
module Sentimeta
|
6
|
-
module Client
|
7
|
-
|
8
|
-
class << self
|
9
|
-
%i(criteria spheres objects catalog).each do |endpoint|
|
10
|
-
define_method endpoint do |options={}|
|
11
|
-
Sentimeta::Client.fetch(endpoint, options)[endpoint.to_s]
|
12
|
-
end
|
13
|
-
end
|
14
|
-
|
15
|
-
def attributes options={}
|
16
|
-
fetch(:attributes, options)['values']
|
17
|
-
end
|
18
|
-
|
19
|
-
def prices options={}
|
20
|
-
fetch :prices, options
|
21
|
-
end
|
22
|
-
|
23
|
-
def fetch endpoint, options={}
|
24
|
-
options = options.keep_if { |key, value| !!value }
|
25
|
-
send_request generate_uri endpoint, options
|
26
|
-
end
|
27
|
-
|
28
|
-
def generate_uri endpoint, options={}
|
29
|
-
url = [].tap do |components|
|
30
|
-
components << Sentimeta.endpoint
|
31
|
-
components << (options.delete(:sphere) || Sentimeta.sphere) unless endpoint == :spheres
|
32
|
-
components << endpoint
|
33
|
-
components << options.delete(:filter) if endpoint == :attributes
|
34
|
-
components << options.delete(:provider) if endpoint == :prices
|
35
|
-
components << options.delete(:id)
|
36
|
-
end.compact.join('/')
|
37
|
-
|
38
|
-
uri = URI.parse url
|
39
|
-
# uri.query = URI.encode_www_form(p: options.reverse_merge(lang: Sentimeta.lang).to_json)
|
40
|
-
uri.query = URI.encode_www_form(p: options.merge(lang: Sentimeta.lang).to_json)
|
41
|
-
uri
|
42
|
-
end
|
43
|
-
|
44
|
-
def send_request uri
|
45
|
-
Sentimeta.logger.debug " #{ 'Sentimeta:'.green } #{ URI.unescape uri.to_s }"
|
46
|
-
Observers.each { |observer| observer.notify "fetch", URI.unescape(uri.to_s) }
|
47
|
-
begin
|
48
|
-
JSON.parse(uri.open.read)
|
49
|
-
rescue
|
50
|
-
raise Sentimeta::Error::Unreachable
|
51
|
-
end
|
52
|
-
end
|
53
|
-
|
54
|
-
end
|
55
|
-
|
56
|
-
end
|
1
|
+
module Sentimeta::Client
|
2
|
+
extend Sentimeta::RestClient
|
3
|
+
extend Sentimeta::Client::Data
|
57
4
|
end
|
@@ -2,8 +2,11 @@ module Sentimeta
|
|
2
2
|
module Error
|
3
3
|
class Unreachable < StandardError
|
4
4
|
|
5
|
-
|
5
|
+
attr_reader :response
|
6
|
+
|
7
|
+
def initialize msg="Error requesting Sentimeta API", response=nil
|
6
8
|
super msg
|
9
|
+
@response = response
|
7
10
|
end
|
8
11
|
|
9
12
|
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
require 'yaml'
|
2
|
+
|
3
|
+
|
4
|
+
module Sentimeta
|
5
|
+
class << self
|
6
|
+
|
7
|
+
attr_accessor :env, :sphere
|
8
|
+
attr_writer :endpoint, :lang, :logger
|
9
|
+
|
10
|
+
def endpoint
|
11
|
+
@endpoint ||= begin
|
12
|
+
config_path = File.join(File.dirname(File.expand_path(__FILE__)), '../../config/endpoint.yml')
|
13
|
+
config = YAML.load_file(config_path)[env.to_s]
|
14
|
+
config['url']
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
def lang
|
19
|
+
if defined?(::I18n) and ::I18n.respond_to?(:locale)
|
20
|
+
self.lang = I18n.locale
|
21
|
+
end
|
22
|
+
@lang || :en
|
23
|
+
end
|
24
|
+
|
25
|
+
def init options
|
26
|
+
options.each do |option, value|
|
27
|
+
public_send("#{ option }=", value) if respond_to?("#{ option }=")
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
def logger
|
32
|
+
@logger ||= Logger.new STDOUT
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
self.env = DEFAULT_ENV
|
37
|
+
|
38
|
+
end
|
data/lib/sentimeta/logger.rb
CHANGED
@@ -0,0 +1,13 @@
|
|
1
|
+
module Sentimeta
|
2
|
+
class Railtie < Rails::Railtie
|
3
|
+
|
4
|
+
config.sentimeta = ActiveSupport::OrderedOptions.new
|
5
|
+
config.sentimeta.env = Sentimeta::DEFAULT_ENV
|
6
|
+
config.sentimeta.observers = Sentimeta::Observers
|
7
|
+
|
8
|
+
initializer "sentimeta.env" do |app|
|
9
|
+
Sentimeta.env = app.config.sentimeta.env
|
10
|
+
end
|
11
|
+
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,78 @@
|
|
1
|
+
require 'json'
|
2
|
+
require "colorize"
|
3
|
+
require "rest_client"
|
4
|
+
|
5
|
+
|
6
|
+
module Sentimeta
|
7
|
+
module RestClient
|
8
|
+
require "sentimeta/error/unreachable"
|
9
|
+
# require "sentimeta/error/record_not_found"
|
10
|
+
|
11
|
+
|
12
|
+
class ApiResponse
|
13
|
+
attr_accessor :status, :body
|
14
|
+
|
15
|
+
def initialize response
|
16
|
+
self.status = response.code
|
17
|
+
self.body = JSON.parse(response)
|
18
|
+
end
|
19
|
+
|
20
|
+
def ok?
|
21
|
+
status < 300
|
22
|
+
end
|
23
|
+
|
24
|
+
delegate :[], to: :body
|
25
|
+
end
|
26
|
+
|
27
|
+
|
28
|
+
def fetch path, params={}
|
29
|
+
method = params.delete(:method) || :get
|
30
|
+
params = params.keep_if { |key, value| !!value }
|
31
|
+
|
32
|
+
url = generate_uri path, params
|
33
|
+
url = "#{ url }?p=#{ params.to_json }" if method.to_sym == :get && params.present?
|
34
|
+
Sentimeta.logger.debug " #{ 'Sentimeta:'.colorize :green } #{ method.upcase } #{ url } #{ params.to_json if params.present? && method.to_sym != :get }"
|
35
|
+
Observers.each { |observer| observer.notify "fetch", "#{ method.upcase } #{ url } #{ params.to_json if params.present? }" }
|
36
|
+
|
37
|
+
response = begin
|
38
|
+
::RestClient::Request.execute \
|
39
|
+
method: method,
|
40
|
+
url: URI::encode(url),
|
41
|
+
payload: params,
|
42
|
+
headers: { 'X-SERVER-ACCESS-TOKEN' => 'c916b1e13b30764b39d47475e1cef4ee' }, # TODO define a property
|
43
|
+
accept: :json
|
44
|
+
rescue ::RestClient::Exception => e
|
45
|
+
Sentimeta.logger.error " #{ 'Sentimeta:'.colorize :red } #{ e.message } / #{ e.response }"
|
46
|
+
return ApiResponse.new e.response
|
47
|
+
rescue
|
48
|
+
raise Unreachable.new e.message, ApiResponse.new(e.response)
|
49
|
+
end
|
50
|
+
ApiResponse.new response
|
51
|
+
end
|
52
|
+
|
53
|
+
def method_missing method, *args
|
54
|
+
if %i(get post put patch delete options).include?(method)
|
55
|
+
path, params = args
|
56
|
+
fetch path, (params || {}).merge(method: method)
|
57
|
+
else
|
58
|
+
Sentimeta.logger.fatal "Unknown method #{ method }(#{ method.class.name })" # TODO remove
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
|
63
|
+
private
|
64
|
+
|
65
|
+
def generate_uri endpoint, options={}
|
66
|
+
[].tap do |components|
|
67
|
+
components << Sentimeta.endpoint
|
68
|
+
components << (options.delete(:sphere) || Sentimeta.sphere) unless endpoint == :spheres
|
69
|
+
components << namespace if respond_to?(:namespace)
|
70
|
+
components << endpoint
|
71
|
+
components << options.delete(:filter) if endpoint == :attributes # TODO remove
|
72
|
+
components << options.delete(:provider) if endpoint == :prices # TODO remove
|
73
|
+
components << options.delete(:id)
|
74
|
+
end.compact.join('/')
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
end
|
data/lib/sentimeta/version.rb
CHANGED
data/lib/sentimeta.rb
CHANGED
@@ -1,40 +1,17 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
require "sentimeta/version"
|
4
|
-
require "sentimeta/client"
|
5
|
-
require "sentimeta/observers"
|
6
|
-
require "sentimeta/model"
|
7
|
-
require "sentimeta/logger"
|
8
|
-
require "sentimeta/error/unreachable"
|
9
|
-
require "sentimeta/error/record_not_found"
|
10
|
-
|
11
|
-
require 'logger'
|
12
|
-
require 'yaml'
|
13
|
-
|
14
|
-
class << self
|
15
|
-
attr_accessor :env, :sphere
|
16
|
-
attr_writer :endpoint, :lang
|
17
|
-
|
18
|
-
def endpoint
|
19
|
-
@endpoint ||= begin
|
20
|
-
config_path = File.join(File.dirname(File.expand_path(__FILE__)), '../config/endpoint.yml')
|
21
|
-
config = YAML.load_file(config_path)[env.to_s]
|
22
|
-
config['url']
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
|
-
def lang
|
27
|
-
if defined?(::I18n) and ::I18n.respond_to?(:locale)
|
28
|
-
self.lang = I18n.locale
|
29
|
-
end
|
30
|
-
@lang || :en
|
31
|
-
end
|
32
|
-
|
33
|
-
def logger
|
34
|
-
@logger ||= Logger.new STDOUT
|
35
|
-
end
|
36
|
-
end
|
37
|
-
|
38
|
-
self.env = :production
|
1
|
+
require "sentimeta/version"
|
39
2
|
|
3
|
+
module Sentimeta
|
4
|
+
DEFAULT_ENV = :production
|
5
|
+
module Client end
|
40
6
|
end
|
7
|
+
|
8
|
+
require "sentimeta/rest_client"
|
9
|
+
require "sentimeta/client/data"
|
10
|
+
require "sentimeta/client/prices"
|
11
|
+
require "sentimeta/client/auth"
|
12
|
+
require "sentimeta/client"
|
13
|
+
require "sentimeta/observers"
|
14
|
+
require "sentimeta/model"
|
15
|
+
require "sentimeta/logger"
|
16
|
+
require "sentimeta/railtie" if defined? Rails
|
17
|
+
require "sentimeta/init"
|
data/sentimeta.gemspec
CHANGED
@@ -8,11 +8,14 @@ Gem::Specification.new do |s|
|
|
8
8
|
s.summary = "Sentimeta API client"
|
9
9
|
s.authors = ["Artem Shpakov"]
|
10
10
|
s.email = 'artyom.shpakov@sentimeta.com'
|
11
|
-
s.homepage = ""
|
11
|
+
s.homepage = "http://toprater.com"
|
12
12
|
s.license = "MIT"
|
13
13
|
s.files = `git ls-files`.split("\n")
|
14
|
-
|
15
|
-
s.
|
16
|
-
s.
|
14
|
+
|
15
|
+
s.add_runtime_dependency "colorize", "~> 0.7"
|
16
|
+
s.add_runtime_dependency "rest-client", "~> 1.7"
|
17
|
+
|
18
|
+
s.add_development_dependency "rake", "~> 10.4"
|
19
|
+
s.add_development_dependency "rspec", "~> 3.1"
|
17
20
|
s.add_development_dependency "fakeweb", "~> 1.3"
|
18
21
|
end
|
metadata
CHANGED
@@ -1,57 +1,71 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sentimeta
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Artem Shpakov
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2015-01-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
-
name:
|
14
|
+
name: colorize
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '
|
20
|
-
type: :
|
19
|
+
version: '0.7'
|
20
|
+
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '
|
26
|
+
version: '0.7'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rest-client
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '1.7'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '1.7'
|
27
41
|
- !ruby/object:Gem::Dependency
|
28
42
|
name: rake
|
29
43
|
requirement: !ruby/object:Gem::Requirement
|
30
44
|
requirements:
|
31
|
-
- - "
|
45
|
+
- - "~>"
|
32
46
|
- !ruby/object:Gem::Version
|
33
|
-
version: '
|
47
|
+
version: '10.4'
|
34
48
|
type: :development
|
35
49
|
prerelease: false
|
36
50
|
version_requirements: !ruby/object:Gem::Requirement
|
37
51
|
requirements:
|
38
|
-
- - "
|
52
|
+
- - "~>"
|
39
53
|
- !ruby/object:Gem::Version
|
40
|
-
version: '
|
54
|
+
version: '10.4'
|
41
55
|
- !ruby/object:Gem::Dependency
|
42
56
|
name: rspec
|
43
57
|
requirement: !ruby/object:Gem::Requirement
|
44
58
|
requirements:
|
45
59
|
- - "~>"
|
46
60
|
- !ruby/object:Gem::Version
|
47
|
-
version: 3.1
|
61
|
+
version: '3.1'
|
48
62
|
type: :development
|
49
63
|
prerelease: false
|
50
64
|
version_requirements: !ruby/object:Gem::Requirement
|
51
65
|
requirements:
|
52
66
|
- - "~>"
|
53
67
|
- !ruby/object:Gem::Version
|
54
|
-
version: 3.1
|
68
|
+
version: '3.1'
|
55
69
|
- !ruby/object:Gem::Dependency
|
56
70
|
name: fakeweb
|
57
71
|
requirement: !ruby/object:Gem::Requirement
|
@@ -81,17 +95,23 @@ files:
|
|
81
95
|
- config/endpoint.yml
|
82
96
|
- lib/sentimeta.rb
|
83
97
|
- lib/sentimeta/client.rb
|
98
|
+
- lib/sentimeta/client/auth.rb
|
99
|
+
- lib/sentimeta/client/data.rb
|
100
|
+
- lib/sentimeta/client/prices.rb
|
84
101
|
- lib/sentimeta/error/record_not_found.rb
|
85
102
|
- lib/sentimeta/error/unreachable.rb
|
103
|
+
- lib/sentimeta/init.rb
|
86
104
|
- lib/sentimeta/logger.rb
|
87
105
|
- lib/sentimeta/model.rb
|
88
106
|
- lib/sentimeta/observers.rb
|
107
|
+
- lib/sentimeta/railtie.rb
|
108
|
+
- lib/sentimeta/rest_client.rb
|
89
109
|
- lib/sentimeta/version.rb
|
90
110
|
- sentimeta.gemspec
|
91
111
|
- spec/client_spec.rb
|
92
112
|
- spec/model_spec.rb
|
93
113
|
- spec/spec_helper.rb
|
94
|
-
homepage:
|
114
|
+
homepage: http://toprater.com
|
95
115
|
licenses:
|
96
116
|
- MIT
|
97
117
|
metadata: {}
|