fn_space 1.0.0 → 1.0.1

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: ef2eda95f4d90d23f7159493efab4a5d2e27443c
4
- data.tar.gz: f14a79bff5994467498973e2470b6a770ca952cc
3
+ metadata.gz: c4d7526e1282e51b6fc248eaa124bf4d2dacd5f8
4
+ data.tar.gz: 813b4dad11b9fe018c96041dc342eef3d19c0c31
5
5
  SHA512:
6
- metadata.gz: d28c17beb0190f6e029dc9ec2434659cddd3658d0345d3c468535b320ed62ad004ce67955b442dea5e675c70f58fd61f1da92bc544b212572c0acfbd980e17be
7
- data.tar.gz: d92fd1d315563e6093b9a7982e71157069bb34f4c1479d1181c794f3e3d6f92aa6ac5d3d9f50ef453962d4a2185539203f5f09f8befd57796d6865b5bb9d7c01
6
+ metadata.gz: c997bcce83d4cd44d6e5c9bfa7f25d1ac1ec1731c18d8f362098da8140c04ab08178a02da863caf3da18e0b612f4e440f0770c2438bafcdb1a42c58908e5790e
7
+ data.tar.gz: b9b79e75268bf8f6c0ad58b508bd3cbec28876fb9e3a2fee75ab14bc8cf7302f9124c1b1fb7f9a22b29e2f568b2641c8055125f738983f0e383a978e7f91e79e
data/README.md CHANGED
@@ -10,7 +10,7 @@ methods to enable functional paradigms.
10
10
  # my_awsome_project/formula.rb
11
11
  require 'fn_space'
12
12
 
13
- fn_space(:Formula) do |import, exports|
13
+ fn_space('Formula') do |import, exports|
14
14
  pi = 3.14
15
15
  exports.circ = ->(r) { 2 * pi * r }
16
16
  exports.area = ->(r) { pi * r ** 2 }
@@ -43,8 +43,8 @@ be used to store any properties added to the `exports` OpenStruct.
43
43
  ### `import.(*names).from Source`
44
44
 
45
45
  `import.()` can be used to import properties from a source. If only a single
46
- property is requested then only a single value will be return, otherwise an
47
- array will be.
46
+ property is requested then only a single value will be returned, otherwise an
47
+ array of values will.
48
48
 
49
49
  ``` ruby
50
50
  MagicNumbers = Struct.new(:a, :b, :c).new(5, 7, 19)
@@ -0,0 +1,8 @@
1
+ module FnSpace
2
+ module Definable
3
+ def define(name, &b)
4
+ define_method(name, &b)
5
+ self
6
+ end
7
+ end
8
+ end
@@ -1,4 +1,6 @@
1
1
  require_relative 'utils'
2
+ require_relative 'definable'
3
+
2
4
  chain = FnSpace::Utils.chain
3
5
  mod = FnSpace::Utils.mod
4
6
 
@@ -7,14 +9,15 @@ map = ->(array) { ->(map_fn) { array.map(&map_fn) } }
7
9
  send_map_fn = ->(obj) { ->(name) { obj.send(name) } }
8
10
  method_map_fn = ->(obj) { ->(name) { obj.method(name) } }
9
11
 
10
- importer = ->(names, map_fn) do
11
- mod.().assign(:from) do |source|
12
- chain.(source) >> map_fn >> map.(names) >> first_or_all | :value
12
+ importer = Class.new
13
+ .extend(FnSpace::Definable)
14
+ .define(:initialize) { |names, map_fn| @names = names; @map_fn = map_fn }
15
+ .define(:from) do |source|
16
+ chain.(source) >> @map_fn >> map.(@names) >> first_or_all | :value
13
17
  end
14
- end
15
18
 
16
- import = ->(*names) { importer.(names, send_map_fn) }
17
- import_methods = ->(*names) { importer.(names, method_map_fn) }
19
+ import = ->(*names) { importer.new(names, send_map_fn) }
20
+ import_methods = ->(*names) { importer.new(names, method_map_fn) }
18
21
 
19
22
  FnSpace::Import = mod.()
20
23
  .assign(:call, &import)
@@ -1,15 +1,17 @@
1
1
  require_relative 'assignable'
2
+ require_relative 'definable'
2
3
 
3
4
  mod = ->(&b) { Module.new(&b).extend(FnSpace::Assignable) }
4
5
  struct = ->(hash) { hash.reduce(mod.()) { |obj, (k, v)| obj.assign(k){v} } }
5
6
  apply_send = ->(method, *args) { ->(obj) { obj.send(method, *args) } }
6
7
 
7
- chain = ->(value) do
8
- monad = mod.()
9
- .assign(:>>) { |fn| value = fn.to_proc.(value); monad }
10
- .assign(:<<) { |fn| fn.to_proc.(value); monad }
11
- .assign(:|) { |fn| fn.to_proc.(monad) }
12
- .assign(:value) { value }
13
- end
8
+ chain = Class.new
9
+ .extend(FnSpace::Definable)
10
+ .define(:initialize) { |value| @value = value }
11
+ .define(:>>) { |fn| @value = fn.to_proc.(value); self }
12
+ .define(:<<) { |fn| fn.to_proc.(value); self }
13
+ .define(:|) { |fn| fn.to_proc.(self) }
14
+ .define(:value) { @value }
15
+ .method(:new)
14
16
 
15
17
  FnSpace::Utils = struct.(mod: mod, struct: struct, apply_send: apply_send, chain: chain)
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fn_space
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Max White
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-10-31 00:00:00.000000000 Z
11
+ date: 2015-11-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rspec
@@ -40,6 +40,7 @@ files:
40
40
  - README.md
41
41
  - lib/fn_space.rb
42
42
  - lib/fn_space/assignable.rb
43
+ - lib/fn_space/definable.rb
43
44
  - lib/fn_space/export.rb
44
45
  - lib/fn_space/import.rb
45
46
  - lib/fn_space/utils.rb