rawscsi 1.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +18 -0
- data/.travis.yml +13 -0
- data/Gemfile +5 -0
- data/LICENSE.txt +23 -0
- data/README.md +288 -0
- data/Rakefile +11 -0
- data/lib/rawscsi/base.rb +13 -0
- data/lib/rawscsi/index.rb +64 -0
- data/lib/rawscsi/index_helpers/connection.rb +23 -0
- data/lib/rawscsi/index_helpers/sdf_add.rb +47 -0
- data/lib/rawscsi/index_helpers/sdf_delete.rb +19 -0
- data/lib/rawscsi/query/compound.rb +114 -0
- data/lib/rawscsi/query/simple.rb +16 -0
- data/lib/rawscsi/search.rb +46 -0
- data/lib/rawscsi/search_helpers/results_active_record.rb +28 -0
- data/lib/rawscsi/search_helpers/results_hash.rb +14 -0
- data/lib/rawscsi/version.rb +3 -0
- data/lib/rawscsi.rb +46 -0
- data/rawscsi.gemspec +41 -0
- data/spec/fixtures/vcr/index_spec/delete.yml +38 -0
- data/spec/fixtures/vcr/index_spec/handle_batch_limit.yml +73 -0
- data/spec/fixtures/vcr/index_spec/upload_hash.yml +39 -0
- data/spec/fixtures/vcr/search_spec/and_diff_field.yml +32 -0
- data/spec/fixtures/vcr/search_spec/and_or_combo.yml +35 -0
- data/spec/fixtures/vcr/search_spec/and_same_field.yml +31 -0
- data/spec/fixtures/vcr/search_spec/date.yml +34 -0
- data/spec/fixtures/vcr/search_spec/disjunction.yml +44 -0
- data/spec/fixtures/vcr/search_spec/fields.yml +35 -0
- data/spec/fixtures/vcr/search_spec/limit_sort.yml +32 -0
- data/spec/fixtures/vcr/search_spec/no_result.yml +30 -0
- data/spec/fixtures/vcr/search_spec/numeric_range.yml +32 -0
- data/spec/fixtures/vcr/search_spec/simple_search.yml +153 -0
- data/spec/lib/rawscsi/index_helpers/connection_spec.rb +25 -0
- data/spec/lib/rawscsi/index_helpers/sdf_add_spec.rb +44 -0
- data/spec/lib/rawscsi/index_helpers/sdf_delete_spec.rb +11 -0
- data/spec/lib/rawscsi/index_spec.rb +62 -0
- data/spec/lib/rawscsi/query/compound_spec.rb +80 -0
- data/spec/lib/rawscsi/query/simple_spec.rb +11 -0
- data/spec/lib/rawscsi/search_spec.rb +170 -0
- data/spec/lib/rawscsi/version_spec.rb +8 -0
- data/spec/rawscsi_spec.rb +33 -0
- data/spec/spec_helper.rb +17 -0
- metadata +250 -0
@@ -0,0 +1,46 @@
|
|
1
|
+
require "httparty"
|
2
|
+
|
3
|
+
module Rawscsi
|
4
|
+
class Search < Base
|
5
|
+
def search(arg)
|
6
|
+
if arg.is_a?(String)
|
7
|
+
query = Rawscsi::Query::Simple.new(arg).build
|
8
|
+
elsif arg.is_a?(Hash)
|
9
|
+
query = Rawscsi::Query::Compound.new(arg).build
|
10
|
+
else
|
11
|
+
raise "Unknown argument type"
|
12
|
+
end
|
13
|
+
|
14
|
+
response = send_request_to_aws(query)
|
15
|
+
build_results(response)
|
16
|
+
end
|
17
|
+
|
18
|
+
private
|
19
|
+
def url(query)
|
20
|
+
[
|
21
|
+
"http://search-",
|
22
|
+
"#{config.domain_name}-",
|
23
|
+
"#{config.domain_id}.",
|
24
|
+
"#{config.region}.",
|
25
|
+
"cloudsearch.amazonaws.com/",
|
26
|
+
"#{config.api_version}/",
|
27
|
+
"search?",
|
28
|
+
query
|
29
|
+
].join
|
30
|
+
end
|
31
|
+
|
32
|
+
def send_request_to_aws(query)
|
33
|
+
url_query = url(query)
|
34
|
+
HTTParty.get(url_query)
|
35
|
+
end
|
36
|
+
|
37
|
+
def build_results(response)
|
38
|
+
if is_active_record
|
39
|
+
Rawscsi::SearchHelpers::ResultsActiveRecord.new(response, model).build
|
40
|
+
else
|
41
|
+
Rawscsi::SearchHelpers::ResultsHash.new(response).build
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
@@ -0,0 +1,28 @@
|
|
1
|
+
module Rawscsi
|
2
|
+
module SearchHelpers
|
3
|
+
class ResultsActiveRecord
|
4
|
+
def initialize(response, model)
|
5
|
+
@response = response
|
6
|
+
@model = model
|
7
|
+
end
|
8
|
+
|
9
|
+
def build
|
10
|
+
id_array = @response["hits"]["hit"].map {|h| h["id"].to_i }
|
11
|
+
return [] if id_array.empty?
|
12
|
+
results =
|
13
|
+
if ActiveRecord::VERSION::MAJOR > 2
|
14
|
+
klass.where(:id => id_array).to_a
|
15
|
+
else
|
16
|
+
klass.find_all_by_id(id_array)
|
17
|
+
end
|
18
|
+
results.index_by(&:id).slice(*id_array).values
|
19
|
+
end
|
20
|
+
|
21
|
+
private
|
22
|
+
def klass
|
23
|
+
@model.constantize
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
data/lib/rawscsi.rb
ADDED
@@ -0,0 +1,46 @@
|
|
1
|
+
$:.unshift(File.expand_path("../", __FILE__))
|
2
|
+
|
3
|
+
module Rawscsi
|
4
|
+
autoload :Version, 'rawscsi/version'
|
5
|
+
autoload :Base, 'rawscsi/base'
|
6
|
+
autoload :Search, 'rawscsi/search'
|
7
|
+
autoload :Index, 'rawscsi/index'
|
8
|
+
|
9
|
+
module Query
|
10
|
+
autoload :Simple, "rawscsi/query/simple"
|
11
|
+
autoload :Compound, "rawscsi/query/compound"
|
12
|
+
end
|
13
|
+
|
14
|
+
module SearchHelpers
|
15
|
+
autoload :ResultsHash, "rawscsi/search_helpers/results_hash"
|
16
|
+
autoload :ResultsActiveRecord, "rawscsi/search_helpers/results_active_record"
|
17
|
+
end
|
18
|
+
|
19
|
+
module IndexHelpers
|
20
|
+
autoload :Connection, "rawscsi/index_helpers/connection"
|
21
|
+
autoload :SdfDelete, "rawscsi/index_helpers/sdf_delete"
|
22
|
+
autoload :SdfAdd, "rawscsi/index_helpers/sdf_add"
|
23
|
+
end
|
24
|
+
|
25
|
+
@@registered_models = {}
|
26
|
+
|
27
|
+
class Configuration
|
28
|
+
attr_accessor :domain_name,
|
29
|
+
:domain_id,
|
30
|
+
:region,
|
31
|
+
:api_version,
|
32
|
+
:attributes,
|
33
|
+
:batch_size
|
34
|
+
end
|
35
|
+
|
36
|
+
def self.register(model)
|
37
|
+
config = Configuration.new
|
38
|
+
yield(config)
|
39
|
+
@@registered_models[model] = config
|
40
|
+
end
|
41
|
+
|
42
|
+
def self.registered_models
|
43
|
+
@@registered_models
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
data/rawscsi.gemspec
ADDED
@@ -0,0 +1,41 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'rawscsi/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = "rawscsi"
|
8
|
+
spec.version = Rawscsi::VERSION
|
9
|
+
spec.authors = ["Steven Li"]
|
10
|
+
spec.email = ["StevenJLi@gmail.com"]
|
11
|
+
spec.description = %q{Ruby Amazon Web Services Cloud Search Interface}
|
12
|
+
spec.summary = %q{Adds service objects to upload and search active record models with AWS Cloud Search }
|
13
|
+
spec.homepage = "https://github.com/stevenjl/rawscsi"
|
14
|
+
spec.license = "MIT"
|
15
|
+
|
16
|
+
spec.files = `git ls-files`.split($/)
|
17
|
+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
18
|
+
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
|
+
spec.require_paths = ["lib"]
|
20
|
+
|
21
|
+
spec.add_development_dependency "bundler", "~> 1.3"
|
22
|
+
spec.add_development_dependency "rake"
|
23
|
+
spec.add_development_dependency "rspec", "3.0"
|
24
|
+
spec.add_development_dependency "vcr"
|
25
|
+
spec.add_development_dependency "fakeweb"
|
26
|
+
spec.add_development_dependency "pry"
|
27
|
+
|
28
|
+
unless RUBY_VERSION == "1.8.7"
|
29
|
+
spec.add_development_dependency "activerecord", "> 2.0"
|
30
|
+
spec.add_dependency "httparty", "~> 0.11"
|
31
|
+
spec.add_dependency "faraday"
|
32
|
+
spec.add_dependency "faraday_middleware"
|
33
|
+
else
|
34
|
+
spec.add_development_dependency "activerecord", "2.0"
|
35
|
+
spec.add_dependency "httparty", "0.8"
|
36
|
+
spec.add_dependency "faraday", "=0.8.7"
|
37
|
+
spec.add_dependency "faraday_middleware", ">= 0.8.0"
|
38
|
+
spec.add_dependency "json"
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|