cuki 0.0.5 → 0.0.6
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/VERSION +1 -1
- data/cuki.gemspec +3 -1
- data/cuki.yaml.sample +2 -3
- data/features/pull/pull.feature +3 -3
- data/features/pull/pull_single.feature +4 -3
- data/features/pull/tables.feature +2 -2
- data/features/pull/tags.feature +3 -2
- data/features/pull/textile.feature +4 -3
- data/features/push/push.feature +10 -13
- data/features/step_defs/push_steps.rb +11 -0
- data/features/support/env.rb +9 -1
- data/lib/cuki.rb +50 -30
- data/lib/pusher.rb +12 -0
- metadata +5 -3
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0.
|
1
|
+
0.0.6
|
data/cuki.gemspec
CHANGED
@@ -5,7 +5,7 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = "cuki"
|
8
|
-
s.version = "0.0.
|
8
|
+
s.version = "0.0.6"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Andy Waite"]
|
@@ -39,8 +39,10 @@ Gem::Specification.new do |s|
|
|
39
39
|
"features/push/tables.feature",
|
40
40
|
"features/push/tags.feature",
|
41
41
|
"features/step_defs/pull_steps.rb",
|
42
|
+
"features/step_defs/push_steps.rb",
|
42
43
|
"features/support/env.rb",
|
43
44
|
"lib/cuki.rb",
|
45
|
+
"lib/pusher.rb",
|
44
46
|
"spec/cuki_spec.rb",
|
45
47
|
"spec/spec_helper.rb"
|
46
48
|
]
|
data/cuki.yaml.sample
CHANGED
@@ -1,11 +1,10 @@
|
|
1
1
|
# edit this and save it as config/cuki.yaml
|
2
2
|
# the mappings associate the page IDs on Confluence with local feature files
|
3
|
-
# the .feature extension is added automatically
|
4
3
|
---
|
5
4
|
host: http://mywiki
|
6
5
|
tags:
|
7
6
|
draft: "{info:title=Draft version}"
|
8
7
|
signed_off: "{info:title=Signed-off}"
|
9
8
|
mappings:
|
10
|
-
123: products/add_product
|
11
|
-
124: products/remove_product
|
9
|
+
123: features/products/add_product.feature
|
10
|
+
124: features/products/remove_product.feature
|
data/features/pull/pull.feature
CHANGED
@@ -21,8 +21,8 @@ Feature: Pull
|
|
21
21
|
---
|
22
22
|
host: http://example.com
|
23
23
|
mappings:
|
24
|
-
123: products/add_product
|
25
|
-
456: products/remove_product
|
24
|
+
123: features/products/add_product.feature
|
25
|
+
456: features/products/remove_product.feature
|
26
26
|
"""
|
27
27
|
And a Confluence page on "example.com" with id 123:
|
28
28
|
"""
|
@@ -49,7 +49,7 @@ Feature: Pull
|
|
49
49
|
This feature describes adding a product
|
50
50
|
|
51
51
|
"""
|
52
|
-
|
52
|
+
And the file "features/products/remove_product.feature" should contain exactly:
|
53
53
|
"""
|
54
54
|
Feature: Remove Product
|
55
55
|
|
@@ -6,8 +6,8 @@ Feature: Pull single
|
|
6
6
|
---
|
7
7
|
host: http://example.com
|
8
8
|
mappings:
|
9
|
-
123: products/add_product
|
10
|
-
456: products/remove_product
|
9
|
+
123: features/products/add_product.feature
|
10
|
+
456: features/products/remove_product.feature
|
11
11
|
"""
|
12
12
|
And a Confluence page on "example.com" with id 123:
|
13
13
|
"""
|
@@ -25,4 +25,5 @@ Feature: Pull single
|
|
25
25
|
"""
|
26
26
|
When I run `cuki pull features/products/add_product.feature`
|
27
27
|
Then a file named "features/products/add_product.feature" should exist
|
28
|
-
But the file "features/products/remove_product.feature" should not exist
|
28
|
+
But the file "features/products/remove_product.feature" should not exist
|
29
|
+
|
@@ -2,13 +2,12 @@
|
|
2
2
|
Feature: Tables
|
3
3
|
|
4
4
|
Scenario: Table with more than one column
|
5
|
-
|
6
5
|
Given a file named "config/cuki.yaml" with:
|
7
6
|
"""
|
8
7
|
---
|
9
8
|
host: http://example.com
|
10
9
|
mappings:
|
11
|
-
123: products/add_product
|
10
|
+
123: features/products/add_product.feature
|
12
11
|
"""
|
13
12
|
And a Confluence page on "example.com" with id 123:
|
14
13
|
"""
|
@@ -38,3 +37,4 @@ Feature: Tables
|
|
38
37
|
| b | 2 |
|
39
38
|
|
40
39
|
"""
|
40
|
+
|
data/features/pull/tags.feature
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
Feature: Tags
|
2
2
|
|
3
|
-
Scenario:
|
3
|
+
Scenario:
|
4
4
|
Given a file named "config/cuki.yaml" with:
|
5
5
|
"""
|
6
6
|
---
|
@@ -9,7 +9,7 @@ Feature: Tags
|
|
9
9
|
draft: "{info:title=Draft version}"
|
10
10
|
signed_off: "{info:title=Signed-off}"
|
11
11
|
mappings:
|
12
|
-
123: products/add_product
|
12
|
+
123: features/products/add_product.feature
|
13
13
|
"""
|
14
14
|
And a Confluence page on "example.com" with id 123:
|
15
15
|
"""
|
@@ -30,3 +30,4 @@ Feature: Tags
|
|
30
30
|
Scenario: Foo
|
31
31
|
|
32
32
|
"""
|
33
|
+
|
@@ -6,14 +6,14 @@ Feature: Textile
|
|
6
6
|
---
|
7
7
|
host: http://example.com
|
8
8
|
mappings:
|
9
|
-
123: products/add_product
|
9
|
+
123: features/products/add_product.feature
|
10
10
|
"""
|
11
11
|
And a Confluence page on "example.com" with id 123:
|
12
12
|
"""
|
13
13
|
<input id="content-title" value="Add Product">
|
14
14
|
<div id="markupTextarea">
|
15
15
|
h5. Scenario: Foo
|
16
|
-
|
16
|
+
|
17
17
|
h6. Scenario Outline: Bar
|
18
18
|
</div>
|
19
19
|
"""
|
@@ -26,7 +26,8 @@ Feature: Textile
|
|
26
26
|
|
27
27
|
|
28
28
|
Scenario: Foo
|
29
|
-
|
29
|
+
|
30
30
|
Scenario Outline: Bar
|
31
31
|
|
32
32
|
"""
|
33
|
+
|
data/features/push/push.feature
CHANGED
@@ -1,33 +1,28 @@
|
|
1
|
-
@pending
|
2
1
|
Feature: Push
|
3
2
|
|
4
|
-
|
3
|
+
@focus @pending
|
4
|
+
Scenario: Push a feature with no scenarios
|
5
5
|
Given a file named "config/cuki.yaml" with:
|
6
6
|
"""
|
7
7
|
---
|
8
8
|
host: http://mywiki
|
9
9
|
mappings:
|
10
|
-
123: products/add_product
|
10
|
+
123: features/products/add_product.feature
|
11
11
|
"""
|
12
|
-
|
13
|
-
Scenario: Push a feature with no scenarios
|
14
|
-
Given a file named "config/cuki.yaml" with:
|
12
|
+
And a file named "features/products/add_product.feature" with:
|
15
13
|
"""
|
16
14
|
Feature: Hello world & all
|
17
15
|
|
18
16
|
This is my feature
|
19
17
|
"""
|
20
|
-
|
21
|
-
Then the feature should be pushed to "http://mywiki/pages/editpage.action?pageId=123"
|
22
|
-
And the Confluence content should be:
|
18
|
+
And a Confluence page exists on "mywiki" with id 123, title "Hello world & all" and content:
|
23
19
|
"""
|
24
20
|
This is my feature
|
25
21
|
"""
|
26
|
-
|
27
|
-
|
28
|
-
Hello world & all
|
29
|
-
"""
|
22
|
+
When I run `cuki push features/products/add_product.feature`
|
23
|
+
Then the push should be successful
|
30
24
|
|
25
|
+
@pending
|
31
26
|
Scenario: Push a feature containing a scenario
|
32
27
|
Given a file named "config/cuki.yaml" with:
|
33
28
|
"""
|
@@ -46,6 +41,7 @@ Feature: Push
|
|
46
41
|
Then something
|
47
42
|
"""
|
48
43
|
|
44
|
+
@pending
|
49
45
|
Scenario: Push a feature containing a scenario outline
|
50
46
|
|
51
47
|
The first row of the examples table should be a header row.
|
@@ -74,6 +70,7 @@ Feature: Push
|
|
74
70
|
|
75
71
|
"""
|
76
72
|
|
73
|
+
@pending
|
77
74
|
Scenario: Push a feature containing a scenario outline with multiple example
|
78
75
|
Pending
|
79
76
|
|
@@ -0,0 +1,11 @@
|
|
1
|
+
Then /^the feature should be pushed to "([^"]*)" with title "([^"]*)" with:$/ do |url, title, content|
|
2
|
+
|
3
|
+
@push_stubs ||= []
|
4
|
+
@push_stubs << {
|
5
|
+
'url' => url,
|
6
|
+
'title' => title,
|
7
|
+
'content' => content
|
8
|
+
}
|
9
|
+
|
10
|
+
File.open('push_stubs.json', 'w') { |f| f.write @push_stubs.to_json }
|
11
|
+
end
|
data/features/support/env.rb
CHANGED
data/lib/cuki.rb
CHANGED
@@ -3,15 +3,12 @@ require 'httpclient'
|
|
3
3
|
require 'nokogiri'
|
4
4
|
require 'yaml'
|
5
5
|
require 'CGI'
|
6
|
-
require 'webmock'
|
7
6
|
require 'json'
|
8
7
|
|
9
|
-
|
10
|
-
if File.exist?('stubs.json')
|
11
|
-
|
12
|
-
|
13
|
-
stub_request(:get, url).to_return(:status => 200, :body => body, :headers => {})
|
14
|
-
end
|
8
|
+
# terrible hack
|
9
|
+
if File.exist?('stubs.json') || File.exist?('stubs.json')
|
10
|
+
require 'webmock'
|
11
|
+
include WebMock::API
|
15
12
|
end
|
16
13
|
|
17
14
|
class Cuki
|
@@ -23,32 +20,26 @@ class Cuki
|
|
23
20
|
end
|
24
21
|
|
25
22
|
def initialize(args)
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
parse_config_file
|
23
|
+
validate_args args
|
24
|
+
read_config
|
25
|
+
configure_http_client
|
26
|
+
|
31
27
|
action = args.first
|
32
28
|
if 'pull' == action
|
29
|
+
configure_pull_stubs
|
33
30
|
verify_project
|
34
|
-
configure_http_client
|
35
31
|
file = args[1]
|
36
32
|
if file
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
id = @config['mappings'].invert[key]
|
41
|
-
filepath = key
|
42
|
-
process_feature id, filepath
|
33
|
+
id = @config['mappings'].invert[file]
|
34
|
+
raise "could not get id for #{file}"
|
35
|
+
pull_feature id, file
|
43
36
|
else
|
44
|
-
@config['mappings'].each { |id, filepath|
|
37
|
+
@config['mappings'].each { |id, filepath| pull_feature id, filepath }
|
45
38
|
end
|
46
39
|
#autoformat
|
47
40
|
elsif 'push' == action
|
48
|
-
|
49
|
-
|
50
|
-
id = @config['mappings'].invert[feature_as_in_yaml]
|
51
|
-
raise "No mapping found for #{feature_as_in_yaml}" unless id
|
41
|
+
configure_push_stubs
|
42
|
+
Pusher.push file, @config
|
52
43
|
else
|
53
44
|
puts "Unknown action '#{action}"
|
54
45
|
exit(1)
|
@@ -63,7 +54,7 @@ class Cuki
|
|
63
54
|
#autoformat
|
64
55
|
end
|
65
56
|
|
66
|
-
def
|
57
|
+
def read_config
|
67
58
|
unless File.exist?(CONFIG_PATH)
|
68
59
|
puts "No config file found at #{CONFIG_PATH}"
|
69
60
|
exit(1)
|
@@ -79,7 +70,7 @@ class Cuki
|
|
79
70
|
@client.ssl_config.set_client_cert_file(ENV['PEM'], ENV['PEM']) if ENV['PEM']
|
80
71
|
end
|
81
72
|
|
82
|
-
def
|
73
|
+
def pull_feature(id, filepath)
|
83
74
|
@content = ''
|
84
75
|
wiki_link = @config['host'] + '/pages/editpage.action?pageId=' + id.to_s
|
85
76
|
puts "Downloading #{wiki_link}"
|
@@ -141,15 +132,44 @@ class Cuki
|
|
141
132
|
end
|
142
133
|
|
143
134
|
def save_file(filepath)
|
144
|
-
|
145
|
-
dir_path = File.dirname(full_filepath)
|
135
|
+
dir_path = File.dirname(filepath)
|
146
136
|
|
147
137
|
Dir.mkdir(dir_path) unless File.exists?(dir_path)
|
148
138
|
|
149
|
-
File.open(
|
150
|
-
puts "Writing #{
|
139
|
+
File.open(filepath, 'w') do |f|
|
140
|
+
puts "Writing #{filepath}"
|
151
141
|
f.puts @content
|
152
142
|
end
|
153
143
|
end
|
154
144
|
|
145
|
+
def configure_pull_stubs
|
146
|
+
if File.exist?('stubs.json')
|
147
|
+
stubs = JSON.parse(File.open('stubs.json').read)
|
148
|
+
stubs.each_pair do |url, body|
|
149
|
+
stub_request(:get, url).to_return(:status => 200, :body => body, :headers => {})
|
150
|
+
end
|
151
|
+
FileUtils.rm 'stubs.json'
|
152
|
+
end
|
153
|
+
end
|
154
|
+
|
155
|
+
def configure_push_stubs
|
156
|
+
if File.exist?('push_stubs.json')
|
157
|
+
stubs = JSON.parse(File.open('push_stubs.json').read)
|
158
|
+
stubs.each do |a|
|
159
|
+
stub_request(:post, "http://mywiki/").
|
160
|
+
with(:body => {"title" => a['title'], "content"=> "\n\n" + a['content']},
|
161
|
+
:headers => {'Content-Type'=>'application/x-www-form-urlencoded'}).
|
162
|
+
to_return(:status => 200, :body => "", :headers => {})
|
163
|
+
end
|
164
|
+
FileUtils.rm 'push_stubs.json'
|
165
|
+
end
|
166
|
+
end
|
167
|
+
|
168
|
+
def validate_args args
|
169
|
+
if args.empty?
|
170
|
+
puts "No action given"
|
171
|
+
exit(1)
|
172
|
+
end
|
173
|
+
end
|
174
|
+
|
155
175
|
end
|
data/lib/pusher.rb
ADDED
@@ -0,0 +1,12 @@
|
|
1
|
+
class Pusher
|
2
|
+
|
3
|
+
def self.push(feature_to_be_pushed, config)
|
4
|
+
|
5
|
+
id = config['mappings'].invert[feature_to_be_pushed]
|
6
|
+
raise "No mapping found for #{feature_to_be_pushed}" unless id
|
7
|
+
|
8
|
+
content = File.open(feature_to_be_pushed).read.gsub(/Feature: .*/, '')
|
9
|
+
title = File.open(feature_to_be_pushed).read.match(/Feature: (.*)/)[1]
|
10
|
+
response = @client.post(config['host'], {:title => title, :content => content})
|
11
|
+
|
12
|
+
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cuki
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 19
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 0
|
9
|
-
-
|
10
|
-
version: 0.0.
|
9
|
+
- 6
|
10
|
+
version: 0.0.6
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Andy Waite
|
@@ -150,8 +150,10 @@ files:
|
|
150
150
|
- features/push/tables.feature
|
151
151
|
- features/push/tags.feature
|
152
152
|
- features/step_defs/pull_steps.rb
|
153
|
+
- features/step_defs/push_steps.rb
|
153
154
|
- features/support/env.rb
|
154
155
|
- lib/cuki.rb
|
156
|
+
- lib/pusher.rb
|
155
157
|
- spec/cuki_spec.rb
|
156
158
|
- spec/spec_helper.rb
|
157
159
|
homepage: http://github.com/andyw8/cuki
|