zelkova 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 86b06cdb9578edcaa80c633a1b2205d9a01fd231aaecbc3c8721482ab960da36
4
- data.tar.gz: b94f3080271dc65a3c4f21c7e7bf95d1ea25f3b9509825278aeea819b13bd6f4
3
+ metadata.gz: 99845c2d87f2d9f7e4c66c96912a9aac723677f4069a205bdb5e0979c3be035c
4
+ data.tar.gz: 6c1d6d6e4cb6d5c53bd56dec2319cbb1d43756d11bcd955afd9a7a9b03ddafac
5
5
  SHA512:
6
- metadata.gz: a2e6e47acd4da9b54db90a18039f6af0d7635cc54e630570bbbbf3e7f9da5ebc71c5fe7acbe7aa5f2eea40ae8a0ad2c53c1534ee77932649c03f3e04e355d4bd
7
- data.tar.gz: f9f6a520545eeaf470729a6ad1332884b6753857b8fd7535c8c3088086b8fb308460dc742a1d791b813176a8ab5247945dd07ab09068603622b95a59f9378dab
6
+ metadata.gz: 75ac38244fb0a07394dc799bda375a930431ec670fe706ce4ec826504cdd22acb6777f73f8a2b5f4834dd670a103eea7ac2b0bf82aefdb190fb08b738a68d53b
7
+ data.tar.gz: 4622edc7572b76f1f0b938e1cfa0e9f38896842c1debfe937c63acc7862a9e37576727b083c305fb1665f7597f4b9a5990d9e96c60a5ff36de6d4ae63a51dbf7
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- zelkova (0.1.0)
4
+ zelkova (0.1.1)
5
5
  eikon
6
6
 
7
7
  GEM
data/lib/zelkova/graph.rb CHANGED
@@ -18,16 +18,28 @@ class Zelkova::Graph
18
18
  sig { returns(Integer) }
19
19
  attr_reader :depth
20
20
 
21
- sig { void }
22
- def initialize
21
+ sig { returns(Integer) }
22
+ attr_accessor :radius
23
+
24
+ sig { params(radius: T.nilable(Integer)).void }
25
+ def initialize(radius = 2)
23
26
  @root_node = T.let(nil, T.nilable(Zelkova::Node))
24
27
  @nodes = T.let([], T::Array[Zelkova::Node])
25
28
  @depth = T.let(0, Integer)
29
+
30
+ @radius = T.let(T.must(radius), Integer)
31
+ end
32
+
33
+ sig { void }
34
+ def reset
35
+ @root_node = nil
36
+ @nodes = []
37
+ @depth = 0
26
38
  end
27
39
 
28
- sig { params(word: String).returns(Zelkova::Node) }
29
- def add_node(word)
30
- node = Zelkova::Node.new(word, self)
40
+ sig { params(word: String, metadata: T.nilable(T::Hash[T.untyped, T.untyped])).returns(Zelkova::Node) }
41
+ def add_node(word, metadata = {})
42
+ node = Zelkova::Node.new(word, self, metadata)
31
43
  nodes << node
32
44
 
33
45
  if @root_node.nil?
@@ -60,9 +72,9 @@ class Zelkova::Graph
60
72
  node
61
73
  end
62
74
 
63
- sig { params(query: String).returns(T::Array[String]) }
75
+ sig { params(query: String).returns(T::Array[T::Hash[Zelkova::Node, Float]]) }
64
76
  def search(query)
65
- radius = 2
77
+ radius = @radius
66
78
  candidate_nodes = []
67
79
  candidate_edges = []
68
80
 
@@ -85,20 +97,6 @@ class Zelkova::Graph
85
97
  end
86
98
 
87
99
  candidate_nodes.sort_by! { |candidate_node| candidate_node[:distance] }
88
- candidate_nodes.map { |candidate_node| candidate_node[:node].word }
100
+ candidate_nodes
89
101
  end
90
102
  end
91
-
92
- # class Comparator
93
- # extend T::Sig
94
-
95
- # sig { params(dhash_1: String, dhash_2: String).returns(Integer) }
96
- # def self.compare(dhash_1, dhash_2)
97
- # hamming_distance = 0
98
- # dhash_1.chars.each_with_index do |character, index|
99
- # hamming_distance += 1 if character != dhash_2.chars[index]
100
- # end
101
-
102
- # hamming_distance + (dhash_1.length - dhash_2.length).abs
103
- # end
104
- # end
data/lib/zelkova/node.rb CHANGED
@@ -11,18 +11,20 @@ class Zelkova::Node
11
11
  attr_reader :edges
12
12
  sig { returns(Zelkova::Graph) }
13
13
  attr_reader :graph
14
+ sig { returns(T::Hash[T.untyped, T.untyped]) }
15
+ attr_reader :metadata
14
16
 
15
- sig { params(word: String, graph: Zelkova::Graph).void }
16
- def initialize(word, graph)
17
+ sig { params(word: String, graph: Zelkova::Graph, metadata: T.nilable(T::Hash[T.untyped, T.untyped])).void }
18
+ def initialize(word, graph, metadata = {})
17
19
  @word = T.let(word, String)
18
20
  @graph = T.let(graph, Zelkova::Graph)
19
-
20
21
  @edges = T.let([], T::Array[Zelkova::Edge])
22
+ @metadata = T.let(T.must(metadata), T::Hash[T.untyped, T.untyped])
21
23
  end
22
24
 
23
25
  sig { returns(String) }
24
26
  def inspect
25
- "Word: #{self.word}, Number of Edges: #{self.edges.count}"
27
+ "Word: #{self.word}, Number of Edges: #{self.edges.count}, Metadata: #{self.metadata}"
26
28
  end
27
29
 
28
30
  sig { params(node: Zelkova::Node, weight: Integer).void }
@@ -1,4 +1,4 @@
1
1
  # typed: strict
2
2
  module Zelkova
3
- VERSION = "0.1.0"
3
+ VERSION = "0.1.1"
4
4
  end
data/lib/zelkova.rb CHANGED
@@ -7,4 +7,16 @@ require_relative "zelkova/graph"
7
7
 
8
8
  module Zelkova
9
9
  class Error < StandardError; end
10
+
11
+ @@graph = T.let(Zelkova::Graph.new, Zelkova::Graph)
12
+
13
+ class << self
14
+ extend T::Sig
15
+
16
+ sig { returns(Zelkova::Graph) }
17
+ def graph
18
+ # TODO: make this lazy when in development mode for speed
19
+ @@graph
20
+ end
21
+ end
10
22
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: zelkova
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Christopher Guess
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-04-27 00:00:00.000000000 Z
11
+ date: 2022-05-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: eikon