Runtime assertions for Ruby literal.fun
ruby
5
fork

Configure Feed

Select the types of activity you want to include in your feed.

More things

+114 -28
+3
lib/literal.rb
··· 6 6 module Literal 7 7 Loader = Zeitwerk::Loader.for_gem.tap(&:setup) 8 8 9 + extend Literal::Types 10 + extend Literal::Monads 11 + 9 12 module Error; end 10 13 11 14 class TypeError < ::TypeError
+4
lib/literal/either.rb
··· 1 + # frozen_string_literal: true 2 + 3 + class Literal::Either 4 + end
+4
lib/literal/left.rb
··· 1 + # frozen_string_literal: true 2 + 3 + class Literal::Left < Literal::Either 4 + end
+10
lib/literal/macros.rb
··· 1 + # frozen_string_literal: true 2 + # module Literal::Macros 3 + # def abstract(method_name) 4 + # method_name 5 + # end 6 + 7 + # def final(method_name) 8 + # method_name 9 + # end 10 + # end
+5
lib/literal/maybe.rb
··· 1 + # frozen_string_literal: true 2 + 3 + class Literal::Maybe 4 + include Literal::Monads 5 + end
-26
lib/literal/model.rb
··· 1 - # frozen_string_literal: true 2 - 3 - class Literal::Model 4 - extend Literal::Types 5 - include Literal::Initializer 6 - 7 - def self.__attributes__ 8 - return @__attributes__ if defined?(@__attributes__) 9 - 10 - @__attributes__ = superclass.is_a?(self) ? superclass.required_attributes.dup : [] 11 - end 12 - 13 - def self.attribute(name, type) 14 - __attributes__ << name 15 - 16 - writer_name = :"#{name}=" 17 - 18 - define_method writer_name do |value| 19 - raise Literal::TypeError, "Expected #{name}: `#{value.inspect}` to be: `#{type.inspect}`." unless type === value 20 - 21 - super(value) 22 - end 23 - 24 - name 25 - end 26 - end
+18
lib/literal/monads.rb
··· 1 + # frozen_string_literal: true 2 + 3 + module Literal::Monads 4 + Nothing = Literal::Nothing.new 5 + Maybe = Nothing # `Maybe` called without anything, e.g. `Maybe(something)` is Nothing 6 + 7 + def Something(thing) 8 + Literal::Something.new(thing) 9 + end 10 + 11 + def Maybe(value = nil) 12 + value.nil? ? NOTHING : Something(value) 13 + end 14 + 15 + def Either(whatever) 16 + 17 + end 18 + end
+27
lib/literal/nothing.rb
··· 1 + # frozen_string_literal: true 2 + 3 + class Literal::Nothing < Literal::Maybe 4 + def initialize 5 + freeze 6 + end 7 + 8 + def empty? = true 9 + def inspect = "Nothing" 10 + 11 + def value_or(fallback) 12 + fallback 13 + end 14 + 15 + def map 16 + self 17 + end 18 + 19 + def flat_map 20 + raise ArgumentError, "No block given" unless block_given? 21 + self 22 + end 23 + 24 + def or_else(alternative) 25 + Something(alternative) 26 + end 27 + end
+1
lib/literal/operation.rb
··· 2 2 3 3 class Literal::Operation 4 4 extend Literal::Types 5 + include Literal::Monads 5 6 6 7 class << self 7 8 def call(...) = new(...).call
+4
lib/literal/right.rb
··· 1 + # frozen_string_literal: true 2 + 3 + class Literal::Right < Literal::Either 4 + end
+27
lib/literal/something.rb
··· 1 + # frozen_string_literal: true 2 + 3 + class Literal::Something < Literal::Maybe 4 + def initialize(value) 5 + @value = value 6 + freeze 7 + end 8 + 9 + def empty? = false 10 + def inspect = "Something(#{@value.inspect})" 11 + 12 + def value_or(_fallback) 13 + @value 14 + end 15 + 16 + def map 17 + Something(yield @value) 18 + end 19 + 20 + def flatmap 21 + map(yield(@value)).value_or(Nothing) 22 + end 23 + 24 + def or_else(_alternative) 25 + self 26 + end 27 + end
-2
lib/literal/types.rb
··· 1 1 # frozen_string_literal: true 2 2 3 3 module Literal::Types 4 - extend self 5 - 6 4 def _Union(*types) 7 5 raise Literal::ArgumentError, "Union type must have at least two types." if types.size < 2 8 6
+11
test/literal/operation.rb
··· 1 + # frozen_string_literal: true 2 + 3 + class SomeOperation < Literal::Operation 4 + def call 5 + end 6 + end 7 + 8 + test do 9 + result = SomeOperation.call 10 + binding.irb 11 + end