speculation 0.1.0 → 0.2.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.
@@ -1,10 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
  require "set"
3
- require "speculation/conj"
4
3
 
5
4
  module Speculation
6
- using Conj
7
-
8
5
  # @private
9
6
  module Utils
10
7
  def self.hash?(x)
@@ -19,7 +16,7 @@ module Speculation
19
16
  xs.respond_to?(:each)
20
17
  end
21
18
 
22
- def self.identity(x)
19
+ def self.itself(x)
23
20
  x
24
21
  end
25
22
 
@@ -58,7 +55,36 @@ module Speculation
58
55
  end
59
56
 
60
57
  def self.into(to, from)
61
- from.reduce(to) { |memo, obj| memo.conj(obj) }
58
+ from.reduce(to) { |memo, obj| conj(memo, obj) }
59
+ end
60
+
61
+ def self.count_eq?(coll, count)
62
+ coll.count == count
63
+ end
64
+
65
+ def self.count_between?(coll, min_count, max_count)
66
+ coll.count.between?(min_count, max_count)
67
+ end
68
+
69
+ def self.key?(hash, key)
70
+ hash.key?(key)
71
+ end
72
+
73
+ def self.empty?(coll)
74
+ coll.empty?
75
+ end
76
+
77
+ def self.conj(a, b)
78
+ case a
79
+ when Array, Set
80
+ a + [b]
81
+ when Hash
82
+ case b
83
+ when Array then a.merge(b[0] => b[1])
84
+ else a.merge(b)
85
+ end
86
+ else raise ArgumentError, "#{a}: must be an Array, Set or Hash"
87
+ end
62
88
  end
63
89
  end
64
90
  end
@@ -1,4 +1,4 @@
1
1
  # frozen_string_literal: true
2
2
  module Speculation
3
- VERSION = "0.1.0"
3
+ VERSION = "0.2.0"
4
4
  end
data/speculation.gemspec CHANGED
@@ -25,7 +25,6 @@ Gem::Specification.new do |spec|
25
25
  spec.add_dependency "concurrent-ruby", "~> 1.0"
26
26
  spec.add_dependency "rantly", "~> 1.0"
27
27
 
28
- spec.add_development_dependency "test-queue", "~> 0.4"
29
28
  spec.add_development_dependency "bundler", "~> 1.13"
30
29
  spec.add_development_dependency "rake", "~> 10.0"
31
30
  spec.add_development_dependency "yard", "~> 0.9"
metadata CHANGED
@@ -1,164 +1,150 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: speculation
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jamie English
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-02-12 00:00:00.000000000 Z
11
+ date: 2017-03-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
+ name: concurrent-ruby
14
15
  requirement: !ruby/object:Gem::Requirement
15
16
  requirements:
16
17
  - - "~>"
17
18
  - !ruby/object:Gem::Version
18
19
  version: '1.0'
19
- name: concurrent-ruby
20
- prerelease: false
21
20
  type: :runtime
21
+ prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: '1.0'
27
27
  - !ruby/object:Gem::Dependency
28
+ name: rantly
28
29
  requirement: !ruby/object:Gem::Requirement
29
30
  requirements:
30
31
  - - "~>"
31
32
  - !ruby/object:Gem::Version
32
33
  version: '1.0'
33
- name: rantly
34
- prerelease: false
35
34
  type: :runtime
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - "~>"
39
- - !ruby/object:Gem::Version
40
- version: '1.0'
41
- - !ruby/object:Gem::Dependency
42
- requirement: !ruby/object:Gem::Requirement
43
- requirements:
44
- - - "~>"
45
- - !ruby/object:Gem::Version
46
- version: '0.4'
47
- name: test-queue
48
35
  prerelease: false
49
- type: :development
50
36
  version_requirements: !ruby/object:Gem::Requirement
51
37
  requirements:
52
38
  - - "~>"
53
39
  - !ruby/object:Gem::Version
54
- version: '0.4'
40
+ version: '1.0'
55
41
  - !ruby/object:Gem::Dependency
42
+ name: bundler
56
43
  requirement: !ruby/object:Gem::Requirement
57
44
  requirements:
58
45
  - - "~>"
59
46
  - !ruby/object:Gem::Version
60
47
  version: '1.13'
61
- name: bundler
62
- prerelease: false
63
48
  type: :development
49
+ prerelease: false
64
50
  version_requirements: !ruby/object:Gem::Requirement
65
51
  requirements:
66
52
  - - "~>"
67
53
  - !ruby/object:Gem::Version
68
54
  version: '1.13'
69
55
  - !ruby/object:Gem::Dependency
56
+ name: rake
70
57
  requirement: !ruby/object:Gem::Requirement
71
58
  requirements:
72
59
  - - "~>"
73
60
  - !ruby/object:Gem::Version
74
61
  version: '10.0'
75
- name: rake
76
- prerelease: false
77
62
  type: :development
63
+ prerelease: false
78
64
  version_requirements: !ruby/object:Gem::Requirement
79
65
  requirements:
80
66
  - - "~>"
81
67
  - !ruby/object:Gem::Version
82
68
  version: '10.0'
83
69
  - !ruby/object:Gem::Dependency
70
+ name: yard
84
71
  requirement: !ruby/object:Gem::Requirement
85
72
  requirements:
86
73
  - - "~>"
87
74
  - !ruby/object:Gem::Version
88
75
  version: '0.9'
89
- name: yard
90
- prerelease: false
91
76
  type: :development
77
+ prerelease: false
92
78
  version_requirements: !ruby/object:Gem::Requirement
93
79
  requirements:
94
80
  - - "~>"
95
81
  - !ruby/object:Gem::Version
96
82
  version: '0.9'
97
83
  - !ruby/object:Gem::Dependency
84
+ name: minitest
98
85
  requirement: !ruby/object:Gem::Requirement
99
86
  requirements:
100
87
  - - "~>"
101
88
  - !ruby/object:Gem::Version
102
89
  version: '5.0'
103
- name: minitest
104
- prerelease: false
105
90
  type: :development
91
+ prerelease: false
106
92
  version_requirements: !ruby/object:Gem::Requirement
107
93
  requirements:
108
94
  - - "~>"
109
95
  - !ruby/object:Gem::Version
110
96
  version: '5.0'
111
97
  - !ruby/object:Gem::Dependency
98
+ name: pry
112
99
  requirement: !ruby/object:Gem::Requirement
113
100
  requirements:
114
101
  - - "~>"
115
102
  - !ruby/object:Gem::Version
116
103
  version: '0.10'
117
- name: pry
118
- prerelease: false
119
104
  type: :development
105
+ prerelease: false
120
106
  version_requirements: !ruby/object:Gem::Requirement
121
107
  requirements:
122
108
  - - "~>"
123
109
  - !ruby/object:Gem::Version
124
110
  version: '0.10'
125
111
  - !ruby/object:Gem::Dependency
112
+ name: pry-byebug
126
113
  requirement: !ruby/object:Gem::Requirement
127
114
  requirements:
128
115
  - - "~>"
129
116
  - !ruby/object:Gem::Version
130
- version: '0.2'
131
- name: pry-nav
132
- prerelease: false
117
+ version: '3.4'
133
118
  type: :development
119
+ prerelease: false
134
120
  version_requirements: !ruby/object:Gem::Requirement
135
121
  requirements:
136
122
  - - "~>"
137
123
  - !ruby/object:Gem::Version
138
- version: '0.2'
124
+ version: '3.4'
139
125
  - !ruby/object:Gem::Dependency
126
+ name: pry-doc
140
127
  requirement: !ruby/object:Gem::Requirement
141
128
  requirements:
142
129
  - - "~>"
143
130
  - !ruby/object:Gem::Version
144
131
  version: '0.9'
145
- name: pry-doc
146
- prerelease: false
147
132
  type: :development
133
+ prerelease: false
148
134
  version_requirements: !ruby/object:Gem::Requirement
149
135
  requirements:
150
136
  - - "~>"
151
137
  - !ruby/object:Gem::Version
152
138
  version: '0.9'
153
139
  - !ruby/object:Gem::Dependency
140
+ name: rubocop
154
141
  requirement: !ruby/object:Gem::Requirement
155
142
  requirements:
156
143
  - - "~>"
157
144
  - !ruby/object:Gem::Version
158
145
  version: '0.47'
159
- name: rubocop
160
- prerelease: false
161
146
  type: :development
147
+ prerelease: false
162
148
  version_requirements: !ruby/object:Gem::Requirement
163
149
  requirements:
164
150
  - - "~>"
@@ -196,8 +182,9 @@ files:
196
182
  - bin/yard
197
183
  - bin/yardoc
198
184
  - bin/yri
185
+ - examples/codebreaker.rb
186
+ - examples/spec_guide.rb
199
187
  - lib/speculation.rb
200
- - lib/speculation/conj.rb
201
188
  - lib/speculation/error.rb
202
189
  - lib/speculation/gen.rb
203
190
  - lib/speculation/identifier.rb
@@ -216,14 +203,13 @@ files:
216
203
  - lib/speculation/spec_impl/tuple_spec.rb
217
204
  - lib/speculation/test.rb
218
205
  - lib/speculation/utils.rb
219
- - lib/speculation/utils_specs.rb
220
206
  - lib/speculation/version.rb
221
207
  - speculation.gemspec
222
208
  homepage: https://github.com/english/speculation
223
209
  licenses:
224
210
  - MIT
225
211
  metadata: {}
226
- post_install_message:
212
+ post_install_message:
227
213
  rdoc_options: []
228
214
  require_paths:
229
215
  - lib
@@ -238,9 +224,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
238
224
  - !ruby/object:Gem::Version
239
225
  version: '0'
240
226
  requirements: []
241
- rubyforge_project:
227
+ rubyforge_project:
242
228
  rubygems_version: 2.6.10
243
- signing_key:
229
+ signing_key:
244
230
  specification_version: 4
245
231
  summary: Ruby port of clojure.spec
246
232
  test_files: []
@@ -1,32 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Speculation
4
- # @private
5
- module Conj
6
- refine Array do
7
- def conj(x)
8
- self + [x]
9
- end
10
- end
11
-
12
- refine Set do
13
- def conj(x)
14
- self + Set[x]
15
- end
16
- end
17
-
18
- refine Hash do
19
- def conj(x)
20
- if Utils.array?(x)
21
- unless x.count == 2
22
- raise ArgumentError, "Array arg to conj must be a pair"
23
- end
24
-
25
- merge(x[0] => x[1])
26
- else
27
- merge(x)
28
- end
29
- end
30
- end
31
- end
32
- end
@@ -1,57 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Speculation
4
- # @private
5
- module UtilsSpecs
6
- using Speculation::NamespacedSymbols.refine(self)
7
-
8
- S = Speculation
9
- U = Speculation::Utils
10
-
11
- S.fdef(U.method(:hash?),
12
- :args => S.tuple(:any.ns(S)),
13
- :ret => :boolean.ns(S))
14
-
15
- S.fdef(U.method(:array?),
16
- :args => S.tuple(:any.ns(S)),
17
- :ret => :boolean.ns(S))
18
-
19
- S.fdef(U.method(:collection?),
20
- :args => S.tuple(:any.ns(S)),
21
- :ret => :boolean.ns(S))
22
-
23
- S.fdef(U.method(:identity),
24
- :args => S.cat(:x => :any.ns(S)),
25
- :ret => :any.ns(S),
26
- :fn => ->(x) { x[:args][:x].equal?(x[:ret]) })
27
-
28
- S.fdef(U.method(:complement),
29
- :args => :empty.ns(S),
30
- :block => S.fspec(:args => S.zero_or_more(:any.ns(S)),
31
- :ret => :any.ns(S)),
32
- :ret => S.fspec(:args => S.zero_or_more(:any.ns(S)),
33
- :ret => :boolean.ns(S)))
34
-
35
- S.fdef(U.method(:constantly),
36
- :args => S.cat(:x => :any.ns(S)),
37
- :ret => Proc,
38
- :fn => ->(x) { x[:args][:x].equal?(x[:ret].call) })
39
-
40
- S.fdef(U.method(:distinct?),
41
- :args => S.cat(:coll => Enumerable),
42
- :ret => :boolean.ns(S))
43
-
44
- S.fdef(U.method(:ident?),
45
- :args => S.cat(:x => :any.ns(S)),
46
- :ret => :boolean.ns(S))
47
-
48
- S.fdef(U.method(:method?),
49
- :args => S.cat(:x => :any.ns(S)),
50
- :ret => :boolean.ns(S))
51
-
52
- S.fdef(U.method(:empty),
53
- :args => S.cat(:coll => Enumerable),
54
- :ret => S.and(Enumerable, ->(coll) { coll.empty? }),
55
- :fn => ->(x) { x[:args][:coll].class == x[:ret].class })
56
- end
57
- end