ruby-core@ruby-lang.org archive (unofficial mirror)
 help / color / mirror / Atom feed
* [ruby-core:111210] [Ruby master Bug#19184] create a Range with String subclass presents a weird behavior
@ 2022-12-05 14:37 clavius_tales (Clavius Tales Rocha Moreira)
  2022-12-05 14:41 ` [ruby-core:111211] " clavius_tales (Clavius Tales Rocha Moreira)
  2022-12-05 15:17 ` [ruby-core:111212] " zverok (Victor Shepelev)
  0 siblings, 2 replies; 3+ messages in thread
From: clavius_tales (Clavius Tales Rocha Moreira) @ 2022-12-05 14:37 UTC (permalink / raw)
  To: ruby-core

Issue #19184 has been reported by clavius_tales (Clavius Tales Rocha Moreira).

----------------------------------------
Bug #19184: create a Range with String subclass presents a weird behavior
https://bugs.ruby-lang.org/issues/19184

* Author: clavius_tales (Clavius Tales Rocha Moreira)
* Status: Open
* Priority: Normal
* ruby -v: 3.1.3
* Backport: 2.7: UNKNOWN, 3.0: UNKNOWN, 3.1: UNKNOWN
----------------------------------------
``` ruby
class CalendarMonth < String
  def succ
    self.class.new(
      if december?
        "#{year + 1}-01"
      else
        "#{year}-#{(month + 1).to_s.rjust(2, '0')}"
      end
    )
  end

  private

  def december?
    month == 12
  end
  
  def month
    self[-2..].to_i
  end

  def year
    self[0..3].to_i
  end
end

(CalendarMonth.new('2021-11')..CalendarMonth.new('2022-02')).to_a
```

Running the script above in Ruby 2.7.5, we get:

``` ruby
["2021-11", "2021-12", "2022-01", "2022-02"]
```

Running the same script in Ruby 3.1.3:

```ruby
["2021-11",
 "2021-12",
 "2021-13",
 "2021-14",
 "2021-15",
 "2021-16",
 "2021-17",
 "2021-18",
 "2021-19",
 "2021-20",
 "2021-21",
 "2021-22",
 "2021-23",
 "2021-24",
 "2021-25",
 "2021-26",
 "2021-27",
 "2021-28",
 "2021-29",
 "2021-30",
 "2021-31",
 "2021-32",
 "2021-33",
 "2021-34",
 "2021-35",
 "2021-36",
 "2021-37",
 "2021-38",
 "2021-39",
 "2021-40",
 "2021-41",
 "2021-42",
 "2021-43",
 "2021-44",
 "2021-45",
 "2021-46",
 "2021-47",
 "2021-48",
 "2021-49",
 "2021-50",
 "2021-51",
 "2021-52",
 "2021-53",
 "2021-54",
 "2021-55",
 "2021-56",
 "2021-57",
 "2021-58",
 "2021-59",
 "2021-60",
 "2021-61",
 "2021-62",
 "2021-63",
 "2021-64",
 "2021-65",
 "2021-66",
 "2021-67",
 "2021-68",
 "2021-69",
 "2021-70",
 "2021-71",
 "2021-72",
 "2021-73",
 "2021-74",
 "2021-75",
 "2021-76",
 "2021-77",
 "2021-78",
 "2021-79",
 "2021-80",
 "2021-81",
 "2021-82",
 "2021-83",
 "2021-84",
 "2021-85",
 "2021-86",
 "2021-87",
 "2021-88",
 "2021-89",
 "2021-90",
 "2021-91",
 "2021-92",
 "2021-93",
 "2021-94",
 "2021-95",
 "2021-96",
 "2021-97",
 "2021-98",
 "2021-99",
 "2022-00",
 "2022-01",
 "2022-02"]
```

I know it's not a good modeling inherit from String class, but...



-- 
https://bugs.ruby-lang.org/
 ______________________________________________
 ruby-core mailing list -- ruby-core@ml.ruby-lang.org
 To unsubscribe send an email to ruby-core-leave@ml.ruby-lang.org
 ruby-core info -- https://ml.ruby-lang.org/mailman3/postorius/lists/ruby-core.ml.ruby-lang.org/

^ permalink raw reply	[flat|nested] 3+ messages in thread

* [ruby-core:111211] [Ruby master Bug#19184] create a Range with String subclass presents a weird behavior
  2022-12-05 14:37 [ruby-core:111210] [Ruby master Bug#19184] create a Range with String subclass presents a weird behavior clavius_tales (Clavius Tales Rocha Moreira)
@ 2022-12-05 14:41 ` clavius_tales (Clavius Tales Rocha Moreira)
  2022-12-05 15:17 ` [ruby-core:111212] " zverok (Victor Shepelev)
  1 sibling, 0 replies; 3+ messages in thread
From: clavius_tales (Clavius Tales Rocha Moreira) @ 2022-12-05 14:41 UTC (permalink / raw)
  To: ruby-core

Issue #19184 has been updated by clavius_tales (Clavius Tales Rocha Moreira).


``` ruby
class CalendarMonth < String
  def succ
    self.class.new(next_month_string)
  end

  private

  def next_month_string
    if december?
      "#{year + 1}-01"
    else
      "#{year}-#{(month + 1).to_s.rjust(2, '0')}"
    end
  end

  def december?
    month == 12
  end

  def month
    self[-2..].to_i
  end

  def year
    self[0..3].to_i
  end
end

(CalendarMonth.new('2021-11')..CalendarMonth.new('2022-02')).to_a
```

Running the script above in Ruby 2.7.5, we get:

``` ruby
["2021-11", "2021-12", "2022-01", "2022-02"]
```

Running the same script in Ruby 3.1.3:

``` ruby
["2021-11",
 "2021-12",
 "2021-13",
 "2021-14",
 "2021-15",
 "2021-16",
 "2021-17",
 "2021-18",
 "2021-19",
 "2021-20",
 "2021-21",
 "2021-22",
 "2021-23",
 "2021-24",
 "2021-25",
 "2021-26",
 "2021-27",
 "2021-28",
 "2021-29",
 "2021-30",
 "2021-31",
 "2021-32",
 "2021-33",
 "2021-34",
 "2021-35",
 "2021-36",
 "2021-37",
 "2021-38",
 "2021-39",
 "2021-40",
 "2021-41",
 "2021-42",
 "2021-43",
 "2021-44",
 "2021-45",
 "2021-46",
 "2021-47",
 "2021-48",
 "2021-49",
 "2021-50",
 "2021-51",
 "2021-52",
 "2021-53",
 "2021-54",
 "2021-55",
 "2021-56",
 "2021-57",
 "2021-58",
 "2021-59",
 "2021-60",
 "2021-61",
 "2021-62",
 "2021-63",
 "2021-64",
 "2021-65",
 "2021-66",
 "2021-67",
 "2021-68",
 "2021-69",
 "2021-70",
 "2021-71",
 "2021-72",
 "2021-73",
 "2021-74",
 "2021-75",
 "2021-76",
 "2021-77",
 "2021-78",
 "2021-79",
 "2021-80",
 "2021-81",
 "2021-82",
 "2021-83",
 "2021-84",
 "2021-85",
 "2021-86",
 "2021-87",
 "2021-88",
 "2021-89",
 "2021-90",
 "2021-91",
 "2021-92",
 "2021-93",
 "2021-94",
 "2021-95",
 "2021-96",
 "2021-97",
 "2021-98",
 "2021-99",
 "2022-00",
 "2022-01",
 "2022-02"]
```

I know it's not a good modeling inherit from String class, but...

----------------------------------------
Bug #19184: create a Range with String subclass presents a weird behavior
https://bugs.ruby-lang.org/issues/19184#change-100501

* Author: clavius_tales (Clavius Tales Rocha Moreira)
* Status: Open
* Priority: Normal
* ruby -v: 3.1.3
* Backport: 2.7: UNKNOWN, 3.0: UNKNOWN, 3.1: UNKNOWN
----------------------------------------
``` ruby
class CalendarMonth < String
  def succ
    self.class.new(
      if december?
        "#{year + 1}-01"
      else
        "#{year}-#{(month + 1).to_s.rjust(2, '0')}"
      end
    )
  end

  private

  def december?
    month == 12
  end
  
  def month
    self[-2..].to_i
  end

  def year
    self[0..3].to_i
  end
end

(CalendarMonth.new('2021-11')..CalendarMonth.new('2022-02')).to_a
```

Running the script above in Ruby 2.7.5, we get:

``` ruby
["2021-11", "2021-12", "2022-01", "2022-02"]
```

Running the same script in Ruby 3.1.3:

```ruby
["2021-11",
 "2021-12",
 "2021-13",
 "2021-14",
 "2021-15",
 "2021-16",
 "2021-17",
 "2021-18",
 "2021-19",
 "2021-20",
 "2021-21",
 "2021-22",
 "2021-23",
 "2021-24",
 "2021-25",
 "2021-26",
 "2021-27",
 "2021-28",
 "2021-29",
 "2021-30",
 "2021-31",
 "2021-32",
 "2021-33",
 "2021-34",
 "2021-35",
 "2021-36",
 "2021-37",
 "2021-38",
 "2021-39",
 "2021-40",
 "2021-41",
 "2021-42",
 "2021-43",
 "2021-44",
 "2021-45",
 "2021-46",
 "2021-47",
 "2021-48",
 "2021-49",
 "2021-50",
 "2021-51",
 "2021-52",
 "2021-53",
 "2021-54",
 "2021-55",
 "2021-56",
 "2021-57",
 "2021-58",
 "2021-59",
 "2021-60",
 "2021-61",
 "2021-62",
 "2021-63",
 "2021-64",
 "2021-65",
 "2021-66",
 "2021-67",
 "2021-68",
 "2021-69",
 "2021-70",
 "2021-71",
 "2021-72",
 "2021-73",
 "2021-74",
 "2021-75",
 "2021-76",
 "2021-77",
 "2021-78",
 "2021-79",
 "2021-80",
 "2021-81",
 "2021-82",
 "2021-83",
 "2021-84",
 "2021-85",
 "2021-86",
 "2021-87",
 "2021-88",
 "2021-89",
 "2021-90",
 "2021-91",
 "2021-92",
 "2021-93",
 "2021-94",
 "2021-95",
 "2021-96",
 "2021-97",
 "2021-98",
 "2021-99",
 "2022-00",
 "2022-01",
 "2022-02"]
```

I know it's not a good modeling inherit from String class, but...



-- 
https://bugs.ruby-lang.org/
 ______________________________________________
 ruby-core mailing list -- ruby-core@ml.ruby-lang.org
 To unsubscribe send an email to ruby-core-leave@ml.ruby-lang.org
 ruby-core info -- https://ml.ruby-lang.org/mailman3/postorius/lists/ruby-core.ml.ruby-lang.org/

^ permalink raw reply	[flat|nested] 3+ messages in thread

* [ruby-core:111212] [Ruby master Bug#19184] create a Range with String subclass presents a weird behavior
  2022-12-05 14:37 [ruby-core:111210] [Ruby master Bug#19184] create a Range with String subclass presents a weird behavior clavius_tales (Clavius Tales Rocha Moreira)
  2022-12-05 14:41 ` [ruby-core:111211] " clavius_tales (Clavius Tales Rocha Moreira)
@ 2022-12-05 15:17 ` zverok (Victor Shepelev)
  1 sibling, 0 replies; 3+ messages in thread
From: zverok (Victor Shepelev) @ 2022-12-05 15:17 UTC (permalink / raw)
  To: ruby-core

Issue #19184 has been updated by zverok (Victor Shepelev).

Status changed from Open to Feedback

It is not about Range, but about the change of `String#succ` behavior.

[Here is the reason](https://rubyreferences.github.io/rubychanges/3.0.html#string-always-returning-string) + explanation of the behavior change. Basically, `#succ` and other methods that produce strings from the current string, were consistently redefined to return the `String`, not the current subclass.

----------------------------------------
Bug #19184: create a Range with String subclass presents a weird behavior
https://bugs.ruby-lang.org/issues/19184#change-100502

* Author: clavius_tales (Clavius Tales Rocha Moreira)
* Status: Feedback
* Priority: Normal
* ruby -v: 3.1.3
* Backport: 2.7: UNKNOWN, 3.0: UNKNOWN, 3.1: UNKNOWN
----------------------------------------
``` ruby
class CalendarMonth < String
  def succ
    self.class.new(
      if december?
        "#{year + 1}-01"
      else
        "#{year}-#{(month + 1).to_s.rjust(2, '0')}"
      end
    )
  end

  private

  def december?
    month == 12
  end
  
  def month
    self[-2..].to_i
  end

  def year
    self[0..3].to_i
  end
end

(CalendarMonth.new('2021-11')..CalendarMonth.new('2022-02')).to_a
```

Running the script above in Ruby 2.7.5, we get:

``` ruby
["2021-11", "2021-12", "2022-01", "2022-02"]
```

Running the same script in Ruby 3.1.3:

```ruby
["2021-11",
 "2021-12",
 "2021-13",
 "2021-14",
 "2021-15",
 "2021-16",
 "2021-17",
 "2021-18",
 "2021-19",
 "2021-20",
 "2021-21",
 "2021-22",
 "2021-23",
 "2021-24",
 "2021-25",
 "2021-26",
 "2021-27",
 "2021-28",
 "2021-29",
 "2021-30",
 "2021-31",
 "2021-32",
 "2021-33",
 "2021-34",
 "2021-35",
 "2021-36",
 "2021-37",
 "2021-38",
 "2021-39",
 "2021-40",
 "2021-41",
 "2021-42",
 "2021-43",
 "2021-44",
 "2021-45",
 "2021-46",
 "2021-47",
 "2021-48",
 "2021-49",
 "2021-50",
 "2021-51",
 "2021-52",
 "2021-53",
 "2021-54",
 "2021-55",
 "2021-56",
 "2021-57",
 "2021-58",
 "2021-59",
 "2021-60",
 "2021-61",
 "2021-62",
 "2021-63",
 "2021-64",
 "2021-65",
 "2021-66",
 "2021-67",
 "2021-68",
 "2021-69",
 "2021-70",
 "2021-71",
 "2021-72",
 "2021-73",
 "2021-74",
 "2021-75",
 "2021-76",
 "2021-77",
 "2021-78",
 "2021-79",
 "2021-80",
 "2021-81",
 "2021-82",
 "2021-83",
 "2021-84",
 "2021-85",
 "2021-86",
 "2021-87",
 "2021-88",
 "2021-89",
 "2021-90",
 "2021-91",
 "2021-92",
 "2021-93",
 "2021-94",
 "2021-95",
 "2021-96",
 "2021-97",
 "2021-98",
 "2021-99",
 "2022-00",
 "2022-01",
 "2022-02"]
```

I know it's not a good modeling inherit from String class, but...



-- 
https://bugs.ruby-lang.org/
 ______________________________________________
 ruby-core mailing list -- ruby-core@ml.ruby-lang.org
 To unsubscribe send an email to ruby-core-leave@ml.ruby-lang.org
 ruby-core info -- https://ml.ruby-lang.org/mailman3/postorius/lists/ruby-core.ml.ruby-lang.org/

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2022-12-05 15:18 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-12-05 14:37 [ruby-core:111210] [Ruby master Bug#19184] create a Range with String subclass presents a weird behavior clavius_tales (Clavius Tales Rocha Moreira)
2022-12-05 14:41 ` [ruby-core:111211] " clavius_tales (Clavius Tales Rocha Moreira)
2022-12-05 15:17 ` [ruby-core:111212] " zverok (Victor Shepelev)

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).