capybara-select-2 0.4.4 → 0.5.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 290340769eff7f3d173f8fadd371ab6e187d1dee
4
- data.tar.gz: 925f123e77286152ddeb507aa60a60705b13501a
3
+ metadata.gz: aaba1602e5f227889734248ce001fe00831ead8a
4
+ data.tar.gz: ddbe5b57d2cb74225f29c034c12a1466c7e55804
5
5
  SHA512:
6
- metadata.gz: a19857778408a22ec1b639a5bbcd0f2f2c84e7b1c71e581be01d20332895d3a4073323dcbf5e340172b6dba63dd3c4e7e96feb3e37dca318287afc23a516bf70
7
- data.tar.gz: 3ea9a7d7f4ba02493067037c13ae937ab3c88429ced79f9a702e4c78d218989aec0d2d9903b1035ddffc5ad07e33e912e1135168cec12beaebc3d241637c8a77
6
+ metadata.gz: e8c3a064c252b1d3fe56c3642e8e6920061ff866d34b5752f237f75c71172299af60201f2afd56518db482bfc08878cac08706e804dc24467e017244088618fa
7
+ data.tar.gz: 48253431a5c902523dfc031a615b160db8f5ed849b860a8ce8d7a8d2a1a83a33333f9936ffdf3f434995dd96befb66e25a4ce0cc00e624c269fb57e148739ad9
data/README.md CHANGED
@@ -30,7 +30,8 @@ Or install it with `gem install` command:
30
30
  ```ruby
31
31
  # application_system_test_case.rb
32
32
  class ApplicationSystemTestCase < ActionDispatch::SystemTestCase
33
- include CapybaraSelect2::Helpers
33
+ include CapybaraSelect2
34
+ include CapybaraSelect2::Helpers # if need specific helpers
34
35
  end
35
36
  ```
36
37
 
@@ -40,6 +41,7 @@ end
40
41
  # spec_helper.rb
41
42
  RSpec.configure do |config|
42
43
  config.include CapybaraSelect2
44
+ config.include CapybaraSelect2::Helpers # if need specific helpers
43
45
  end
44
46
  ```
45
47
  [Note] In RSpec tests `select2` helper is available out of the box
@@ -49,6 +51,7 @@ end
49
51
  ```ruby
50
52
  # env.rb
51
53
  World CapybaraSelect2
54
+ World CapybaraSelect2::Helpers # if need specific helpers
52
55
  ```
53
56
 
54
57
  ## Usage
@@ -62,6 +65,7 @@ select2 'Buy Milk', from: 'Things to do'
62
65
  select2 'Buy Milk', 'Go to gym', css: '#todo'
63
66
 
64
67
  select2 'Buy Milk', from: 'Things to do', search: true
68
+ select2 'Buy Milk', from: 'Things to do', search: 'Buy'
65
69
  select2 'Millennials', from: 'Generation', tag: true
66
70
  ```
67
71
 
@@ -74,11 +78,33 @@ Option | Purpose
74
78
  css | Identify select2 element by a CSS selector
75
79
  xpath | Identify select2 element by an XPath selector
76
80
  from | Identify select2 element by a label
77
- search | Search for an option
81
+ search | Search for an option by the passed string. Search by an option text if `true` passed
78
82
  tag | Create an option
79
83
  match | Specifies Capybara's [matching strategy](https://github.com/teamcapybara/capybara#strategy) when selecting an option
80
84
  exact_text | Whether an option text must match exactly
81
85
 
86
+ ### Helpers
87
+
88
+ Specific select2 helpers that allow more refined access to select2 control
89
+
90
+ ```ruby
91
+ select2_open label: 'Todo'
92
+ select2_close
93
+ select2_search 'Milk', css: '#todo'
94
+ select2_select 'Buy Milk', from: 'Todo'
95
+ select2_clear xpath: "//div[@id='todo']"
96
+ ```
97
+
98
+ Helper | Purpose
99
+ :------|:-------
100
+ select2_open | Open select2 control
101
+ select2_close | Close select2 control
102
+ select2_search | Type into a select2 search field
103
+ select2_select | Select an option from an opened select2 control
104
+ select2_clear | Remove selected options (for multi select only)
105
+
106
+ [!Note] Helpers above are not available in tests by default. To use them include `CapybaraSelect2::Helpers` in your test invironment (see [Configuration section](https://github.com/Hirurg103/capybara_select2#configuration))
107
+
82
108
  ### RSpec matchers
83
109
 
84
110
  ```ruby
@@ -105,7 +131,7 @@ Visit http://localhost:9292/select2/v4.0.5/examples in your browser to see examp
105
131
  $ bundle exec rspec
106
132
 
107
133
  # run spec cases for a specific select2 version
108
- $ VERSION=4.0.5 bundle exec rspec spec/shared
134
+ $ SELECT2_VERSION=4.0.5 bundle exec rspec spec/shared
109
135
  ```
110
136
 
111
137
  ## Contributing
@@ -1,8 +1,31 @@
1
1
  require "capybara_select2/version"
2
+ require 'capybara_select2/utils'
2
3
  require 'capybara_select2/helpers'
3
4
 
4
5
  module CapybaraSelect2
5
- include Helpers
6
+
7
+ def select2(*args)
8
+ options = args.pop
9
+ values = args
10
+
11
+ Utils.validate_options!(options)
12
+
13
+ container = Utils.find_select2_container(options, page)
14
+ version = Utils.detect_select2_version(container)
15
+ extended_options = options.merge({ container: container, version: version, page: page })
16
+
17
+ values.each do |value|
18
+ Helpers.select2_open(extended_options)
19
+
20
+ if options[:search] || options[:tag]
21
+ term = options[:search].is_a?(String) ? options[:search] : value
22
+ Helpers.select2_search(term, extended_options)
23
+ end
24
+
25
+ Helpers.select2_select(value, extended_options)
26
+ end
27
+ end
28
+
6
29
  end
7
30
 
8
31
  if defined?(RSpec)
@@ -3,32 +3,63 @@ require 'capybara_select2/selectors'
3
3
 
4
4
  module CapybaraSelect2
5
5
  module Helpers
6
+ module_function
6
7
 
7
- def select2(*args)
8
- options = args.pop
9
- values = args
8
+ def select2_open(options)
9
+ options = options.dup
10
+ options[:from] ||= options[:label]
11
+ Utils.validate_options!(options)
12
+
13
+ _page = options[:page] || page
14
+ container = options[:container] || Utils.find_select2_container(options, _page)
15
+ version = options[:version] || Utils.detect_select2_version(container)
16
+ opener_selector = Selectors.opener_selector(version)
17
+
18
+ container.find(:css, opener_selector).click
19
+ end
20
+
21
+ def select2_close(options = {})
22
+ page.find(:css, 'body').click
23
+ end
24
+
25
+ def select2_search(text, options)
26
+ options = options.dup
27
+ options[:from] ||= options[:label]
28
+ Utils.validate_options!(options)
29
+
30
+ _page = options[:page] || page
31
+ container = options[:container] || Utils.find_select2_container(options, _page)
32
+ version = options[:version] || Utils.detect_select2_version(container)
33
+ search_input_selector = Selectors.search_input_selector(version)
34
+
35
+ _page.find(:xpath, '//body').find(:css, search_input_selector).set text
36
+ end
10
37
 
38
+ def select2_select(value, options)
11
39
  Utils.validate_options!(options)
12
40
 
13
- select2_container = Utils.find_select2_container(options, page)
14
- select2_version = Utils.detect_select2_version(select2_container)
41
+ _page = options[:page] || page
42
+ container = options[:container] || Utils.find_select2_container(options, _page)
43
+ version = options[:version] || Utils.detect_select2_version(container)
44
+ option_selector = Selectors.option_selector(version)
15
45
 
16
- opener_selector = Selectors.opener_selector(select2_version)
17
- option_selector = Selectors.option_selector(select2_version)
46
+ find_options = { text: value }
47
+ find_options[:match] = options[:match] if options[:match]
48
+ find_options[:exact_text] = options[:exact_text] if options[:exact_text]
18
49
 
19
- values.each do |value|
20
- select2_container.find(:css, opener_selector).click
50
+ _page.find(:xpath, '//body').find(:css, option_selector, find_options).click
51
+ end
52
+
53
+ def select2_clear(options)
54
+ options = options.dup
55
+ options[:from] ||= options[:label]
56
+ Utils.validate_options!(options)
21
57
 
22
- if options[:search] || options[:tag]
23
- search_input_selector = Selectors.search_input_selector(select2_version)
24
- find(:xpath, '//body').find(:css, search_input_selector).set value
25
- end
58
+ container = Utils.find_select2_container(options, page)
59
+ version = Utils.detect_select2_version(container)
60
+ remove_option_selector = Selectors.remove_option_selector(version)
26
61
 
27
- find_options = { text: value }
28
- find_options[:match] = options[:match] if options[:match]
29
- find_options[:exact_text] = options[:exact_text] if options[:exact_text]
30
- find(:xpath, '//body').find(:css, option_selector, find_options).click
31
- end
62
+ container.all(remove_option_selector).map(&:click)
32
63
  end
33
64
 
34
65
  end
@@ -34,5 +34,15 @@ module CapybaraSelect2
34
34
  OptionSelectors.fetch(select2_version)
35
35
  end
36
36
 
37
+ RemoveOptionSelectors = {
38
+ '2' => '.select2-search-choice-close',
39
+ '3' => '.select2-search-choice-close',
40
+ '4' => '.select2-selection__choice__remove'
41
+ }.freeze
42
+
43
+ def remove_option_selector(select2_version)
44
+ RemoveOptionSelectors.fetch(select2_version)
45
+ end
46
+
37
47
  end
38
48
  end
@@ -1,3 +1,3 @@
1
1
  module CapybaraSelect2
2
- VERSION = "0.4.4"
2
+ VERSION = "0.5.0"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: capybara-select-2
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.4
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dzmitry Kavalionak
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-03-04 00:00:00.000000000 Z
11
+ date: 2020-03-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler