tire-contrib 0.1.1 → 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore CHANGED
@@ -2,3 +2,4 @@
2
2
  .bundle
3
3
  Gemfile.lock
4
4
  pkg/*
5
+ log/*
data/.travis.yml ADDED
@@ -0,0 +1,16 @@
1
+ # -----------------------------------------------------------------
2
+ # Configuration file for http://travis-ci.org/#!/karmi/tire-contrib
3
+ # -----------------------------------------------------------------
4
+
5
+ language: ruby
6
+
7
+ rvm:
8
+ - 1.9.3
9
+
10
+ script: "bundle exec rake test"
11
+
12
+ before_install:
13
+ - sudo service elasticsearch start
14
+
15
+ notifications:
16
+ disable: true
data/README.markdown CHANGED
@@ -15,6 +15,10 @@ Then require the component you want to use in your application initializer. For
15
15
  See specific files and folders inside the `lib/tire` folder for instructions and documentation.
16
16
 
17
17
 
18
+ ### Dynamic Persistence ###
19
+
20
+ Adds support for dynamic attributes when using Tire::Model::Persistence so that model properties no longer need to be declared explicitly. [More info](lib/tire/model/dynamic_persistence).
21
+
18
22
  ### More Like This Queries ###
19
23
 
20
24
  Adds support for [“more like this”](http://www.elasticsearch.org/guide/reference/query-dsl/mlt-query.html) queries.
data/Rakefile CHANGED
@@ -1,6 +1,8 @@
1
1
  require 'bundler'
2
2
  Bundler::GemHelper.install_tasks
3
3
 
4
+ task :default => :test
5
+
4
6
  require 'rake/testtask'
5
7
  Rake::TestTask.new(:test) do |test|
6
8
  test.libs << 'lib' << 'test'
@@ -1,5 +1,5 @@
1
1
  module Tire
2
2
  module Contrib
3
- VERSION = "0.1.1"
3
+ VERSION = "0.1.2"
4
4
  end
5
5
  end
@@ -0,0 +1,124 @@
1
+ require 'common_pool'
2
+ require 'curb'
3
+
4
+ # A Curb-based client which uses the "common-pool" gem to allow high-performance
5
+ # HTTP requests in a multi-threaded environment.
6
+ #
7
+ # See <https://github.com/jugend/common-pool>
8
+ #
9
+ # Make sure to include the "common-pool" gem in your Gemfile.
10
+ #
11
+ # Example:
12
+ # --------
13
+ #
14
+ # require 'curb'
15
+ # require 'tire/http/clients/pooled_curb'
16
+ #
17
+ # Tire.configure do
18
+ # client Tire::HTTP::Client::PooledCurb
19
+ # end
20
+ #
21
+ module Tire
22
+ module HTTP
23
+ module Client
24
+
25
+ class PooledCurbDataSource < CommonPool::PoolDataSource
26
+ def create_object
27
+ Curl::Easy.new
28
+ end
29
+ end
30
+
31
+ class PooledCurb
32
+ HTTP_CLIENT_POOL = CommonPool::ObjectPool.new(PooledCurbDataSource.new) { |config| config.max_active = 200 }
33
+
34
+ def self.with_client
35
+ curl = HTTP_CLIENT_POOL.borrow_object
36
+ begin
37
+ yield curl
38
+ rescue Curl::Err::MultiBadEasyHandle
39
+ curl = HTTP_CLIENT_POOL.borrow_object
40
+ retry
41
+ ensure
42
+ HTTP_CLIENT_POOL.return_object(curl)
43
+ end
44
+ end
45
+
46
+ def self.get(url, data=nil)
47
+ response = nil
48
+
49
+ 3.times do |tries|
50
+ # Sleep for 0.2 seconds after the second failure
51
+ Kernel.sleep(0.2) if tries > 1
52
+
53
+ begin
54
+ response = get_once(url, data)
55
+ if block_given?
56
+ next unless yield response.body, response.code
57
+ else
58
+ next unless response.code == 200 && response.present?
59
+ end
60
+
61
+ return response
62
+ rescue Curl::Err::CurlError
63
+ # will retry
64
+ end
65
+ end
66
+
67
+ response
68
+ end
69
+
70
+ def self.get_once(url, data=nil)
71
+ with_client do |curl|
72
+ curl.timeout = 15
73
+ curl.url = url
74
+ if data
75
+ curl.post_body = data
76
+ curl.http_post
77
+ else
78
+ curl.http_get
79
+ end
80
+ Response.new curl.body_str, curl.response_code
81
+ end
82
+ end
83
+
84
+ def self.post(url, data)
85
+ with_client do |curl|
86
+ curl.timeout = 15
87
+ curl.url = url
88
+ curl.post_body = data
89
+ curl.http_post
90
+ Response.new curl.body_str, curl.response_code
91
+ end
92
+ end
93
+
94
+ def self.put(url, data)
95
+ with_client do |curl|
96
+ curl.timeout = 15
97
+ curl.url = url
98
+ curl.http_put data
99
+ Response.new curl.body_str, curl.response_code
100
+ end
101
+ end
102
+
103
+ def self.delete(url)
104
+ with_client do |curl|
105
+ curl.timeout = 15
106
+ curl.url = url
107
+ curl.http_delete
108
+ Response.new curl.body_str, curl.response_code
109
+ end
110
+ end
111
+
112
+ def self.head(url)
113
+ with_client do |curl|
114
+ curl.timeout = 15
115
+ curl.url = url
116
+ curl.http_head
117
+ Response.new curl.body_str, curl.response_code
118
+ end
119
+ end
120
+ end
121
+
122
+ end
123
+ end
124
+ end
@@ -0,0 +1,33 @@
1
+ # Dynamic Persistence
2
+ # ===================
3
+ #
4
+ # Author: Dave Kinkead <dave@kinkead.com.au>
5
+ #
6
+ #
7
+ # Adds support for dynamic persistence to Tire::Model::Persistence,
8
+ # so explicit declarations of `property :attr_name` are not required.
9
+ #
10
+ #
11
+ # Usage:
12
+ # ------
13
+ #
14
+ # Require the component:
15
+ #
16
+ # require 'tire/model/dynamic_persistence'
17
+ #
18
+ # Example:
19
+ # -------
20
+ #
21
+ # class Author
22
+ # include Tire::Model::Persistence
23
+ # include Tire::Model::DynamicPersistence
24
+ # end
25
+ #
26
+ # author = Author.new :name => 'Inigo Montoya',
27
+ # :books => ['The Pragmatic Swordfighter', 'Revenge: Best Served Cold']
28
+ #
29
+ # author.name
30
+ # # => 'Inigo Montoya'
31
+ #
32
+ #
33
+ require 'tire/model/dynamic_persistence/dynamic_persistence'
@@ -0,0 +1,26 @@
1
+ # Dynamic Persistence
2
+
3
+ Adds support for truly dynamic persistence models so that you no longer have to explicitly declare properties.
4
+
5
+ Very useful if you want to create models on the fly.
6
+
7
+ ## Usage
8
+
9
+ Require the module in your model file
10
+
11
+ require 'tire/model/dynamic_persistence'
12
+
13
+ Include Persistence and DynamicPersistence
14
+
15
+ class Author
16
+ include Tire::Model::Persistence
17
+ include Tire::Model::DynamicPersistence
18
+ end
19
+
20
+ Then create your model by passing it a hash of key:value pairs
21
+
22
+ author = Author.new :name => 'Inigo Montoya',
23
+ :books => ['The Pragmatic Swordfighter', 'Revenge: Best Served Cold']
24
+
25
+ author.name
26
+ # => 'Inigo Montoya'
@@ -0,0 +1,22 @@
1
+ require 'tire'
2
+
3
+ module Tire
4
+ module Model
5
+ module DynamicPersistence
6
+
7
+ # Overrides the initializer in Tire::Model::Persistence to allow
8
+ # dynamic creation of attributes without the need to
9
+ # declare them with `property :name`
10
+ #
11
+ def initialize(attrs={})
12
+ attrs.each do |attr, value|
13
+ # => call Tire's property method if it's declared for this attribute
14
+ self.class.property attr unless self.class.property_types.keys.include? attr
15
+ # => set instance variable for this attribute
16
+ instance_variable_set("@#{attr}", value)
17
+ end
18
+ super attrs
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,146 @@
1
+ # NewRelic Instrumentation
2
+ # ========================
3
+ #
4
+ # Author: Karel Minarik <karmi@karmi.cz>
5
+ #
6
+ # Adds instrumentation support for the [NewRelic](http://newrelic.com) application performance management tool.
7
+ #
8
+ # Usage:
9
+ # ------
10
+ #
11
+ # For tracing Tire::Index and Tire::DSL method calls, just require the component
12
+ # (eg. in a Ruby On Rails initializer):
13
+ #
14
+ # require 'tire/new_relic/instrumentation'
15
+ #
16
+ # For tracing search calls in the ActiveModel model integration, in addition
17
+ # to requiring the component, include the tracing module in your model:
18
+ #
19
+ # class MyModel
20
+ # include Tire::Model::Search
21
+ # include Tire::Model::NewRelic unless Rails.env.test?
22
+ # end
23
+ #
24
+ # You'll find the statistics in the "Diagnostics > Transaction Traces" page at NewRelic.
25
+ # See an example image here: <https://img.skitch.com/20120713-t5knmkxnu8r9n6iu156phitdfp.png>
26
+ #
27
+ # Often, you perform multiple search requests in your application, eg. within a Rails controller action.
28
+ # Currently, all these search requests are bundled into one metric.
29
+ # To measure individual search requests, you have to use the custom NewRelic instrumentation:
30
+ #
31
+ # class ArticlesController < ApplicationController
32
+ # extend NewRelic::Agent::MethodTracer
33
+ # # ...
34
+ # def index
35
+ # self.class.trace_execution_scoped(['ArticlesController/Index/main_search']) do
36
+ # @articles = Article.search do |search|
37
+ # # ...
38
+ # end
39
+ # end
40
+ #
41
+ # self.class.trace_execution_scoped(['ArticlesController/Index/category_facets']) do
42
+ # # ...
43
+ # end
44
+ # # ...
45
+ #
46
+ # respond_with(@articles)
47
+ # end
48
+ # end
49
+ #
50
+ # See <https://newrelic.com/docs/ruby/ruby-custom-metric-collection#example_blocks> for more information.
51
+ #
52
+ # TODO
53
+ # ----
54
+ #
55
+ # * Implement tracing for searches via the proxy object (`MyModel.tire.search ...`)
56
+ # * Implement tracing for `update_index` via `after_save` callbacks (again, proxied)
57
+ # * Implement tracing for different search queries, if possible
58
+ #
59
+ # More Information:
60
+ # -----------------
61
+ #
62
+ # * https://newrelic.com/docs/ruby/ruby-custom-metric-collection
63
+ # * https://github.com/newrelic/rpm/tree/master/lib/new_relic/agent/instrumentation
64
+ # * https://github.com/newrelic/rpm_contrib/tree/master/lib/rpm_contrib/instrumentation
65
+ #
66
+ require 'new_relic/agent/method_tracer'
67
+ require 'tire/new_relic/model'
68
+
69
+ module Tire
70
+ module NewRelic
71
+
72
+ module Helpers
73
+ extend ::NewRelic::Agent::MethodTracer
74
+
75
+ # Helper method to add multiple methods in a certain scope
76
+ #
77
+ def add_method_tracers methods, metric_name_code
78
+ methods.each do |method_name|
79
+ add_method_tracer method_name.to_sym, "#{metric_name_code}#{method_name}"
80
+ end
81
+ end
82
+ end
83
+
84
+ end
85
+ end
86
+
87
+ DependencyDetection.defer do
88
+ @name = :tire
89
+
90
+ depends_on do
91
+ defined?(::Tire) and not NewRelic::Control.instance['disable_tire_instrumentation']
92
+ end
93
+
94
+ executes do
95
+ NewRelic::Agent.logger.debug 'Installing Tire instrumentation...'
96
+ end
97
+
98
+ executes do
99
+
100
+ ::Tire::Index.class_eval do
101
+ include ::NewRelic::Agent::MethodTracer
102
+ extend ::Tire::NewRelic::Helpers
103
+
104
+ add_method_tracers %w|
105
+ exists?
106
+ delete
107
+ create
108
+ add_alias
109
+ remove_alias
110
+ aliases
111
+ mapping
112
+ settings
113
+ store
114
+ bulk_store
115
+ import
116
+ reindex
117
+ remove
118
+ retrieve
119
+ update
120
+ refresh
121
+ open
122
+ close
123
+ analyze
124
+ register_percolator_query
125
+ unregister_percolator_query
126
+ percolate
127
+ |,
128
+ 'Search/Tire/index_'
129
+ end
130
+
131
+ ::Tire::DSL.class_eval do
132
+ include ::NewRelic::Agent::MethodTracer
133
+ extend ::Tire::NewRelic::Helpers
134
+
135
+ add_method_tracers %w| search index scan aliases |, 'Search/Tire/'
136
+ end
137
+
138
+ # ::Tire::Search::Search.class_eval do
139
+ # include ::NewRelic::Agent::MethodTracer
140
+ # extend ::Tire::NewRelic::Helpers
141
+ #
142
+ # add_method_tracers %w| perform |, 'Search/Tire/'
143
+ # end
144
+
145
+ end
146
+ end
@@ -0,0 +1,23 @@
1
+ module Tire
2
+ module Model
3
+
4
+ module NewRelic
5
+
6
+ def self.included(base)
7
+ base.class_eval do
8
+ ::NewRelic::Agent.logger.debug "Installing NewRelic instrumentation for #{self}"
9
+
10
+ include ::NewRelic::Agent::MethodTracer
11
+ add_method_tracer :update_index, 'Search/#{self.class.name}/update_index'
12
+
13
+ class << self
14
+ include ::NewRelic::Agent::MethodTracer
15
+ add_method_tracer :search, 'Search/#{self}/search'
16
+ end
17
+ end
18
+ end
19
+
20
+ end
21
+
22
+ end
23
+ end
@@ -0,0 +1,49 @@
1
+ require 'test_helper'
2
+
3
+ require 'tire/model/dynamic_persistence'
4
+
5
+ class DynamicAuthor
6
+ include Tire::Model::Persistence
7
+ include Tire::Model::DynamicPersistence
8
+ end
9
+
10
+ class PersistentArticleWithDynamicCreation
11
+
12
+ include Tire::Model::Persistence
13
+ include Tire::Model::DynamicPersistence
14
+
15
+ property :author, :class => DynamicAuthor
16
+ property :tags, :default => []
17
+ end
18
+
19
+ module Tire
20
+ module Model
21
+
22
+ class DynamicPersistenceTest < Test::Unit::TestCase
23
+
24
+ context "Persistent model with dynamic creation" do
25
+
26
+ should "allow accessing attributes not explicitely defined" do
27
+ @article = PersistentArticleWithDynamicCreation.new :name => 'Elasticsearch',
28
+ :title => 'You know, for Search!'
29
+ assert_nothing_raised do
30
+ assert_equal 'Elasticsearch', @article.name
31
+ end
32
+ end
33
+
34
+ should "not override explicitely defined properties" do
35
+ @article = PersistentArticleWithDynamicCreation.new :name => 'Elasticsearch',
36
+ :author => { :name => 'Inigo Montoya' }
37
+
38
+ assert_instance_of DynamicAuthor, @article.author
39
+ assert_equal 'Inigo Montoya', @article.author.name
40
+
41
+ assert_instance_of Array, @article.tags
42
+ assert_equal [], @article.tags
43
+ end
44
+
45
+ end
46
+
47
+ end
48
+ end
49
+ end
@@ -0,0 +1 @@
1
+ monitor_mode: true
@@ -0,0 +1,112 @@
1
+ # Based on test suite from @evanphx:
2
+ #
3
+ # <https://github.com/evanphx/newrelic-redis>
4
+ #
5
+
6
+ require 'test_helper'
7
+
8
+ require 'tire/new_relic/instrumentation'
9
+ require 'tire/new_relic/model'
10
+ require File.expand_path('../model', __FILE__)
11
+
12
+ module Tire
13
+ module NewRelic
14
+
15
+ class InstrumentationTest < Test::Unit::TestCase
16
+
17
+ include ::NewRelic::Agent::Instrumentation::ControllerInstrumentation
18
+
19
+ def setup
20
+ ::NewRelic::Agent.manual_start
21
+
22
+ @engine = ::NewRelic::Agent.instance.stats_engine
23
+ @engine.clear_stats
24
+
25
+ DependencyDetection.detect!
26
+ end
27
+
28
+ def assert_metrics(*m)
29
+ m.each { |x| assert_contains @engine.metrics, x }
30
+ end
31
+
32
+ context "NewRelic instrumentation for" do
33
+
34
+ context "Tire::Index" do
35
+
36
+ should "trace the class" do
37
+ assert Tire.index('foo').traced?
38
+ end
39
+
40
+ should "trace the method calls" do
41
+ Tire.index('foo').exists?
42
+ assert_metrics "Search/Tire/index_exists?"
43
+ end
44
+
45
+ should "trace delete/create" do
46
+ Tire.index('foo').delete
47
+ Tire.index('foo').create
48
+ assert_metrics "Search/Tire/index_delete", "Search/Tire/index_create"
49
+ end
50
+
51
+ should "trace percolate" do
52
+ Tire.index('foo').percolate foo: 'bar'
53
+ assert_metrics "Search/Tire/index_percolate"
54
+ end
55
+
56
+ end
57
+
58
+ context "Tire::DSL" do
59
+
60
+ should "trace the method calls" do
61
+ Tire.search 'foo'
62
+ assert_metrics "Search/Tire/search"
63
+ end
64
+
65
+ end
66
+
67
+ # context "Tire::Search::Search" do
68
+ #
69
+ # should "trace perform" do
70
+ # Tire.search('foo').results
71
+ #
72
+ # assert_metrics "Search/Tire/perform"
73
+ # end
74
+ #
75
+ # end
76
+
77
+ context "ActiveModel integration" do
78
+
79
+ should "be traced" do
80
+ assert TestModel.traced?
81
+ end
82
+
83
+ should "trace search" do
84
+ TestModel.search('foo').results
85
+ # p @engine.metrics
86
+ assert_metrics "Search/TestModel/search"
87
+ end
88
+
89
+ should_eventually "trace search via proxy object" do
90
+ TestModel.tire.search('foo').results
91
+ assert_metrics "Search/TestModel/search"
92
+ end
93
+
94
+ should "trace index updates" do
95
+ TestModel.new(title: 'foo').update_index
96
+ assert_metrics "Search/TestModel/update_index"
97
+ end
98
+
99
+ should_eventually "trace index updates via callbacks" do
100
+ TestModel.new(title: 'foo').save
101
+ assert_metrics "Search/TestModel/update_index"
102
+ end
103
+
104
+ end
105
+
106
+ end
107
+
108
+ end
109
+
110
+ end
111
+
112
+ end
@@ -0,0 +1,8 @@
1
+ class TestModel
2
+
3
+ include Tire::Model::Persistence
4
+ include Tire::Model::NewRelic
5
+
6
+ property :title
7
+
8
+ end
data/test/test_helper.rb CHANGED
@@ -1,12 +1,10 @@
1
1
  require 'rubygems'
2
-
3
2
  require 'pathname'
4
3
  require 'test/unit'
5
-
6
4
  require 'shoulda'
7
5
  require 'turn' unless ENV["TM_FILEPATH"] || ENV["CI"]
8
6
  require 'mocha'
9
-
7
+ require 'active_support/core_ext/hash/indifferent_access'
10
8
  require 'tire'
11
9
 
12
10
  class Test::Unit::TestCase
data/tire-contrib.gemspec CHANGED
@@ -6,8 +6,8 @@ Gem::Specification.new do |s|
6
6
  s.name = "tire-contrib"
7
7
  s.version = Tire::Contrib::VERSION
8
8
  s.platform = Gem::Platform::RUBY
9
- s.authors = ["Karel Minarik", "Oliver Eilhard"]
10
- s.email = ["karmi@karmi.cz", "oliver.eilhard@gmail.com"]
9
+ s.authors = ["Karel Minarik", "Oliver Eilhard", "Dave Kinkead"]
10
+ s.email = ["karmi@karmi.cz", "oliver.eilhard@gmail.com", "dave@kinkead.com.au"]
11
11
  s.homepage = ""
12
12
  s.summary = %q{Contributions and additions for the Tire gem}
13
13
 
@@ -15,7 +15,10 @@ Gem::Specification.new do |s|
15
15
 
16
16
  s.add_dependency "tire"
17
17
 
18
- s.add_development_dependency "bundler", "~> 1.1.0"
18
+ s.add_development_dependency "bundler", "~> 1.1"
19
+
20
+ s.add_development_dependency "newrelic_rpm"
21
+
19
22
  s.add_development_dependency "turn"
20
23
  s.add_development_dependency "shoulda"
21
24
  s.add_development_dependency "mocha"
metadata CHANGED
@@ -1,20 +1,21 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tire-contrib
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
8
8
  - Karel Minarik
9
9
  - Oliver Eilhard
10
+ - Dave Kinkead
10
11
  autorequire:
11
12
  bindir: bin
12
13
  cert_chain: []
13
- date: 2012-05-06 00:00:00.000000000 Z
14
+ date: 2013-05-21 00:00:00.000000000 Z
14
15
  dependencies:
15
16
  - !ruby/object:Gem::Dependency
16
17
  name: tire
17
- requirement: &70105226816800 !ruby/object:Gem::Requirement
18
+ requirement: !ruby/object:Gem::Requirement
18
19
  none: false
19
20
  requirements:
20
21
  - - ! '>='
@@ -22,21 +23,47 @@ dependencies:
22
23
  version: '0'
23
24
  type: :runtime
24
25
  prerelease: false
25
- version_requirements: *70105226816800
26
+ version_requirements: !ruby/object:Gem::Requirement
27
+ none: false
28
+ requirements:
29
+ - - ! '>='
30
+ - !ruby/object:Gem::Version
31
+ version: '0'
26
32
  - !ruby/object:Gem::Dependency
27
33
  name: bundler
28
- requirement: &70105226816020 !ruby/object:Gem::Requirement
34
+ requirement: !ruby/object:Gem::Requirement
29
35
  none: false
30
36
  requirements:
31
37
  - - ~>
32
38
  - !ruby/object:Gem::Version
33
- version: 1.1.0
39
+ version: '1.1'
40
+ type: :development
41
+ prerelease: false
42
+ version_requirements: !ruby/object:Gem::Requirement
43
+ none: false
44
+ requirements:
45
+ - - ~>
46
+ - !ruby/object:Gem::Version
47
+ version: '1.1'
48
+ - !ruby/object:Gem::Dependency
49
+ name: newrelic_rpm
50
+ requirement: !ruby/object:Gem::Requirement
51
+ none: false
52
+ requirements:
53
+ - - ! '>='
54
+ - !ruby/object:Gem::Version
55
+ version: '0'
34
56
  type: :development
35
57
  prerelease: false
36
- version_requirements: *70105226816020
58
+ version_requirements: !ruby/object:Gem::Requirement
59
+ none: false
60
+ requirements:
61
+ - - ! '>='
62
+ - !ruby/object:Gem::Version
63
+ version: '0'
37
64
  - !ruby/object:Gem::Dependency
38
65
  name: turn
39
- requirement: &70105226815300 !ruby/object:Gem::Requirement
66
+ requirement: !ruby/object:Gem::Requirement
40
67
  none: false
41
68
  requirements:
42
69
  - - ! '>='
@@ -44,10 +71,15 @@ dependencies:
44
71
  version: '0'
45
72
  type: :development
46
73
  prerelease: false
47
- version_requirements: *70105226815300
74
+ version_requirements: !ruby/object:Gem::Requirement
75
+ none: false
76
+ requirements:
77
+ - - ! '>='
78
+ - !ruby/object:Gem::Version
79
+ version: '0'
48
80
  - !ruby/object:Gem::Dependency
49
81
  name: shoulda
50
- requirement: &70105226814420 !ruby/object:Gem::Requirement
82
+ requirement: !ruby/object:Gem::Requirement
51
83
  none: false
52
84
  requirements:
53
85
  - - ! '>='
@@ -55,10 +87,15 @@ dependencies:
55
87
  version: '0'
56
88
  type: :development
57
89
  prerelease: false
58
- version_requirements: *70105226814420
90
+ version_requirements: !ruby/object:Gem::Requirement
91
+ none: false
92
+ requirements:
93
+ - - ! '>='
94
+ - !ruby/object:Gem::Version
95
+ version: '0'
59
96
  - !ruby/object:Gem::Dependency
60
97
  name: mocha
61
- requirement: &70105226813440 !ruby/object:Gem::Requirement
98
+ requirement: !ruby/object:Gem::Requirement
62
99
  none: false
63
100
  requirements:
64
101
  - - ! '>='
@@ -66,10 +103,15 @@ dependencies:
66
103
  version: '0'
67
104
  type: :development
68
105
  prerelease: false
69
- version_requirements: *70105226813440
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ none: false
108
+ requirements:
109
+ - - ! '>='
110
+ - !ruby/object:Gem::Version
111
+ version: '0'
70
112
  - !ruby/object:Gem::Dependency
71
113
  name: activerecord
72
- requirement: &70105226812980 !ruby/object:Gem::Requirement
114
+ requirement: !ruby/object:Gem::Requirement
73
115
  none: false
74
116
  requirements:
75
117
  - - ! '>='
@@ -77,10 +119,15 @@ dependencies:
77
119
  version: '0'
78
120
  type: :development
79
121
  prerelease: false
80
- version_requirements: *70105226812980
122
+ version_requirements: !ruby/object:Gem::Requirement
123
+ none: false
124
+ requirements:
125
+ - - ! '>='
126
+ - !ruby/object:Gem::Version
127
+ version: '0'
81
128
  - !ruby/object:Gem::Dependency
82
129
  name: activesupport
83
- requirement: &70105226812540 !ruby/object:Gem::Requirement
130
+ requirement: !ruby/object:Gem::Requirement
84
131
  none: false
85
132
  requirements:
86
133
  - - ! '>='
@@ -88,10 +135,15 @@ dependencies:
88
135
  version: '0'
89
136
  type: :development
90
137
  prerelease: false
91
- version_requirements: *70105226812540
138
+ version_requirements: !ruby/object:Gem::Requirement
139
+ none: false
140
+ requirements:
141
+ - - ! '>='
142
+ - !ruby/object:Gem::Version
143
+ version: '0'
92
144
  - !ruby/object:Gem::Dependency
93
145
  name: sqlite3
94
- requirement: &70105226812020 !ruby/object:Gem::Requirement
146
+ requirement: !ruby/object:Gem::Requirement
95
147
  none: false
96
148
  requirements:
97
149
  - - ! '>='
@@ -99,11 +151,17 @@ dependencies:
99
151
  version: '0'
100
152
  type: :development
101
153
  prerelease: false
102
- version_requirements: *70105226812020
154
+ version_requirements: !ruby/object:Gem::Requirement
155
+ none: false
156
+ requirements:
157
+ - - ! '>='
158
+ - !ruby/object:Gem::Version
159
+ version: '0'
103
160
  description:
104
161
  email:
105
162
  - karmi@karmi.cz
106
163
  - oliver.eilhard@gmail.com
164
+ - dave@kinkead.com.au
107
165
  executables: []
108
166
  extensions: []
109
167
  extra_rdoc_files:
@@ -111,6 +169,7 @@ extra_rdoc_files:
111
169
  - MIT-LICENSE
112
170
  files:
113
171
  - .gitignore
172
+ - .travis.yml
114
173
  - Gemfile
115
174
  - MIT-LICENSE
116
175
  - README.markdown
@@ -119,6 +178,12 @@ files:
119
178
  - lib/tire-contrib/README.markdown
120
179
  - lib/tire-contrib/version.rb
121
180
  - lib/tire/README.markdown
181
+ - lib/tire/http/clients/pooled_curb.rb
182
+ - lib/tire/model/dynamic_persistence.rb
183
+ - lib/tire/model/dynamic_persistence/README.markdown
184
+ - lib/tire/model/dynamic_persistence/dynamic_persistence.rb
185
+ - lib/tire/new_relic/instrumentation.rb
186
+ - lib/tire/new_relic/model.rb
122
187
  - lib/tire/queries/custom_filters_score.rb
123
188
  - lib/tire/queries/custom_filters_score/custom_filters_score.rb
124
189
  - lib/tire/queries/more_like_this.rb
@@ -128,6 +193,10 @@ files:
128
193
  - lib/tire/rails/logger/instrumentation.rb
129
194
  - lib/tire/rails/logger/log_subscriber.rb
130
195
  - lib/tire/rails/logger/railtie.rb
196
+ - test/dynamic_persistence/dynamic_persistence_test.rb
197
+ - test/new_relic/config/newrelic.yml
198
+ - test/new_relic/instrumentation_test.rb
199
+ - test/new_relic/model.rb
131
200
  - test/queries/custom_filters_score/custom_filters_score_test.rb
132
201
  - test/queries/more_like_this/more_like_this_test.rb
133
202
  - test/rails/logger/active_record_article.rb
@@ -155,11 +224,15 @@ required_rubygems_version: !ruby/object:Gem::Requirement
155
224
  version: '0'
156
225
  requirements: []
157
226
  rubyforge_project: tire-contrib
158
- rubygems_version: 1.8.11
227
+ rubygems_version: 1.8.23
159
228
  signing_key:
160
229
  specification_version: 3
161
230
  summary: Contributions and additions for the Tire gem
162
231
  test_files:
232
+ - test/dynamic_persistence/dynamic_persistence_test.rb
233
+ - test/new_relic/config/newrelic.yml
234
+ - test/new_relic/instrumentation_test.rb
235
+ - test/new_relic/model.rb
163
236
  - test/queries/custom_filters_score/custom_filters_score_test.rb
164
237
  - test/queries/more_like_this/more_like_this_test.rb
165
238
  - test/rails/logger/active_record_article.rb