tune_spec 0.4.1 → 0.5.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d8c4605566bacbca3e6a3071b4c65eb375ed6b92
4
- data.tar.gz: ee71b13da66c5a9dae81e5859be1dbe5744e8ce8
3
+ metadata.gz: 8b83bf10235e9377d6a6a3cf9c6a30a67b49b124
4
+ data.tar.gz: df48ef4b2cb6d703d80735e8300638fdd50b9622
5
5
  SHA512:
6
- metadata.gz: df310c927436e3effd24ae86bbdf5d17c6718ebbbe7e545ea4c9ec55c57131f462597daeb6b24c5c2a6ca4f10ff415f9710d5c77e191f9e9030ffbbad4ac090f
7
- data.tar.gz: ba559f6895adf7571bb0a8f945e67e8180ea9a5ce8471e79d15934ea2f03dee97087b52b19ca4899e43f088e7f39af3f189411047dab13e5398f9093205577c9
6
+ metadata.gz: c1236ea27bc5238c533c86cd0e6d3164b786798cf7f37bfefcc1fc097af35e108cbe604977414346d679b6450f141fb22305e5362e5522d5aeb038a7d204f0f8
7
+ data.tar.gz: 4f7f0a5f9ce4ff5b7771d8b0ab734274e2a9502a69730895852c087d5df452cd1e76d03303e7da33b16235a984d27553a2d5011506067a9884f08a1b4130903d
data/.gitignore CHANGED
@@ -1,3 +1,4 @@
1
+ .DS_Store
1
2
  *.gem
2
3
  .yardoc/
3
4
  doc/
@@ -0,0 +1,8 @@
1
+ language: ruby
2
+ rvm:
3
+ - 2.4.1
4
+ before_script:
5
+ - bundle exec yard config load_plugins true
6
+ script:
7
+ - bundle exec rubocop
8
+ - bundle exec yard doctest
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- tune_spec (0.4.0)
4
+ tune_spec (0.5.3)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
@@ -33,11 +33,11 @@ PLATFORMS
33
33
  ruby
34
34
 
35
35
  DEPENDENCIES
36
- bundler (~> 1.15)
36
+ bundler (~> 1.16, >= 1.16.2)
37
37
  rubocop (~> 0.50.0)
38
38
  tune_spec!
39
39
  yard (~> 0.9.12)
40
40
  yard-doctest (~> 0.1.10)
41
41
 
42
42
  BUNDLED WITH
43
- 1.16.0.pre.3
43
+ 1.16.2
@@ -9,7 +9,7 @@ TEST_ENV = 'STG'
9
9
  TuneSpec.configure do |conf|
10
10
  conf.directory = 'test'
11
11
  conf.steps_page_arg = :page_object
12
- conf.groups_opts = { env: TEST_ENV }
12
+ conf.groups_opts = { env: TEST_ENV, aut: 'WEB' }
13
13
  conf.steps_opts = { env: TEST_ENV }
14
14
  conf.page_opts = { env: TEST_ENV }
15
15
  end
@@ -29,13 +29,18 @@ def file_content(name, type)
29
29
  klass.class_eval do
30
30
  case "#{type}"
31
31
  when 'groups'
32
- define_method('initialize') do |env|; end
32
+ define_method('initialize') do |test, env:, aut:|; end
33
33
  define_method('complete') do; end
34
34
  when 'steps'
35
- define_method('initialize') do |env, page_object|; end
36
- define_method('verify_result') do; end
35
+ define_method('initialize') do |env:, page_object:|
36
+ @env = env
37
+ @page_object = page_object
38
+ end
39
+ define_method('verify_result') do
40
+ @page_object.click_element
41
+ end
37
42
  when 'page'
38
- define_method('initialize') do |env|; end
43
+ define_method('initialize') do |env:|; end
39
44
  define_method('click_element') do; end
40
45
  end
41
46
  end
@@ -11,49 +11,53 @@ module TuneSpec
11
11
  # Creates an instance of Group or calls an existing
12
12
  #
13
13
  # @param name [Symbol, String] the prefix of the Groups object class
14
- # @param args [Any] additional optional arguments
14
+ # @param opts [Hash] optional arguments
15
+ # @param args [Any] extra arguments
15
16
  # @param block [Block] that yields to self
16
17
  # @return [GroupObject]
17
18
  # @example
18
- # groups(:login).complete
19
- def groups(name, *args, &block)
20
- instance_handler(name, Groups, *args, block)
19
+ # groups(:login, {}, 'Main').complete
20
+ def groups(name, opts = {}, *args, &block)
21
+ instance_handler(name, Groups, opts, *args, block)
21
22
  end
22
23
 
23
24
  # Creates an instance of Step or calls an existing
24
25
  #
25
26
  # @param name [Symbol, String] the prefix of the Step object class
26
- # @param args [Any] additional optional arguments
27
+ # @param opts [Hash] optional arguments
28
+ # @param args [Any] extra arguments
27
29
  # @param block [Block] that yields to self
28
30
  # @return [StepObject]
29
31
  # @example
30
32
  # steps(:calculator, page: :home).verify_result
31
- def steps(name, *args, page: nil, &block)
32
- args.insert(0, pages(page)) if page
33
- instance_handler(name, Steps, *args, block)
33
+ def steps(name, opts = {}, *args, &block)
34
+ opts[:page] && opts[:page] = pages(opts.fetch(:page))
35
+ instance_handler(name, Steps, opts, *args, block)
34
36
  end
35
37
 
36
38
  # Creates an instance of Page or calls an existing
37
39
  #
38
40
  # @param name [Symbol, String] the prefix of the Page object class
39
- # @param args [Any] additional optional arguments
41
+ # @param opts [Hash] optional arguments
42
+ # @param args [Any] extra arguments
40
43
  # @param block [Block] that yields to self
41
44
  # @return [PageObject]
42
45
  # @example
43
46
  # pages(:home).click_element
44
- def pages(name, *args, &block)
45
- instance_handler(name, Page, *args, block)
47
+ def pages(name, opts = {}, *args, &block)
48
+ instance_handler(name, Page, opts, *args, block)
46
49
  end
47
50
 
48
51
  private
49
52
 
50
53
  # @private
51
- def instance_handler(name, klass, *args, block)
54
+ def instance_handler(name, klass, opts, *args, block)
52
55
  method_name = klass.instance_method_name(name)
53
56
  instance_klass = klass.call_object(method_name)
54
57
  create_instance_method(method_name, klass, instance_klass)
55
- formatted_args = klass.format_args(args, instance_klass)
56
- call_instance_method(method_name, *formatted_args, block)
58
+ formatted_opts = klass.format_opts(opts, instance_klass)
59
+ args << formatted_opts unless formatted_opts.empty?
60
+ call_instance_method(method_name, *args, block)
57
61
  end
58
62
 
59
63
  # @private
@@ -61,14 +65,14 @@ module TuneSpec
61
65
  return if respond_to?(method_name)
62
66
  define_singleton_method(method_name) do |*args|
63
67
  instance_var = instance_variable_get("@#{method_name}")
64
- return instance_var if klass.rules_passed?(instance_var, args)
65
- new_instance = create_instance(klass, instance_klass, args)
68
+ return instance_var if klass.rules_passed?(instance_var, args.first)
69
+ new_instance = create_instance(klass, instance_klass, *args)
66
70
  instance_variable_set("@#{method_name}", new_instance)
67
71
  end
68
72
  end
69
73
 
70
74
  # @private
71
- def create_instance(klass, instance_klass, args)
75
+ def create_instance(klass, instance_klass, *args)
72
76
  return instance_klass.new(*args) if klass.object_type == :common
73
77
  wait_opts = TuneSpec.calabash_wait_opts
74
78
  page(instance_klass, *args).await(wait_opts)
@@ -8,7 +8,7 @@ module TuneSpec
8
8
  class Groups < Tuner
9
9
  class << self
10
10
  # Groups specific rules
11
- def rules_passed?(instance, _args)
11
+ def rules_passed?(instance, _opts)
12
12
  instance
13
13
  end
14
14
 
@@ -8,7 +8,7 @@ module TuneSpec
8
8
  class Page < Tuner
9
9
  class << self
10
10
  # Page specific rules
11
- def rules_passed?(instance, _args)
11
+ def rules_passed?(instance, _opts)
12
12
  instance
13
13
  end
14
14
 
@@ -8,8 +8,9 @@ module TuneSpec
8
8
  class Steps < Tuner
9
9
  class << self
10
10
  # Steps specific rules
11
- def rules_passed?(instance, args)
12
- same_page?(instance, args[1]) if args
11
+ def rules_passed?(instance, opts = {})
12
+ return false if opts.nil?
13
+ same_page?(instance, opts[page_arg]) unless opts.empty?
13
14
  end
14
15
 
15
16
  private
@@ -19,7 +20,8 @@ module TuneSpec
19
20
  return false unless instance
20
21
  return true unless instance.respond_to?(page_arg)
21
22
  return true unless general_steps?(instance)
22
- page.instance_of?(instance.page_object.class)
23
+ return true if page.nil?
24
+ page.instance_of?(instance.__send__(page_arg).class)
23
25
  end
24
26
 
25
27
  def general_steps?(instance)
@@ -33,6 +35,11 @@ module TuneSpec
33
35
  def page_arg
34
36
  TuneSpec.steps_page_arg
35
37
  end
38
+
39
+ def pre_format_opts(opts)
40
+ return opts unless opts.key?(:page)
41
+ opts.tap { |hash| hash[page_arg] = hash.delete(:page) }
42
+ end
36
43
  end
37
44
  end
38
45
  end
@@ -10,15 +10,15 @@ module TuneSpec
10
10
  end
11
11
 
12
12
  # A hook to define rules by subclasses
13
- def rules_passed?(_instance, _args)
13
+ def rules_passed?(_instance, _opts = {})
14
14
  raise "Implement a #rules_passed? method for #{self}"
15
15
  end
16
16
 
17
- def format_args(args, object_klass)
18
- default_args = fetch_default_args
19
- args.tap do |arr|
20
- default_args.each do |key, value|
21
- arr.insert(0, value) if argument_required?(key, object_klass)
17
+ def format_opts(opts, instance_klass)
18
+ default_opts = fetch_default_opts
19
+ pre_format_opts(opts).tap do |hash|
20
+ default_opts.each do |key, value|
21
+ hash[key] = value if argument_required?(key, instance_klass)
22
22
  end
23
23
  end
24
24
  end
@@ -39,7 +39,7 @@ module TuneSpec
39
39
  @type ||= itself.to_s.split('::').last.downcase
40
40
  end
41
41
 
42
- def fetch_default_args
42
+ def fetch_default_opts
43
43
  TuneSpec.__send__("#{type}_opts".downcase)
44
44
  end
45
45
 
@@ -48,18 +48,22 @@ module TuneSpec
48
48
  end
49
49
 
50
50
  def ensure_required(name)
51
- path = load_files.detect { |f| f.include?("/#{name}.rb") }
51
+ path = project_files.detect { |f| f.include?("/#{name}.rb") }
52
52
  path ? require("./#{path}") : raise("Unable to find #{name}.rb")
53
53
  end
54
54
 
55
- def load_files
56
- @files ||= Dir.glob("#{file_directory}/**/*")
55
+ def project_files
56
+ @project_files ||= Dir.glob("#{file_directory}/**/*")
57
57
  end
58
58
 
59
59
  # A hook to implement folder name by subclass
60
60
  def file_directory
61
61
  raise "Implement a #folder_name method for #{self}"
62
62
  end
63
+
64
+ def pre_format_opts(opts)
65
+ opts
66
+ end
63
67
  end
64
68
  end
65
69
  end
@@ -40,6 +40,7 @@ module TuneSpec
40
40
  end
41
41
  end
42
42
  end
43
+ # rubocop:enable MethodLength
43
44
 
44
45
  private
45
46
 
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module TuneSpec
4
- VERSION = '0.4.1'
4
+ VERSION = '0.5.3'
5
5
  end
@@ -20,7 +20,7 @@ Gem::Specification.new do |spec|
20
20
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
21
21
  spec.require_paths = ['lib']
22
22
 
23
- spec.add_development_dependency 'bundler', '~> 1.15'
23
+ spec.add_development_dependency 'bundler', '~> 1.16', '>= 1.16.2'
24
24
  spec.add_development_dependency 'rubocop', '~> 0.50.0'
25
25
  spec.add_development_dependency 'yard', '~> 0.9.12'
26
26
  spec.add_development_dependency 'yard-doctest', '~> 0.1.10'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tune_spec
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.1
4
+ version: 0.5.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Igor Starostenko
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-01-14 00:00:00.000000000 Z
11
+ date: 2018-06-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -16,14 +16,20 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '1.15'
19
+ version: '1.16'
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: 1.16.2
20
23
  type: :development
21
24
  prerelease: false
22
25
  version_requirements: !ruby/object:Gem::Requirement
23
26
  requirements:
24
27
  - - "~>"
25
28
  - !ruby/object:Gem::Version
26
- version: '1.15'
29
+ version: '1.16'
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: 1.16.2
27
33
  - !ruby/object:Gem::Dependency
28
34
  name: rubocop
29
35
  requirement: !ruby/object:Gem::Requirement
@@ -77,6 +83,7 @@ files:
77
83
  - ".gitignore"
78
84
  - ".ruby-gemset"
79
85
  - ".ruby-version"
86
+ - ".travis.yml"
80
87
  - CODE_OF_CONDUCT.md
81
88
  - Gemfile
82
89
  - Gemfile.lock
@@ -119,5 +126,5 @@ rubyforge_project:
119
126
  rubygems_version: 2.6.12
120
127
  signing_key:
121
128
  specification_version: 4
122
- summary: tune_spec_0.4.1
129
+ summary: tune_spec_0.5.3
123
130
  test_files: []