barthes 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
data/barthes.gemspec CHANGED
@@ -20,4 +20,8 @@ Gem::Specification.new do |spec|
20
20
 
21
21
  spec.add_development_dependency "bundler", "~> 1.6"
22
22
  spec.add_development_dependency "rake"
23
+
24
+ spec.add_dependency "thor"
25
+ spec.add_dependency "json"
26
+ spec.add_dependency "erubis"
23
27
  end
data/bin/barthes ADDED
@@ -0,0 +1,3 @@
1
+ $:.unshift(File.dirname(__FILE__) + '/../lib') unless $:.include?(File.dirname(__FILE__) + '/../lib')
2
+ require 'barthes/cli'
3
+ Barthes::CLI.start
@@ -0,0 +1,48 @@
1
+ require 'barthes/converter'
2
+ require 'json'
3
+ require 'thor'
4
+ require 'rspec'
5
+
6
+ module Barthes
7
+ class CLI < Thor
8
+ desc 'convert', 'convert json into rspec'
9
+ def convert(*paths)
10
+ files = expand_paths(paths, '.json')
11
+ files.each do |file|
12
+ json = JSON.parse File.read(file)
13
+ converter = Barthes::Converter.new(file, json)
14
+ spec = converter.convert(json)
15
+ File.write("#{file.gsub(/.json$/, '')}_spec.rb", spec)
16
+ end
17
+ end
18
+
19
+ desc 'exec', 'execute tests from json files'
20
+ option :rspec, :type => :string, :aliases => :r
21
+ option :environment, :type => :string, :aliases => :e
22
+ def exec(*paths)
23
+ ENV['BARTHES_ENV_PATH'] = options[:environment] if options[:environment]
24
+ convert(*paths)
25
+ paths = expand_paths(paths, '.json').map {|path| "#{path.gsub(/.json$/, '')}_spec.rb" }
26
+ paths += options[:rspec].split(/\s/) if options[:rspec]
27
+ RSpec::Core::Runner.run(paths)
28
+ end
29
+
30
+ no_commands do
31
+ def expand_paths(paths, suffix)
32
+ files = []
33
+ if paths.empty?
34
+ files += Dir["./**/*#{suffix}"]
35
+ else
36
+ paths.each do |path|
37
+ if FileTest.directory?(path)
38
+ files += Dir["#{path}/**/*#{suffix}"]
39
+ elsif FileTest.file?(path)
40
+ files << path
41
+ end
42
+ end
43
+ end
44
+ files
45
+ end
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,79 @@
1
+ # TODO: json includesion
2
+ require 'erubis'
3
+ require 'ostruct'
4
+
5
+ module Barthes
6
+ class Converter
7
+ module Helpers
8
+ def resolve_value(value)
9
+ value = value.gsub(/\@\{(.+?)\}/) { '#{' + "$store['#{$1}']" + '}' }
10
+ value = value.gsub(/\$\{(.+?)\}/) { '#{' + "@env['#{$1}']" + '}' }
11
+ "%Q{#{value}}"
12
+ end
13
+ end
14
+
15
+ def initialize(name, json)
16
+ @name = name
17
+ @json = json
18
+ end
19
+
20
+ def template(name)
21
+ here = File.dirname(__FILE__)
22
+ File.read(here + "/templates/#{name.to_s}.erb")
23
+ end
24
+
25
+ def render(template_name, indent, opts={}, &block)
26
+ opts[:block] = block
27
+ code = Erubis::Eruby.new(template(template_name)).result(
28
+ OpenStruct.new(opts).instance_eval { extend Helpers; binding }
29
+ )
30
+ code = code.split(/\n/).join("\n" + ("\t" * indent)) if indent
31
+ code
32
+ end
33
+
34
+ def convert(json)
35
+ render(:describe, 0, :name => @name) do
36
+ walk_json(json)
37
+ end
38
+ end
39
+
40
+ def walk_json(arr)
41
+ return if arr.class != Array
42
+ rendered = []
43
+ case arr.first
44
+ when 'it'
45
+ arr.last['_sleep'] = arr.last['sleep']
46
+ arr.last['name'] = arr[1]
47
+ rendered << render(:it, 1, arr.last) do
48
+ walk_expectations(arr.last['expectations'], false).join(" && ")
49
+ end
50
+ when 'context'
51
+ rendered << render(:context, 1, :name => arr[1]) do
52
+ walk_json(arr.last)
53
+ end
54
+ else
55
+ arr.each do |elem|
56
+ rendered << walk_json(elem)
57
+ end
58
+ end
59
+ rendered.join("\n\t")
60
+ end
61
+
62
+ # TODO: timeout
63
+ def walk_expectations(arr, in_or)
64
+ return if arr.nil?
65
+ rendered = []
66
+ arr.each do |elem|
67
+ if elem.class == Array
68
+ rendered << walk_expectations(elem, in_or).join(" && ")
69
+ elsif elem.keys.first == 'Or'
70
+ rendered << walk_expectations(elem.values, true).join(' || ')
71
+ elsif elem['type'] == 'Value' || elem['type'] == 'StringComarison'
72
+ rendered << render(:'expectations/xpath_value', 2, elem)
73
+ end
74
+ end
75
+ rendered
76
+ end
77
+
78
+ end
79
+ end
@@ -0,0 +1,3 @@
1
+ context '<%= name %>' do
2
+ <%= block.call %>
3
+ end
@@ -0,0 +1,17 @@
1
+ # coding: utf-8
2
+ require 'json'
3
+
4
+ describe '<%= name %>' do
5
+ before(:all) do
6
+ $store = {}
7
+ @env = JSON.parse File.read(ENV['BARTHES_ENV_PATH'])
8
+ client_klass = Object.get_const(@env['client_class'])
9
+ @client = client_klass.new(@env)
10
+ end
11
+
12
+ <%= block.call %>
13
+
14
+ after(:all) do
15
+ File.write('.store', JSON.pretty_generate($store))
16
+ end
17
+ end
@@ -0,0 +1,6 @@
1
+ lambda {
2
+ doc = response.response.body.gsub(/xmlns=\"(.+?)\"/, '')
3
+ <% if respond_to?(:value) %>
4
+ doc.xpath('<%= xpath %>').text == <%= resolve_value(value) %>
5
+ <% end %>
6
+ }.call
@@ -0,0 +1,39 @@
1
+ it '<%= name %>' do
2
+ <% if respond_to?(:client) %>
3
+ client_klass = Object.const_get('<%= client['class'] %>')
4
+ client = client_klass.new(@env)
5
+ <% end %>
6
+ <% if respond_to?(:max_loop) && max_loop && respond_to?(:expectations) && expectations.size > 0 %>
7
+ <%= max_loop %>.times do
8
+ response = client.execute({
9
+ <%- params.each do |k, v| %>
10
+ <% next if v.nil? %>
11
+ '<%= k %>' => <%= resolve_value(v) %>,
12
+ <%- end %>
13
+ })
14
+ <% if respond_to?(:expectations) && expectations.size > 0 %>
15
+ break if (<%= block.call %>)
16
+ <% end %>
17
+ <% if _sleep %>
18
+ sleep <%= _sleep %> / 1000
19
+ <% end %>
20
+ end
21
+ <% end %>
22
+ response = client.execute({
23
+ <% params.each do |k, v| next if v.nil? # TODO %>
24
+ <% next if v.nil? %>
25
+ '<%= k %>' => <%= resolve_value(v) %>,
26
+ <% end %>
27
+ })
28
+ <% if respond_to?(:expectations) && expectations.size > 0 %>
29
+ expect(
30
+ <%= block.call %>
31
+ ).to be_true
32
+ <% end %>
33
+ <% if _sleep %>
34
+ sleep <%= _sleep %> / 1000
35
+ <% end %>
36
+ <% if respond_to?(:store) %>
37
+ $store['<%= store['Key'] %>'] = doc.xpath('<%= store['Xpath'] %>').first.text
38
+ <% end %>
39
+ end
@@ -1,3 +1,3 @@
1
1
  module Barthes
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
metadata CHANGED
@@ -1,18 +1,20 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: barthes
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
+ prerelease:
5
6
  platform: ruby
6
7
  authors:
7
8
  - tily
8
9
  autorequire:
9
10
  bindir: bin
10
11
  cert_chain: []
11
- date: 2014-10-25 00:00:00.000000000 Z
12
+ date: 2014-10-26 00:00:00.000000000 Z
12
13
  dependencies:
13
14
  - !ruby/object:Gem::Dependency
14
15
  name: bundler
15
16
  requirement: !ruby/object:Gem::Requirement
17
+ none: false
16
18
  requirements:
17
19
  - - ~>
18
20
  - !ruby/object:Gem::Version
@@ -20,6 +22,7 @@ dependencies:
20
22
  type: :development
21
23
  prerelease: false
22
24
  version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
23
26
  requirements:
24
27
  - - ~>
25
28
  - !ruby/object:Gem::Version
@@ -27,21 +30,72 @@ dependencies:
27
30
  - !ruby/object:Gem::Dependency
28
31
  name: rake
29
32
  requirement: !ruby/object:Gem::Requirement
33
+ none: false
30
34
  requirements:
31
- - - '>='
35
+ - - ! '>='
32
36
  - !ruby/object:Gem::Version
33
37
  version: '0'
34
38
  type: :development
35
39
  prerelease: false
36
40
  version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
37
42
  requirements:
38
- - - '>='
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
46
+ - !ruby/object:Gem::Dependency
47
+ name: thor
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ type: :runtime
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '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: :runtime
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: erubis
80
+ requirement: !ruby/object:Gem::Requirement
81
+ none: false
82
+ requirements:
83
+ - - ! '>='
84
+ - !ruby/object:Gem::Version
85
+ version: '0'
86
+ type: :runtime
87
+ prerelease: false
88
+ version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - ! '>='
39
92
  - !ruby/object:Gem::Version
40
93
  version: '0'
41
94
  description: lightweight scenario test framework
42
95
  email:
43
96
  - tily05@gmail.com
44
- executables: []
97
+ executables:
98
+ - barthes
45
99
  extensions: []
46
100
  extra_rdoc_files: []
47
101
  files:
@@ -51,30 +105,38 @@ files:
51
105
  - README.md
52
106
  - Rakefile
53
107
  - barthes.gemspec
108
+ - bin/barthes
54
109
  - lib/barthes.rb
110
+ - lib/barthes/cli.rb
111
+ - lib/barthes/converter.rb
112
+ - lib/barthes/templates/context.erb
113
+ - lib/barthes/templates/describe.erb
114
+ - lib/barthes/templates/expectations/xpath_value.erb
115
+ - lib/barthes/templates/it.erb
55
116
  - lib/barthes/version.rb
56
117
  homepage: ''
57
118
  licenses:
58
119
  - MIT
59
- metadata: {}
60
120
  post_install_message:
61
121
  rdoc_options: []
62
122
  require_paths:
63
123
  - lib
64
124
  required_ruby_version: !ruby/object:Gem::Requirement
125
+ none: false
65
126
  requirements:
66
- - - '>='
127
+ - - ! '>='
67
128
  - !ruby/object:Gem::Version
68
129
  version: '0'
69
130
  required_rubygems_version: !ruby/object:Gem::Requirement
131
+ none: false
70
132
  requirements:
71
- - - '>='
133
+ - - ! '>='
72
134
  - !ruby/object:Gem::Version
73
135
  version: '0'
74
136
  requirements: []
75
137
  rubyforge_project:
76
- rubygems_version: 2.3.0
138
+ rubygems_version: 1.8.24
77
139
  signing_key:
78
- specification_version: 4
140
+ specification_version: 3
79
141
  summary: lightweight scenario test framework
80
142
  test_files: []
checksums.yaml DELETED
@@ -1,7 +0,0 @@
1
- ---
2
- SHA1:
3
- metadata.gz: 7e0ff20ba1c46a3c3361e72d8bdf1fd254595d77
4
- data.tar.gz: 7a78620794bb6aafbfb9e0feea9d5477ad8eda10
5
- SHA512:
6
- metadata.gz: d65dcda9f746d181e25df64a3e85c273405ab98fa28e2a6dab7326009841fba4e4b55ffe45ccb497f54a88a12e1680a31c87b5ad0943107be164e38e6b165040
7
- data.tar.gz: 7a18c83ed91e82a70173578480edea46a7b86a78df1f3dc5dd5cdbe2e6a049b3b3354c94ffca6632aa933f0c12c0b20460641cfbf49d9908509219d38b9876cb