fun-ruby 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
data/lib/fun_ruby.rb ADDED
@@ -0,0 +1,87 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "fun_ruby/container"
4
+ require_relative "fun_ruby/container/define"
5
+
6
+ # Top-level namespace
7
+ module FunRuby
8
+ PLACEHOLDER = Object.new.freeze
9
+
10
+ extend self
11
+
12
+ # Allows to define globally available functions
13
+ #
14
+ # @since 0.1.0
15
+ #
16
+ # @return void
17
+ #
18
+ # @example Basic: defines a function
19
+ # F.define do
20
+ # namespace :functions do
21
+ # f(:sum) { ->(x, y) { x + y } }
22
+ # end
23
+ # end
24
+ # F.container.fetch("functions.sum").(2, 3) # => 5
25
+ def define(&block)
26
+ Container::Define.build(container: container).(&block)
27
+ end
28
+
29
+ # Returns a global container
30
+ #
31
+ # @since 0.1.0
32
+ #
33
+ # @return [FunRuby::Container]
34
+ def container
35
+ @container ||= Container.new
36
+ end
37
+
38
+ # Allows to import global container to your classes and modules
39
+ #
40
+ # @since 0.1.0
41
+ #
42
+ # @return [FunRuby::Container::Mixin]
43
+ #
44
+ # @example
45
+ # F.define do
46
+ # namespace :app do
47
+ # namespace :string do
48
+ # f(:to_s) { ->(x) { x.to_s } }
49
+ # f(:map) { F::Enum.map(f(:to_s)) }
50
+ # end
51
+ #
52
+ # namespace :math do
53
+ # f(:x2) { ->(x) { x * 2 } }
54
+ # f(:map) { F::Enum.map(f(:x2)) }
55
+ # end
56
+ # end
57
+ # end
58
+ #
59
+ # class Service
60
+ # include F.import(
61
+ # "app.string" => "s",
62
+ # "app.math" => "m"
63
+ # )
64
+ #
65
+ # def s_map(ary)
66
+ # f("s.map").(ary)
67
+ # end
68
+ #
69
+ # def m_map(ary)
70
+ # f("m.map").(ary)
71
+ # end
72
+ # end
73
+ #
74
+ # ary = [1, 2, 3]
75
+ # Service.new.s_map(ary) #=> ["1", "2", "3"]
76
+ # Service.new.m_map(ary) #=> [2, 4, 6]
77
+ def import(*aliases)
78
+ container.import(*aliases)
79
+ end
80
+
81
+ # A placeholder that helps to use not positioned currying
82
+ def _
83
+ PLACEHOLDER
84
+ end
85
+ end
86
+
87
+ F = FunRuby
metadata ADDED
@@ -0,0 +1,165 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: fun-ruby
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - woarewe
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2022-08-15 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: awesome_print
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: 1.9.2
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: 1.9.2
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: 13.0.6
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: 13.0.6
41
+ - !ruby/object:Gem::Dependency
42
+ name: rspec
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: 3.10.0
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: 3.10.0
55
+ - !ruby/object:Gem::Dependency
56
+ name: rubocop
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: 0.81.0
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: 0.81.0
69
+ - !ruby/object:Gem::Dependency
70
+ name: yard
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: 0.9.26
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: 0.9.26
83
+ - !ruby/object:Gem::Dependency
84
+ name: yard-doctest
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: 0.1.17
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: 0.1.17
97
+ description: Write a longer description or delete this line.
98
+ email:
99
+ - rostislav.zhuravsky@gmail.com
100
+ executables: []
101
+ extensions: []
102
+ extra_rdoc_files: []
103
+ files:
104
+ - ".github/workflows/ci.yml"
105
+ - ".gitignore"
106
+ - ".rspec"
107
+ - ".rubocop.yml"
108
+ - ".ruby-version"
109
+ - ".yardopts"
110
+ - CHANGELOG.md
111
+ - CODE_OF_CONDUCT.md
112
+ - Gemfile
113
+ - Gemfile.lock
114
+ - LICENSE.txt
115
+ - Makefile
116
+ - README.md
117
+ - Rakefile
118
+ - bin/console
119
+ - bin/rake
120
+ - bin/rspec
121
+ - bin/rubocop
122
+ - bin/setup
123
+ - bin/yard
124
+ - bin/yardoc
125
+ - bin/yri
126
+ - fun-ruby.gemspec
127
+ - lib/fun-ruby.rb
128
+ - lib/fun_ruby.rb
129
+ - lib/fun_ruby/all.rb
130
+ - lib/fun_ruby/array.rb
131
+ - lib/fun_ruby/common/helpers.rb
132
+ - lib/fun_ruby/container.rb
133
+ - lib/fun_ruby/container/define.rb
134
+ - lib/fun_ruby/container/mixin.rb
135
+ - lib/fun_ruby/container/resolve.rb
136
+ - lib/fun_ruby/enum.rb
137
+ - lib/fun_ruby/file.rb
138
+ - lib/fun_ruby/function.rb
139
+ - lib/fun_ruby/hash.rb
140
+ - lib/fun_ruby/string.rb
141
+ - lib/fun_ruby/version.rb
142
+ homepage:
143
+ licenses:
144
+ - MIT
145
+ metadata: {}
146
+ post_install_message:
147
+ rdoc_options: []
148
+ require_paths:
149
+ - lib
150
+ required_ruby_version: !ruby/object:Gem::Requirement
151
+ requirements:
152
+ - - ">="
153
+ - !ruby/object:Gem::Version
154
+ version: '2.3'
155
+ required_rubygems_version: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - ">="
158
+ - !ruby/object:Gem::Version
159
+ version: '0'
160
+ requirements: []
161
+ rubygems_version: 3.1.6
162
+ signing_key:
163
+ specification_version: 4
164
+ summary: Write a short summary, because RubyGems requires one.
165
+ test_files: []