rawscsi 1.0.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 +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
|
+
|