nazrin 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 6d03528ffd79f464894276ab31d21064a1b5a520
4
+ data.tar.gz: 642b162721c1ce29d9dc0740f07561a68903d94c
5
+ SHA512:
6
+ metadata.gz: 4b63c8362a8abe722710d0457d0e05be037914b81815f1806cfef6fe81a218194ce983563fafa8cf57feb6809ef119b79b5905b9af3db71905f9810f41054d7e
7
+ data.tar.gz: c4d54360ba11ba6cb82491834781295cf9412967de7aa0f2a8d8fea17ca44e1a98851d3441355898231ca52b8089f81a90b8802821b527cfbc35ba255f8eef44
@@ -0,0 +1,9 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /Gemfile.lock
4
+ /_yardoc/
5
+ /coverage/
6
+ /doc/
7
+ /pkg/
8
+ /spec/reports/
9
+ /tmp/
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --format documentation
2
+ --color
@@ -0,0 +1,12 @@
1
+ Metrics/AbcSize:
2
+ Enabled: false
3
+ Metrics/LineLength:
4
+ Enabled: false
5
+ Metrics/MethodLength:
6
+ Enabled: false
7
+ Style/Documentation:
8
+ Enabled: false
9
+ Style/FileName:
10
+ Enabled: false
11
+ Style/RegexpLiteral:
12
+ Enabled: false
@@ -0,0 +1,4 @@
1
+ language: ruby
2
+ rvm:
3
+ - 2.2.3
4
+ before_install: gem install bundler -v 1.10.3
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in nazrin.gemspec
4
+ gemspec
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2015 Tomohiro Suwa
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in
13
+ all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ THE SOFTWARE.
@@ -0,0 +1,76 @@
1
+ # Nazrin
2
+ [![Build Status](https://travis-ci.org/tsuwatch/nazrin.svg?branch=master)](https://travis-ci.org/tsuwatch/nazrin)
3
+ [![Coverage Status](https://coveralls.io/repos/tsuwatch/nazrin/badge.svg?branch=readme&service=github)](https://coveralls.io/github/tsuwatch/nazrin?branch=readme)
4
+ [![Code Climate](https://codeclimate.com/github/tsuwatch/nazrin/badges/gpa.svg)](https://codeclimate.com/github/tsuwatch/nazrin)
5
+
6
+ Nazrin is a Ruby wrapper for Amazon CloudSearch, with optional ActiveRecord support for easy integration with your Rails application.
7
+
8
+ *Nazrin has the ability of the extent which find what you're looking for...*
9
+
10
+ ## Installation
11
+
12
+ Add this line to your application's Gemfile:
13
+
14
+ ```ruby
15
+ gem 'nazrin'
16
+ ```
17
+
18
+ And then execute:
19
+
20
+ $ bundle
21
+
22
+ Or install it yourself as:
23
+
24
+ $ gem install nazrin
25
+
26
+ ## Usage
27
+
28
+ ### in Ruby on Rails
29
+
30
+ ```ruby
31
+ $ bundle exec rails g nazrin:config
32
+
33
+ Nazrin.config do |config|
34
+ config.debug_mode = false
35
+ config.search_endpoint = ''
36
+ config.document_endpoint = ''
37
+ config.region = ''
38
+ config.access_key_id = ''
39
+ config.secret_access_key = ''
40
+ # currently support kaminari gem
41
+ config.pagination = 'kaminari'
42
+ end
43
+ ```
44
+
45
+ ```ruby
46
+ class Post
47
+ include Nazrin::ActiveRecord::Searchable
48
+
49
+ searchable do
50
+ fields [:content]
51
+ field(:created_at) { created_at.utc.iso8601 }
52
+ end
53
+
54
+ after_create :update_in_index
55
+ after_destroy :delete_from_index
56
+ end
57
+ ```
58
+
59
+ ```ruby
60
+ Post.search.size(1).start(0).query("(and 'content')").query_parser('structured').execute
61
+ => [#<Post id: 1, content: "content">]
62
+ ```
63
+
64
+ ## Development
65
+
66
+ After checking out the repo, run `bin/setup` to install dependencies. Then, run `bin/console` for an interactive prompt that will allow you to experiment.
67
+
68
+ To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release` to create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
69
+
70
+ ## Contributing
71
+
72
+ 1. Fork it ( https://github.com/[my-github-username]/nazrin/fork )
73
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
74
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
75
+ 4. Push to the branch (`git push origin my-new-feature`)
76
+ 5. Create a new Pull Request
@@ -0,0 +1,5 @@
1
+ require 'bundler/gem_tasks'
2
+ require 'rspec/core/rake_task'
3
+
4
+ RSpec::Core::RakeTask.new(:spec)
5
+ task default: :spec
@@ -0,0 +1,13 @@
1
+ module Nazrin
2
+ module Generators
3
+ class ConfigGenerator < Rails::Generators::Base
4
+ source_root File.expand_path(
5
+ File.join(File.dirname(__FILE__), 'templates'))
6
+ desc 'Generate config'
7
+
8
+ def config
9
+ template 'nazrin_config.rb', 'config/initializers/nazrin_config.rb'
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,10 @@
1
+ Nazrin.configure do |config|
2
+ config.debug_mode = false
3
+ config.search_endpoint = ''
4
+ config.document_endpoint = ''
5
+ config.region = ''
6
+ config.access_key_id = ''
7
+ config.secret_access_key = ''
8
+ # currently support kaminari
9
+ # config.pagination = 'kaminari'
10
+ end
@@ -0,0 +1,10 @@
1
+ module Nazrin
2
+ end
3
+
4
+ require 'nazrin/active_record/searchable'
5
+ require 'nazrin/active_record/data_accessor'
6
+ require 'nazrin/config'
7
+ require 'nazrin/search_client'
8
+ require 'nazrin/document_client'
9
+ require 'nazrin/paginated_array'
10
+ require 'nazrin/version'
@@ -0,0 +1,98 @@
1
+ module Nazrin
2
+ module ActiveRecord
3
+ class DataAccessor
4
+ MAX_LIMIT = 10_000
5
+
6
+ def initialize(model, options)
7
+ @model = model
8
+ @options = options
9
+ end
10
+
11
+ # a list of all matching AR model objects
12
+ def results(client)
13
+ @client = client
14
+
15
+ res = @client.search
16
+ collections = load_all(res.data.hits.hit.map(&:id))
17
+ if @client.parameters[:size] && @client.parameters[:start]
18
+ round_correct_page
19
+
20
+ Nazrin.paginated_array(
21
+ collections,
22
+ current_page: @current_page,
23
+ per_page: @client.parameters[:size],
24
+ total_count: res.data.hits.found,
25
+ last_page: @last_page)
26
+ else
27
+ collections
28
+ end
29
+ end
30
+
31
+ # load from activerecord
32
+ def load_all(ids)
33
+ records_table = {}
34
+ @options.each do |k, v|
35
+ @model = @model.send(k, v)
36
+ end
37
+ @model.where(id: ids).each do |record|
38
+ records_table[record.id] = record
39
+ end
40
+ ids.map do |id|
41
+ records_table.select { |k, _| k == id.to_i }[id.to_i]
42
+ end.reject(&:nil?)
43
+ end
44
+
45
+ private
46
+
47
+ def round_correct_page
48
+ res = search_for_set_correct_page
49
+ total_count = res.data.hits.found
50
+ if over_max_limit_request?
51
+ if total_count > MAX_LIMIT
52
+ @current_page = @last_page = get_last_page(MAX_LIMIT)
53
+ else
54
+ @current_page = @last_page = get_last_page(total_count)
55
+ end
56
+ @client.start(get_start_position(@current_page))
57
+ elsif res.data.hits.found > 0 && !res.data.hits.hit.present?
58
+ @current_page = @last_page = get_last_page(total_count)
59
+ @client.start(get_start_position(@current_page))
60
+ else
61
+ @current_page = (
62
+ @client.parameters[:start] / @client.parameters[:size].to_f
63
+ ).ceil + 1
64
+ @last_page = get_last_page(total_count)
65
+ end
66
+ end
67
+
68
+ def search_for_set_correct_page
69
+ if over_max_limit_request?
70
+ tmp_start = @client.parameters[:start]
71
+ res = @client.start(0).search
72
+ @client.start(tmp_start)
73
+ else
74
+ res = @client.search
75
+ end
76
+ res
77
+ end
78
+
79
+ def over_max_limit_request?
80
+ return false unless @client.parameters[:start].present?
81
+ return false unless @client.parameters[:size].present?
82
+ if @client.parameters[:start] + @client.parameters[:size] > MAX_LIMIT
83
+ true
84
+ else
85
+ false
86
+ end
87
+ end
88
+
89
+ def get_last_page(total_count)
90
+ (total_count / @client.parameters[:size].to_f).ceil
91
+ end
92
+
93
+ def get_start_position(current_page)
94
+ (current_page - 1) * @client.parameters[:size]
95
+ end
96
+ end
97
+ end
98
+ end
@@ -0,0 +1,93 @@
1
+ module Nazrin
2
+ module ActiveRecord
3
+ module Searchable
4
+ extend ActiveSupport::Concern
5
+
6
+ included do
7
+ alias_method :delete_from_index, :nazrin_delete_from_index unless method_defined? :delete_from_index
8
+ alias_method :add_to_index, :nazrin_add_to_index unless method_defined? :add_to_index
9
+ alias_method :update_in_index, :nazrin_update_in_index unless method_defined? :update_in_index
10
+ end
11
+
12
+ def nazrin_delete_from_index
13
+ self.class.nazrin_delete_document(self)
14
+ end
15
+
16
+ def nazrin_add_to_index
17
+ self.class.nazrin_add_document(self)
18
+ end
19
+
20
+ def nazrin_update_in_index
21
+ self.class.nazrin_update_document(self)
22
+ end
23
+
24
+ module ClassMethods
25
+ def self.extended(base)
26
+ class << base
27
+ alias_method :search, :nazrin_search unless method_defined? :search
28
+ alias_method :searchable, :nazrin_searchable unless method_defined? :searchable
29
+ alias_method :fields, :nazrin_fields unless method_defined? :fields
30
+ alias_method :field, :nazrin_field unless method_defined? :field
31
+ end
32
+ end
33
+
34
+ def nazrin_search(options = {})
35
+ client = Nazrin::SearchClient.new
36
+ client.data_accessor = Nazrin::ActiveRecord::DataAccessor.new(
37
+ self, options)
38
+ client
39
+ end
40
+
41
+ def nazrin_searchable(&block)
42
+ class_variable_set(
43
+ :@@nazrin_doc_client,
44
+ Nazrin::DocumentClient.new)
45
+ class_variable_set(:@@nazrin_search_field_data, {})
46
+ block.call
47
+ end
48
+
49
+ def nazrin_fields(fields)
50
+ field_data = class_variable_get(:@@nazrin_search_field_data)
51
+ fields.each do |field|
52
+ field_data[field] = proc { public_send(field) }
53
+ end
54
+ class_variable_set(:@@nazrin_search_field_data, field_data)
55
+ end
56
+
57
+ def nazrin_field(field, &block)
58
+ field_data = class_variable_get(:@@nazrin_search_field_data)
59
+ field_data[field] = block
60
+ class_variable_set(:@@nazrin_search_field_data, field_data)
61
+ end
62
+
63
+ def nazrin_doc_client
64
+ class_variable_get(:@@nazrin_doc_client)
65
+ end
66
+
67
+ def nazrin_eval_field_data(obj)
68
+ data = {}
69
+ class_variable_get(
70
+ :@@nazrin_search_field_data).each do |field, block|
71
+ data[field] = obj.instance_eval(&block)
72
+ data[field] = data[field].remove(
73
+ /[[:cntrl:]]/) if data[field].is_a?(String)
74
+ end
75
+ data
76
+ end
77
+
78
+ def nazrin_add_document(obj)
79
+ nazrin_doc_client.add_document(
80
+ obj.send(:id), nazrin_eval_field_data(obj))
81
+ end
82
+
83
+ def nazrin_update_document(obj)
84
+ nazrin_add_document(obj)
85
+ end
86
+
87
+ def nazrin_delete_document(obj)
88
+ nazrin_doc_client.delete_document(obj.send(:id))
89
+ end
90
+ end
91
+ end
92
+ end
93
+ end
@@ -0,0 +1,22 @@
1
+ require 'active_support/configurable'
2
+
3
+ module Nazrin
4
+ def self.config
5
+ @config ||= Nazrin::Configuration.new
6
+ end
7
+
8
+ def self.configure
9
+ yield config if block_given?
10
+ end
11
+
12
+ class Configuration
13
+ include ActiveSupport::Configurable
14
+ config_accessor :debug_mode
15
+ config_accessor :search_endpoint
16
+ config_accessor :document_endpoint
17
+ config_accessor :region
18
+ config_accessor :access_key_id
19
+ config_accessor :secret_access_key
20
+ config_accessor :pagination
21
+ end
22
+ end
@@ -0,0 +1,38 @@
1
+ module Nazrin
2
+ class DocumentClient
3
+ attr_reader :client
4
+
5
+ def initialize
6
+ @client = Aws::CloudSearchDomain::Client.new(
7
+ endpoint: Nazrin.config.document_endpoint,
8
+ region: Nazrin.config.region,
9
+ access_key_id: Nazrin.config.access_key_id,
10
+ secret_access_key: Nazrin.config.secret_access_key)
11
+ end
12
+
13
+ def add_document(id, field_data)
14
+ return nil if Nazrin.config.debug_mode
15
+ client.upload_documents(
16
+ documents: [
17
+ {
18
+ type: 'add',
19
+ id: id,
20
+ fields: field_data
21
+ }
22
+ ].to_json,
23
+ content_type: 'application/json')
24
+ end
25
+
26
+ def delete_document(id)
27
+ return nil if Nazrin.config.debug_mode
28
+ client.upload_documents(
29
+ documents: [
30
+ {
31
+ type: 'delete',
32
+ id: id
33
+ }
34
+ ].to_json,
35
+ content_type: 'application/json')
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,63 @@
1
+ module Nazrin
2
+ class PaginatedArray < Array
3
+ attr_reader :current_page, :per_page, :total_count
4
+
5
+ def initialize(collections, page, per_page, total_count)
6
+ @current_page = page
7
+ @per_page = per_page
8
+ @total_count = total_count
9
+ replace collections
10
+ end
11
+
12
+ # first page of the collections?
13
+ def first_page?
14
+ current_page == 1
15
+ end
16
+
17
+ # last page of the collections?
18
+ def last_page?
19
+ current_page >= total_pages
20
+ end
21
+
22
+ # total number of pages
23
+ def total_pages
24
+ (total_count.to_f / per_page).ceil
25
+ end
26
+
27
+ # previous page number in the collections
28
+ def previous_page
29
+ current_page - 1 unless first_page? || out_of_bounds?
30
+ end
31
+
32
+ # next page number in the collections
33
+ def next_page
34
+ current_page + 1 unless last_page? || out_of_bounds?
35
+ end
36
+
37
+ # out of bounds of the collections?
38
+ def out_of_bounds?
39
+ current_page > total_pages
40
+ end
41
+ end
42
+
43
+ # create paginated collection
44
+ def self.paginated_array(collections, options = {})
45
+ if Nazrin.config.pagination == 'kaminari'
46
+ begin
47
+ require 'kaminari'
48
+ rescue LoadError
49
+ abort "Missing dependency 'kaminari' for pagination"
50
+ end
51
+ Kaminari.config.max_pages = options[:last_page]
52
+ Kaminari.paginate_array(collections, total_count: options[:total_count])
53
+ .page(options[:current_page])
54
+ .per(options[:per_page])
55
+ else
56
+ Nazrin::PaginatedArray.new(
57
+ collections,
58
+ options[:current_page],
59
+ options[:per_page],
60
+ options[:total_count])
61
+ end
62
+ end
63
+ end
@@ -0,0 +1,118 @@
1
+ module Nazrin
2
+ class SearchClient
3
+ attr_accessor :data_accessor
4
+ attr_reader :parameters
5
+
6
+ def initialize
7
+ @client = Aws::CloudSearchDomain::Client.new(
8
+ endpoint: Nazrin.config.search_endpoint,
9
+ region: Nazrin.config.region,
10
+ access_key_id: Nazrin.config.access_key_id,
11
+ secret_access_key: Nazrin.config.secret_access_key)
12
+ @parameters = {}
13
+ end
14
+
15
+ # query
16
+ # @param [String] query query string
17
+ def query(query)
18
+ @parameters[:query] = query
19
+ self
20
+ end
21
+
22
+ # return fields
23
+ # @param [Array<String>] fields ex) ['title']
24
+ def return(fields)
25
+ @parameters[:return] = fields.join(',')
26
+ self
27
+ end
28
+
29
+ # set the number to get
30
+ # @param [Integer] size the number to get
31
+ def size(size)
32
+ @parameters[:size] = size
33
+ self
34
+ end
35
+
36
+ # set the parser to be used
37
+ # @param [String] parser 'simple', 'structured', 'lucene', dismax'
38
+ def query_parser(query_parser)
39
+ @parameters[:query_parser] = query_parser
40
+ self
41
+ end
42
+
43
+ # set the search start position
44
+ # @param [Integer] start start position
45
+ def start(start)
46
+ @parameters[:start] = start
47
+ self
48
+ end
49
+
50
+ # set the cursor
51
+ # @param [String] cursor cursor
52
+ def cursor(cursor)
53
+ @parameters[:cursor] = cursor
54
+ self
55
+ end
56
+
57
+ # sort
58
+ # @param [Array<String>] sorts ex) ['year desc']
59
+ def sort(sorts)
60
+ @parameters[:sort] = sorts.join(',')
61
+ self
62
+ end
63
+
64
+ # partial
65
+ # @param [Boolean] partial true or false
66
+ def partial(partial)
67
+ @parameters[:partial] = partial
68
+ self
69
+ end
70
+
71
+ # query filtering
72
+ # @param [String] filter_query "tags:'aaa'"
73
+ def filter_query(filter_query)
74
+ @parameters[:filter_query] = filter_query
75
+ self
76
+ end
77
+
78
+ # query options
79
+ # @param [String] query_options ex) target field "{fields:['title']}"
80
+ def query_options(query_options)
81
+ @parameters[:query_options] = query_options
82
+ self
83
+ end
84
+
85
+ # highlight
86
+ # @param [String] highlight "{'tags':{}}"
87
+ def highlight(highlight)
88
+ @parameters[:highlight] = highlight
89
+ self
90
+ end
91
+
92
+ # facet
93
+ # @param [String] facet ex) "{'year':{'sort':'bucket'}}"
94
+ def facet(facet)
95
+ @parameters[:facet] = facet
96
+ self
97
+ end
98
+
99
+ # define any expression
100
+ # @param [String] expr ex) "{'EXPRESSIONNAME':'EXPRESSION'}"
101
+ def expr(expr)
102
+ @parameters[:expr] = expr
103
+ self
104
+ end
105
+
106
+ def search
107
+ @client.search(@parameters)
108
+ end
109
+
110
+ def execute
111
+ if data_accessor
112
+ data_accessor.results(self)
113
+ else
114
+ search
115
+ end
116
+ end
117
+ end
118
+ end
@@ -0,0 +1,3 @@
1
+ module Nazrin
2
+ VERSION = '0.1.0'
3
+ end
@@ -0,0 +1,31 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'nazrin/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = 'nazrin'
8
+ spec.version = Nazrin::VERSION
9
+ spec.authors = ['Tomohiro Suwa']
10
+ spec.email = ['neoen.gsn@gmail.com']
11
+
12
+ spec.summary = 'Nazrin is a Amazon CloudSearch client'
13
+ spec.description = 'Nazrin is a Amazon CloudSearch client'
14
+ spec.homepage = 'https://github.com/tsuwatch/nazrin'
15
+ spec.license = 'MIT'
16
+
17
+ spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
18
+ spec.require_paths = ['lib']
19
+
20
+ spec.add_dependency 'aws-sdk', '~> 2'
21
+
22
+ spec.add_development_dependency 'bundler', '~> 1.9'
23
+ spec.add_development_dependency 'rake', '~> 10.0'
24
+ spec.add_development_dependency 'rubocop'
25
+ spec.add_development_dependency 'kaminari'
26
+ spec.add_development_dependency 'rspec'
27
+ spec.add_development_dependency 'coveralls'
28
+ spec.add_development_dependency 'sqlite3'
29
+ spec.add_development_dependency 'activerecord'
30
+ spec.add_development_dependency 'database_cleaner'
31
+ end
metadata ADDED
@@ -0,0 +1,203 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: nazrin
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Tomohiro Suwa
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-12-05 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: aws-sdk
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '2'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '2'
27
+ - !ruby/object:Gem::Dependency
28
+ name: bundler
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '1.9'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '1.9'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rake
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '10.0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '10.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rubocop
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: kaminari
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: rspec
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: coveralls
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: sqlite3
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
125
+ - !ruby/object:Gem::Dependency
126
+ name: activerecord
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ">="
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ">="
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
139
+ - !ruby/object:Gem::Dependency
140
+ name: database_cleaner
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - ">="
144
+ - !ruby/object:Gem::Version
145
+ version: '0'
146
+ type: :development
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - ">="
151
+ - !ruby/object:Gem::Version
152
+ version: '0'
153
+ description: Nazrin is a Amazon CloudSearch client
154
+ email:
155
+ - neoen.gsn@gmail.com
156
+ executables: []
157
+ extensions: []
158
+ extra_rdoc_files: []
159
+ files:
160
+ - ".gitignore"
161
+ - ".rspec"
162
+ - ".rubocop.yml"
163
+ - ".travis.yml"
164
+ - Gemfile
165
+ - LICENSE.txt
166
+ - README.md
167
+ - Rakefile
168
+ - lib/generators/nazrin/config_generator.rb
169
+ - lib/generators/nazrin/templates/nazrin_config.rb
170
+ - lib/nazrin.rb
171
+ - lib/nazrin/active_record/data_accessor.rb
172
+ - lib/nazrin/active_record/searchable.rb
173
+ - lib/nazrin/config.rb
174
+ - lib/nazrin/document_client.rb
175
+ - lib/nazrin/paginated_array.rb
176
+ - lib/nazrin/search_client.rb
177
+ - lib/nazrin/version.rb
178
+ - nazrin.gemspec
179
+ homepage: https://github.com/tsuwatch/nazrin
180
+ licenses:
181
+ - MIT
182
+ metadata: {}
183
+ post_install_message:
184
+ rdoc_options: []
185
+ require_paths:
186
+ - lib
187
+ required_ruby_version: !ruby/object:Gem::Requirement
188
+ requirements:
189
+ - - ">="
190
+ - !ruby/object:Gem::Version
191
+ version: '0'
192
+ required_rubygems_version: !ruby/object:Gem::Requirement
193
+ requirements:
194
+ - - ">="
195
+ - !ruby/object:Gem::Version
196
+ version: '0'
197
+ requirements: []
198
+ rubyforge_project:
199
+ rubygems_version: 2.4.5.1
200
+ signing_key:
201
+ specification_version: 4
202
+ summary: Nazrin is a Amazon CloudSearch client
203
+ test_files: []