simply_suggest 0.1.1
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 +7 -0
- data/.gitignore +23 -0
- data/CHANGELOG.md +5 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +22 -0
- data/README.md +47 -0
- data/Rakefile +8 -0
- data/lib/simply_suggest/api_request.rb +81 -0
- data/lib/simply_suggest/configuration.rb +47 -0
- data/lib/simply_suggest/controller_helper.rb +45 -0
- data/lib/simply_suggest/error.rb +5 -0
- data/lib/simply_suggest/request.rb +51 -0
- data/lib/simply_suggest/version.rb +3 -0
- data/lib/simply_suggest/view_helper.rb +49 -0
- data/lib/simply_suggest.rb +18 -0
- data/simply_suggest.gemspec +27 -0
- data/spec/request_spec.rb +47 -0
- data/spec/spec_helper.rb +8 -0
- metadata +151 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 57a9ee50d1b1ef3aaee9e99d59c987064134ff1d
|
4
|
+
data.tar.gz: 68122da2a464064c89b189cc7e940ecd3bb9be5f
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 7ac137b635018f9bfc7d7bf5d6439e9b858a2701719f9d074e7c0682a2f17420d7166ae43c2ace486edebc7590488e80fcc5d69963dd100c499487475343b88f
|
7
|
+
data.tar.gz: a78ef3bef11be6d3f0ab02d123d376b00cb1417d971ff52edd89094d8014d5e4224be88bf35b95d93e44f290ac8729b64bd54ee1aa4794986a702a347838d650
|
data/.gitignore
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
*.gem
|
2
|
+
*.rbc
|
3
|
+
.bundle
|
4
|
+
.config
|
5
|
+
.yardoc
|
6
|
+
Gemfile.lock
|
7
|
+
InstalledFiles
|
8
|
+
_yardoc
|
9
|
+
coverage
|
10
|
+
doc/
|
11
|
+
lib/bundler/man
|
12
|
+
pkg
|
13
|
+
rdoc
|
14
|
+
spec/reports
|
15
|
+
test/tmp
|
16
|
+
test/version_tmp
|
17
|
+
tmp
|
18
|
+
*.bundle
|
19
|
+
*.so
|
20
|
+
*.o
|
21
|
+
*.a
|
22
|
+
mkmf.log
|
23
|
+
.rvmrc
|
data/CHANGELOG.md
ADDED
data/Gemfile
ADDED
data/LICENSE.txt
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
Copyright (c) 2014 Nils Berenbold
|
2
|
+
|
3
|
+
MIT License
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
6
|
+
a copy of this software and associated documentation files (the
|
7
|
+
"Software"), to deal in the Software without restriction, including
|
8
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
9
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
10
|
+
permit persons to whom the Software is furnished to do so, subject to
|
11
|
+
the following conditions:
|
12
|
+
|
13
|
+
The above copyright notice and this permission notice shall be
|
14
|
+
included in all copies or substantial portions of the Software.
|
15
|
+
|
16
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
17
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
18
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
19
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
20
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
21
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
22
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,47 @@
|
|
1
|
+
# BotDetection
|
2
|
+
|
3
|
+
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
|
4
|
+
|
5
|
+
## Installation
|
6
|
+
|
7
|
+
Add this line to your application's Gemfile:
|
8
|
+
|
9
|
+
gem 'simply_suggest'
|
10
|
+
|
11
|
+
And then execute:
|
12
|
+
|
13
|
+
$ bundle
|
14
|
+
|
15
|
+
Or install it yourself as:
|
16
|
+
|
17
|
+
$ gem install simply_suggest
|
18
|
+
|
19
|
+
## Changes
|
20
|
+
|
21
|
+
See the [CHANGELOG.md](CHANGELOG.md) file for details.
|
22
|
+
|
23
|
+
## Usage
|
24
|
+
|
25
|
+
After installing the GEM you can use within your controllers or helpers the following methods
|
26
|
+
|
27
|
+
# this will return an array of object ids which are related to this object
|
28
|
+
recommendations_for object
|
29
|
+
|
30
|
+
# this will return an hash of data which are recommended for the user
|
31
|
+
user_recommendations user_id
|
32
|
+
|
33
|
+
### JavaScript-Implementation
|
34
|
+
|
35
|
+
# to use the javascript tracking methods you need to add this line to your <head> or footer
|
36
|
+
<%= simply_suggest_script %>
|
37
|
+
|
38
|
+
# then within the footer you can call this function to get the javascript calls
|
39
|
+
<%= get_tracking_code user_id: unique_user_id, object_id: unique_object_id, object_type: object_type, event: "" %>
|
40
|
+
|
41
|
+
## Contributing
|
42
|
+
|
43
|
+
1. Fork it ( https://github.com/SimplySuggest/simply_suggest_ruby.git/fork )
|
44
|
+
2. Create your feature branch (`git checkout -b my-new-feature`)
|
45
|
+
3. Commit your changes (`git commit -am 'Add some feature'`)
|
46
|
+
4. Push to the branch (`git push origin my-new-feature`)
|
47
|
+
5. Create a new Pull Request
|
data/Rakefile
ADDED
@@ -0,0 +1,81 @@
|
|
1
|
+
module SimplySuggest
|
2
|
+
class ApiRequest
|
3
|
+
def get url, params = {}, headers = {}
|
4
|
+
begin
|
5
|
+
response = rest_client.get do |request|
|
6
|
+
configure_request(url, request: request, params: params, headers: headers)
|
7
|
+
end
|
8
|
+
parse_response(response.body)
|
9
|
+
rescue => e
|
10
|
+
handle_error(e)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
protected
|
15
|
+
def configure_request(url, request: nil, params: nil, headers: nil, body: nil)
|
16
|
+
if request
|
17
|
+
request.url "/#{url}.json"
|
18
|
+
request.params.merge!(params) if params
|
19
|
+
request.headers['Content-Type'] = 'application/json'
|
20
|
+
request.headers.merge!(headers) if headers
|
21
|
+
request.body = body if body
|
22
|
+
request.options.timeout = SimplySuggest.config.timeout
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
def rest_client
|
27
|
+
con = Faraday.new(url: SimplySuggest.config.api_domain) do |faraday|
|
28
|
+
faraday.response :raise_error
|
29
|
+
faraday.adapter Faraday.default_adapter
|
30
|
+
end
|
31
|
+
con.params[:secretKey] = SimplySuggest.config.secret_key
|
32
|
+
|
33
|
+
con
|
34
|
+
end
|
35
|
+
|
36
|
+
def parse_response(response_body)
|
37
|
+
parsed_response = nil
|
38
|
+
|
39
|
+
if response_body && !response_body.empty?
|
40
|
+
begin
|
41
|
+
parsed_response = MultiJson.load(response_body)
|
42
|
+
rescue MultiJson::ParseError
|
43
|
+
error = Error.new("Unparseable response: #{response_body}")
|
44
|
+
error.title = "UNPARSEABLE_RESPONSE"
|
45
|
+
error.status_code = 500
|
46
|
+
raise error
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
parsed_response.delete("pages") if parsed_response["pages"].present?
|
51
|
+
|
52
|
+
parsed_response
|
53
|
+
end
|
54
|
+
|
55
|
+
def handle_error(error)
|
56
|
+
error_to_raise = nil
|
57
|
+
|
58
|
+
begin
|
59
|
+
error_to_raise = Error.new(error.message)
|
60
|
+
|
61
|
+
if error.is_a?(Faraday::ClientError) && error.response
|
62
|
+
parsed_response = MultiJson.load(error.response[:body]) rescue nil
|
63
|
+
|
64
|
+
if parsed_response
|
65
|
+
error_to_raise.body = parsed_response
|
66
|
+
error_to_raise.title = parsed_response["title"] if parsed_response["title"]
|
67
|
+
error_to_raise.detail = parsed_response["detail"] if parsed_response["detail"]
|
68
|
+
end
|
69
|
+
|
70
|
+
error_to_raise.status_code = error.response[:status]
|
71
|
+
error_to_raise.raw_body = error.response[:body]
|
72
|
+
end
|
73
|
+
rescue MultiJson::ParseError
|
74
|
+
error_to_raise.message = error.message
|
75
|
+
error_to_raise.status_code = error.response[:status]
|
76
|
+
end
|
77
|
+
|
78
|
+
raise error_to_raise
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
module SimplySuggest
|
2
|
+
class Configuration
|
3
|
+
# SimplySuggest publicKey
|
4
|
+
#
|
5
|
+
# default: nil
|
6
|
+
attr_accessor :public_key
|
7
|
+
|
8
|
+
# SimplySuggest secretKey
|
9
|
+
#
|
10
|
+
# default: nil
|
11
|
+
attr_accessor :secret_key
|
12
|
+
|
13
|
+
# Read Timeout
|
14
|
+
#
|
15
|
+
# default: 2
|
16
|
+
attr_accessor :timeout
|
17
|
+
|
18
|
+
# Api Version
|
19
|
+
#
|
20
|
+
# default: v1
|
21
|
+
attr_accessor :api_version
|
22
|
+
|
23
|
+
# Api Domain
|
24
|
+
#
|
25
|
+
# default: simply-suggest.com
|
26
|
+
attr_accessor :api_domain
|
27
|
+
|
28
|
+
def initialize
|
29
|
+
@secret_key = nil
|
30
|
+
@public_key = nil
|
31
|
+
@timeout = 2
|
32
|
+
@api_version = "v1"
|
33
|
+
@api_domain = "http://v1.simply-suggest.com"
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
class << self
|
38
|
+
def configure
|
39
|
+
@config ||= Configuration.new
|
40
|
+
yield @config
|
41
|
+
end
|
42
|
+
|
43
|
+
def config
|
44
|
+
@config ||= Configuration.new
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
module SimplySuggest
|
2
|
+
module ControllerHelper
|
3
|
+
extend ActiveSupport::Concern
|
4
|
+
|
5
|
+
# returns recommendations for the item
|
6
|
+
#
|
7
|
+
# item : object
|
8
|
+
# options : hash [optional]
|
9
|
+
#
|
10
|
+
def recommendations_for item, options = {}
|
11
|
+
limit = options.delete(:limit) || 10
|
12
|
+
page = options.delete(:page) || 1
|
13
|
+
klass = item.is_a?(Hash) ? item.delete(:class) : item.class.to_s.downcase
|
14
|
+
object_id = item.is_a?(Hash) ? item.delete(:object_id) : item.id
|
15
|
+
|
16
|
+
data = request_object.object_types.send(klass).object.recommendations.page(page).limit(limit).get(object_id)
|
17
|
+
return [] if data["record_predictions"].blank?
|
18
|
+
data["record_predictions"].map { |d| d["recommendation_id"] }
|
19
|
+
end
|
20
|
+
|
21
|
+
# returns recommendations for the user_id
|
22
|
+
#
|
23
|
+
# user_id : integer
|
24
|
+
# options : hash [optional]
|
25
|
+
#
|
26
|
+
def user_recommendations user_id, options = {}
|
27
|
+
object_type = options.delete(:object_type) || options.delete(:class)
|
28
|
+
limit = options.delete(:limit) || 10
|
29
|
+
page = options.delete(:page) || 1
|
30
|
+
|
31
|
+
if object_type.present?
|
32
|
+
data = request_object.user.send(object_type).recommendations.page(page).limit(limit).get(user_id)
|
33
|
+
else
|
34
|
+
data = request_object.user.recommendations.page(page).limit(limit).get(user_id)
|
35
|
+
end
|
36
|
+
return [] if data["user_predictions"].blank?
|
37
|
+
data["user_predictions"].map { |d| { type: d["object_type"], id: d["recommendation_id"] } }
|
38
|
+
end
|
39
|
+
|
40
|
+
protected
|
41
|
+
def request_object
|
42
|
+
@request_object ||= SimplySuggest::Request.new
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
module SimplySuggest
|
2
|
+
class Request
|
3
|
+
class << self
|
4
|
+
def method_missing(sym, *args, &block)
|
5
|
+
new.send(sym, *args, &block)
|
6
|
+
end
|
7
|
+
end
|
8
|
+
|
9
|
+
def initialize
|
10
|
+
@path_parts = []
|
11
|
+
@params = {}
|
12
|
+
end
|
13
|
+
|
14
|
+
def method_missing(method, *args)
|
15
|
+
@path_parts << method.to_s.downcase
|
16
|
+
@path_parts << args if args.length > 0
|
17
|
+
@path_parts.flatten!
|
18
|
+
self
|
19
|
+
end
|
20
|
+
|
21
|
+
def get *args
|
22
|
+
@path_parts += args.to_a
|
23
|
+
values = api_request.get(path, @params)
|
24
|
+
reset
|
25
|
+
values
|
26
|
+
end
|
27
|
+
|
28
|
+
def limit num
|
29
|
+
@params[:limit] = num
|
30
|
+
self
|
31
|
+
end
|
32
|
+
|
33
|
+
def page num
|
34
|
+
@params[:page] = num
|
35
|
+
self
|
36
|
+
end
|
37
|
+
|
38
|
+
def path
|
39
|
+
@path_parts.join('/')
|
40
|
+
end
|
41
|
+
|
42
|
+
def reset
|
43
|
+
@path_parts = []
|
44
|
+
end
|
45
|
+
|
46
|
+
protected
|
47
|
+
def api_request
|
48
|
+
@api_request ||= SimplySuggest::ApiRequest.new
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
module SimplySuggest
|
2
|
+
module ViewHelper
|
3
|
+
%w[view like dislike favorite buy basket].each do |action|
|
4
|
+
define_method "track_#{action}" do |item, user_id, options = {}|
|
5
|
+
options = options.merge(event: action, object_type: item.class.to_s.downcase, object_id: item.id, user_id: user_id)
|
6
|
+
get_tracking_code options
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
def simply_suggest_script
|
11
|
+
content_tag :script do
|
12
|
+
"(function() {
|
13
|
+
var po = document.createElement('script'); po.type = 'text/javascript'; po.async = true;
|
14
|
+
po.src = '//static.#{SimplySuggest.config.domain}/script/v2.js';
|
15
|
+
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(po, s);
|
16
|
+
})();".html_safe
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
def get_tracking_code options = {}
|
21
|
+
user_id = options.delete(:user_id)
|
22
|
+
object_id = options.delete(:object_id)
|
23
|
+
object_type = options.delete(:object_type)
|
24
|
+
event = options.delete(:event)
|
25
|
+
use_script = options[:script] == nil ? true : options[:script]
|
26
|
+
|
27
|
+
script = "
|
28
|
+
window.track_recommendation = window.track_recommendation || [];
|
29
|
+
window.track_recommendation.push({ event: \"setAccount\", value: \"#{SimplySuggest.config.public_key}\" });
|
30
|
+
window.track_recommendation.push({ event: \"#{event}\", object: \"#{object_id}\", type: \"#{object_type}\", user: \"#{user_id}\" });
|
31
|
+
".html_safe
|
32
|
+
|
33
|
+
return script unless use_script
|
34
|
+
content_tag :script, script
|
35
|
+
end
|
36
|
+
|
37
|
+
def track_recommendation_click source_id, destination_id, user_id, klass, options = {}
|
38
|
+
use_script = options[:script] == nil ? true : options[:script]
|
39
|
+
|
40
|
+
script = "
|
41
|
+
window.track_recommendation = window.track_recommendation || [];
|
42
|
+
window.track_recommendation.push({ event: \"trackClick\", type: \"#{klass}\", source: \"#{source_id}\", destination: \"#{destination_id}\", user: \"#{user_id}\" });
|
43
|
+
".html_safe
|
44
|
+
|
45
|
+
return script unless use_script
|
46
|
+
content_tag :script, script
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require 'action_controller'
|
2
|
+
require 'action_view'
|
3
|
+
require "faraday"
|
4
|
+
require "multi_json"
|
5
|
+
|
6
|
+
module SimplySuggest
|
7
|
+
end
|
8
|
+
|
9
|
+
require 'simply_suggest/version'
|
10
|
+
require 'simply_suggest/configuration'
|
11
|
+
require 'simply_suggest/request'
|
12
|
+
require 'simply_suggest/error'
|
13
|
+
require 'simply_suggest/api_request'
|
14
|
+
require 'simply_suggest/controller_helper'
|
15
|
+
require 'simply_suggest/view_helper'
|
16
|
+
|
17
|
+
ActionController::Base.send :include, SimplySuggest::ControllerHelper
|
18
|
+
ActionView::Base.send :include, SimplySuggest::ViewHelper
|
@@ -0,0 +1,27 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'simply_suggest/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = "simply_suggest"
|
8
|
+
spec.version = SimplySuggest::VERSION
|
9
|
+
spec.authors = ["Simply Suggest"]
|
10
|
+
spec.email = ["info@simply-suggest.com"]
|
11
|
+
spec.summary = %q{Api for www.simply-suggest.com here}
|
12
|
+
spec.homepage = "http://www.simply-suggest.com"
|
13
|
+
spec.license = "MIT"
|
14
|
+
|
15
|
+
spec.files = `git ls-files -z`.split("\x0")
|
16
|
+
spec.test_files = `git ls-files -- {spec}/*`.split("\n")
|
17
|
+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
18
|
+
spec.require_paths = ["lib"]
|
19
|
+
|
20
|
+
spec.add_dependency 'actionpack', '~> 3.0.0', '>= 3.0.0'
|
21
|
+
spec.add_dependency 'faraday', "~> 0.9"
|
22
|
+
spec.add_dependency 'multi_json', '~> 1.11'
|
23
|
+
|
24
|
+
spec.add_development_dependency "rspec", "~> 3.1"
|
25
|
+
spec.add_development_dependency "bundler", "~> 1.6"
|
26
|
+
spec.add_development_dependency "rake", '~> 0'
|
27
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
class TestController < ActionController::Base
|
4
|
+
def test1
|
5
|
+
@bot_detector = BotDetection::Detector.new(user_agent: BotDetection::BotUserAgents.first, remote_ip: "127.0.0.1")
|
6
|
+
end
|
7
|
+
|
8
|
+
def test2
|
9
|
+
@bot_detector = BotDetection::Detector.new(user_agent: "Googlebot/2.1 (+http://www.googlebot.com/bot.html)", remote_ip: "66.249.66.1")
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
describe "Api::Calls" do
|
14
|
+
before {
|
15
|
+
SimplySuggest.configure do |c|
|
16
|
+
c.secret_key = "secret-2"
|
17
|
+
c.public_key = "public-2"
|
18
|
+
c.api_domain = "http://v1.recommendation.dev"
|
19
|
+
end
|
20
|
+
}
|
21
|
+
|
22
|
+
context 'api calls' do
|
23
|
+
it 'check several api methods' do
|
24
|
+
expect(SimplySuggest::Request.object_types.get.length).to be > 0
|
25
|
+
expect(SimplySuggest::Request.object_types.limit(1).get.length).to be == 1
|
26
|
+
expect(SimplySuggest::Request.object_types.album.objects.get.length).to be > 0
|
27
|
+
expect(SimplySuggest::Request.object_types.album.object.recommendations.get(1026).length).to be > 0
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
context 'module' do
|
32
|
+
it 'should be mixed into ActionController::Base' do
|
33
|
+
expect(ActionController::Base.included_modules).to include(SimplySuggest::ControllerHelper)
|
34
|
+
end
|
35
|
+
|
36
|
+
it 'should test controller helpers with object recommendations' do
|
37
|
+
expect(TestController.new.recommendations_for(class: "album", object_id: 1026).length).to be > 0
|
38
|
+
expect { TestController.new.recommendations_for(class: "album", object_id: 54684) }.to raise_exception(SimplySuggest::Error)
|
39
|
+
end
|
40
|
+
|
41
|
+
it 'should test controller helpers with user recommendations' do
|
42
|
+
expect(TestController.new.user_recommendations("ffc0635b-e32b-4a3d-a5b6-2703e08bdc14").length).to be > 0
|
43
|
+
expect(TestController.new.user_recommendations("ffc0635b-e32b-4a3d-a5b6-2703e08bdc14", object_type: "series").length).to be > 0
|
44
|
+
expect(TestController.new.user_recommendations("ffc0635b-e32b-4a3d-a5b6-2703e08bdc14", object_type: "album").length).to be == 0
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
data/spec/spec_helper.rb
ADDED
metadata
ADDED
@@ -0,0 +1,151 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: simply_suggest
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Simply Suggest
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2015-10-19 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: actionpack
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 3.0.0
|
20
|
+
- - ">="
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: 3.0.0
|
23
|
+
type: :runtime
|
24
|
+
prerelease: false
|
25
|
+
version_requirements: !ruby/object:Gem::Requirement
|
26
|
+
requirements:
|
27
|
+
- - "~>"
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: 3.0.0
|
30
|
+
- - ">="
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: 3.0.0
|
33
|
+
- !ruby/object:Gem::Dependency
|
34
|
+
name: faraday
|
35
|
+
requirement: !ruby/object:Gem::Requirement
|
36
|
+
requirements:
|
37
|
+
- - "~>"
|
38
|
+
- !ruby/object:Gem::Version
|
39
|
+
version: '0.9'
|
40
|
+
type: :runtime
|
41
|
+
prerelease: false
|
42
|
+
version_requirements: !ruby/object:Gem::Requirement
|
43
|
+
requirements:
|
44
|
+
- - "~>"
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: '0.9'
|
47
|
+
- !ruby/object:Gem::Dependency
|
48
|
+
name: multi_json
|
49
|
+
requirement: !ruby/object:Gem::Requirement
|
50
|
+
requirements:
|
51
|
+
- - "~>"
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '1.11'
|
54
|
+
type: :runtime
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
requirements:
|
58
|
+
- - "~>"
|
59
|
+
- !ruby/object:Gem::Version
|
60
|
+
version: '1.11'
|
61
|
+
- !ruby/object:Gem::Dependency
|
62
|
+
name: rspec
|
63
|
+
requirement: !ruby/object:Gem::Requirement
|
64
|
+
requirements:
|
65
|
+
- - "~>"
|
66
|
+
- !ruby/object:Gem::Version
|
67
|
+
version: '3.1'
|
68
|
+
type: :development
|
69
|
+
prerelease: false
|
70
|
+
version_requirements: !ruby/object:Gem::Requirement
|
71
|
+
requirements:
|
72
|
+
- - "~>"
|
73
|
+
- !ruby/object:Gem::Version
|
74
|
+
version: '3.1'
|
75
|
+
- !ruby/object:Gem::Dependency
|
76
|
+
name: bundler
|
77
|
+
requirement: !ruby/object:Gem::Requirement
|
78
|
+
requirements:
|
79
|
+
- - "~>"
|
80
|
+
- !ruby/object:Gem::Version
|
81
|
+
version: '1.6'
|
82
|
+
type: :development
|
83
|
+
prerelease: false
|
84
|
+
version_requirements: !ruby/object:Gem::Requirement
|
85
|
+
requirements:
|
86
|
+
- - "~>"
|
87
|
+
- !ruby/object:Gem::Version
|
88
|
+
version: '1.6'
|
89
|
+
- !ruby/object:Gem::Dependency
|
90
|
+
name: rake
|
91
|
+
requirement: !ruby/object:Gem::Requirement
|
92
|
+
requirements:
|
93
|
+
- - "~>"
|
94
|
+
- !ruby/object:Gem::Version
|
95
|
+
version: '0'
|
96
|
+
type: :development
|
97
|
+
prerelease: false
|
98
|
+
version_requirements: !ruby/object:Gem::Requirement
|
99
|
+
requirements:
|
100
|
+
- - "~>"
|
101
|
+
- !ruby/object:Gem::Version
|
102
|
+
version: '0'
|
103
|
+
description:
|
104
|
+
email:
|
105
|
+
- info@simply-suggest.com
|
106
|
+
executables: []
|
107
|
+
extensions: []
|
108
|
+
extra_rdoc_files: []
|
109
|
+
files:
|
110
|
+
- ".gitignore"
|
111
|
+
- CHANGELOG.md
|
112
|
+
- Gemfile
|
113
|
+
- LICENSE.txt
|
114
|
+
- README.md
|
115
|
+
- Rakefile
|
116
|
+
- lib/simply_suggest.rb
|
117
|
+
- lib/simply_suggest/api_request.rb
|
118
|
+
- lib/simply_suggest/configuration.rb
|
119
|
+
- lib/simply_suggest/controller_helper.rb
|
120
|
+
- lib/simply_suggest/error.rb
|
121
|
+
- lib/simply_suggest/request.rb
|
122
|
+
- lib/simply_suggest/version.rb
|
123
|
+
- lib/simply_suggest/view_helper.rb
|
124
|
+
- simply_suggest.gemspec
|
125
|
+
- spec/request_spec.rb
|
126
|
+
- spec/spec_helper.rb
|
127
|
+
homepage: http://www.simply-suggest.com
|
128
|
+
licenses:
|
129
|
+
- MIT
|
130
|
+
metadata: {}
|
131
|
+
post_install_message:
|
132
|
+
rdoc_options: []
|
133
|
+
require_paths:
|
134
|
+
- lib
|
135
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
136
|
+
requirements:
|
137
|
+
- - ">="
|
138
|
+
- !ruby/object:Gem::Version
|
139
|
+
version: '0'
|
140
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
141
|
+
requirements:
|
142
|
+
- - ">="
|
143
|
+
- !ruby/object:Gem::Version
|
144
|
+
version: '0'
|
145
|
+
requirements: []
|
146
|
+
rubyforge_project:
|
147
|
+
rubygems_version: 2.4.6
|
148
|
+
signing_key:
|
149
|
+
specification_version: 4
|
150
|
+
summary: Api for www.simply-suggest.com here
|
151
|
+
test_files: []
|