searchjoy 0.3.1 → 0.4.3

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: e149d7bbe57f78d3d77522a99ebe00c5c9958528
4
- data.tar.gz: 0027be7a3d258f50a9897cd64218b0b4a3843506
2
+ SHA256:
3
+ metadata.gz: 81afb5da71ed5e2714237809e9dfa472b6e5ac2d285bdd391a635c0cf67a1735
4
+ data.tar.gz: 4cc06c6f1c2379e0196655bf4379fe6a43ccafddf96cfeeb035ecae5d78026a4
5
5
  SHA512:
6
- metadata.gz: b59164fcca41b33eabcb6eed7e0aa83a738ce818fbb1ac3b9439d04b8847966e2b764d13d328de7a6eead5fe7fbd758521396659e00a9d5e0153d072ae4b4572
7
- data.tar.gz: db768b9ce87fcac0d1921a45b89827930e9ff3dd512b6fa4e01b98b0a3611203f9224cbe1881de4b31adab60cf1bc82947c6a2eb9401169256cd208c28affead
6
+ metadata.gz: a621888af83d4b3e2dc262f82abb0be369bd53c282e06d65b2aa65525f299c6d43a857790170ce03fab55242a2cbc18515e126d776df12f4ab26daa910b17496
7
+ data.tar.gz: 0e5bb79620de12393815699a577a1b09a59b7c588249b38e6ba02527285ecaaef1df61a9904cb30f8958581e8d31f37e9381ce7e4825125a75c82c4fdecc6a0b
@@ -1,23 +1,51 @@
1
- ## 0.3.1
1
+ ## 0.4.3 (2020-03-06)
2
+
3
+ - Fixed error with Groupdate 5
4
+
5
+ ## 0.4.2 (2019-10-08)
6
+
7
+ - Added support for Sprockets 4
8
+ - Require latest version of Chartkick
9
+
10
+ ## 0.4.1 (2019-05-26)
11
+
12
+ - Added support for Rails 6
13
+
14
+ ## 0.4.0 (2019-04-15)
15
+
16
+ - Added support for `models` option
17
+ - Added tracking for `Searchkick.multi_search`
18
+ - Fixed migration for SQLite (again)
19
+
20
+ Breaking
21
+
22
+ - Removed support for Rails < 5
23
+
24
+ ## 0.3.2 (2018-03-26)
25
+
26
+ - Use `references` in migration
27
+ - Fixed migration for SQLite
28
+
29
+ ## 0.3.1 (2017-05-12)
2
30
 
3
31
  - Fixed support for Rails 5.1
4
32
 
5
- ## 0.3.0
33
+ ## 0.3.0 (2017-05-01)
6
34
 
7
35
  - Added support for Rails 5.1
8
36
  - Fixed `belongs_to` issue with Rails 5
9
37
 
10
- ## 0.2.1
38
+ ## 0.2.1 (2017-03-19)
11
39
 
12
40
  - Added `query_url` option
13
41
 
14
- ## 0.2.0
42
+ ## 0.2.0 (2017-01-05)
15
43
 
16
44
  - Fixed error with Rails 5
17
45
  - Fixed `Index name too long` error with SQLite
18
46
  - Added `query_name` option
19
47
  - Removed support for Rails 3
20
48
 
21
- ## 0.1.0
49
+ ## 0.1.0 (2016-08-23)
22
50
 
23
51
  - Fixed Searchkick integration for `execute: false`
@@ -1,4 +1,4 @@
1
- Copyright (c) 2013 Andrew Kane
1
+ Copyright (c) 2013-2020 Andrew Kane
2
2
 
3
3
  MIT License
4
4
 
data/README.md CHANGED
@@ -12,7 +12,9 @@ Works with any search platform, including Elasticsearch, Sphinx, and Solr
12
12
 
13
13
  :cupid: An amazing companion to [Searchkick](https://github.com/ankane/searchkick)
14
14
 
15
- ## Get Started
15
+ [![Build Status](https://travis-ci.org/ankane/searchjoy.svg?branch=master)](https://travis-ci.org/ankane/searchjoy)
16
+
17
+ ## Installation
16
18
 
17
19
  Add this line to your application’s Gemfile:
18
20
 
@@ -24,7 +26,7 @@ And run the generator. This creates a migration to store searches.
24
26
 
25
27
  ```sh
26
28
  rails generate searchjoy:install
27
- rake db:migrate
29
+ rails db:migrate
28
30
  ```
29
31
 
30
32
  Next, add the dashboard to your `config/routes.rb`.
@@ -35,7 +37,7 @@ mount Searchjoy::Engine, at: "searchjoy"
35
37
 
36
38
  Be sure to protect the endpoint in production - see the [Authentication](#authentication) section for ways to do this.
37
39
 
38
- ### Track Searches
40
+ ## Track Searches
39
41
 
40
42
  Track searches by creating a record in the database.
41
43
 
@@ -51,22 +53,27 @@ Searchjoy::Search.create(
51
53
  With [Searchkick](https://github.com/ankane/searchkick), you can use the `track` option to do this automatically.
52
54
 
53
55
  ```ruby
54
- Item.search "apple", track: {user_id: 1}
56
+ Item.search("apple", track: {user_id: 1})
55
57
  ```
56
58
 
57
59
  If you want to track more attributes, add them to the `searchjoy_searches` table. Then, pass the values to the `track` option.
58
60
 
59
61
  ```ruby
60
- Item.search "apple", track: {user_id: 1, source: "web"}
62
+ Item.search("apple", track: {user_id: 1, source: "web"})
61
63
  ```
62
64
 
63
65
  It’s that easy.
64
66
 
65
- ### Track Conversions
67
+ ## Track Conversions
66
68
 
67
69
  First, choose a conversion metric. At Instacart, an item added to the cart from the search results page counts as a conversion.
68
70
 
69
- Next, when a user searches, keep track of the search id. With Searchkick, you can get the id with `@results.search.id`.
71
+ Next, when a user searches, keep track of the search id. With Searchkick, you can get the id with:
72
+
73
+ ```ruby
74
+ results = Item.search("apple", track: true)
75
+ results.search.id
76
+ ```
70
77
 
71
78
  When a user converts, find the record and call `convert`.
72
79
 
@@ -78,25 +85,24 @@ search.convert
78
85
  Better yet, record the model that converted.
79
86
 
80
87
  ```ruby
81
- item = Item.find(params[:item_id])
82
88
  search.convert(item)
83
89
  ```
84
90
 
85
- ### Authentication
91
+ ## Authentication
86
92
 
87
93
  Don’t forget to protect the dashboard in production.
88
94
 
89
- #### Devise
95
+ ### Devise
90
96
 
91
97
  In your `config/routes.rb`:
92
98
 
93
99
  ```ruby
94
- authenticate :user, -> (user) { user.admin? } do
100
+ authenticate :user, ->(user) { user.admin? } do
95
101
  mount Searchjoy::Engine, at: "searchjoy"
96
102
  end
97
103
  ```
98
104
 
99
- #### Basic Authentication
105
+ ### Basic Authentication
100
106
 
101
107
  Set the following variables in your environment or an initializer.
102
108
 
@@ -105,45 +111,40 @@ ENV["SEARCHJOY_USERNAME"] = "andrew"
105
111
  ENV["SEARCHJOY_PASSWORD"] = "secret"
106
112
  ```
107
113
 
108
- ### Customize
114
+ ## Customize
115
+
116
+ To customize, create an initializer `config/initializers/searchjoy.rb`.
109
117
 
110
- To change the time zone, create an initializer `config/initializers/searchjoy.rb` with:
118
+ Change the time zone
111
119
 
112
120
  ```ruby
113
121
  Searchjoy.time_zone = "Pacific Time (US & Canada)" # defaults to Time.zone
114
122
  ```
115
123
 
116
- Change the number of top searches shown with:
124
+ Change the number of top searches shown
117
125
 
118
126
  ```ruby
119
127
  Searchjoy.top_searches = 500 # defaults to 100
120
128
  ```
121
129
 
122
- Link to the search results [master]
130
+ Link to the search results
123
131
 
124
132
  ```ruby
125
- Searchjoy.query_url = -> (search) { Rails.application.routes.url_helpers.items_path(q: search.query) }
133
+ Searchjoy.query_url = ->(search) { Rails.application.routes.url_helpers.items_path(q: search.query) }
126
134
  ```
127
135
 
128
- Add additional info to the query in the live stream.
136
+ Add additional info to the query in the live stream
129
137
 
130
138
  ```ruby
131
- Searchjoy.query_name = -> (search) { "#{search.query} #{search.city}" }
139
+ Searchjoy.query_name = ->(search) { "#{search.query} #{search.city}" }
132
140
  ```
133
141
 
134
- Show the conversion name in the live stream.
142
+ Show the conversion name in the live stream
135
143
 
136
144
  ```ruby
137
- Searchjoy.conversion_name = -> (model) { model.name }
145
+ Searchjoy.conversion_name = ->(model) { model.name }
138
146
  ```
139
147
 
140
- ## TODO
141
-
142
- - customize views
143
- - analytics for individual queries
144
- - group similar queries
145
- - track pagination, facets, sorting, etc
146
-
147
148
  ## Contributing
148
149
 
149
150
  Everyone is encouraged to help improve this project. Here are a few ways you can help:
@@ -152,3 +153,12 @@ Everyone is encouraged to help improve this project. Here are a few ways you can
152
153
  - Fix bugs and [submit pull requests](https://github.com/ankane/searchjoy/pulls)
153
154
  - Write, clarify, or fix documentation
154
155
  - Suggest or add new feature
156
+
157
+ To get started with development and testing:
158
+
159
+ ```sh
160
+ git clone https://github.com/ankane/searchjoy.git
161
+ cd searchjoy
162
+ bundle install
163
+ bundle exec rake test
164
+ ```
@@ -0,0 +1,2 @@
1
+ //= require chartkick
2
+ //= require Chart.bundle
@@ -20,8 +20,8 @@ module Searchjoy
20
20
 
21
21
  def overview
22
22
  relation = Searchjoy::Search.where(search_type: params[:search_type])
23
- @searches_by_week = relation.group_by_week(:created_at, Time.zone, @time_range).count
24
- @conversions_by_week = relation.where("converted_at is not null").group_by_week(:created_at, Time.zone, @time_range).count
23
+ @searches_by_week = relation.group_by_week(:created_at, time_zone: Time.zone, range: @time_range).count
24
+ @conversions_by_week = relation.where("converted_at is not null").group_by_week(:created_at, time_zone: Time.zone, range: @time_range).count
25
25
  @top_searches = @searches.first(5)
26
26
  @bad_conversion_rate = @searches.sort_by { |s| [s["conversion_rate"].to_f, s["query"]] }.first(5).select { |s| s["conversion_rate"] < 50 }
27
27
  @conversion_rate_by_week = {}
@@ -1,15 +1,9 @@
1
1
  module Searchjoy
2
2
  class Search < ActiveRecord::Base
3
- if Rails::VERSION::MAJOR == 5
4
- belongs_to :convertable, polymorphic: true, optional: true
5
- else
6
- belongs_to :convertable, polymorphic: true
7
- end
3
+ self.table_name = "searchjoy_searches"
8
4
 
9
- # the devise way
10
- if (Rails::VERSION::MAJOR == 3 && !defined?(ActionController::StrongParameters)) || defined?(ActiveModel::MassAssignmentSecurity)
11
- attr_accessible :search_type, :query, :results_count
12
- end
5
+ belongs_to :convertable, polymorphic: true, optional: true
6
+ belongs_to :user, optional: true
13
7
 
14
8
  before_save :set_normalized_query
15
9
 
@@ -280,7 +280,7 @@
280
280
  }
281
281
  </style>
282
282
 
283
- <%= javascript_include_tag "https://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js", "https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.4.0/Chart.bundle.min.js", "chartkick" %>
283
+ <%= javascript_include_tag "searchjoy" %>
284
284
  </head>
285
285
  <body>
286
286
  <div class="container">
@@ -3,11 +3,21 @@
3
3
  <table id="stream"></table>
4
4
 
5
5
  <script>
6
+ function load(element, path) {
7
+ var request = new XMLHttpRequest();
8
+ request.open("GET", path, true);
9
+ request.onload = function() {
10
+ if (request.status >= 200 && request.status < 400) {
11
+ var resp = request.responseText;
12
+ element.innerHTML = resp;
13
+ }
14
+ };
15
+ request.send();
16
+ }
17
+
6
18
  function fetchRecentSearches() {
7
- $("#stream").load("<%= searches_recent_path %>");
19
+ load(document.getElementById("stream"), "<%= searches_recent_path %>")
8
20
  setTimeout(fetchRecentSearches, 5 * 1000);
9
21
  }
10
- $( function() {
11
- fetchRecentSearches();
12
- });
22
+ fetchRecentSearches();
13
23
  </script>
@@ -1,34 +1,17 @@
1
- # taken from https://github.com/collectiveidea/audited/blob/master/lib/generators/audited/install_generator.rb
2
- require "rails/generators"
3
- require "rails/generators/migration"
4
- require "active_record"
5
1
  require "rails/generators/active_record"
6
2
 
7
3
  module Searchjoy
8
4
  module Generators
9
5
  class InstallGenerator < Rails::Generators::Base
10
- include Rails::Generators::Migration
11
-
12
- source_root File.expand_path("../templates", __FILE__)
13
-
14
- # Implement the required interface for Rails::Generators::Migration.
15
- def self.next_migration_number(dirname) #:nodoc:
16
- next_migration_number = current_migration_number(dirname) + 1
17
- if ActiveRecord::Base.timestamped_migrations
18
- [Time.now.utc.strftime("%Y%m%d%H%M%S"), "%.14d" % next_migration_number].max
19
- else
20
- "%.3d" % next_migration_number
21
- end
22
- end
6
+ include ActiveRecord::Generators::Migration
7
+ source_root File.join(__dir__, "templates")
23
8
 
24
9
  def copy_migration
25
10
  migration_template "install.rb", "db/migrate/install_searchjoy.rb", migration_version: migration_version
26
11
  end
27
12
 
28
13
  def migration_version
29
- if ActiveRecord::VERSION::MAJOR >= 5
30
- "[#{ActiveRecord::VERSION::MAJOR}.#{ActiveRecord::VERSION::MINOR}]"
31
- end
14
+ "[#{ActiveRecord::VERSION::MAJOR}.#{ActiveRecord::VERSION::MINOR}]"
32
15
  end
33
16
  end
34
17
  end
@@ -1,20 +1,18 @@
1
1
  class <%= migration_class_name %> < ActiveRecord::Migration<%= migration_version %>
2
2
  def change
3
3
  create_table :searchjoy_searches do |t|
4
- t.integer :user_id
4
+ t.references :user
5
5
  t.string :search_type
6
6
  t.string :query
7
7
  t.string :normalized_query
8
8
  t.integer :results_count
9
9
  t.timestamp :created_at
10
- t.integer :convertable_id
11
- t.string :convertable_type
10
+ t.references :convertable, polymorphic: true, index: {name: "index_searchjoy_searches_on_convertable"}
12
11
  t.timestamp :converted_at
13
12
  end
14
13
 
15
14
  add_index :searchjoy_searches, [:created_at]
16
15
  add_index :searchjoy_searches, [:search_type, :created_at]
17
- add_index :searchjoy_searches, [:search_type, :normalized_query, :created_at], name: "index_searchjoy_searches_on_search_type_normalized_query" # autogenerated name is too long
18
- add_index :searchjoy_searches, [:convertable_id, :convertable_type]
16
+ add_index :searchjoy_searches, [:search_type, :normalized_query, :created_at], name: "index_searchjoy_searches_on_search_type_query" # autogenerated name is too long
19
17
  end
20
18
  end
@@ -1,9 +1,8 @@
1
- require "active_record"
1
+ require "active_support/core_ext/module/attribute_accessors"
2
2
  require "chartkick"
3
3
  require "groupdate"
4
4
 
5
5
  require "searchjoy/track"
6
- require "searchjoy/engine" if defined?(Rails)
7
6
  require "searchjoy/version"
8
7
 
9
8
  module Searchjoy
@@ -21,24 +20,16 @@ module Searchjoy
21
20
  mattr_accessor :conversion_name
22
21
  mattr_accessor :query_name
23
22
  mattr_accessor :query_url
24
- end
25
23
 
26
- begin
27
- require "searchkick"
28
- rescue LoadError
29
- # do nothing
24
+ def self.attach_to_searchkick!
25
+ Searchkick::Query.prepend(Searchjoy::Track::Query)
26
+ Searchkick::MultiSearch.prepend(Searchjoy::Track::MultiSearch)
27
+ Searchkick::Results.send(:attr_accessor, :search)
28
+ end
30
29
  end
31
30
 
32
- if defined?(Searchkick)
33
- module Searchkick
34
- class Query
35
- include Searchjoy::Track
36
- define_method(:execute_without_track, instance_method(:execute))
37
- define_method(:execute, instance_method(:execute_with_track))
38
- end
39
-
40
- class Results
41
- attr_accessor :search
42
- end
43
- end
31
+ if defined?(Rails)
32
+ require "searchjoy/engine"
33
+ else
34
+ Searchjoy.attach_to_searchkick! if defined?(Searchkick)
44
35
  end
@@ -1,5 +1,18 @@
1
1
  module Searchjoy
2
2
  class Engine < ::Rails::Engine
3
3
  isolate_namespace Searchjoy
4
+
5
+ initializer "searchjoy" do |app|
6
+ if app.config.respond_to?(:assets)
7
+ if defined?(Sprockets) && Sprockets::VERSION >= "4"
8
+ app.config.assets.precompile << "searchjoy.js"
9
+ else
10
+ # use a proc instead of a string
11
+ app.config.assets.precompile << proc { |path| path == "searchjoy.js" }
12
+ end
13
+ end
14
+
15
+ Searchjoy.attach_to_searchkick! if defined?(Searchkick)
16
+ end
4
17
  end
5
18
  end
@@ -1,24 +1,48 @@
1
1
  module Searchjoy
2
2
  module Track
3
- def execute_with_track
4
- results = execute_without_track
5
-
6
- if options[:track]
7
- attributes = options[:track] == true ? {} : options[:track]
8
-
9
- search_type =
10
- if klass.respond_to?(:name) && klass.name.present?
11
- klass.name
12
- elsif options[:index_name]
13
- Array(options[:index_name]).map(&:to_s).sort.join(" ")
14
- else
15
- "All Indices"
16
- end
17
-
18
- results.search = Searchjoy::Search.create({search_type: search_type, query: term, results_count: results.total_count}.merge(attributes))
3
+ module Query
4
+ def track
5
+ results = @execute
6
+
7
+ if options[:track] && !results.search
8
+ attributes = options[:track] == true ? {} : options[:track]
9
+
10
+ search_type =
11
+ if klass.respond_to?(:name) && klass.name.present?
12
+ klass.name
13
+ elsif options[:models]
14
+ Array(options[:models]).map(&:to_s).sort.join(" ")
15
+ elsif options[:index_name]
16
+ Array(options[:index_name]).map(&:to_s).sort.join(" ")
17
+ else
18
+ "All Indices"
19
+ end
20
+
21
+ results.search = Searchjoy::Search.create({search_type: search_type, query: term, results_count: results.total_count}.merge(attributes))
22
+ end
19
23
  end
20
24
 
21
- results
25
+ def execute
26
+ results = super
27
+ track
28
+ results
29
+ end
30
+
31
+ def search
32
+ @execute.search if @execute
33
+ end
34
+ end
35
+
36
+ module MultiSearch
37
+ def perform
38
+ result = super
39
+
40
+ @queries.each do |query|
41
+ query.track
42
+ end
43
+
44
+ result
45
+ end
22
46
  end
23
47
  end
24
48
  end
@@ -1,3 +1,3 @@
1
1
  module Searchjoy
2
- VERSION = "0.3.1"
2
+ VERSION = "0.4.3"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: searchjoy
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.1
4
+ version: 0.4.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrew Kane
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-05-12 00:00:00.000000000 Z
11
+ date: 2020-03-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: chartkick
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: '2'
19
+ version: '3.2'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: '2'
26
+ version: '3.2'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: groupdate
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -44,14 +44,14 @@ dependencies:
44
44
  requirements:
45
45
  - - ">="
46
46
  - !ruby/object:Gem::Version
47
- version: '4'
47
+ version: '5'
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - ">="
53
53
  - !ruby/object:Gem::Version
54
- version: '4'
54
+ version: '5'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: bundler
57
57
  requirement: !ruby/object:Gem::Requirement
@@ -94,19 +94,44 @@ dependencies:
94
94
  - - ">="
95
95
  - !ruby/object:Gem::Version
96
96
  version: '0'
97
- description: Search analytics made easy
98
- email:
99
- - andrew@chartkick.com
97
+ - !ruby/object:Gem::Dependency
98
+ name: sqlite3
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: searchkick
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
+ description:
126
+ email: andrew@chartkick.com
100
127
  executables: []
101
128
  extensions: []
102
129
  extra_rdoc_files: []
103
130
  files:
104
- - ".gitignore"
105
131
  - CHANGELOG.md
106
- - Gemfile
107
132
  - LICENSE.txt
108
133
  - README.md
109
- - Rakefile
134
+ - app/assets/javascripts/searchjoy.js
110
135
  - app/controllers/searchjoy/searches_controller.rb
111
136
  - app/models/searchjoy/search.rb
112
137
  - app/views/layouts/searchjoy/application.html.erb
@@ -116,14 +141,11 @@ files:
116
141
  - app/views/searchjoy/searches/stream.html.erb
117
142
  - config/routes.rb
118
143
  - lib/generators/searchjoy/install_generator.rb
119
- - lib/generators/searchjoy/templates/install.rb
144
+ - lib/generators/searchjoy/templates/install.rb.tt
120
145
  - lib/searchjoy.rb
121
146
  - lib/searchjoy/engine.rb
122
147
  - lib/searchjoy/track.rb
123
148
  - lib/searchjoy/version.rb
124
- - searchjoy.gemspec
125
- - test/searchjoy_test.rb
126
- - test/test_helper.rb
127
149
  homepage: https://github.com/ankane/searchjoy
128
150
  licenses:
129
151
  - MIT
@@ -136,18 +158,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
136
158
  requirements:
137
159
  - - ">="
138
160
  - !ruby/object:Gem::Version
139
- version: '0'
161
+ version: '2.4'
140
162
  required_rubygems_version: !ruby/object:Gem::Requirement
141
163
  requirements:
142
164
  - - ">="
143
165
  - !ruby/object:Gem::Version
144
166
  version: '0'
145
167
  requirements: []
146
- rubyforge_project:
147
- rubygems_version: 2.6.11
168
+ rubygems_version: 3.1.2
148
169
  signing_key:
149
170
  specification_version: 4
150
171
  summary: Search analytics made easy
151
- test_files:
152
- - test/searchjoy_test.rb
153
- - test/test_helper.rb
172
+ test_files: []
data/.gitignore DELETED
@@ -1,17 +0,0 @@
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
data/Gemfile DELETED
@@ -1,4 +0,0 @@
1
- source "https://rubygems.org"
2
-
3
- # Specify your gem's dependencies in searchjoy.gemspec
4
- gemspec
data/Rakefile DELETED
@@ -1,8 +0,0 @@
1
- require "bundler/gem_tasks"
2
- require "rake/testtask"
3
-
4
- task default: :test
5
- Rake::TestTask.new do |t|
6
- t.libs << "test"
7
- t.pattern = "test/**/*_test.rb"
8
- end
@@ -1,28 +0,0 @@
1
- # coding: utf-8
2
- lib = File.expand_path("../lib", __FILE__)
3
- $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
- require "searchjoy/version"
5
-
6
- Gem::Specification.new do |spec|
7
- spec.name = "searchjoy"
8
- spec.version = Searchjoy::VERSION
9
- spec.authors = ["Andrew Kane"]
10
- spec.email = ["andrew@chartkick.com"]
11
- spec.description = "Search analytics made easy"
12
- spec.summary = "Search analytics made easy"
13
- spec.homepage = "https://github.com/ankane/searchjoy"
14
- spec.license = "MIT"
15
-
16
- spec.files = `git ls-files`.split($INPUT_RECORD_SEPARATOR)
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_dependency "chartkick", ">= 2"
22
- spec.add_dependency "groupdate", ">= 3"
23
- spec.add_dependency "activerecord", ">= 4"
24
-
25
- spec.add_development_dependency "bundler"
26
- spec.add_development_dependency "rake"
27
- spec.add_development_dependency "minitest"
28
- end
@@ -1,15 +0,0 @@
1
- require_relative "test_helper"
2
-
3
- class SearchjoyTest < Minitest::Test
4
- def test_must_respond_to_top_searches
5
- assert_respond_to Searchjoy, :top_searches
6
- end
7
-
8
- def test_must_respond_to_conversion_name
9
- assert_respond_to Searchjoy, :conversion_name
10
- end
11
-
12
- def test_must_respond_to_time_zone
13
- assert_respond_to Searchjoy, :time_zone
14
- end
15
- end
@@ -1,6 +0,0 @@
1
- require "bundler/setup"
2
- Bundler.require(:default)
3
- require "minitest/autorun"
4
- require "minitest/pride"
5
-
6
- Minitest::Test = Minitest::Unit::TestCase unless defined?(Minitest::Test)