fn_space 1.0.0 → 1.0.1

Sign up to get free protection for your applications and to get access to all the features.
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