openhab-scripting 5.15.0 → 5.16.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 +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
|