Last active
June 14, 2021 16:44
-
-
Save Joxebus/f47ecdfb80865080739411215756554a to your computer and use it in GitHub Desktop.
Categories samples
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import groovy.time.TimeCategory | |
use(TimeCategory) { | |
Date date = new Date("12/10/2008") | |
Date datePlus10Min = date + 30.minutes | |
Date dateMinus1Year = date - 1.years | |
Date datePlus10Hours = date + 10.hours | |
println date // now | |
println datePlus10Min // now + 10 min | |
println dateMinus1Year // a year ago | |
println datePlus10Hours // a year from now | |
println "*"*30 | |
Date thirtyMinutesFromNow = 30.minutes.from.now // now + 30 min | |
Date thirtyMinutesAgo = 1.hours.ago // now - 1 hour | |
println thirtyMinutesFromNow | |
println thirtyMinutesAgo | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class NumberCategory { | |
static boolean isOdd(Integer self) { | |
(self % 2) != 0 | |
} | |
static int triple(Integer self) { | |
self * 3 | |
} | |
} | |
use(NumberCategory) { | |
(1..30).each { number -> | |
if(number.isOdd()) { | |
println "$number is odd" | |
} | |
println "$number multiplied by 3 is ${number.triple()}" | |
} | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
@Category(Integer) | |
class NumberCategory { | |
boolean isOdd() { | |
(this % 2) != 0 | |
} | |
int triple() { | |
this * 3 | |
} | |
} | |
use(NumberCategory) { | |
(1..30).each { number -> | |
if(number.isOdd()) { | |
println "$number is odd" | |
} | |
println "$number multiplied by 3 is ${number.triple()}" | |
} | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class TextCategory { | |
private static String regex = /http[s]?:\/\/[-A-Za-z0-9.\/_-]*[-A-Za-z0-9._-]/ | |
static boolean isUrl(String self) { | |
self ==~ regex | |
} | |
static int countUrls(String self) { | |
self.split(' ').count{ isUrl(it) } | |
} | |
static List<String> collectUrls(String self) { | |
(self =~ regex).collect() | |
} | |
} | |
String sampleText = """Lorem ipsum dolor sit amet, consectetur adipiscing elit http://google.com.mx Integer | |
pharetra elit a elit molestie vehicula. Sed in eros mi. Aliquam massa elit, iaculis eget velit non, | |
malesuada elementum nisl. Cras urna sem, ornare quis turpis id, https://youtube.com facilisis ultrices massa. Duis sit amet | |
pretium ligula. Curabitur in libero vehicula, facilisis diam eget, maximus velit. Vestibulum ut orci at | |
velit vulputate placerat https://github.com Nunc varius a arcu nec lacinia. Vestibulum et magna http://facebook.com et metus | |
venenatis suscipit.""" | |
use(TextCategory) { | |
List urls = sampleText.collectUrls() | |
int urlsCount = sampleText.countUrls() | |
assert urls.size() == urlsCount | |
println """ | |
URLs count: $urlsCount | |
URLs: $urls | |
""" | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
abstract class To { | |
Number number | |
To(Number number) { this.number = number } | |
Number getMeters() { | |
throw new UnsupportedOperationException("Not supported for meters") | |
} | |
Number getCentimeters() { | |
throw new UnsupportedOperationException("Not supported for centimeters") | |
} | |
} | |
class Meter { | |
Number number | |
To getTo() { | |
new To(number) { | |
@Override | |
Number getCentimeters() { | |
this.number * 100 | |
} | |
} | |
} | |
} | |
class Centimeter{ | |
Number number | |
To getTo() { | |
new To(number) { | |
@Override | |
Number getMeters() { | |
this.number / 100 | |
} | |
} | |
} | |
} | |
class NumberConversor { | |
static Meter getMeters(Number self) { | |
new Meter(number:self) | |
} | |
static Centimeter getCentimeters(Number self) { | |
new Centimeter(number:self) | |
} | |
} | |
use(NumberConversor) { | |
println 1.meters.to.centimeters | |
println 240.centimeters.to.meters | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
trait To { | |
Number number | |
To getTo() { | |
throw new UnsupportedOperationException("Not implemented") | |
} | |
Number getMeters() { | |
throw new UnsupportedOperationException("Not supported for meters") | |
} | |
Number getCentimeters() { | |
throw new UnsupportedOperationException("Not supported for centimeters") | |
} | |
} | |
class Meter implements To { | |
@Override | |
To getTo() { | |
new Centimeter(number:number*100) | |
} | |
@Override | |
Number getMeters() { | |
this.number | |
} | |
} | |
class Centimeter implements To { | |
@Override | |
To getTo() { | |
new Meter(number:number/100) | |
} | |
@Override | |
Number getCentimeters() { | |
this.number | |
} | |
} | |
class NumberConversor { | |
static Meter getMeters(Number self) { | |
new Meter(number:self) | |
} | |
static Centimeter getCentimeters(Number self) { | |
new Centimeter(number:self) | |
} | |
} | |
use(NumberConversor) { | |
println 1.meters.to.centimeters | |
println 240.centimeters.to.meters | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment