shaun 0.0.1 → 0.1.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 +4 -4
 - data/lib/prettyprinter.rb +78 -0
 - data/lib/shaun.rb +45 -8
 - metadata +3 -2
 
    
        checksums.yaml
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ---
         
     | 
| 
       2 
2 
     | 
    
         
             
            SHA1:
         
     | 
| 
       3 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       4 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: 3488c6165d5e961e63a1009586c268a1749d6dd3
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: 75b5def6f77b85f748262c9e6336e10cc1921e3d
         
     | 
| 
       5 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: 1ac1179a6baaf9e2137249d28c53ba92ec18a5390227715591ea5a72eab9a732194b76d14cf262533d7242481b14f2b1bce771dfec6b359f3b9339b65943a2b6
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: cfd4db81f5ce2bc67190d802092b0b16947c4c8ac271db3348afb094f5a253b48317695e1cc0eb808f43b9751a3e5ea37f35cf5a51873e1598face72a398c02c
         
     | 
| 
         @@ -0,0 +1,78 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            module Shaun
         
     | 
| 
      
 2 
     | 
    
         
            +
              # The SHAUN pretty printer. It prints a SHAUN value so that it is easy to read
         
     | 
| 
      
 3 
     | 
    
         
            +
              class PrettyPrinter
         
     | 
| 
      
 4 
     | 
    
         
            +
                # Create a pretty printer with the tabulation string (2 spaces by default)
         
     | 
| 
      
 5 
     | 
    
         
            +
                def initialize(tabchar = '  ')
         
     | 
| 
      
 6 
     | 
    
         
            +
                  @tab = tabchar
         
     | 
| 
      
 7 
     | 
    
         
            +
                  @indent_level = 0
         
     | 
| 
      
 8 
     | 
    
         
            +
                end
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
                # Add a level of indentation
         
     | 
| 
      
 11 
     | 
    
         
            +
                def indent
         
     | 
| 
      
 12 
     | 
    
         
            +
                  @indent_level = @indent_level + 1
         
     | 
| 
      
 13 
     | 
    
         
            +
                end
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
                # remove a level of indentation
         
     | 
| 
      
 16 
     | 
    
         
            +
                def dedent
         
     | 
| 
      
 17 
     | 
    
         
            +
                  @indent_level = @indent_level - 1
         
     | 
| 
      
 18 
     | 
    
         
            +
                end
         
     | 
| 
      
 19 
     | 
    
         
            +
             
     | 
| 
      
 20 
     | 
    
         
            +
                # Get the indentation string
         
     | 
| 
      
 21 
     | 
    
         
            +
                def indent_string
         
     | 
| 
      
 22 
     | 
    
         
            +
                  @tab * @indent_level
         
     | 
| 
      
 23 
     | 
    
         
            +
                end
         
     | 
| 
      
 24 
     | 
    
         
            +
             
     | 
| 
      
 25 
     | 
    
         
            +
                # Pretty print a number
         
     | 
| 
      
 26 
     | 
    
         
            +
                def print_number(sn_num)
         
     | 
| 
      
 27 
     | 
    
         
            +
                  sn_num.to_s
         
     | 
| 
      
 28 
     | 
    
         
            +
                end
         
     | 
| 
      
 29 
     | 
    
         
            +
             
     | 
| 
      
 30 
     | 
    
         
            +
                # Pretty print a boolean
         
     | 
| 
      
 31 
     | 
    
         
            +
                def print_bool(b)
         
     | 
| 
      
 32 
     | 
    
         
            +
                  b.to_s
         
     | 
| 
      
 33 
     | 
    
         
            +
                end
         
     | 
| 
      
 34 
     | 
    
         
            +
             
     | 
| 
      
 35 
     | 
    
         
            +
                # Pretty print a string
         
     | 
| 
      
 36 
     | 
    
         
            +
                def print_string(s)
         
     | 
| 
      
 37 
     | 
    
         
            +
                  "\"#{s}\""
         
     | 
| 
      
 38 
     | 
    
         
            +
                end
         
     | 
| 
      
 39 
     | 
    
         
            +
             
     | 
| 
      
 40 
     | 
    
         
            +
                # Pretty print a null value
         
     | 
| 
      
 41 
     | 
    
         
            +
                def print_nil
         
     | 
| 
      
 42 
     | 
    
         
            +
                  "null"
         
     | 
| 
      
 43 
     | 
    
         
            +
                end
         
     | 
| 
      
 44 
     | 
    
         
            +
             
     | 
| 
      
 45 
     | 
    
         
            +
                # Pretty print a list
         
     | 
| 
      
 46 
     | 
    
         
            +
                def print_list(ary)
         
     | 
| 
      
 47 
     | 
    
         
            +
                  indent
         
     | 
| 
      
 48 
     | 
    
         
            +
                  contents = ary.map { |e| print_list_element e }.join "\n"
         
     | 
| 
      
 49 
     | 
    
         
            +
                  dedent
         
     | 
| 
      
 50 
     | 
    
         
            +
                  "[\n" + contents + "\n" + indent_string + "]"
         
     | 
| 
      
 51 
     | 
    
         
            +
                end
         
     | 
| 
      
 52 
     | 
    
         
            +
             
     | 
| 
      
 53 
     | 
    
         
            +
                # Pretty print an object
         
     | 
| 
      
 54 
     | 
    
         
            +
                def print_object(obj)
         
     | 
| 
      
 55 
     | 
    
         
            +
                  indent
         
     | 
| 
      
 56 
     | 
    
         
            +
             
     | 
| 
      
 57 
     | 
    
         
            +
                  attributes = obj.instance_variables.map do |name|
         
     | 
| 
      
 58 
     | 
    
         
            +
                    value = obj.instance_variable_get name
         
     | 
| 
      
 59 
     | 
    
         
            +
                    attr_name = name.to_s.sub /@/, ''
         
     | 
| 
      
 60 
     | 
    
         
            +
                    print_object_attribute attr_name, value
         
     | 
| 
      
 61 
     | 
    
         
            +
                  end
         
     | 
| 
      
 62 
     | 
    
         
            +
             
     | 
| 
      
 63 
     | 
    
         
            +
                  contents = attributes.join "\n"
         
     | 
| 
      
 64 
     | 
    
         
            +
                  dedent
         
     | 
| 
      
 65 
     | 
    
         
            +
                  "{\n" + contents + "\n" + indent_string + "}"
         
     | 
| 
      
 66 
     | 
    
         
            +
                end
         
     | 
| 
      
 67 
     | 
    
         
            +
             
     | 
| 
      
 68 
     | 
    
         
            +
                private
         
     | 
| 
      
 69 
     | 
    
         
            +
                  def print_object_attribute(name, value)
         
     | 
| 
      
 70 
     | 
    
         
            +
                    contents = "#{name}: #{value.pretty_print(self)}"
         
     | 
| 
      
 71 
     | 
    
         
            +
                    indent_string + contents
         
     | 
| 
      
 72 
     | 
    
         
            +
                  end
         
     | 
| 
      
 73 
     | 
    
         
            +
             
     | 
| 
      
 74 
     | 
    
         
            +
                  def print_list_element(elem)
         
     | 
| 
      
 75 
     | 
    
         
            +
                    indent_string + elem.pretty_print(self)
         
     | 
| 
      
 76 
     | 
    
         
            +
                  end
         
     | 
| 
      
 77 
     | 
    
         
            +
              end
         
     | 
| 
      
 78 
     | 
    
         
            +
            end
         
     | 
    
        data/lib/shaun.rb
    CHANGED
    
    | 
         @@ -1,3 +1,5 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require_relative 'prettyprinter.rb'
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
       1 
3 
     | 
    
         
             
            # The main module that holds every SHAUN related classes and some helper functions
         
     | 
| 
       2 
4 
     | 
    
         
             
            module Shaun
         
     | 
| 
       3 
5 
     | 
    
         
             
              # Helper module for classes that are tranparent SHAUN values (String, Boolean, Object)
         
     | 
| 
         @@ -18,7 +20,7 @@ module Shaun 
     | 
|
| 
       18 
20 
     | 
    
         
             
                # Object values are stored as instance attributes
         
     | 
| 
       19 
21 
     | 
    
         
             
                #
         
     | 
| 
       20 
22 
     | 
    
         
             
                # === Example
         
     | 
| 
       21 
     | 
    
         
            -
                # obj =  
     | 
| 
      
 23 
     | 
    
         
            +
                # obj = Shaun::Object.new({ greetings: 'hello' })
         
     | 
| 
       22 
24 
     | 
    
         
             
                # greetings = obj.greetings
         
     | 
| 
       23 
25 
     | 
    
         
             
                # obj.greetings = 'New hello!'
         
     | 
| 
       24 
26 
     | 
    
         
             
                def initialize(hash = {})
         
     | 
| 
         @@ -44,6 +46,11 @@ module Shaun 
     | 
|
| 
       44 
46 
     | 
    
         
             
                  end
         
     | 
| 
       45 
47 
     | 
    
         
             
                end
         
     | 
| 
       46 
48 
     | 
    
         | 
| 
      
 49 
     | 
    
         
            +
                # Pretty print the SHAUN value
         
     | 
| 
      
 50 
     | 
    
         
            +
                def pretty_print(pp)
         
     | 
| 
      
 51 
     | 
    
         
            +
                  pp.print_object self
         
     | 
| 
      
 52 
     | 
    
         
            +
                end
         
     | 
| 
      
 53 
     | 
    
         
            +
             
     | 
| 
       47 
54 
     | 
    
         
             
                private
         
     | 
| 
       48 
55 
     | 
    
         
             
                  # Get the object's metaclass
         
     | 
| 
       49 
56 
     | 
    
         
             
                  def metaclass
         
     | 
| 
         @@ -93,6 +100,11 @@ module Shaun 
     | 
|
| 
       93 
100 
     | 
    
         
             
                      "#{@value.to_s}"
         
     | 
| 
       94 
101 
     | 
    
         
             
                  end
         
     | 
| 
       95 
102 
     | 
    
         
             
                end
         
     | 
| 
      
 103 
     | 
    
         
            +
             
     | 
| 
      
 104 
     | 
    
         
            +
                # Pretty print the SHAUN value
         
     | 
| 
      
 105 
     | 
    
         
            +
                def pretty_print(pp)
         
     | 
| 
      
 106 
     | 
    
         
            +
                  pp.print_number self
         
     | 
| 
      
 107 
     | 
    
         
            +
                end
         
     | 
| 
       96 
108 
     | 
    
         
             
              end
         
     | 
| 
       97 
109 
     | 
    
         | 
| 
       98 
110 
     | 
    
         
             
              # Helper method to create a SHAUN object
         
     | 
| 
         @@ -113,14 +125,14 @@ end 
     | 
|
| 
       113 
125 
     | 
    
         | 
| 
       114 
126 
     | 
    
         
             
            class Hash
         
     | 
| 
       115 
127 
     | 
    
         
             
              def to_sn
         
     | 
| 
       116 
     | 
    
         
            -
                 
     | 
| 
      
 128 
     | 
    
         
            +
                Shaun::Object.new self
         
     | 
| 
       117 
129 
     | 
    
         
             
              end
         
     | 
| 
       118 
130 
     | 
    
         
             
            end
         
     | 
| 
       119 
131 
     | 
    
         | 
| 
       120 
132 
     | 
    
         
             
            class Numeric
         
     | 
| 
       121 
133 
     | 
    
         
             
              # Cast to a SHAUN number
         
     | 
| 
       122 
134 
     | 
    
         
             
              def to_sn
         
     | 
| 
       123 
     | 
    
         
            -
                 
     | 
| 
      
 135 
     | 
    
         
            +
                Shaun::Number.new self
         
     | 
| 
       124 
136 
     | 
    
         
             
              end
         
     | 
| 
       125 
137 
     | 
    
         | 
| 
       126 
138 
     | 
    
         
             
              # Patched method #method_missing in order to generate a SHAUN number
         
     | 
| 
         @@ -129,7 +141,7 @@ class Numeric 
     | 
|
| 
       129 
141 
     | 
    
         
             
                res = m.match /([a-zA-Z_][a-zA-Z0-9_]*)/
         
     | 
| 
       130 
142 
     | 
    
         
             
                if res and params.empty?
         
     | 
| 
       131 
143 
     | 
    
         
             
                  unit = res[1].to_s
         
     | 
| 
       132 
     | 
    
         
            -
                   
     | 
| 
      
 144 
     | 
    
         
            +
                  Shaun::Number.new self, unit
         
     | 
| 
       133 
145 
     | 
    
         
             
                else
         
     | 
| 
       134 
146 
     | 
    
         
             
                  super m, *params
         
     | 
| 
       135 
147 
     | 
    
         
             
                end
         
     | 
| 
         @@ -137,19 +149,39 @@ class Numeric 
     | 
|
| 
       137 
149 
     | 
    
         
             
            end
         
     | 
| 
       138 
150 
     | 
    
         | 
| 
       139 
151 
     | 
    
         
             
            class String
         
     | 
| 
       140 
     | 
    
         
            -
              include  
     | 
| 
      
 152 
     | 
    
         
            +
              include Shaun::ShaunValue
         
     | 
| 
      
 153 
     | 
    
         
            +
             
     | 
| 
      
 154 
     | 
    
         
            +
              # Pretty print the SHAUN value
         
     | 
| 
      
 155 
     | 
    
         
            +
              def pretty_print(pp)
         
     | 
| 
      
 156 
     | 
    
         
            +
                pp.print_string self
         
     | 
| 
      
 157 
     | 
    
         
            +
              end
         
     | 
| 
       141 
158 
     | 
    
         
             
            end
         
     | 
| 
       142 
159 
     | 
    
         | 
| 
       143 
160 
     | 
    
         
             
            class TrueClass
         
     | 
| 
       144 
     | 
    
         
            -
              include  
     | 
| 
      
 161 
     | 
    
         
            +
              include Shaun::ShaunValue
         
     | 
| 
      
 162 
     | 
    
         
            +
             
     | 
| 
      
 163 
     | 
    
         
            +
              # Pretty print the SHAUN value
         
     | 
| 
      
 164 
     | 
    
         
            +
              def pretty_print(pp)
         
     | 
| 
      
 165 
     | 
    
         
            +
                pp.print_bool self
         
     | 
| 
      
 166 
     | 
    
         
            +
              end
         
     | 
| 
       145 
167 
     | 
    
         
             
            end
         
     | 
| 
       146 
168 
     | 
    
         | 
| 
       147 
169 
     | 
    
         
             
            class FalseClass
         
     | 
| 
       148 
     | 
    
         
            -
              include  
     | 
| 
      
 170 
     | 
    
         
            +
              include Shaun::ShaunValue
         
     | 
| 
      
 171 
     | 
    
         
            +
             
     | 
| 
      
 172 
     | 
    
         
            +
              # Pretty print the SHAUN value
         
     | 
| 
      
 173 
     | 
    
         
            +
              def pretty_print(pp)
         
     | 
| 
      
 174 
     | 
    
         
            +
                pp.print_bool self
         
     | 
| 
      
 175 
     | 
    
         
            +
              end
         
     | 
| 
       149 
176 
     | 
    
         
             
            end
         
     | 
| 
       150 
177 
     | 
    
         | 
| 
       151 
178 
     | 
    
         
             
            class NilClass
         
     | 
| 
       152 
     | 
    
         
            -
              include  
     | 
| 
      
 179 
     | 
    
         
            +
              include Shaun::ShaunValue
         
     | 
| 
      
 180 
     | 
    
         
            +
             
     | 
| 
      
 181 
     | 
    
         
            +
              # Pretty print the SHAUN value
         
     | 
| 
      
 182 
     | 
    
         
            +
              def pretty_print(pp)
         
     | 
| 
      
 183 
     | 
    
         
            +
                pp.print_nil
         
     | 
| 
      
 184 
     | 
    
         
            +
              end
         
     | 
| 
       153 
185 
     | 
    
         
             
            end
         
     | 
| 
       154 
186 
     | 
    
         | 
| 
       155 
187 
     | 
    
         
             
            class Array
         
     | 
| 
         @@ -158,4 +190,9 @@ class Array 
     | 
|
| 
       158 
190 
     | 
    
         
             
              def to_sn
         
     | 
| 
       159 
191 
     | 
    
         
             
                map { |e| e.to_sn }
         
     | 
| 
       160 
192 
     | 
    
         
             
              end
         
     | 
| 
      
 193 
     | 
    
         
            +
             
     | 
| 
      
 194 
     | 
    
         
            +
              # Pretty print the SHAUN value
         
     | 
| 
      
 195 
     | 
    
         
            +
              def pretty_print(pp)
         
     | 
| 
      
 196 
     | 
    
         
            +
                pp.print_list self
         
     | 
| 
      
 197 
     | 
    
         
            +
              end
         
     | 
| 
       161 
198 
     | 
    
         
             
            end
         
     | 
    
        metadata
    CHANGED
    
    | 
         @@ -1,14 +1,14 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: shaun
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version
         
     | 
| 
       4 
     | 
    
         
            -
              version: 0.0 
     | 
| 
      
 4 
     | 
    
         
            +
              version: 0.1.0
         
     | 
| 
       5 
5 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       6 
6 
     | 
    
         
             
            authors:
         
     | 
| 
       7 
7 
     | 
    
         
             
            - Kévin Le Bon
         
     | 
| 
       8 
8 
     | 
    
         
             
            autorequire: 
         
     | 
| 
       9 
9 
     | 
    
         
             
            bindir: bin
         
     | 
| 
       10 
10 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       11 
     | 
    
         
            -
            date:  
     | 
| 
      
 11 
     | 
    
         
            +
            date: 2018-01-06 00:00:00.000000000 Z
         
     | 
| 
       12 
12 
     | 
    
         
             
            dependencies: []
         
     | 
| 
       13 
13 
     | 
    
         
             
            description: |2
         
     | 
| 
       14 
14 
     | 
    
         
             
                  This gem is an Ruby implementation of the SHAUN data-notation language.
         
     | 
| 
         @@ -18,6 +18,7 @@ executables: [] 
     | 
|
| 
       18 
18 
     | 
    
         
             
            extensions: []
         
     | 
| 
       19 
19 
     | 
    
         
             
            extra_rdoc_files: []
         
     | 
| 
       20 
20 
     | 
    
         
             
            files:
         
     | 
| 
      
 21 
     | 
    
         
            +
            - lib/prettyprinter.rb
         
     | 
| 
       21 
22 
     | 
    
         
             
            - lib/shaun.rb
         
     | 
| 
       22 
23 
     | 
    
         
             
            homepage: 
         
     | 
| 
       23 
24 
     | 
    
         
             
            licenses:
         
     |