nockr 0.0.2 → 0.0.3

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: 93572e6d615c8e6ed70842a183ef126a59c48582bb2777be6ecf15c71e4fc3ff
4
- data.tar.gz: d884e59795233131d5ad03049200ad01e6c7c0c3a8cd7f855a564c3b0a2d3e79
3
+ metadata.gz: a69e11b5de8f5d14856cc9af79f1f5392b370abf55acf1cf2774a83d8fc37036
4
+ data.tar.gz: 670d2748708eed02af24b105bc7023c32e905b444577c11922d84190bbb82dbd
5
5
  SHA512:
6
- metadata.gz: 9b48be61906e15b0ae9452c538232d466b3cda0a02125b4e069db1b3e708e9251d8b2c36aad0c2eda4e3775b0dc8fc9ac789ba7646767cb34f7d91ac44f6df9d
7
- data.tar.gz: f5b1b870dcff753ee26eec84bf6abaa6ecdf5c36ab7f87feb54afdb8894ac2f57085747c3be053e6b55c1457d83fccec06d317fb64d070a9cb02e34352501d31
6
+ metadata.gz: f065f537f5becf541ff7ce9deedcc79963da93edfd88f2f12b98b2e1b204bddca3b5c13b90ddcd6e5151b4193295915d41b2a8b304d71efe6b78be78e4c2b8ff
7
+ data.tar.gz: 3fb1a32e1cdd51377de0c3bc44fc6bbb0db7dd882c460810f35121f1d91e00b16d24e20c9cb514e01d3f678853da41d23389d5f3d9f295e2db7aad0a2204b0fa
data/lib/nockr/atom.rb ADDED
@@ -0,0 +1,28 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Nockr
4
+ class Atom < Noun
5
+ attr_reader :i
6
+
7
+ def initialize(i)
8
+ raise ArgumentError.new("an Atom must be initialized with a Natural Number") unless i.is_a? Integer
9
+ @i = i
10
+ end
11
+
12
+ def ary
13
+ [self.i]
14
+ end
15
+
16
+ def at(index:)
17
+ self
18
+ end
19
+
20
+ def atom?
21
+ true
22
+ end
23
+
24
+ def cell?
25
+ false
26
+ end
27
+ end
28
+ end
data/lib/nockr/cell.rb ADDED
@@ -0,0 +1,35 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Nockr
4
+ class Cell < Noun
5
+ attr_reader :h, :t
6
+
7
+ def initialize(head:, tail:)
8
+ @h = head
9
+ @t = tail
10
+ end
11
+
12
+ def ==(another_cell)
13
+ another_cell.h == self.h && another_cell.t == self.t
14
+ end
15
+
16
+ def ary
17
+ [@h.cell? ? @h.ary : @h.i, @t.cell? ? @t.ary : @t.i]
18
+ end
19
+
20
+ def at(index:)
21
+ raise ArgumentError.new("Invalid Index.") if index < 1 || index > 3
22
+ return self if 1 == index
23
+ return @h if 2 == index
24
+ return @t if 3 == index
25
+ end
26
+
27
+ def atom?
28
+ false
29
+ end
30
+
31
+ def cell?
32
+ true
33
+ end
34
+ end
35
+ end
data/lib/nockr/noun.rb CHANGED
@@ -1,19 +1,35 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Nockr
2
4
  class Noun
3
- def initialize(input_ary:)
4
- raise ArgumentError.new("a Noun must be initialized with an Array") unless input_ary.is_a? Array
5
- @i = input_ary
5
+ attr_reader :ary, :n
6
+
7
+ def initialize(from_ary:)
8
+ raise ArgumentError.new("a Noun must be initialized with an Array") unless from_ary.is_a? Array
9
+ @ary = self.to_tuples from_ary
10
+ @n = self.nonify @ary
11
+ end
12
+
13
+ def ==(another_noun)
14
+ another_noun.ary == self.ary
6
15
  end
7
16
 
8
- def interpret
9
- @n = self.to_tuples @i
10
- # return "Interpreting #{@n} as Nock."
17
+ def at(index:)
18
+ return self if 1 == index
19
+ return self.n.at(index: index)
11
20
  end
12
21
 
13
- def to_a
14
- @n
22
+ # private
23
+
24
+ def nonify(ary)
25
+ return Atom.new(ary) unless ary.is_a? Array
26
+ return Atom.new(ary[0]) if 1 == ary.size
27
+ return Cell.new(head: self.nonify(ary[0]), tail: self.nonify(ary[1])) if 2 == ary.size
28
+ return [ary[0], self.nonify(ary[1..])]
15
29
  end
16
30
 
31
+ #
32
+ # [a b c] [a [b c]]
17
33
  #
18
34
  # q.v. https://github.com/belisarius222/pynock
19
35
  #
data/lib/nockr/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Nockr
4
- VERSION = "0.0.2"
4
+ VERSION = "0.0.3"
5
5
  end
data/lib/nockr.rb CHANGED
@@ -1,6 +1,11 @@
1
- require "nockr/noun"
1
+ # frozen_string_literal: true
2
2
 
3
3
  module Nockr
4
+ require_relative "nockr/noun"
5
+ require_relative "nockr/atom"
6
+ require_relative "nockr/cell"
7
+ require_relative "nockr/version"
8
+
4
9
  class << self
5
10
  def nock(input)
6
11
  n = Noun.new input_ary: input
@@ -8,4 +13,6 @@ module Nockr
8
13
  puts "=> #{n.interpret}"
9
14
  end
10
15
  end
11
- end
16
+ end
17
+
18
+ # extend Nockr::Atom
data/nockr.gemspec CHANGED
@@ -24,6 +24,8 @@ Gem::Specification.new do |s|
24
24
  s.bindir = "bin"
25
25
  s.require_paths = ["lib"]
26
26
 
27
+ s.add_development_dependency "guard", "~> 2.1"
28
+ s.add_development_dependency "guard-rspec", "~> 4.7"
27
29
  s.add_development_dependency "pry", "~> 0.13"
28
30
  s.add_development_dependency "rspec", "~> 3.10"
29
31
  end
metadata CHANGED
@@ -1,15 +1,43 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: nockr
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Daryl Richter
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-07-07 00:00:00.000000000 Z
11
+ date: 2023-07-20 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: guard
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '2.1'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '2.1'
27
+ - !ruby/object:Gem::Dependency
28
+ name: guard-rspec
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '4.7'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '4.7'
13
41
  - !ruby/object:Gem::Dependency
14
42
  name: pry
15
43
  requirement: !ruby/object:Gem::Requirement
@@ -47,6 +75,8 @@ extensions: []
47
75
  extra_rdoc_files: []
48
76
  files:
49
77
  - lib/nockr.rb
78
+ - lib/nockr/atom.rb
79
+ - lib/nockr/cell.rb
50
80
  - lib/nockr/noun.rb
51
81
  - lib/nockr/version.rb
52
82
  - nockr.gemspec