shokkenki 0.0.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.
- data/lib/shokkenki/configuration.rb +5 -0
- data/lib/shokkenki/consumer/consumer_role.rb +26 -0
- data/lib/shokkenki/consumer/interaction.rb +24 -0
- data/lib/shokkenki/consumer/patronage.rb +29 -0
- data/lib/shokkenki/consumer/request.rb +14 -0
- data/lib/shokkenki/consumer/response.rb +11 -0
- data/lib/shokkenki/consumer/rspec/example_group_binding.rb +14 -0
- data/lib/shokkenki/consumer/rspec/rspec_configuration.rb +13 -0
- data/lib/shokkenki/consumer/rspec.rb +2 -0
- data/lib/shokkenki/consumer/session.rb +50 -0
- data/lib/shokkenki/consumer/simplification.rb +14 -0
- data/lib/shokkenki/consumer/ticket.rb +38 -0
- data/lib/shokkenki/shokkenki.rb +12 -0
- data/lib/shokkenki/version.rb +5 -0
- metadata +143 -0
@@ -0,0 +1,26 @@
|
|
1
|
+
require 'shokkenki/consumer/patronage'
|
2
|
+
require 'shokkenki/consumer/simplification'
|
3
|
+
|
4
|
+
module Shokkenki
|
5
|
+
module Consumer
|
6
|
+
class ConsumerRole
|
7
|
+
include Shokkenki::Consumer::Simplification
|
8
|
+
|
9
|
+
attr_reader :name, :patronages
|
10
|
+
|
11
|
+
def initialize arguments
|
12
|
+
@name = simplify(arguments[:name])
|
13
|
+
@patronages = {}
|
14
|
+
end
|
15
|
+
|
16
|
+
def patronage provider_name
|
17
|
+
@patronages[simplify(provider_name)] ||= Shokkenki::Consumer::Patronage.new :name => provider_name, :consumer => self
|
18
|
+
end
|
19
|
+
|
20
|
+
def tickets
|
21
|
+
@patronages.values.collect &:ticket
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require 'shokkenki/consumer/request'
|
2
|
+
require 'shokkenki/consumer/response'
|
3
|
+
|
4
|
+
module Shokkenki
|
5
|
+
module Consumer
|
6
|
+
class Interaction
|
7
|
+
|
8
|
+
attr_reader :label, :request, :response
|
9
|
+
|
10
|
+
def initialize attributes
|
11
|
+
@label = attributes[:label]
|
12
|
+
end
|
13
|
+
|
14
|
+
def requested_with request_attributes
|
15
|
+
@request = Shokkenki::Consumer::Request.new request_attributes
|
16
|
+
end
|
17
|
+
|
18
|
+
def responds_with response_attributes
|
19
|
+
@response = Shokkenki::Consumer::Response.new response_attributes
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
require 'shokkenki/consumer/ticket'
|
2
|
+
require 'shokkenki/consumer/interaction'
|
3
|
+
require 'shokkenki/consumer/simplification'
|
4
|
+
|
5
|
+
module Shokkenki
|
6
|
+
module Consumer
|
7
|
+
class Patronage
|
8
|
+
include Shokkenki::Consumer::Simplification
|
9
|
+
|
10
|
+
attr_reader :name, :consumer
|
11
|
+
|
12
|
+
def initialize attributes
|
13
|
+
@name = simplify(attributes[:name])
|
14
|
+
@consumer = attributes[:consumer]
|
15
|
+
@interactions = []
|
16
|
+
end
|
17
|
+
|
18
|
+
def during interaction_label
|
19
|
+
interaction = Interaction.new(:label => interaction_label)
|
20
|
+
@interactions << interaction
|
21
|
+
interaction
|
22
|
+
end
|
23
|
+
|
24
|
+
def ticket
|
25
|
+
Ticket.new :consumer => @consumer.name, :provider => @name
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
require 'shokkenki/consumer/session'
|
2
|
+
require 'shokkenki/consumer/consumer_role'
|
3
|
+
|
4
|
+
module Shokkenki
|
5
|
+
module Consumer
|
6
|
+
module RSpec
|
7
|
+
module ExampleGroupBinding
|
8
|
+
def shokkenki
|
9
|
+
Shokkenki::Consumer::Session.singleton
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
require 'shokkenki/consumer/rspec/example_group_binding'
|
2
|
+
require 'rspec'
|
3
|
+
|
4
|
+
RSpec.configure do |config|
|
5
|
+
config.treat_symbols_as_metadata_keys_with_true_values = true
|
6
|
+
config.include Shokkenki::Consumer::RSpec::ExampleGroupBinding
|
7
|
+
|
8
|
+
config.before(:each, :shokkenki_consumer => lambda{ |x| true }) do
|
9
|
+
Shokkenki::Consumer::Session.singleton.current_consumer = example.metadata[:shokkenki_consumer]
|
10
|
+
end
|
11
|
+
|
12
|
+
config.after(:suite) { Shokkenki::Consumer::Session.singleton.print_tickets }
|
13
|
+
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
require 'shokkenki/consumer/consumer_role'
|
2
|
+
require 'shokkenki/shokkenki'
|
3
|
+
require 'shokkenki/consumer/simplification'
|
4
|
+
|
5
|
+
module Shokkenki
|
6
|
+
module Consumer
|
7
|
+
class Session
|
8
|
+
include Shokkenki::Consumer::Simplification
|
9
|
+
|
10
|
+
attr_reader :consumers, :current_consumer
|
11
|
+
|
12
|
+
def initialize
|
13
|
+
@consumers = {}
|
14
|
+
end
|
15
|
+
|
16
|
+
def self.singleton
|
17
|
+
@instance ||= Session.new
|
18
|
+
end
|
19
|
+
|
20
|
+
def provider provider_name
|
21
|
+
@current_consumer.patronage provider_name
|
22
|
+
end
|
23
|
+
|
24
|
+
def current_consumer= consumer_attributes
|
25
|
+
name = simplify(consumer_attributes[:name])
|
26
|
+
@consumers[name] ||= Shokkenki::Consumer::ConsumerRole.new consumer_attributes
|
27
|
+
@current_consumer = @consumers[name]
|
28
|
+
end
|
29
|
+
|
30
|
+
def stamped_tickets
|
31
|
+
time = Time.now
|
32
|
+
# would rather copy + transform tickets rather than modify
|
33
|
+
# existing state - something to come back to
|
34
|
+
@consumers.values.collect(&:tickets).flatten.map do |ticket|
|
35
|
+
ticket.version = Shokkenki::Version::STRING
|
36
|
+
ticket.time = time
|
37
|
+
ticket
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
def print_tickets
|
42
|
+
stamped_tickets.each do |ticket|
|
43
|
+
ticket_path = File.expand_path(File.join(Shokkenki.configuration.ticket_location, ticket.filename))
|
44
|
+
File.open(ticket_path, 'w') { |file| file.write(ticket.to_json) }
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
require 'json'
|
2
|
+
require 'time'
|
3
|
+
|
4
|
+
module Shokkenki
|
5
|
+
module Consumer
|
6
|
+
class Ticket
|
7
|
+
|
8
|
+
attr_reader :provider, :consumer
|
9
|
+
attr_accessor :time, :version
|
10
|
+
|
11
|
+
def initialize attributes
|
12
|
+
@provider = attributes[:provider]
|
13
|
+
@consumer = attributes[:consumer]
|
14
|
+
end
|
15
|
+
|
16
|
+
def filename
|
17
|
+
"#{@consumer}-#{@provider}.json"
|
18
|
+
end
|
19
|
+
|
20
|
+
def to_hash
|
21
|
+
{
|
22
|
+
:consumer => {
|
23
|
+
:name => @consumer
|
24
|
+
},
|
25
|
+
:provider => {
|
26
|
+
:name => @provider
|
27
|
+
},
|
28
|
+
:time => @time.utc.iso8601,
|
29
|
+
:version => @version
|
30
|
+
}
|
31
|
+
end
|
32
|
+
|
33
|
+
def to_json
|
34
|
+
to_hash.to_json
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
metadata
ADDED
@@ -0,0 +1,143 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: shokkenki
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.0
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Brent Snook
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2013-10-07 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: json
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ! '>='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '0'
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: rake
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
34
|
+
requirements:
|
35
|
+
- - ~>
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: 10.0.0
|
38
|
+
type: :development
|
39
|
+
prerelease: false
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ~>
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: 10.0.0
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: rspec
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
50
|
+
requirements:
|
51
|
+
- - ~>
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: 2.14.0
|
54
|
+
type: :development
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ~>
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: 2.14.0
|
62
|
+
- !ruby/object:Gem::Dependency
|
63
|
+
name: json
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
65
|
+
none: false
|
66
|
+
requirements:
|
67
|
+
- - ! '>='
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: '0'
|
70
|
+
type: :development
|
71
|
+
prerelease: false
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - ! '>='
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: '0'
|
78
|
+
- !ruby/object:Gem::Dependency
|
79
|
+
name: timecop
|
80
|
+
requirement: !ruby/object:Gem::Requirement
|
81
|
+
none: false
|
82
|
+
requirements:
|
83
|
+
- - ! '>='
|
84
|
+
- !ruby/object:Gem::Version
|
85
|
+
version: '0'
|
86
|
+
type: :development
|
87
|
+
prerelease: false
|
88
|
+
version_requirements: !ruby/object:Gem::Requirement
|
89
|
+
none: false
|
90
|
+
requirements:
|
91
|
+
- - ! '>='
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
version: '0'
|
94
|
+
description: Consumer-driven contracts recorded from real examples.
|
95
|
+
email: brent@fuglylogic.com
|
96
|
+
executables: []
|
97
|
+
extensions: []
|
98
|
+
extra_rdoc_files: []
|
99
|
+
files:
|
100
|
+
- lib/shokkenki/configuration.rb
|
101
|
+
- lib/shokkenki/consumer/consumer_role.rb
|
102
|
+
- lib/shokkenki/consumer/interaction.rb
|
103
|
+
- lib/shokkenki/consumer/patronage.rb
|
104
|
+
- lib/shokkenki/consumer/request.rb
|
105
|
+
- lib/shokkenki/consumer/response.rb
|
106
|
+
- lib/shokkenki/consumer/rspec.rb
|
107
|
+
- lib/shokkenki/consumer/rspec/example_group_binding.rb
|
108
|
+
- lib/shokkenki/consumer/rspec/rspec_configuration.rb
|
109
|
+
- lib/shokkenki/consumer/session.rb
|
110
|
+
- lib/shokkenki/consumer/simplification.rb
|
111
|
+
- lib/shokkenki/consumer/ticket.rb
|
112
|
+
- lib/shokkenki/shokkenki.rb
|
113
|
+
- lib/shokkenki/version.rb
|
114
|
+
homepage: http://github.com/brentsnook/shokkenki
|
115
|
+
licenses:
|
116
|
+
- MIT
|
117
|
+
post_install_message:
|
118
|
+
rdoc_options:
|
119
|
+
- --charset=UTF-8
|
120
|
+
require_paths:
|
121
|
+
- lib
|
122
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
123
|
+
none: false
|
124
|
+
requirements:
|
125
|
+
- - ! '>='
|
126
|
+
- !ruby/object:Gem::Version
|
127
|
+
version: 1.8.7
|
128
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
129
|
+
none: false
|
130
|
+
requirements:
|
131
|
+
- - ! '>='
|
132
|
+
- !ruby/object:Gem::Version
|
133
|
+
version: '0'
|
134
|
+
segments:
|
135
|
+
- 0
|
136
|
+
hash: -4031148388905452257
|
137
|
+
requirements: []
|
138
|
+
rubyforge_project:
|
139
|
+
rubygems_version: 1.8.24
|
140
|
+
signing_key:
|
141
|
+
specification_version: 3
|
142
|
+
summary: shokkenki-0.0.0
|
143
|
+
test_files: []
|