tram-page 0.1.4 → 0.1.5
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 +4 -4
- data/lib/tram/page.rb +50 -40
- data/lib/tram/page/section.rb +34 -0
- data/lib/tram/page/version.rb +1 -1
- metadata +4 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b03850fffdac958f2626d16b333e0a15439ee498
|
4
|
+
data.tar.gz: 185226f1ed9ddbdb0c26b3bf1837fd741bbfb8bc
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5880b0e19b2b71db67a45e26329ad58ba4dd4d708ad8b909a6f2af07bb7e0e1c2dda1dab8b3d10412f157e5d96fac31b3427bfec48b9e094730b101d27dfa897
|
7
|
+
data.tar.gz: d4836017f4f9a69322f78d7d8fef248fe57b95599457e362600e3d00dd3ca2ffb8029dd2ebe7d54fa4e7ecb2bc1a45f6f1103dc9646d685af10e9a19e1eeabd3
|
data/lib/tram/page.rb
CHANGED
@@ -1,67 +1,77 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
class Tram::Page
|
4
|
-
extend ::Dry::Initializer
|
4
|
+
extend ::Dry::Initializer
|
5
|
+
|
6
|
+
require_relative "page/section"
|
5
7
|
|
6
8
|
class << self
|
7
9
|
attr_accessor :i18n_scope
|
8
10
|
|
9
|
-
|
10
|
-
|
11
|
+
# Defines a section of the page as a reference to its public method,
|
12
|
+
# and creates/overloads the method if necessary.
|
13
|
+
#
|
14
|
+
# @param [#to_sym] name The name of the **section**
|
15
|
+
#
|
16
|
+
# @option [Boolean] :overload
|
17
|
+
# If this definition can overload a previous one
|
18
|
+
# @option [Proc] :value (nil)
|
19
|
+
# A new content of the referred method
|
20
|
+
# @option options [#to_sym] :method (name)
|
21
|
+
# The name of public method to take value from
|
22
|
+
# @option options [#to_sym] :if (nil)
|
23
|
+
# The name of public method to check if the section should be displayed
|
24
|
+
# @option options [#to_sym] :unless (nil)
|
25
|
+
# The name of public method to check if the section should be hidden
|
26
|
+
#
|
27
|
+
# @return [self] itself
|
28
|
+
#
|
29
|
+
def section(name, overload: false, value: nil, **options)
|
30
|
+
name = name.to_sym
|
31
|
+
raise "Section #{name} already exists" if !overload && sections.key?(name)
|
11
32
|
|
12
|
-
|
13
|
-
|
14
|
-
raise "Section #{n} already exists"
|
15
|
-
end
|
33
|
+
section = Section.new(name, options)
|
34
|
+
define_method(section.source, &value) if value
|
16
35
|
|
17
|
-
|
18
|
-
|
36
|
+
sections[name] = section
|
37
|
+
self
|
19
38
|
end
|
20
39
|
|
40
|
+
# Makes Rails url helper method accessible from within a page instance
|
41
|
+
#
|
42
|
+
# @param [#to_s] name The name of the helper method
|
43
|
+
#
|
44
|
+
# @return [self] itself
|
45
|
+
#
|
21
46
|
def url_helper(name)
|
22
47
|
raise "Rails url_helpers module is not defined" unless defined?(Rails)
|
23
48
|
delegate name, to: :"Rails.application.routes.url_helpers"
|
49
|
+
self
|
24
50
|
end
|
25
51
|
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
52
|
+
# The hash of definitions for the page's sections
|
53
|
+
#
|
54
|
+
# @return [Hash]
|
55
|
+
#
|
56
|
+
def sections
|
57
|
+
@sections ||= {}
|
32
58
|
end
|
33
59
|
end
|
34
60
|
|
35
|
-
def to_h(
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
Hash[data]
|
61
|
+
def to_h(except: nil, only: nil, **)
|
62
|
+
sections = self.class.sections.dup
|
63
|
+
sections.select! { |k, _| Array(only).include? k } if only
|
64
|
+
sections.reject! { |k, _| Array(except).include? k } if except
|
65
|
+
sections.map { |_, section| section.call(self) }.reduce({}, :merge!)
|
41
66
|
end
|
42
67
|
|
43
68
|
private
|
44
69
|
|
45
|
-
def t(key)
|
70
|
+
def t(key, **options)
|
46
71
|
raise "I18n is not defined" unless defined?(I18n)
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
def page_methods(options)
|
51
|
-
methods = self.class.instance_variable_get(:"@__sections") || []
|
52
|
-
except = Array(options[:except])
|
53
|
-
only = Array(options[:only])
|
54
|
-
methods.reject do |(name, opts)|
|
55
|
-
(except.any? && except.include?(name)) ||
|
56
|
-
(only.any? && !only.include?(name)) ||
|
57
|
-
__hide?(opts)
|
58
|
-
end
|
72
|
+
default_scope = [Tram::Page.i18n_scope, self.class.name.underscore]
|
73
|
+
I18n.t key, scope: default_scope, **options
|
59
74
|
end
|
60
75
|
|
61
|
-
|
62
|
-
black, white = opts.values_at(:unless, :if)
|
63
|
-
(black && public_send(black)) || (white && !public_send(white))
|
64
|
-
end
|
76
|
+
self.i18n_scope = "pages"
|
65
77
|
end
|
66
|
-
|
67
|
-
Tram::Page.i18n_scope = "pages"
|
@@ -0,0 +1,34 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
class Tram::Page
|
4
|
+
#
|
5
|
+
# @private
|
6
|
+
# Contains class-level definition (name and options) for a section
|
7
|
+
# with a method [#call] that extracts the section part of hash
|
8
|
+
# from an instance of [Tram::Page]
|
9
|
+
#
|
10
|
+
class Section
|
11
|
+
extend Dry::Initializer
|
12
|
+
param :name, proc(&:to_sym)
|
13
|
+
option :method, proc(&:to_s), default: -> { name }, as: :source
|
14
|
+
option :if, proc(&:to_s), optional: true, as: :positive
|
15
|
+
option :unless, proc(&:to_s), optional: true, as: :negative
|
16
|
+
|
17
|
+
# @param [Tram::Page] page
|
18
|
+
# @return [Hash] a part of the section
|
19
|
+
def call(page)
|
20
|
+
skip_on?(page) ? {} : { name => value_at(page) }
|
21
|
+
end
|
22
|
+
|
23
|
+
private
|
24
|
+
|
25
|
+
def skip_on?(page)
|
26
|
+
return true if positive && !page.public_send(positive)
|
27
|
+
return true if negative && page.public_send(negative)
|
28
|
+
end
|
29
|
+
|
30
|
+
def value_at(page)
|
31
|
+
page.public_send(source)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
data/lib/tram/page/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: tram-page
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Viktor Sokolov
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2018-05-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -99,6 +99,7 @@ files:
|
|
99
99
|
- bin/console
|
100
100
|
- bin/setup
|
101
101
|
- lib/tram/page.rb
|
102
|
+
- lib/tram/page/section.rb
|
102
103
|
- lib/tram/page/version.rb
|
103
104
|
- tram-page.gemspec
|
104
105
|
homepage: https://github.com/tram-rb/tram-page
|
@@ -122,7 +123,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
122
123
|
version: '0'
|
123
124
|
requirements: []
|
124
125
|
rubyforge_project:
|
125
|
-
rubygems_version: 2.6.
|
126
|
+
rubygems_version: 2.6.13
|
126
127
|
signing_key:
|
127
128
|
specification_version: 4
|
128
129
|
summary: Page Object pattern
|