agrippa 0.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.
@@ -0,0 +1,150 @@
1
+ RSpec.shared_examples_for "a state container" do
2
+ let(:random_value) { Object.new }
3
+
4
+ let(:instance) { klass.new }
5
+
6
+ describe "#new" do
7
+ it "empty" do
8
+ expect { klass.new }.to_not raise_error
9
+ end
10
+
11
+ it "hash" do
12
+ expect { klass.new(a: random_value, "b" => 2) }.to_not raise_error
13
+ end
14
+
15
+ it "otherwise explodes" do
16
+ expect { klass.new(42) }.to raise_error(ArgumentError)
17
+ end
18
+ end
19
+
20
+ describe ".state_reader" do
21
+ it "returns a value" do
22
+ klass.state_reader :a
23
+ expect(instance).to respond_to(:a)
24
+ expect(instance.a).to be(nil)
25
+ end
26
+
27
+ it "not command method" do
28
+ klass.state_reader :a
29
+ expect(klass.command_method?(:a)).to_not be(true)
30
+ end
31
+
32
+ it "prefix" do
33
+ klass.state_reader :a, prefix: "foo"
34
+ expect(instance).to respond_to(:foo_a)
35
+ end
36
+
37
+ it "suffix" do
38
+ klass.state_reader :a, suffix: "foo"
39
+ expect(instance).to respond_to(:a_foo)
40
+ end
41
+ end
42
+
43
+ describe ".state_writer" do
44
+ it "chainable" do
45
+ klass.state_writer :a
46
+ expect(instance).to respond_to(:set_a)
47
+ expect(instance.set_a(:value)).to be_a(klass)
48
+ end
49
+
50
+ it "command method" do
51
+ klass.state_writer :a
52
+ expect(klass.command_method?(:set_a)).to be(true)
53
+ end
54
+
55
+ it "prefix" do
56
+ klass.state_writer :a, prefix: "foo"
57
+ expect(instance).to respond_to(:set_foo_a)
58
+ end
59
+
60
+ it "no prefix" do
61
+ klass.state_writer :a, prefix: false
62
+ expect(instance).to respond_to(:a)
63
+ end
64
+
65
+ it "suffix" do
66
+ klass.state_writer :a, suffix: "foo"
67
+ expect(instance).to respond_to(:set_a_foo)
68
+ end
69
+ end
70
+
71
+ it ".state_accessor builds both" do
72
+ klass.state_accessor :a
73
+ expect(instance).to respond_to(:a)
74
+ expect(instance).to respond_to(:set_a)
75
+ end
76
+
77
+ it "reader returns a value" do
78
+ klass.state_accessor :a
79
+ instance = klass.new(a: random_value)
80
+ expect(instance.a).to be(random_value)
81
+ end
82
+
83
+ it "writer sets a value" do
84
+ klass.state_accessor :a
85
+ expect(instance.set_a(2).a).to eq(2)
86
+ end
87
+
88
+ it "#chain command method" do
89
+ expect(klass.command_method?(:chain)).to be(true)
90
+ end
91
+
92
+ it "#chain sets multiple values" do
93
+ klass.state_accessor :a, :b
94
+ updated = instance.chain(a: random_value, b: 2)
95
+ expect(updated).to be_a(klass)
96
+ expect(updated.a).to be(random_value)
97
+ expect(updated.b).to eq(2)
98
+ end
99
+
100
+ it "#store" do
101
+ klass.state_accessor :a
102
+ updated = instance.store(:a, random_value)
103
+ expect(updated).to be_a(klass)
104
+ expect(updated.a).to be(random_value)
105
+ end
106
+
107
+ it "#store indifferent on symbols and strings" do
108
+ klass.state_accessor :a, :b
109
+ expect(instance.store(:a, 1).a).to eq(1)
110
+ expect(instance.store("b", 2).b).to eq(2)
111
+ end
112
+
113
+ it "#store command method" do
114
+ expect(klass.command_method?(:store)).to be(true)
115
+ end
116
+
117
+ it "#fetch" do
118
+ klass.state_accessor :a
119
+ expect(instance.store(:a, random_value).fetch(:a)).to be(random_value)
120
+ end
121
+
122
+ it "#fetch default" do
123
+ klass.state_accessor :a
124
+ expect(instance.fetch(:a, random_value)).to be(random_value)
125
+ end
126
+
127
+ it "#fetch not command method" do
128
+ expect(klass.command_method?(:fetch)).to be(false)
129
+ end
130
+
131
+ it "#fetch indifferent on symbols and strings" do
132
+ updated = instance.store(:a, 1)
133
+ expect(updated.fetch(:a)).to eq(1)
134
+ expect(updated.fetch("a")).to eq(1)
135
+ end
136
+
137
+ it "#default_state" do
138
+ klass.state_accessor :a
139
+ klass.send(:define_method, :default_state) { { a: "default" } }
140
+ expect(instance.a).to eq("default")
141
+ end
142
+
143
+ it "#default_state and new(state)" do
144
+ klass.state_accessor :a, :b
145
+ klass.send(:define_method, :default_state) { { a: 1 } }
146
+ instance = klass.new(b: 2)
147
+ expect(instance.a).to eq(1)
148
+ expect(instance.b).to eq(2)
149
+ end
150
+ end
@@ -0,0 +1,25 @@
1
+ root = File.join(File.dirname(File.expand_path(__FILE__)), "..")
2
+ $LOAD_PATH.unshift(root) unless $LOAD_PATH.include?(root)
3
+
4
+ require "simplecov"
5
+
6
+ SimpleCov.start do
7
+ add_filter "/spec/"
8
+ end
9
+
10
+ RSpec.configure do |config|
11
+ config.filter_run(:focus)
12
+ config.run_all_when_everything_filtered = true
13
+ config.order = :random
14
+ config.default_formatter = "doc" if config.files_to_run.one?
15
+ Kernel.srand(config.seed)
16
+
17
+ config.expect_with :rspec do |expectations|
18
+ expectations.syntax = :expect
19
+ end
20
+
21
+ config.mock_with :rspec do |mocks|
22
+ mocks.syntax = :expect
23
+ mocks.verify_partial_doubles = true
24
+ end
25
+ end
@@ -0,0 +1,17 @@
1
+ require "spec_helper"
2
+ require "agrippa/state"
3
+
4
+ RSpec.describe Agrippa::State do
5
+ it "command methods update" do
6
+ value = double(ping: "pong", :command_method? => true)
7
+ proxy = Agrippa::State.new(value)
8
+ expect(proxy.ping.__id__).to eq(proxy.__id__)
9
+ expect(proxy._value).to eq("pong")
10
+ end
11
+
12
+ it "query methods return" do
13
+ value = double(ping: "pong", :command_method? => false)
14
+ proxy = Agrippa::State.new(value, :ping)
15
+ expect(proxy.ping).to eq("pong")
16
+ end
17
+ end
@@ -0,0 +1,21 @@
1
+ require "spec_helper"
2
+ require "agrippa"
3
+
4
+ RSpec.describe Agrippa::Utilities do
5
+ def try_require(*args)
6
+ Agrippa::Utilities.try_require(*args)
7
+ end
8
+
9
+ it "#try_require success" do
10
+ expect { try_require("securerandom") }.to_not raise_error
11
+ end
12
+
13
+ it "#try_require fail" do
14
+ expect { try_require("totallynotagem") }.to_not raise_error
15
+ end
16
+
17
+ it "#try_require fail message" do
18
+ expect { try_require("totallynotagem", "XXX") }
19
+ .to raise_error(LoadError, /XXX/)
20
+ end
21
+ end
metadata ADDED
@@ -0,0 +1,225 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: agrippa
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Don Werve
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-07-16 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.6'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.6'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '10.0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '10.0'
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.0'
48
+ - - ">="
49
+ - !ruby/object:Gem::Version
50
+ version: 3.0.0
51
+ type: :development
52
+ prerelease: false
53
+ version_requirements: !ruby/object:Gem::Requirement
54
+ requirements:
55
+ - - "~>"
56
+ - !ruby/object:Gem::Version
57
+ version: '3.0'
58
+ - - ">="
59
+ - !ruby/object:Gem::Version
60
+ version: 3.0.0
61
+ - !ruby/object:Gem::Dependency
62
+ name: guard
63
+ requirement: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - "~>"
66
+ - !ruby/object:Gem::Version
67
+ version: '2.8'
68
+ type: :development
69
+ prerelease: false
70
+ version_requirements: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - "~>"
73
+ - !ruby/object:Gem::Version
74
+ version: '2.8'
75
+ - !ruby/object:Gem::Dependency
76
+ name: guard-rspec
77
+ requirement: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - "~>"
80
+ - !ruby/object:Gem::Version
81
+ version: '4.3'
82
+ type: :development
83
+ prerelease: false
84
+ version_requirements: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - "~>"
87
+ - !ruby/object:Gem::Version
88
+ version: '4.3'
89
+ - !ruby/object:Gem::Dependency
90
+ name: ruby_gntp
91
+ requirement: !ruby/object:Gem::Requirement
92
+ requirements:
93
+ - - "~>"
94
+ - !ruby/object:Gem::Version
95
+ version: '0'
96
+ type: :development
97
+ prerelease: false
98
+ version_requirements: !ruby/object:Gem::Requirement
99
+ requirements:
100
+ - - "~>"
101
+ - !ruby/object:Gem::Version
102
+ version: '0'
103
+ - !ruby/object:Gem::Dependency
104
+ name: simplecov
105
+ requirement: !ruby/object:Gem::Requirement
106
+ requirements:
107
+ - - "~>"
108
+ - !ruby/object:Gem::Version
109
+ version: '0'
110
+ type: :development
111
+ prerelease: false
112
+ version_requirements: !ruby/object:Gem::Requirement
113
+ requirements:
114
+ - - "~>"
115
+ - !ruby/object:Gem::Version
116
+ version: '0'
117
+ - !ruby/object:Gem::Dependency
118
+ name: pry
119
+ requirement: !ruby/object:Gem::Requirement
120
+ requirements:
121
+ - - "~>"
122
+ - !ruby/object:Gem::Version
123
+ version: '0'
124
+ type: :development
125
+ prerelease: false
126
+ version_requirements: !ruby/object:Gem::Requirement
127
+ requirements:
128
+ - - "~>"
129
+ - !ruby/object:Gem::Version
130
+ version: '0'
131
+ - !ruby/object:Gem::Dependency
132
+ name: hamster
133
+ requirement: !ruby/object:Gem::Requirement
134
+ requirements:
135
+ - - "~>"
136
+ - !ruby/object:Gem::Version
137
+ version: '1.0'
138
+ - - ">="
139
+ - !ruby/object:Gem::Version
140
+ version: 1.0.0
141
+ type: :development
142
+ prerelease: false
143
+ version_requirements: !ruby/object:Gem::Requirement
144
+ requirements:
145
+ - - "~>"
146
+ - !ruby/object:Gem::Version
147
+ version: '1.0'
148
+ - - ">="
149
+ - !ruby/object:Gem::Version
150
+ version: 1.0.0
151
+ description: A small collection of design patterns, codified in a gem for easy reuse.
152
+ email:
153
+ - don@werve.net
154
+ executables: []
155
+ extensions: []
156
+ extra_rdoc_files: []
157
+ files:
158
+ - ".gitignore"
159
+ - Gemfile
160
+ - Guardfile
161
+ - LICENSE.txt
162
+ - README.md
163
+ - Rakefile
164
+ - agrippa.gemspec
165
+ - lib/agrippa.rb
166
+ - lib/agrippa/accessor_methods.rb
167
+ - lib/agrippa/delegation.rb
168
+ - lib/agrippa/immutable.rb
169
+ - lib/agrippa/maybe.rb
170
+ - lib/agrippa/methods.rb
171
+ - lib/agrippa/mutable.rb
172
+ - lib/agrippa/mutable_hash.rb
173
+ - lib/agrippa/proxy.rb
174
+ - lib/agrippa/state.rb
175
+ - lib/agrippa/utilities.rb
176
+ - lib/agrippa/version.rb
177
+ - spec/delegation_spec.rb
178
+ - spec/immutable_spec.rb
179
+ - spec/maybe_spec.rb
180
+ - spec/methods_spec.rb
181
+ - spec/mutable_hash_spec.rb
182
+ - spec/mutable_spec.rb
183
+ - spec/object_state_spec.rb
184
+ - spec/proxy_spec.rb
185
+ - spec/shared/state_container_examples.rb
186
+ - spec/spec_helper.rb
187
+ - spec/state_spec.rb
188
+ - spec/utilities_spec.rb
189
+ homepage: https://github.com/mataton/agrippa/
190
+ licenses:
191
+ - Apache-2.0
192
+ metadata: {}
193
+ post_install_message:
194
+ rdoc_options: []
195
+ require_paths:
196
+ - lib
197
+ required_ruby_version: !ruby/object:Gem::Requirement
198
+ requirements:
199
+ - - ">="
200
+ - !ruby/object:Gem::Version
201
+ version: '0'
202
+ required_rubygems_version: !ruby/object:Gem::Requirement
203
+ requirements:
204
+ - - ">="
205
+ - !ruby/object:Gem::Version
206
+ version: '0'
207
+ requirements: []
208
+ rubyforge_project:
209
+ rubygems_version: 2.2.2
210
+ signing_key:
211
+ specification_version: 4
212
+ summary: Tools for building better code.
213
+ test_files:
214
+ - spec/delegation_spec.rb
215
+ - spec/immutable_spec.rb
216
+ - spec/maybe_spec.rb
217
+ - spec/methods_spec.rb
218
+ - spec/mutable_hash_spec.rb
219
+ - spec/mutable_spec.rb
220
+ - spec/object_state_spec.rb
221
+ - spec/proxy_spec.rb
222
+ - spec/shared/state_container_examples.rb
223
+ - spec/spec_helper.rb
224
+ - spec/state_spec.rb
225
+ - spec/utilities_spec.rb