openhab-scripting 5.15.0 → 5.16.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/openhab/core/items/semantics.rb +24 -11
- data/lib/openhab/core/things/thing.rb +1 -1
- data/lib/openhab/core_ext/java/list.rb +1 -1
- data/lib/openhab/dsl/config_description/builder.rb +1 -1
- data/lib/openhab/dsl/rules/property.rb +7 -7
- data/lib/openhab/dsl/rules/triggers/cron/cron.rb +2 -2
- data/lib/openhab/dsl/sitemaps/builder.rb +57 -18
- data/lib/openhab/dsl/version.rb +1 -1
- data/lib/openhab/log.rb +2 -2
- data/lib/openhab/rspec/helpers.rb +7 -4
- data/lib/openhab/yard/coderay.rb +1 -1
- data/lib/openhab/yard.rb +0 -2
- metadata +2 -128
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 66607fb79de6b8b718ddd8cc5cc10662809001e67915074b44360ba9f6408d31
|
4
|
+
data.tar.gz: e21976073a7323b4e8bfe05a09e8959472d950ad28df26534371c857fe64699f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 815f05142db0071b36cd45b9f9e81c1c033cf759823150066f2c65ec4f5eb61fdf9b1bf4dbc0e8125adf3535eb9e83b71fbbf401c2e6f1a716838fe6f37cdd29
|
7
|
+
data.tar.gz: 4fe2bd7469d2d4489bd41ee9c62c6b4e7d53e6350e095c895b936813582d89e088b772bb0a44fde82aaecbfe5ff1c3fac320505001e24d0ac4519646abac5889
|
@@ -607,22 +607,31 @@ module Enumerable
|
|
607
607
|
# @!group Filtering Methods
|
608
608
|
#
|
609
609
|
|
610
|
-
#
|
610
|
+
#
|
611
|
+
# Returns a new array of items that are a semantics Location (optionally of one of the given types)
|
611
612
|
# @return [Array<Item>]
|
612
|
-
|
613
|
+
#
|
614
|
+
# @example Get all rooms
|
615
|
+
# items.locations(Semantics::Room)
|
616
|
+
#
|
617
|
+
# @example Get all bedrooms and bathrooms
|
618
|
+
# items.locations(Semantics::Bedroom, Semantics::Bathroom)
|
619
|
+
#
|
620
|
+
def locations(*types)
|
613
621
|
begin
|
614
|
-
raise ArgumentError
|
622
|
+
raise ArgumentError unless types.all? { |type| type < Semantics::Location }
|
615
623
|
rescue ArgumentError, TypeError
|
616
624
|
raise ArgumentError, "type must be a subclass of Location"
|
617
625
|
end
|
618
626
|
|
619
627
|
result = select(&:location?)
|
620
|
-
result.select! { |i| i.location_type <= type }
|
628
|
+
result.select! { |i| types.any? { |type| i.location_type <= type } } unless types.empty?
|
621
629
|
|
622
630
|
result
|
623
631
|
end
|
624
632
|
|
625
|
-
#
|
633
|
+
#
|
634
|
+
# Returns a new array of items that are a semantics equipment (optionally of one of the given types)
|
626
635
|
#
|
627
636
|
# @note As {Semantics::Equipment equipments} are usually
|
628
637
|
# {GroupItem GroupItems}, this method therefore returns an array of
|
@@ -633,16 +642,20 @@ module Enumerable
|
|
633
642
|
# @return [Array<Item>]
|
634
643
|
#
|
635
644
|
# @example Get all TVs in a room
|
636
|
-
# lGreatRoom.equipments(Semantics::
|
637
|
-
|
645
|
+
# lGreatRoom.equipments(Semantics::Television)
|
646
|
+
#
|
647
|
+
# @example Get all TVs and Speakers in a room
|
648
|
+
# lGreatRoom.equipments(Semantics::Television, Semantics::Speaker)
|
649
|
+
#
|
650
|
+
def equipments(*types)
|
638
651
|
begin
|
639
|
-
raise ArgumentError
|
652
|
+
raise ArgumentError unless types.all? { |type| type < Semantics::Equipment }
|
640
653
|
rescue ArgumentError, TypeError
|
641
654
|
raise ArgumentError, "type must be a subclass of Equipment"
|
642
655
|
end
|
643
656
|
|
644
657
|
result = select(&:equipment?)
|
645
|
-
result.select! { |i| i.equipment_type <= type }
|
658
|
+
result.select! { |i| types.any? { |type| i.equipment_type <= type } } unless types.empty?
|
646
659
|
|
647
660
|
result
|
648
661
|
end
|
@@ -663,8 +676,8 @@ module Enumerable
|
|
663
676
|
|
664
677
|
begin
|
665
678
|
raise ArgumentError unless point_or_property_types.all? do |tag|
|
666
|
-
|
667
|
-
|
679
|
+
tag < Semantics::Point ||
|
680
|
+
tag < Semantics::Property
|
668
681
|
end
|
669
682
|
rescue ArgumentError, TypeError
|
670
683
|
raise ArgumentError, "point_or_property_types must all be a subclass of Point or Property"
|
@@ -137,7 +137,7 @@ module OpenHAB
|
|
137
137
|
#
|
138
138
|
|
139
139
|
ThingStatus.constants.each do |thingstatus|
|
140
|
-
define_method("#{thingstatus.to_s.downcase}?") { status == ThingStatus.value_of(thingstatus) }
|
140
|
+
define_method(:"#{thingstatus.to_s.downcase}?") { status == ThingStatus.value_of(thingstatus) }
|
141
141
|
end
|
142
142
|
|
143
143
|
#
|
@@ -125,7 +125,7 @@ module OpenHAB
|
|
125
125
|
parameter = org.openhab.core.config.core.ConfigDescriptionParameterBuilder.create(name.to_s, type)
|
126
126
|
|
127
127
|
p.each do |key, value|
|
128
|
-
parameter.send("with_#{key}", value) unless value.nil?
|
128
|
+
parameter.send(:"with_#{key}", value) unless value.nil?
|
129
129
|
end
|
130
130
|
parameter.build
|
131
131
|
end
|
@@ -20,15 +20,15 @@ module OpenHAB
|
|
20
20
|
# in this module than instance variable belong to the module not the calling class
|
21
21
|
define_method(name) do |*args, &block|
|
22
22
|
if args.empty? && block.nil? == true
|
23
|
-
instance_variable_get("@#{name}")
|
23
|
+
instance_variable_get(:"@#{name}")
|
24
24
|
else
|
25
25
|
logger.trace("Property '#{name}' called with args(#{args}) and block(#{block})")
|
26
26
|
if args.length == 1
|
27
|
-
instance_variable_set("@#{name}", args.first)
|
27
|
+
instance_variable_set(:"@#{name}", args.first)
|
28
28
|
elsif args.length > 1
|
29
|
-
instance_variable_set("@#{name}", args)
|
29
|
+
instance_variable_set(:"@#{name}", args)
|
30
30
|
elsif block
|
31
|
-
instance_variable_set("@#{name}", block)
|
31
|
+
instance_variable_set(:"@#{name}", block)
|
32
32
|
end
|
33
33
|
end
|
34
34
|
end
|
@@ -47,7 +47,7 @@ module OpenHAB
|
|
47
47
|
define_method(name) do |*args, &block|
|
48
48
|
array_name ||= name
|
49
49
|
if args.empty? && block.nil? == true
|
50
|
-
instance_variable_get("@#{array_name}")
|
50
|
+
instance_variable_get(:"@#{array_name}")
|
51
51
|
else
|
52
52
|
logger.trace("Property '#{name}' called with args(#{args}) and block(#{block})")
|
53
53
|
if args.length == 1
|
@@ -59,14 +59,14 @@ module OpenHAB
|
|
59
59
|
end
|
60
60
|
yield insert if block_given?
|
61
61
|
insert = wrapper.new(insert) if wrapper
|
62
|
-
instance_variable_set("@#{array_name}", (instance_variable_get("@#{array_name}") || []) << insert)
|
62
|
+
instance_variable_set(:"@#{array_name}", (instance_variable_get(:"@#{array_name}") || []) << insert)
|
63
63
|
end
|
64
64
|
end
|
65
65
|
|
66
66
|
return unless array_name
|
67
67
|
|
68
68
|
define_method(array_name) do
|
69
|
-
instance_variable_get("@#{array_name}")
|
69
|
+
instance_variable_get(:"@#{array_name}")
|
70
70
|
end
|
71
71
|
end
|
72
72
|
end
|
@@ -174,10 +174,10 @@ module OpenHAB
|
|
174
174
|
def self.duration_to_map(duration)
|
175
175
|
if duration.to_millis_part.zero? && duration.to_nanos_part.zero? && duration.to_days.zero?
|
176
176
|
%i[second minute hour].each do |unit|
|
177
|
-
to_unit_part = duration.public_send("to_#{unit}s_part")
|
177
|
+
to_unit_part = duration.public_send(:"to_#{unit}s_part")
|
178
178
|
next unless to_unit_part.positive?
|
179
179
|
|
180
|
-
to_unit = duration.public_send("to_#{unit}s")
|
180
|
+
to_unit = duration.public_send(:"to_#{unit}s")
|
181
181
|
break unless to_unit_part == to_unit
|
182
182
|
|
183
183
|
return EXPRESSION_MAP[unit].merge(unit => "*/#{to_unit}")
|
@@ -116,7 +116,7 @@ module OpenHAB
|
|
116
116
|
icon_color: nil,
|
117
117
|
visibility: nil,
|
118
118
|
&block)
|
119
|
-
unless SitemapBuilder.factory.respond_to?("create_#{type}")
|
119
|
+
unless SitemapBuilder.factory.respond_to?(:"create_#{type}")
|
120
120
|
raise ArgumentError,
|
121
121
|
"#{type} is not a valid widget type"
|
122
122
|
end
|
@@ -144,12 +144,14 @@ module OpenHAB
|
|
144
144
|
if @builder_proxy
|
145
145
|
old_obj = @builder_proxy.__getobj__
|
146
146
|
@builder_proxy.__setobj__(self)
|
147
|
-
|
147
|
+
begin
|
148
|
+
yield @builder_proxy
|
149
|
+
ensure
|
150
|
+
@builder_proxy.__setobj__(old_obj)
|
151
|
+
end
|
148
152
|
else
|
149
153
|
instance_eval_with_dummy_items(&block)
|
150
154
|
end
|
151
|
-
ensure
|
152
|
-
@builder_proxy&.__setobj__(old_obj)
|
153
155
|
end
|
154
156
|
|
155
157
|
# Adds one or more new rules for setting the label color
|
@@ -181,7 +183,7 @@ module OpenHAB
|
|
181
183
|
|
182
184
|
# @!visibility private
|
183
185
|
def build
|
184
|
-
widget = SitemapBuilder.factory.send("create_#{@type}")
|
186
|
+
widget = SitemapBuilder.factory.send(:"create_#{@type}")
|
185
187
|
item = @item
|
186
188
|
item = item.name if item.respond_to?(:name)
|
187
189
|
widget.item = item if item
|
@@ -279,9 +281,41 @@ module OpenHAB
|
|
279
281
|
class SwitchBuilder < WidgetBuilder
|
280
282
|
# Mappings from command to label
|
281
283
|
#
|
282
|
-
#
|
283
|
-
#
|
284
|
+
# If a hash is given, the keys are the commands and the values are the labels.
|
285
|
+
# The keys can be any {Core::Types::Command command}, string or symbol.
|
286
|
+
# They will be converted to strings.
|
287
|
+
#
|
288
|
+
# If an array is given:
|
289
|
+
# - Scalar elements define the command, and the label is the same as the command.
|
290
|
+
# - Array elements contain the command, label, and optional third element for the icon.
|
291
|
+
# - Hash elements contain the command, label, and optional icon defined by the corresponding keys.
|
292
|
+
#
|
293
|
+
# @since openHAB 4.1 added support for icons
|
294
|
+
#
|
295
|
+
# @example A Hash to specify different command and label
|
296
|
+
# switch mappings: { off: "Off", cool: "Cool", heat: "Heat" }
|
297
|
+
#
|
298
|
+
# @example A simple array with the same command and label
|
299
|
+
# switch mappings: %w[off cool heat]
|
300
|
+
#
|
301
|
+
# @example An array of arrays containing the command, label, and icon
|
302
|
+
# switch mappings: [
|
303
|
+
# %w[off Off f7:power],
|
304
|
+
# %w[cool Cool f7:snow],
|
305
|
+
# %w[heat Heat f7:flame],
|
306
|
+
# %w[auto Auto] # no icon
|
307
|
+
# ]
|
308
|
+
#
|
309
|
+
# @example An array of hashes for the command, label, and icon
|
310
|
+
# switch mappings: [
|
311
|
+
# {command: "off", label: "Off", icon: "f7:power"},
|
312
|
+
# {command: "cool", label: "Cool", icon: "f7:snow"},
|
313
|
+
# {command: "heat", label: "Heat", icon: "f7:flame"},
|
314
|
+
# {command: "auto", label: "Auto"} # no icon
|
315
|
+
# ]
|
316
|
+
#
|
284
317
|
# @return [Hash, Array, nil]
|
318
|
+
# @see LinkableWidgetBuilder#switch
|
285
319
|
# @see https://www.openhab.org/docs/ui/sitemaps.html#mappings
|
286
320
|
attr_accessor :mappings
|
287
321
|
|
@@ -298,10 +332,13 @@ module OpenHAB
|
|
298
332
|
# @!visibility private
|
299
333
|
def build
|
300
334
|
widget = super
|
301
|
-
mappings&.each do |cmd, label|
|
335
|
+
mappings&.each do |cmd, label, icon|
|
302
336
|
mapping = SitemapBuilder.factory.create_mapping
|
337
|
+
cmd, label, icon = cmd.values_at(:command, :label, :icon) if cmd.is_a?(Hash)
|
303
338
|
mapping.cmd = cmd.to_s
|
304
339
|
mapping.label = label&.to_s || cmd.to_s
|
340
|
+
# @deprecated OH 4.1 the if check is not needed in OH4.1+
|
341
|
+
mapping.icon = icon if icon
|
305
342
|
widget.mappings.add(mapping)
|
306
343
|
end
|
307
344
|
widget
|
@@ -663,16 +700,18 @@ module OpenHAB
|
|
663
700
|
# @example
|
664
701
|
# # This creates a buttongrid to emulate a TV remote control
|
665
702
|
# sitemaps.build do
|
666
|
-
#
|
667
|
-
#
|
668
|
-
#
|
669
|
-
#
|
670
|
-
#
|
671
|
-
#
|
672
|
-
#
|
673
|
-
#
|
674
|
-
#
|
675
|
-
#
|
703
|
+
# sitemap "remote", label: "TV Remote Control" do
|
704
|
+
# buttongrid item: LivingRoom_TV_RCButton, buttons: [
|
705
|
+
# [1, 1, "BACK", "Back", "f7:return"],
|
706
|
+
# [1, 2, "HOME", "Menu", "material:apps"],
|
707
|
+
# [1, 3, "YELLOW", "Search", "f7:search"],
|
708
|
+
# [2, 2, "UP", "Up", "f7:arrowtriangle_up"],
|
709
|
+
# [4, 2, "DOWN", "Down", "f7:arrowtriangle_down"],
|
710
|
+
# [3, 1, "LEFT", "Left", "f7:arrowtriangle_left"],
|
711
|
+
# [3, 3, "RIGHT", "Right", "f7:arrowtriangle_right"],
|
712
|
+
# [3, 2, "ENTER", "Enter", "material:adjust"]
|
713
|
+
# ]
|
714
|
+
# end
|
676
715
|
# end
|
677
716
|
#
|
678
717
|
# @see https://www.openhab.org/docs/ui/sitemaps.html#element-type-buttongrid
|
data/lib/openhab/dsl/version.rb
CHANGED
data/lib/openhab/log.rb
CHANGED
@@ -210,7 +210,7 @@ module OpenHAB
|
|
210
210
|
# @return [true,false]
|
211
211
|
#
|
212
212
|
def def_level_predicate(level)
|
213
|
-
define_method("#{level}?") { @slf4j_logger.send("is_#{level}_enabled") }
|
213
|
+
define_method(:"#{level}?") { @slf4j_logger.send(:"is_#{level}_enabled") }
|
214
214
|
end
|
215
215
|
end
|
216
216
|
|
@@ -318,7 +318,7 @@ module OpenHAB
|
|
318
318
|
raise ArgumentError, "Unknown Severity #{severity}" unless LEVELS.include? severity
|
319
319
|
|
320
320
|
# Dynamically check enablement of underlying logger
|
321
|
-
return unless send("#{severity}?")
|
321
|
+
return unless send(:"#{severity}?")
|
322
322
|
|
323
323
|
# Process block if no message provided
|
324
324
|
msg = yield if msg.nil? && block_given?
|
@@ -449,10 +449,13 @@ module OpenHAB
|
|
449
449
|
|
450
450
|
def parse_emacs_modeline(line)
|
451
451
|
line[EMACS_MODELINE_REGEXP, 1]
|
452
|
-
|
453
|
-
|
454
|
-
|
455
|
-
|
452
|
+
&.split(";")
|
453
|
+
&.to_h do |l|
|
454
|
+
l.strip
|
455
|
+
.split(":", 2)
|
456
|
+
.map(&:strip)
|
457
|
+
.tap { |a| a[1] ||= nil }
|
458
|
+
end
|
456
459
|
end
|
457
460
|
|
458
461
|
def ruby_file?(script)
|
data/lib/openhab/yard/coderay.rb
CHANGED
@@ -7,7 +7,7 @@ module OpenHAB
|
|
7
7
|
module CodeRay
|
8
8
|
module HtmlHelper
|
9
9
|
::CodeRay::Scanners.list.each do |scanner|
|
10
|
-
define_method("html_syntax_highlight_#{scanner}") do |source|
|
10
|
+
define_method(:"html_syntax_highlight_#{scanner}") do |source|
|
11
11
|
::CodeRay.scan(source, scanner).html
|
12
12
|
end
|
13
13
|
end
|
data/lib/openhab/yard.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: openhab-scripting
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 5.
|
4
|
+
version: 5.16.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Brian O'Connell
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2024-01-
|
13
|
+
date: 2024-01-10 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: bundler
|
@@ -96,20 +96,6 @@ dependencies:
|
|
96
96
|
- - "~>"
|
97
97
|
- !ruby/object:Gem::Version
|
98
98
|
version: '1.2'
|
99
|
-
- !ruby/object:Gem::Dependency
|
100
|
-
name: faraday-retry
|
101
|
-
requirement: !ruby/object:Gem::Requirement
|
102
|
-
requirements:
|
103
|
-
- - "~>"
|
104
|
-
- !ruby/object:Gem::Version
|
105
|
-
version: '2.1'
|
106
|
-
type: :development
|
107
|
-
prerelease: false
|
108
|
-
version_requirements: !ruby/object:Gem::Requirement
|
109
|
-
requirements:
|
110
|
-
- - "~>"
|
111
|
-
- !ruby/object:Gem::Version
|
112
|
-
version: '2.1'
|
113
99
|
- !ruby/object:Gem::Dependency
|
114
100
|
name: gem-release
|
115
101
|
requirement: !ruby/object:Gem::Requirement
|
@@ -124,48 +110,6 @@ dependencies:
|
|
124
110
|
- - "~>"
|
125
111
|
- !ruby/object:Gem::Version
|
126
112
|
version: '2.2'
|
127
|
-
- !ruby/object:Gem::Dependency
|
128
|
-
name: guard-rubocop
|
129
|
-
requirement: !ruby/object:Gem::Requirement
|
130
|
-
requirements:
|
131
|
-
- - "~>"
|
132
|
-
- !ruby/object:Gem::Version
|
133
|
-
version: '1.5'
|
134
|
-
type: :development
|
135
|
-
prerelease: false
|
136
|
-
version_requirements: !ruby/object:Gem::Requirement
|
137
|
-
requirements:
|
138
|
-
- - "~>"
|
139
|
-
- !ruby/object:Gem::Version
|
140
|
-
version: '1.5'
|
141
|
-
- !ruby/object:Gem::Dependency
|
142
|
-
name: guard-shell
|
143
|
-
requirement: !ruby/object:Gem::Requirement
|
144
|
-
requirements:
|
145
|
-
- - "~>"
|
146
|
-
- !ruby/object:Gem::Version
|
147
|
-
version: '0.7'
|
148
|
-
type: :development
|
149
|
-
prerelease: false
|
150
|
-
version_requirements: !ruby/object:Gem::Requirement
|
151
|
-
requirements:
|
152
|
-
- - "~>"
|
153
|
-
- !ruby/object:Gem::Version
|
154
|
-
version: '0.7'
|
155
|
-
- !ruby/object:Gem::Dependency
|
156
|
-
name: guard-yard
|
157
|
-
requirement: !ruby/object:Gem::Requirement
|
158
|
-
requirements:
|
159
|
-
- - "~>"
|
160
|
-
- !ruby/object:Gem::Version
|
161
|
-
version: '2.2'
|
162
|
-
type: :development
|
163
|
-
prerelease: false
|
164
|
-
version_requirements: !ruby/object:Gem::Requirement
|
165
|
-
requirements:
|
166
|
-
- - "~>"
|
167
|
-
- !ruby/object:Gem::Version
|
168
|
-
version: '2.2'
|
169
113
|
- !ruby/object:Gem::Dependency
|
170
114
|
name: httparty
|
171
115
|
requirement: !ruby/object:Gem::Requirement
|
@@ -180,34 +124,6 @@ dependencies:
|
|
180
124
|
- - "~>"
|
181
125
|
- !ruby/object:Gem::Version
|
182
126
|
version: '0.20'
|
183
|
-
- !ruby/object:Gem::Dependency
|
184
|
-
name: irb
|
185
|
-
requirement: !ruby/object:Gem::Requirement
|
186
|
-
requirements:
|
187
|
-
- - "~>"
|
188
|
-
- !ruby/object:Gem::Version
|
189
|
-
version: '1.4'
|
190
|
-
type: :development
|
191
|
-
prerelease: false
|
192
|
-
version_requirements: !ruby/object:Gem::Requirement
|
193
|
-
requirements:
|
194
|
-
- - "~>"
|
195
|
-
- !ruby/object:Gem::Version
|
196
|
-
version: '1.4'
|
197
|
-
- !ruby/object:Gem::Dependency
|
198
|
-
name: nokogiri
|
199
|
-
requirement: !ruby/object:Gem::Requirement
|
200
|
-
requirements:
|
201
|
-
- - "~>"
|
202
|
-
- !ruby/object:Gem::Version
|
203
|
-
version: '1.13'
|
204
|
-
type: :development
|
205
|
-
prerelease: false
|
206
|
-
version_requirements: !ruby/object:Gem::Requirement
|
207
|
-
requirements:
|
208
|
-
- - "~>"
|
209
|
-
- !ruby/object:Gem::Version
|
210
|
-
version: '1.13'
|
211
127
|
- !ruby/object:Gem::Dependency
|
212
128
|
name: persistent_httparty
|
213
129
|
requirement: !ruby/object:Gem::Requirement
|
@@ -264,48 +180,6 @@ dependencies:
|
|
264
180
|
- - "~>"
|
265
181
|
- !ruby/object:Gem::Version
|
266
182
|
version: '3.11'
|
267
|
-
- !ruby/object:Gem::Dependency
|
268
|
-
name: rubocop-inst
|
269
|
-
requirement: !ruby/object:Gem::Requirement
|
270
|
-
requirements:
|
271
|
-
- - ">="
|
272
|
-
- !ruby/object:Gem::Version
|
273
|
-
version: '0'
|
274
|
-
type: :development
|
275
|
-
prerelease: false
|
276
|
-
version_requirements: !ruby/object:Gem::Requirement
|
277
|
-
requirements:
|
278
|
-
- - ">="
|
279
|
-
- !ruby/object:Gem::Version
|
280
|
-
version: '0'
|
281
|
-
- !ruby/object:Gem::Dependency
|
282
|
-
name: rubocop-rake
|
283
|
-
requirement: !ruby/object:Gem::Requirement
|
284
|
-
requirements:
|
285
|
-
- - "~>"
|
286
|
-
- !ruby/object:Gem::Version
|
287
|
-
version: '0.6'
|
288
|
-
type: :development
|
289
|
-
prerelease: false
|
290
|
-
version_requirements: !ruby/object:Gem::Requirement
|
291
|
-
requirements:
|
292
|
-
- - "~>"
|
293
|
-
- !ruby/object:Gem::Version
|
294
|
-
version: '0.6'
|
295
|
-
- !ruby/object:Gem::Dependency
|
296
|
-
name: rubocop-rspec
|
297
|
-
requirement: !ruby/object:Gem::Requirement
|
298
|
-
requirements:
|
299
|
-
- - "~>"
|
300
|
-
- !ruby/object:Gem::Version
|
301
|
-
version: '2.11'
|
302
|
-
type: :development
|
303
|
-
prerelease: false
|
304
|
-
version_requirements: !ruby/object:Gem::Requirement
|
305
|
-
requirements:
|
306
|
-
- - "~>"
|
307
|
-
- !ruby/object:Gem::Version
|
308
|
-
version: '2.11'
|
309
183
|
- !ruby/object:Gem::Dependency
|
310
184
|
name: timecop
|
311
185
|
requirement: !ruby/object:Gem::Requirement
|