needle_in_a_haystack 1.0.2 → 1.0.4

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
2
  SHA256:
3
- metadata.gz: dcc57ef8ef5c022fd98794c87852be14133a293b05b765f5b1152384dbf4b944
4
- data.tar.gz: 67a37aa74001245538ba6e467e28bd3a1a23117a1452dcd1af8b5c68e6ef8ad0
3
+ metadata.gz: af267c9afbbd079edbdcb7ac293721697491a7e47dac4d19963ad9af83fbd60d
4
+ data.tar.gz: e100eff5dfe19e038ffb8c6e8086b96eb1a034f87d3de1b66861ac91a05493b6
5
5
  SHA512:
6
- metadata.gz: bd9bfdf36861ad29009088e358833bca69a1612e078229d8cd4205a57386459bfaff8325cb967e474e7cc83b3df70b62586a8a9768ab8fb12c7ad3bb8176b40b
7
- data.tar.gz: b752e74b8f878ed842691f85cb4bd6e89cfe116e880769447a92ab3107daf2be6f979acd349d1e72cff9352d7e5177dd3005a513deabbec31ccdd6ca32b9c183
6
+ metadata.gz: d2870fbe87246fe0e39b6818fcd2ebffb5767af2a39a1d0b3636c2f93b8fc069ebdda4a4b0c7f15ae4af878fa5507571db6d29f367213510857a8f64d0d5f214
7
+ data.tar.gz: 6e49496b73f7d4bee5ee41e1bcc34e8e322eae66ac5af71419516c8532e7b79a2066827679dcce59680d3627cd9af4c2c968501cd9c14d07a299adb628fe72fa
@@ -0,0 +1,13 @@
1
+ class BaseFactory
2
+ def create_tag(name, description)
3
+ raise NotImplementedError, "Subclasses must implement a create_tag-method"
4
+ end
5
+
6
+ def create_tagging(tag, taggable)
7
+ raise NotImplementedError, "Subclasses must implement a create_tagging-method"
8
+ end
9
+
10
+ def find_or_create_tag(name, attributes = {})
11
+ raise NotImplementedError, "Subclasses must implement a find_or_create_tag-method"
12
+ end
13
+ end
@@ -0,0 +1,31 @@
1
+ class BaseTag < ApplicationRecord
2
+ self.abstract_class = true
3
+
4
+ def full_path
5
+ raise NotImplementedError, "Subclasses must implement a full_path-method"
6
+ end
7
+
8
+ def prevent_circular_reference
9
+ raise NotImplementedError, "Subclasses must implement a prevent_circular_reference-method"
10
+ end
11
+
12
+ def ancestors
13
+ raise NotImplementedError, "Subclasses must implement an ancestors-method"
14
+ end
15
+
16
+ def descendants
17
+ raise NotImplementedError, "Subclasses must implement a descendants-method"
18
+ end
19
+
20
+ def siblings
21
+ raise NotImplementedError, "Subclasses must implement a siblings-method"
22
+ end
23
+
24
+ def root?
25
+ raise NotImplementedError, "Subclasses must implement a root?-method"
26
+ end
27
+
28
+ def leaf?
29
+ raise NotImplementedError, "Subclasses must implement a leaf?-method"
30
+ end
31
+ end
@@ -0,0 +1,11 @@
1
+ class BaseTagging < ApplicationRecord
2
+ self.abstract_class = true
3
+
4
+ def tag
5
+ raise NotImplementedError, "Subclasses must implement a tag-method"
6
+ end
7
+
8
+ def taggable
9
+ raise NotImplementedError, "Subclasses must implement a taggable-method"
10
+ end
11
+ end
@@ -1,4 +1,3 @@
1
- # app/models/concerns/taggable.rb
2
1
  module Taggable
3
2
  extend ActiveSupport::Concern
4
3
 
@@ -48,19 +48,25 @@ class HaystackOntology < ApplicationRecord
48
48
  tag = HaystackTag.find_or_create_by(name: name.to_s)
49
49
  tag.update(description: data["description"], parent_tag_id: parent_tag&.id, haystack_marker: data["marker"])
50
50
 
51
- Rails.logger.info("Created tag: #{tag.name}, Parent: #{parent_tag&.name}")
51
+ Rails.logger.info("Created tag: #{tag.name}, Parent: #{parent_tag&.name}, Parent ID: #{parent_tag&.id}")
52
52
 
53
- create_tag_hierarchy(data["children"], tag) if data["children"]
53
+ if data["children"]
54
+ Rails.logger.info("Processing children for tag: #{tag.name}")
55
+ create_tag_hierarchy(data["children"], tag)
56
+ end
54
57
  end
55
58
  end
56
59
 
57
60
  def self.find_or_create_tag(name)
61
+ factory = HaystackFactory.new
58
62
  tag_data = find_tag(name)
59
63
  return nil if tag_data.nil?
60
64
 
61
- tag = HaystackTag.find_or_create_by(name: name)
62
- tag.update(description: tag_data["description"], haystack_marker: tag_data["marker"])
63
- Rails.logger.info("Tag aangemaakt of gevonden: #{tag.name}")
64
- tag
65
+ attributes = { description: tag_data["description"], haystack_marker: tag_data["marker"] }
66
+ factory.find_or_create_tag(name, attributes)
67
+ end
68
+
69
+ def self.import_full_ontology
70
+ create_tags
65
71
  end
66
72
  end
@@ -1,10 +1,10 @@
1
- class HaystackTag < ApplicationRecord
1
+ class HaystackTag < BaseTag
2
2
  belongs_to :parent_tag, class_name: "HaystackTag", optional: true
3
3
  has_many :children, class_name: "HaystackTag", foreign_key: "parent_tag_id", dependent: :destroy, inverse_of: :parent_tag
4
4
  has_many :haystack_taggings, dependent: :destroy
5
5
  has_many :taggables, through: :haystack_taggings
6
6
 
7
- validates :name, presence: true
7
+ validates :name, presence: true, uniqueness: true
8
8
  validates :description, presence: true
9
9
  validate :prevent_circular_reference
10
10
 
@@ -18,23 +18,26 @@ class HaystackTag < ApplicationRecord
18
18
  ancestors
19
19
  end
20
20
 
21
+ def full_path
22
+ ancestors.reverse.map(&:name).join(" > ") + " > " + name
23
+ end
24
+
21
25
  def self.find_by_path(path)
22
26
  keys = path.split(".")
23
27
  current = nil
24
28
  keys.each do |key|
25
- current = current ? current.child_tags.find_by(name: key) : find_by(name: key)
29
+ current = current ? current.children.find_by(name: key) : find_by(name: key)
26
30
  return nil unless current
27
31
  end
28
32
  current
29
33
  end
30
34
 
31
35
  def descendants
32
- children = child_tags
33
36
  children + children.flat_map(&:descendants)
34
37
  end
35
38
 
36
39
  def siblings
37
- parent_tag ? parent_tag.child_tags.where.not(id: id) : self.class.where(parent_tag_id: nil).where.not(id: id)
40
+ parent_tag ? parent_tag.children.where.not(id: id) : self.class.where(parent_tag_id: nil).where.not(id: id)
38
41
  end
39
42
 
40
43
  def root?
@@ -42,7 +45,7 @@ class HaystackTag < ApplicationRecord
42
45
  end
43
46
 
44
47
  def leaf?
45
- child_tags.empty?
48
+ children.empty?
46
49
  end
47
50
 
48
51
  def depth
@@ -52,6 +55,6 @@ class HaystackTag < ApplicationRecord
52
55
  def prevent_circular_reference
53
56
  return unless parent_tag == self || ancestors.include?(self)
54
57
 
55
- errors.add(:parent_tag, "kan geen circulaire referentie bevatten")
58
+ errors.add(:parent_tag, "cannot contain a circular reference")
56
59
  end
57
60
  end
@@ -0,0 +1,4 @@
1
+ class HaystackTagging < BaseTagging
2
+ belongs_to :haystack_tag, class_name: "HaystackTag"
3
+ belongs_to :taggable, polymorphic: true
4
+ end
@@ -0,0 +1,15 @@
1
+ class HaystackFactory < BaseFactory
2
+ def create_tag(name, description)
3
+ HaystackTag.create(name: name, description: description)
4
+ end
5
+
6
+ def create_tagging(tag, taggable)
7
+ HaystackTagging.create(haystack_tag: tag, taggable: taggable)
8
+ end
9
+
10
+ def find_or_create_tag(name, attributes = {})
11
+ tag = HaystackTag.find_or_create_by(name: name)
12
+ tag.update(attributes)
13
+ tag
14
+ end
15
+ end
@@ -1 +1 @@
1
- VERSION = "1.0.2".freeze
1
+ VERSION = "1.0.4".freeze
@@ -2,8 +2,14 @@ require "needle_in_a_haystack/version"
2
2
  require "needle_in_a_haystack/engine"
3
3
  require "needle_in_a_haystack/application_record"
4
4
  require "needle_in_a_haystack/configuration"
5
- require "needle_in_a_haystack/haystack_tag"
6
- require "needle_in_a_haystack/haystack_tagging"
5
+ require "needle_in_a_haystack/concerns/base_tagging"
6
+ require "needle_in_a_haystack/concerns/base_tag"
7
+ require "needle_in_a_haystack/concerns/base_factory"
8
+
9
+ require "needle_in_a_haystack/models/haystack_ontology"
10
+ require "needle_in_a_haystack/models/haystack_tag"
11
+ require "needle_in_a_haystack/models/haystack_tagging"
12
+ require "needle_in_a_haystack/services/haystack_factory"
7
13
 
8
14
  module NeedleInAHaystack
9
15
  class << self
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: needle_in_a_haystack
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.2
4
+ version: 1.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Frans Verberne
@@ -275,14 +275,18 @@ files:
275
275
  - config/initializers/redis.rb
276
276
  - config/initializers/wrap_parameters.rb
277
277
  - config/locales/en.yml
278
- - lib/concerns/taggable.rb
279
278
  - lib/needle_in_a_haystack.rb
280
279
  - lib/needle_in_a_haystack/application_record.rb
280
+ - lib/needle_in_a_haystack/concerns/base_factory.rb
281
+ - lib/needle_in_a_haystack/concerns/base_tag.rb
282
+ - lib/needle_in_a_haystack/concerns/base_tagging.rb
283
+ - lib/needle_in_a_haystack/concerns/taggable.rb
281
284
  - lib/needle_in_a_haystack/configuration.rb
282
285
  - lib/needle_in_a_haystack/engine.rb
283
- - lib/needle_in_a_haystack/haystack_ontology.rb
284
- - lib/needle_in_a_haystack/haystack_tag.rb
285
- - lib/needle_in_a_haystack/haystack_tagging.rb
286
+ - lib/needle_in_a_haystack/models/haystack_ontology.rb
287
+ - lib/needle_in_a_haystack/models/haystack_tag.rb
288
+ - lib/needle_in_a_haystack/models/haystack_tagging.rb
289
+ - lib/needle_in_a_haystack/services/haystack_factory.rb
286
290
  - lib/needle_in_a_haystack/version.rb
287
291
  - lib/tasks/location_create.rake
288
292
  - spec/factories/haystack_tags.rb
@@ -1,4 +0,0 @@
1
- class HaystackTagging < ApplicationRecord
2
- belongs_to :haystack_tag
3
- belongs_to :taggable, polymorphic: true
4
- end