nockr 0.0.1 → 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: 83137b93c6aa129d9a8527caf972285b7cafb0bee1bbdec4d776505699755b0a
4
- data.tar.gz: 7b9274283fb21981e20ea8ba0076bf79d48c0236182fda9b1afa0cd3985bb89b
3
+ metadata.gz: a69e11b5de8f5d14856cc9af79f1f5392b370abf55acf1cf2774a83d8fc37036
4
+ data.tar.gz: 670d2748708eed02af24b105bc7023c32e905b444577c11922d84190bbb82dbd
5
5
  SHA512:
6
- metadata.gz: f9b4c2fb5225a87bd2b32eb208582bc7405e83ea81df0d69327bb28e62c4a373e52b52ac3210aa87ff459e671fe0e268430e205da8bebdfb7b2176ee175d4b35
7
- data.tar.gz: b09d2c70955288118fc879afad504fe34e3efe659b666502e08ae0230e71fb51bee93212d96f1efb05504c9985e26bcbe841edf26ece220d44045a1d1a76e07e
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,20 +1,41 @@
1
- module NockR
1
+ # frozen_string_literal: true
2
+
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
 
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..])]
29
+ end
30
+
31
+ #
32
+ # [a b c] [a [b c]]
13
33
  #
14
34
  # q.v. https://github.com/belisarius222/pynock
15
35
  #
16
36
  def to_tuples(ary)
17
37
  return ary unless ary.is_a? Array
38
+ return ary if 1 == ary.size
18
39
  return [self.to_tuples(ary[0]), self.to_tuples(ary[1])] if 2 == ary.size
19
40
  return [ary[0], self.to_tuples(ary[1..])]
20
41
  end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Nockr
4
+ VERSION = "0.0.3"
5
+ end
data/lib/nockr.rb CHANGED
@@ -1,10 +1,18 @@
1
- require "nockr/noun"
1
+ # frozen_string_literal: true
2
+
3
+ module Nockr
4
+ require_relative "nockr/noun"
5
+ require_relative "nockr/atom"
6
+ require_relative "nockr/cell"
7
+ require_relative "nockr/version"
2
8
 
3
- module NockR
4
9
  class << self
5
10
  def nock(input)
6
- n = NockR::Noun.new input_ary: input
7
- puts "#{n.interpret}"
11
+ n = Noun.new input_ary: input
12
+ puts "Interpreting #{input} as Nock..."
13
+ puts "=> #{n.interpret}"
8
14
  end
9
15
  end
10
- end
16
+ end
17
+
18
+ # extend Nockr::Atom
data/nockr.gemspec CHANGED
@@ -1,16 +1,31 @@
1
+ require_relative 'lib/nockr/version'
2
+
1
3
  Gem::Specification.new do |s|
2
- s.name = "nockr"
3
- s.summary = "NockR"
4
- s.description = "A Nock interpreter in Ruby"
5
- s.authors = ["Daryl Richter"]
6
- s.email = "winter8@duck.com"
4
+ s.name = "nockr"
5
+ s.summary = %q{A Nock interpreter in Ruby}
6
+ s.description = %q{Nock is Urbit's assembly language. This gem lets you interpret and run it from Ruby."}
7
+ s.authors = ["Daryl Richter"]
8
+ s.email = ["winter8@duck.com"]
9
+ s.version = Nockr::VERSION
7
10
 
8
- s.files = Dir.glob("lib{.rb,/**/*}", File::FNM_DOTMATCH).reject {|f| File.directory?(f) }
9
- s.files += %w[nockr.gemspec] # include the gemspec itself because warbler breaks w/o it
11
+ s.homepage = "https://rubygems.org/gems/nockr"
12
+ s.license = "BSD-3-Clause"
10
13
 
11
- s.homepage = "https://rubygems.org/gems/nockr"
12
- s.license = "BSD-3-Clause"
13
- s.require_paths = ["lib"]
14
14
  s.required_ruby_version = Gem::Requirement.new(">= 3.2.2")
15
- s.version = "0.0.1"
16
- end
15
+
16
+ s.metadata["homepage_uri"] = s.homepage
17
+ s.metadata["source_code_uri"] = "https://github.com/Zaxonomy/nockr"
18
+ s.metadata["changelog_uri"] = "https://github.com/Zaxonomy/nockr/CHANGELOG.md"
19
+
20
+ # Specify which files should be added to the gem when it is released.
21
+ s.files = Dir.glob("lib{.rb,/**/*}", File::FNM_DOTMATCH).reject {|f| File.directory?(f) }
22
+ s.files += %w[nockr.gemspec] # include the gemspec itself because warbler breaks w/o it
23
+
24
+ s.bindir = "bin"
25
+ s.require_paths = ["lib"]
26
+
27
+ s.add_development_dependency "guard", "~> 2.1"
28
+ s.add_development_dependency "guard-rspec", "~> 4.7"
29
+ s.add_development_dependency "pry", "~> 0.13"
30
+ s.add_development_dependency "rspec", "~> 3.10"
31
+ end
metadata CHANGED
@@ -1,28 +1,92 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: nockr
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
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-06-27 00:00:00.000000000 Z
12
- dependencies: []
13
- description: A Nock interpreter in Ruby
14
- email: winter8@duck.com
11
+ date: 2023-07-20 00:00:00.000000000 Z
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'
41
+ - !ruby/object:Gem::Dependency
42
+ name: pry
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '0.13'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '0.13'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rspec
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '3.10'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '3.10'
69
+ description: Nock is Urbit's assembly language. This gem lets you interpret and run
70
+ it from Ruby."
71
+ email:
72
+ - winter8@duck.com
15
73
  executables: []
16
74
  extensions: []
17
75
  extra_rdoc_files: []
18
76
  files:
19
77
  - lib/nockr.rb
78
+ - lib/nockr/atom.rb
79
+ - lib/nockr/cell.rb
20
80
  - lib/nockr/noun.rb
81
+ - lib/nockr/version.rb
21
82
  - nockr.gemspec
22
83
  homepage: https://rubygems.org/gems/nockr
23
84
  licenses:
24
85
  - BSD-3-Clause
25
- metadata: {}
86
+ metadata:
87
+ homepage_uri: https://rubygems.org/gems/nockr
88
+ source_code_uri: https://github.com/Zaxonomy/nockr
89
+ changelog_uri: https://github.com/Zaxonomy/nockr/CHANGELOG.md
26
90
  post_install_message:
27
91
  rdoc_options: []
28
92
  require_paths:
@@ -41,5 +105,5 @@ requirements: []
41
105
  rubygems_version: 3.4.14
42
106
  signing_key:
43
107
  specification_version: 4
44
- summary: NockR
108
+ summary: A Nock interpreter in Ruby
45
109
  test_files: []