barthes 0.0.1 → 0.0.2

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/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