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 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: {}