sj 0.9.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.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 25317f4fe51ee0ff884ae5b1943f67f2f80ef1dc
4
+ data.tar.gz: 32e873c033b33c0f2e5dcdcbb195838da679d8e0
5
+ SHA512:
6
+ metadata.gz: 9da2510f0ae9973e5db5093a8fd35d906909d0507c958c9ed2727ceec85ed001759e61a46be6329f7397e03333d44d17f00c5014695d9d0f3531c083077ded9b
7
+ data.tar.gz: 7394a45de45cf515efcff5181fb23f45cd2aa27af52b0ac16246ccb2d9bc1af9845d262a4697db710394729977ca84ba4a359f9515861d78823060e5595468ff
@@ -0,0 +1 @@
1
+ require 'sj/ugly/action'
@@ -0,0 +1,55 @@
1
+ module SJ
2
+ module Ugly
3
+ module Action
4
+ # n.b. Struct is implemented in C, and its implementation does not allow
5
+ # emptiness, so we patch all methods to simulate it instead.
6
+ Unit = Struct.new(:_) do
7
+ def ==(other); Unit === other; end
8
+ def []; nil; end
9
+ def dig; nil; end
10
+ def each; self; end
11
+ def each_pair; self; end
12
+ def eql?(other); Unit === other; end
13
+ def inspect; "Unit"; end
14
+ def length; 0; end
15
+ def select; []; end
16
+ def size; 0; end
17
+ def to_a; []; end
18
+ def to_h; {}; end
19
+ def to_s; "Unit"; end
20
+ def members; []; end
21
+ def values; []; end
22
+ def values_at(*selector); []; end
23
+ end.new
24
+
25
+ def self.included(receiver)
26
+ receiver.extend(ClassMethods)
27
+ receiver.send(:include, InstanceMethods)
28
+ end
29
+
30
+ module ClassMethods
31
+ def mk(**kwargs)
32
+ self.new(**kwargs)
33
+ end
34
+ end
35
+
36
+ module InstanceMethods
37
+ def call!(&closure)
38
+ val = self.send(:invoke!)
39
+ yield val if block_given?
40
+ end
41
+
42
+ private
43
+
44
+ def validates(&block)
45
+ errors = []
46
+ yield errors if block_given?
47
+ unless errors.empty?
48
+ msg = errors.join('; ')
49
+ raise ArgumentError.new(msg)
50
+ end
51
+ end
52
+ end
53
+ end
54
+ end
55
+ end
@@ -0,0 +1,3 @@
1
+ module SJ
2
+ VERSION = '0.9.0'.freeze
3
+ end
metadata ADDED
@@ -0,0 +1,60 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: sj
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.9.0
5
+ platform: ruby
6
+ authors:
7
+ - Joshua Morris
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2017-06-01 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rspec
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '3.6'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '3.6'
27
+ description: Write maintainable, composable software.
28
+ email: joshua@dailykos.com
29
+ executables: []
30
+ extensions: []
31
+ extra_rdoc_files: []
32
+ files:
33
+ - lib/sj.rb
34
+ - lib/sj/ugly/action.rb
35
+ - lib/sj/version.rb
36
+ homepage: https://github.com/dailykos/straitjacket
37
+ licenses:
38
+ - MIT
39
+ metadata: {}
40
+ post_install_message:
41
+ rdoc_options: []
42
+ require_paths:
43
+ - lib
44
+ required_ruby_version: !ruby/object:Gem::Requirement
45
+ requirements:
46
+ - - ">="
47
+ - !ruby/object:Gem::Version
48
+ version: '0'
49
+ required_rubygems_version: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - ">="
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ requirements: []
55
+ rubyforge_project:
56
+ rubygems_version: 2.6.10
57
+ signing_key:
58
+ specification_version: 4
59
+ summary: Straitjacket
60
+ test_files: []