sentimeta 0.0.8 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 20440216e3bbdcef072e45bd1797f18519fce7a7
4
- data.tar.gz: d2edb744b925eec679b135bc6bb2e9b1326bb15a
3
+ metadata.gz: b5ba96801f47ae4acb68c1b51368f60d5c0aeb4d
4
+ data.tar.gz: f6594b49b90b2bcb7529b5e38ec66cbc1bbe07e4
5
5
  SHA512:
6
- metadata.gz: bf6b9babb5432ae5e6090809eea86db628dcffde6c79b98d4b3a4840d0c9486ab2d82cd1f1460fd7ab98b8564e927aad3440ab96885ccd7709276517f0efb1b8
7
- data.tar.gz: c6b7ebcfd46d5a18695891d24e09da567fa0cb977b8d3f713e1e1f85c2b1e3109404c638eb2d70b800cc8336dadb7b80a4dbfe2150a09f5c7d3d9164b8139705
6
+ metadata.gz: c1870bb4c69c251b3f6cf7bf39a96cea36c15749bb016072fb0a41cb7d3095a3c96615f8f080ebf721f638d4fb0970a85334f05b80898fe48a15e5195238113a
7
+ data.tar.gz: fc182ccfa23c1f65612a38c2b797627490d382df701e9f8fd401a077cfb1ecbcf6625d0e9a7abad992565a0e3d84eef28066c89c591f62bad3d2d25f75e102c8
data/Gemfile CHANGED
@@ -1,4 +1,2 @@
1
1
  source "http://rubygems.org"
2
2
  gemspec
3
-
4
- gem 'colored'
@@ -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
@@ -0,0 +1,12 @@
1
+ module Sentimeta::Client::Prices
2
+ extend self
3
+ extend Sentimeta::RestClient
4
+
5
+ def namespace
6
+ :prices
7
+ end
8
+
9
+ def method_missing method, *args
10
+ get method, *args
11
+ end
12
+ end
@@ -1,57 +1,4 @@
1
- require 'open-uri'
2
- require 'json'
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
- def initialize msg = "Error requesting Sentimeta API"
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
@@ -1,3 +1,6 @@
1
+ require 'logger'
2
+
3
+
1
4
  module Sentimeta
2
5
 
3
6
  def logger
@@ -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
@@ -1,3 +1,3 @@
1
1
  module Sentimeta
2
- VERSION = "0.0.8"
2
+ VERSION = "0.1.0"
3
3
  end
data/lib/sentimeta.rb CHANGED
@@ -1,40 +1,17 @@
1
- module Sentimeta
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
- s.add_development_dependency "bundler", "~> 1.5"
15
- s.add_development_dependency "rake"
16
- s.add_development_dependency "rspec", "~> 3.1.0"
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.8
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: 2014-12-24 00:00:00.000000000 Z
11
+ date: 2015-01-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: bundler
14
+ name: colorize
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '1.5'
20
- type: :development
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: '1.5'
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: '0'
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: '0'
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.0
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.0
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: {}