needle_in_a_haystack 1.0.0

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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 4866e9ea873340add03eadd30959c1394cd0168c03ebeeb7e28c37047d4eff29
4
+ data.tar.gz: 1764b64f7a33a738335b446faa2340887d95ad9e0d1c12ddc208eadee921f6c1
5
+ SHA512:
6
+ metadata.gz: e535c31af08738c6064e8bb3c818080ebf4dae98add9a4aa35b19d6485051b2aee6ed8cc474446007773d557f7f2870b9e85963115b6d342c7ad8af101a35c9d
7
+ data.tar.gz: 68baca7aacb408a164a8c020c8beda399f9d86955aef9d857a5f6d67ac300943047c21e37732b94130e64efc83bf18689c054488f5da2418fc5ef5f858479a66
data/Rakefile ADDED
@@ -0,0 +1,6 @@
1
+ # Add your own tasks in files placed in lib/tasks ending in .rake,
2
+ # for example lib/tasks/capistrano.rake, and they will automatically be available to Rake.
3
+
4
+ require_relative "config/application"
5
+
6
+ Rails.application.load_tasks
@@ -0,0 +1,8 @@
1
+ # Be sure to restart your server when you modify this file.
2
+
3
+ # ActiveSupport::Reloader.to_prepare do
4
+ # ApplicationController.renderer.defaults.merge!(
5
+ # http_host: 'example.org',
6
+ # https: false
7
+ # )
8
+ # end
@@ -0,0 +1,7 @@
1
+ # Be sure to restart your server when you modify this file.
2
+
3
+ # You can add backtrace silencers for libraries that you're using but don't wish to see in your backtraces.
4
+ # Rails.backtrace_cleaner.add_silencer { |line| line =~ /my_noisy_library/ }
5
+
6
+ # You can also remove all the silencers if you're trying to debug a problem that might stem from framework code.
7
+ # Rails.backtrace_cleaner.remove_silencers!
@@ -0,0 +1,5 @@
1
+ ENABLE_SENTRY_RAVEN ||= true
2
+ SERVER_URL ||= "http://localhost"
3
+ SERVER_PORT ||= 3000
4
+ USERNAME ||= "admin"
5
+ PASSWORD ||= "password"
@@ -0,0 +1,16 @@
1
+ # Be sure to restart your server when you modify this file.
2
+
3
+ # Avoid CORS issues when API is called from the frontend app.
4
+ # Handle Cross-Origin Resource Sharing (CORS) in order to accept cross-origin AJAX requests.
5
+
6
+ # Read more: https://github.com/cyu/rack-cors
7
+
8
+ # Rails.application.config.middleware.insert_before 0, Rack::Cors do
9
+ # allow do
10
+ # origins 'example.com'
11
+ #
12
+ # resource '*',
13
+ # headers: :any,
14
+ # methods: [:get, :post, :put, :patch, :delete, :options, :head]
15
+ # end
16
+ # end
@@ -0,0 +1,4 @@
1
+ # Be sure to restart your server when you modify this file.
2
+
3
+ # Configure sensitive parameters which will be filtered from the log file.
4
+ Rails.application.config.filter_parameters += [:password]
@@ -0,0 +1,16 @@
1
+ # Be sure to restart your server when you modify this file.
2
+
3
+ # Add new inflection rules using the following format. Inflections
4
+ # are locale specific, and you may define rules for as many different
5
+ # locales as you wish. All of these examples are active by default:
6
+ # ActiveSupport::Inflector.inflections(:en) do |inflect|
7
+ # inflect.plural /^(ox)$/i, '\1en'
8
+ # inflect.singular /^(ox)en/i, '\1'
9
+ # inflect.irregular 'person', 'people'
10
+ # inflect.uncountable %w( fish sheep )
11
+ # end
12
+
13
+ # These inflection rules are supported but not enabled by default:
14
+ # ActiveSupport::Inflector.inflections(:en) do |inflect|
15
+ # inflect.acronym 'RESTful'
16
+ # end
File without changes
@@ -0,0 +1,4 @@
1
+ # Be sure to restart your server when you modify this file.
2
+
3
+ # Add new mime types for use in respond_to blocks:
4
+ # Mime::Type.register "text/richtext", :rtf
@@ -0,0 +1,2 @@
1
+ require "connection_pool"
2
+ Redis::Objects.redis = ConnectionPool.new(size: 8, timeout: 5) { Redis.new(path: "/tmp/redis.sock")}
@@ -0,0 +1,14 @@
1
+ # Be sure to restart your server when you modify this file.
2
+
3
+ # This file contains settings for ActionController::ParamsWrapper which
4
+ # is enabled by default.
5
+
6
+ # Enable parameter wrapping for JSON. You can disable this by setting :format to an empty array.
7
+ ActiveSupport.on_load(:action_controller) do
8
+ wrap_parameters format: [:json]
9
+ end
10
+
11
+ # To enable root element in JSON for ActiveRecord objects.
12
+ # ActiveSupport.on_load(:active_record) do
13
+ # self.include_root_in_json = true
14
+ # end
@@ -0,0 +1,33 @@
1
+ # Files in the config/locales directory are used for internationalization
2
+ # and are automatically loaded by Rails. If you want to use locales other
3
+ # than English, add the necessary files in this directory.
4
+ #
5
+ # To use the locales, use `I18n.t`:
6
+ #
7
+ # I18n.t 'hello'
8
+ #
9
+ # In views, this is aliased to just `t`:
10
+ #
11
+ # <%= t('hello') %>
12
+ #
13
+ # To use a different locale, set it with `I18n.locale`:
14
+ #
15
+ # I18n.locale = :es
16
+ #
17
+ # This would use the information in config/locales/es.yml.
18
+ #
19
+ # The following keys must be escaped otherwise they will not be retrieved by
20
+ # the default I18n backend:
21
+ #
22
+ # true, false, on, off, yes, no
23
+ #
24
+ # Instead, surround them with single quotes.
25
+ #
26
+ # en:
27
+ # 'true': 'foo'
28
+ #
29
+ # To learn more, please read the Rails Internationalization guide
30
+ # available at https://guides.rubyonrails.org/i18n.html.
31
+
32
+ en:
33
+ hello: "Hello world"
@@ -0,0 +1,26 @@
1
+ # app/models/concerns/taggable.rb
2
+ module Taggable
3
+ extend ActiveSupport::Concern
4
+
5
+ included do
6
+ serialize :tags, JSON
7
+ end
8
+
9
+ def add_haystack_marker(marker)
10
+ self.tags ||= {}
11
+ self.tags[marker] = true
12
+ save!
13
+ end
14
+
15
+ def add_haystack_tag(key, value)
16
+ self.tags ||= {}
17
+ self.tags[key] = value
18
+ save!
19
+ end
20
+
21
+ def add_multiple_tags(tags_hash)
22
+ self.tags ||= {}
23
+ self.tags.merge!(tags_hash)
24
+ save!
25
+ end
26
+ end
@@ -0,0 +1,5 @@
1
+ module NeedleInAHaystack
2
+ class ApplicationRecord < ActiveRecord::Base
3
+ self.abstract_class = true
4
+ end
5
+ end
@@ -0,0 +1,9 @@
1
+ module NeedleInAHaystack
2
+ class Configuration
3
+ attr_accessor :taggable_models
4
+
5
+ def initialize
6
+ @taggable_models = []
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,11 @@
1
+ module NeedleInAHaystack
2
+ class Engine < ::Rails::Engine
3
+ isolate_namespace NeedleInAHaystack
4
+ end
5
+
6
+ raise "Gem 'needle_in_a_haystack' is not loaded" unless Gem.loaded_specs["needle_in_a_haystack"]
7
+
8
+ Gem.loaded_specs["needle_in_a_haystack"].dependencies.each do |d|
9
+ require d.name
10
+ end
11
+ end
@@ -0,0 +1,68 @@
1
+ module NeedleInAHaystack
2
+ class HaystackOntology < ApplicationRecord
3
+ def self.tags
4
+ @tags ||= YAML.load_file(Rails.root.join("config/haystack_ontology.yml"))
5
+ end
6
+
7
+ def self.find_tag(path)
8
+ return nil if path.nil?
9
+
10
+ path.include?(".") ? find_tag_in_hierarchy(tags, path.split(".").last) : find_tag_in_hierarchy(tags, path)
11
+ end
12
+
13
+ def self.find_tag_in_hierarchy(current_hash, target_key, path = [])
14
+ return nil unless current_hash.is_a?(Hash)
15
+
16
+ result = current_hash[target_key]
17
+ return result.is_a?(Hash) ? result.merge("path" => path.push(target_key).join(".")) : result if result
18
+
19
+ children = current_hash["children"]
20
+ if children.is_a?(Hash)
21
+ children.each do |key, value|
22
+ new_path = path + [key]
23
+ return value.merge("path" => new_path.join(".")) if key == target_key
24
+
25
+ result = find_tag_in_hierarchy(value, target_key, new_path)
26
+ return result if result
27
+ end
28
+ end
29
+
30
+ current_hash.each do |key, value|
31
+ next if %w[description children].include?(key) || !value.is_a?(Hash)
32
+
33
+ new_path = path + [key]
34
+ result = find_tag_in_hierarchy(value, target_key, new_path)
35
+ return result if result
36
+ end
37
+
38
+ nil
39
+ end
40
+
41
+ def self.create_tags
42
+ create_tag_hierarchy(tags)
43
+ end
44
+
45
+ def self.create_tag_hierarchy(tag_hash, parent_tag = nil)
46
+ tag_hash.each do |name, data|
47
+ next if %w[description children].include?(name)
48
+
49
+ tag = HaystackTag.find_or_create_by(name: name.to_s)
50
+ tag.update(description: data["description"], parent_tag_id: parent_tag&.id, haystack_marker: data["marker"])
51
+
52
+ Rails.logger.info("Created tag: #{tag.name}, Parent: #{parent_tag&.name}")
53
+
54
+ create_tag_hierarchy(data["children"], tag) if data["children"]
55
+ end
56
+ end
57
+
58
+ def self.find_or_create_tag(name)
59
+ tag_data = find_tag(name)
60
+ return nil if tag_data.nil?
61
+
62
+ tag = HaystackTag.find_or_create_by(name: name)
63
+ tag.update(description: tag_data["description"], haystack_marker: tag_data["marker"])
64
+ Rails.logger.info("Tag aangemaakt of gevonden: #{tag.name}")
65
+ tag
66
+ end
67
+ end
68
+ end
@@ -0,0 +1,69 @@
1
+ module NeedleInAHaystack
2
+ class HaystackTag < ApplicationRecord
3
+ self.table_name = "haystack_tags"
4
+
5
+ belongs_to :parent_tag, class_name: "NeedleInAHaystack::HaystackTag", optional: true
6
+ has_many :children, class_name: "NeedleInAHaystack::HaystackTag", foreign_key: "parent_tag_id", dependent: :destroy, inverse_of: :parent_tag
7
+ has_many :haystack_taggings, dependent: :destroy
8
+ has_many :taggables, through: :haystack_taggings
9
+
10
+ if NeedleInAHaystack.respond_to?(:configuration) && NeedleInAHaystack.configuration.taggable_models
11
+ NeedleInAHaystack.configuration.taggable_models.each do |model|
12
+ has_many "taggable_#{model.name.underscore.pluralize}".to_sym, through: :haystack_taggings, source: :taggable, source_type: model.name
13
+ end
14
+ end
15
+
16
+ validates :name, presence: true, uniqueness: true
17
+ validates :description, presence: true
18
+ validate :prevent_circular_reference
19
+
20
+ def ancestors
21
+ ancestors = []
22
+ current = self
23
+ while current.parent_tag
24
+ ancestors << current.parent_tag
25
+ current = current.parent_tag
26
+ end
27
+ ancestors
28
+ end
29
+
30
+ def self.find_by_path(path)
31
+ keys = path.split(".")
32
+ current = nil
33
+ keys.each do |key|
34
+ current = current ? current.child_tags.find_by(name: key) : find_by(name: key)
35
+ return nil unless current
36
+ end
37
+ current
38
+ end
39
+
40
+ def descendants
41
+ children = child_tags
42
+ children + children.flat_map(&:descendants)
43
+ end
44
+
45
+ def siblings
46
+ parent_tag ? parent_tag.child_tags.where.not(id: id) : self.class.where(parent_tag_id: nil).where.not(id: id)
47
+ end
48
+
49
+ def root?
50
+ parent_tag.nil?
51
+ end
52
+
53
+ def leaf?
54
+ child_tags.empty?
55
+ end
56
+
57
+ def depth
58
+ ancestors.size
59
+ end
60
+
61
+ private
62
+
63
+ def prevent_circular_reference
64
+ return unless parent_tag == self || ancestors.include?(self)
65
+
66
+ errors.add(:parent_tag, "kan geen circulaire referentie bevatten")
67
+ end
68
+ end
69
+ end
@@ -0,0 +1,8 @@
1
+ module NeedleInAHaystack
2
+ class HaystackTagging < ApplicationRecord
3
+ self.table_name = "haystack_taggings"
4
+
5
+ belongs_to :haystack_tag
6
+ belongs_to :taggable, polymorphic: true
7
+ end
8
+ end
@@ -0,0 +1,3 @@
1
+ module NeedleInAHaystack
2
+ VERSION = "1.0.0".freeze
3
+ end
@@ -0,0 +1,17 @@
1
+ require "needle_in_a_haystack/version"
2
+ require "needle_in_a_haystack/engine"
3
+ require "needle_in_a_haystack/application_record"
4
+ require "needle_in_a_haystack/configuration"
5
+ require "needle_in_a_haystack/haystack_tag"
6
+ require "needle_in_a_haystack/haystack_tagging"
7
+
8
+ module NeedleInAHaystack
9
+ class << self
10
+ attr_accessor :configuration
11
+
12
+ def configure
13
+ self.configuration ||= Configuration.new
14
+ yield(configuration)
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,7 @@
1
+ namespace :locations do
2
+ desc "Interactive location creator"
3
+ task create: :environment do
4
+ load "app/services/location_creator.rb"
5
+ LocationCreator.start
6
+ end
7
+ end
@@ -0,0 +1,16 @@
1
+ FactoryBot.define do
2
+ factory :haystack_tag, class: "NeedleInAHaystack::HaystackTag" do
3
+ sequence(:name) { |n| "Tag #{n}" }
4
+ sequence(:description) { |n| "Description #{n}" }
5
+
6
+ trait :root do
7
+ name { "root" }
8
+ description { "Root tag" }
9
+ parent_tag { nil }
10
+ end
11
+
12
+ trait :child do
13
+ association :parent_tag, factory: :haystack_tag
14
+ end
15
+ end
16
+ end
metadata ADDED
@@ -0,0 +1,319 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: needle_in_a_haystack
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Frans Verberne
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2024-11-27 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bcrypt_pbkdf
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: capistrano
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: capistrano-rails
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: connection_pool
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :runtime
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: dotenv-rails
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :runtime
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: ed25519
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :runtime
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: factory_bot_rails
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :runtime
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: hiredis
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :runtime
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: kodachroma
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ">="
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ type: :runtime
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: mysql2
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - ">="
144
+ - !ruby/object:Gem::Version
145
+ version: '0'
146
+ type: :runtime
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - ">="
151
+ - !ruby/object:Gem::Version
152
+ version: '0'
153
+ - !ruby/object:Gem::Dependency
154
+ name: rails
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - "~>"
158
+ - !ruby/object:Gem::Version
159
+ version: '7.1'
160
+ type: :runtime
161
+ prerelease: false
162
+ version_requirements: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - "~>"
165
+ - !ruby/object:Gem::Version
166
+ version: '7.1'
167
+ - !ruby/object:Gem::Dependency
168
+ name: redis
169
+ requirement: !ruby/object:Gem::Requirement
170
+ requirements:
171
+ - - "~>"
172
+ - !ruby/object:Gem::Version
173
+ version: '5.0'
174
+ type: :runtime
175
+ prerelease: false
176
+ version_requirements: !ruby/object:Gem::Requirement
177
+ requirements:
178
+ - - "~>"
179
+ - !ruby/object:Gem::Version
180
+ version: '5.0'
181
+ - !ruby/object:Gem::Dependency
182
+ name: redis-objects
183
+ requirement: !ruby/object:Gem::Requirement
184
+ requirements:
185
+ - - ">="
186
+ - !ruby/object:Gem::Version
187
+ version: 2.0.0.beta
188
+ type: :runtime
189
+ prerelease: false
190
+ version_requirements: !ruby/object:Gem::Requirement
191
+ requirements:
192
+ - - ">="
193
+ - !ruby/object:Gem::Version
194
+ version: 2.0.0.beta
195
+ - !ruby/object:Gem::Dependency
196
+ name: rspec-rails
197
+ requirement: !ruby/object:Gem::Requirement
198
+ requirements:
199
+ - - ">="
200
+ - !ruby/object:Gem::Version
201
+ version: '0'
202
+ type: :runtime
203
+ prerelease: false
204
+ version_requirements: !ruby/object:Gem::Requirement
205
+ requirements:
206
+ - - ">="
207
+ - !ruby/object:Gem::Version
208
+ version: '0'
209
+ - !ruby/object:Gem::Dependency
210
+ name: sentry-rails
211
+ requirement: !ruby/object:Gem::Requirement
212
+ requirements:
213
+ - - ">="
214
+ - !ruby/object:Gem::Version
215
+ version: '0'
216
+ type: :runtime
217
+ prerelease: false
218
+ version_requirements: !ruby/object:Gem::Requirement
219
+ requirements:
220
+ - - ">="
221
+ - !ruby/object:Gem::Version
222
+ version: '0'
223
+ - !ruby/object:Gem::Dependency
224
+ name: sentry-ruby
225
+ requirement: !ruby/object:Gem::Requirement
226
+ requirements:
227
+ - - ">="
228
+ - !ruby/object:Gem::Version
229
+ version: '0'
230
+ type: :runtime
231
+ prerelease: false
232
+ version_requirements: !ruby/object:Gem::Requirement
233
+ requirements:
234
+ - - ">="
235
+ - !ruby/object:Gem::Version
236
+ version: '0'
237
+ - !ruby/object:Gem::Dependency
238
+ name: sentry-sidekiq
239
+ requirement: !ruby/object:Gem::Requirement
240
+ requirements:
241
+ - - ">="
242
+ - !ruby/object:Gem::Version
243
+ version: '0'
244
+ type: :runtime
245
+ prerelease: false
246
+ version_requirements: !ruby/object:Gem::Requirement
247
+ requirements:
248
+ - - ">="
249
+ - !ruby/object:Gem::Version
250
+ version: '0'
251
+ - !ruby/object:Gem::Dependency
252
+ name: sidekiq
253
+ requirement: !ruby/object:Gem::Requirement
254
+ requirements:
255
+ - - "<"
256
+ - !ruby/object:Gem::Version
257
+ version: '8.0'
258
+ type: :runtime
259
+ prerelease: false
260
+ version_requirements: !ruby/object:Gem::Requirement
261
+ requirements:
262
+ - - "<"
263
+ - !ruby/object:Gem::Version
264
+ version: '8.0'
265
+ description: haystack ontology implementation for FourIQ projects.
266
+ email:
267
+ - frans.verberne@fouriq.nl
268
+ executables: []
269
+ extensions: []
270
+ extra_rdoc_files: []
271
+ files:
272
+ - Rakefile
273
+ - config/initializers/application_controller_renderer.rb
274
+ - config/initializers/backtrace_silencers.rb
275
+ - config/initializers/config.rb
276
+ - config/initializers/cors.rb
277
+ - config/initializers/filter_parameter_logging.rb
278
+ - config/initializers/inflections.rb
279
+ - config/initializers/lograge.rb
280
+ - config/initializers/mime_types.rb
281
+ - config/initializers/redis.rb
282
+ - config/initializers/wrap_parameters.rb
283
+ - config/locales/en.yml
284
+ - lib/concerns/taggable.rb
285
+ - lib/needle_in_a_haystack.rb
286
+ - lib/needle_in_a_haystack/application_record.rb
287
+ - lib/needle_in_a_haystack/configuration.rb
288
+ - lib/needle_in_a_haystack/engine.rb
289
+ - lib/needle_in_a_haystack/haystack_ontology.rb
290
+ - lib/needle_in_a_haystack/haystack_tag.rb
291
+ - lib/needle_in_a_haystack/haystack_tagging.rb
292
+ - lib/needle_in_a_haystack/version.rb
293
+ - lib/tasks/location_create.rake
294
+ - spec/factories/haystack_tags.rb
295
+ homepage: https://www.fouriq.nl
296
+ licenses:
297
+ - Nonstandard
298
+ metadata:
299
+ homepage_uri: https://www.fouriq.nl
300
+ post_install_message:
301
+ rdoc_options: []
302
+ require_paths:
303
+ - lib
304
+ required_ruby_version: !ruby/object:Gem::Requirement
305
+ requirements:
306
+ - - ">="
307
+ - !ruby/object:Gem::Version
308
+ version: 3.3.0
309
+ required_rubygems_version: !ruby/object:Gem::Requirement
310
+ requirements:
311
+ - - ">="
312
+ - !ruby/object:Gem::Version
313
+ version: '0'
314
+ requirements: []
315
+ rubygems_version: 3.5.22
316
+ signing_key:
317
+ specification_version: 4
318
+ summary: Models and dependencies shared across our projects.
319
+ test_files: []