saffron 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +5 -0
- data/.travis.yml +5 -0
- data/Gemfile +4 -0
- data/Gemfile.lock +43 -0
- data/MIT +21 -0
- data/README.md +63 -0
- data/Rakefile +16 -0
- data/app/assets/stylesheets/_variables.scss +18 -0
- data/app/assets/stylesheets/entrances/_drop-in.scss +19 -0
- data/app/assets/stylesheets/entrances/_fade-in-down.scss +13 -0
- data/app/assets/stylesheets/entrances/_fade-in-left.scss +13 -0
- data/app/assets/stylesheets/entrances/_fade-in-right.scss +13 -0
- data/app/assets/stylesheets/entrances/_fade-in-up.scss +13 -0
- data/app/assets/stylesheets/entrances/_fade-in-zoom-big.scss +20 -0
- data/app/assets/stylesheets/entrances/_fade-in-zoom.scss +14 -0
- data/app/assets/stylesheets/entrances/_fade-in.scss +13 -0
- data/app/assets/stylesheets/entrances/_newspaper.scss +14 -0
- data/app/assets/stylesheets/entrances/_pop-in.scss +14 -0
- data/app/assets/stylesheets/entrances/_rise-in.scss +13 -0
- data/app/assets/stylesheets/entrances/_slide-in.scss +35 -0
- data/app/assets/stylesheets/entrances/_stretch.scss +33 -0
- data/app/assets/stylesheets/entrances/_turn-in.scss +31 -0
- data/app/assets/stylesheets/exits/_compress.scss +25 -0
- data/app/assets/stylesheets/exits/_drop-out.scss +14 -0
- data/app/assets/stylesheets/exits/_explode.scss +14 -0
- data/app/assets/stylesheets/exits/_fade-out-down.scss +14 -0
- data/app/assets/stylesheets/exits/_fade-out-left.scss +13 -0
- data/app/assets/stylesheets/exits/_fade-out-right.scss +13 -0
- data/app/assets/stylesheets/exits/_fade-out-up.scss +14 -0
- data/app/assets/stylesheets/exits/_fade-out-zoom-big.scss +19 -0
- data/app/assets/stylesheets/exits/_fade-out-zoom.scss +14 -0
- data/app/assets/stylesheets/exits/_fade-out.scss +13 -0
- data/app/assets/stylesheets/exits/_poof.scss +17 -0
- data/app/assets/stylesheets/exits/_rise-out.scss +14 -0
- data/app/assets/stylesheets/exits/_slide-out.scss +29 -0
- data/app/assets/stylesheets/exits/_turn-out.scss +33 -0
- data/app/assets/stylesheets/helpers/_animation.scss +3 -0
- data/app/assets/stylesheets/helpers/_contains.scss +4 -0
- data/app/assets/stylesheets/helpers/_keyframes.scss +25 -0
- data/app/assets/stylesheets/helpers/_prefix.scss +39 -0
- data/app/assets/stylesheets/helpers/_transform.scss +9 -0
- data/app/assets/stylesheets/helpers/_transition.scss +7 -0
- data/app/assets/stylesheets/in-place/_around-the-world.scss +12 -0
- data/app/assets/stylesheets/in-place/_bounce.scss +24 -0
- data/app/assets/stylesheets/in-place/_colors.scss +23 -0
- data/app/assets/stylesheets/in-place/_contract.scss +7 -0
- data/app/assets/stylesheets/in-place/_cube-flip.scss +55 -0
- data/app/assets/stylesheets/in-place/_enlarge.scss +7 -0
- data/app/assets/stylesheets/in-place/_expand.scss +6 -0
- data/app/assets/stylesheets/in-place/_flip.scss +19 -0
- data/app/assets/stylesheets/in-place/_float.scss +17 -0
- data/app/assets/stylesheets/in-place/_ping.scss +13 -0
- data/app/assets/stylesheets/in-place/_pulsate.scss +14 -0
- data/app/assets/stylesheets/in-place/_quiver.scss +42 -0
- data/app/assets/stylesheets/in-place/_shake.scss +24 -0
- data/app/assets/stylesheets/in-place/_spin.scss +12 -0
- data/app/assets/stylesheets/in-place/_square-dance.scss +18 -0
- data/app/assets/stylesheets/in-place/_sunrise.scss +12 -0
- data/app/assets/stylesheets/in-place/_sway.scss +17 -0
- data/app/assets/stylesheets/in-place/_teeter.scss +29 -0
- data/app/assets/stylesheets/saffron.scss +62 -0
- data/bin/saffron +9 -0
- data/features/install.feature +28 -0
- data/features/step_definitions/saffron.rb +37 -0
- data/features/support/env.rb +1 -0
- data/features/update.feature +37 -0
- data/features/version.feature +10 -0
- data/lib/saffron.rb +13 -0
- data/lib/saffron/engine.rb +4 -0
- data/lib/saffron/installer.rb +55 -0
- data/lib/saffron/version.rb +3 -0
- data/saffron.gemspec +31 -0
- data/saffron/_variables.scss +18 -0
- data/saffron/entrances/_drop-in.scss +19 -0
- data/saffron/entrances/_fade-in-down.scss +13 -0
- data/saffron/entrances/_fade-in-left.scss +13 -0
- data/saffron/entrances/_fade-in-right.scss +13 -0
- data/saffron/entrances/_fade-in-up.scss +13 -0
- data/saffron/entrances/_fade-in-zoom-big.scss +20 -0
- data/saffron/entrances/_fade-in-zoom.scss +14 -0
- data/saffron/entrances/_fade-in.scss +13 -0
- data/saffron/entrances/_newspaper.scss +14 -0
- data/saffron/entrances/_pop-in.scss +14 -0
- data/saffron/entrances/_rise-in.scss +13 -0
- data/saffron/entrances/_slide-in.scss +35 -0
- data/saffron/entrances/_stretch.scss +33 -0
- data/saffron/entrances/_turn-in.scss +31 -0
- data/saffron/exits/_compress.scss +25 -0
- data/saffron/exits/_drop-out.scss +14 -0
- data/saffron/exits/_explode.scss +14 -0
- data/saffron/exits/_fade-out-down.scss +14 -0
- data/saffron/exits/_fade-out-left.scss +13 -0
- data/saffron/exits/_fade-out-right.scss +13 -0
- data/saffron/exits/_fade-out-up.scss +14 -0
- data/saffron/exits/_fade-out-zoom-big.scss +19 -0
- data/saffron/exits/_fade-out-zoom.scss +14 -0
- data/saffron/exits/_fade-out.scss +13 -0
- data/saffron/exits/_poof.scss +17 -0
- data/saffron/exits/_rise-out.scss +14 -0
- data/saffron/exits/_slide-out.scss +29 -0
- data/saffron/exits/_turn-out.scss +33 -0
- data/saffron/helpers/_animation.scss +3 -0
- data/saffron/helpers/_contains.scss +4 -0
- data/saffron/helpers/_keyframes.scss +25 -0
- data/saffron/helpers/_prefix.scss +39 -0
- data/saffron/helpers/_transform.scss +9 -0
- data/saffron/helpers/_transition.scss +7 -0
- data/saffron/in-place/_around-the-world.scss +12 -0
- data/saffron/in-place/_bounce.scss +24 -0
- data/saffron/in-place/_colors.scss +23 -0
- data/saffron/in-place/_contract.scss +7 -0
- data/saffron/in-place/_cube-flip.scss +55 -0
- data/saffron/in-place/_enlarge.scss +7 -0
- data/saffron/in-place/_expand.scss +6 -0
- data/saffron/in-place/_flip.scss +19 -0
- data/saffron/in-place/_float.scss +17 -0
- data/saffron/in-place/_ping.scss +13 -0
- data/saffron/in-place/_pulsate.scss +14 -0
- data/saffron/in-place/_quiver.scss +42 -0
- data/saffron/in-place/_shake.scss +24 -0
- data/saffron/in-place/_spin.scss +12 -0
- data/saffron/in-place/_square-dance.scss +18 -0
- data/saffron/in-place/_sunrise.scss +12 -0
- data/saffron/in-place/_sway.scss +17 -0
- data/saffron/in-place/_teeter.scss +29 -0
- data/saffron/saffron.scss +62 -0
- data/tasks/.csscomb.json +297 -0
- data/tasks/.csslintrc +19 -0
- data/tasks/Gruntfile.js +111 -0
- data/tasks/compiled/index.html +11 -0
- data/tasks/compiled/saffron.css +3049 -0
- data/tasks/compiled/test.css +3086 -0
- data/tasks/package.json +32 -0
- data/tasks/test.scss +13 -0
- metadata +278 -0
@@ -0,0 +1,7 @@
|
|
1
|
+
@mixin enlarge($selector: ":hover", $duration: 0.5s, $delay: 0s, $timing: cubic-bezier(1.000, -0.600, 0.595, 0.835)) {
|
2
|
+
@include transition(all $duration $delay $timing);
|
3
|
+
@include transform(translateY(0) scale(1) translateZ(0));
|
4
|
+
&#{$selector} {
|
5
|
+
@include transform(translateY($enlarge-contract-jump * -1) scale($enlarge-contract-multiple));
|
6
|
+
}
|
7
|
+
}
|
@@ -0,0 +1,6 @@
|
|
1
|
+
@mixin expand($direction, $amount: 1em, $selector: ":hover", $duration: 0.5s, $delay: 0s, $timing: cubic-bezier(0.680, -0.550, 0.275, 1.465)) {
|
2
|
+
@include transition(padding-#{$direction} $duration $delay $timing);
|
3
|
+
&#{$selector} {
|
4
|
+
padding-#{$direction}: $amount;
|
5
|
+
}
|
6
|
+
}
|
@@ -0,0 +1,19 @@
|
|
1
|
+
@mixin flip($selector: ".flipped", $duration: 0.5s, $delay: 0s, $fill-mode: both, $count: 1, $timing: ease-in) {
|
2
|
+
position: relative;
|
3
|
+
@include prefix(transform-style, preserve-3d, webkit spec);
|
4
|
+
@include transition(all $duration $delay $timing);
|
5
|
+
@include prefix(backface-visibility, hidden, webkit moz spec);
|
6
|
+
&#{$selector} {
|
7
|
+
@include transform(rotateY(180deg)translateZ(0));
|
8
|
+
}
|
9
|
+
&::after {
|
10
|
+
content: '';
|
11
|
+
position: absolute;
|
12
|
+
left: 0;
|
13
|
+
height: 100%;
|
14
|
+
width: 100%;
|
15
|
+
@include prefix(backface-visibility, inherit, webkit moz spec);
|
16
|
+
@include transform(rotateY(180deg));
|
17
|
+
}
|
18
|
+
}
|
19
|
+
|
@@ -0,0 +1,17 @@
|
|
1
|
+
@include keyframes(float) {
|
2
|
+
0%, 50%, 100% {
|
3
|
+
@include transform(translateY($float-bob-distance * -1) translateZ(0));
|
4
|
+
}
|
5
|
+
25% {
|
6
|
+
@include transform(translateY($float-bob-distance) rotate($float-bob-angle));
|
7
|
+
}
|
8
|
+
75% {
|
9
|
+
@include transform(translateY($float-bob-distance) rotate($float-bob-angle * -1));
|
10
|
+
}
|
11
|
+
}
|
12
|
+
|
13
|
+
@mixin float($duration: 5s, $delay: 0s, $fill-mode: none, $count: infinite, $timing: ease-in-out) {
|
14
|
+
// hack to fix jagged edges
|
15
|
+
outline: 1px solid transparent;
|
16
|
+
@include animation(float $count $duration $delay $fill-mode $timing);
|
17
|
+
}
|
@@ -0,0 +1,13 @@
|
|
1
|
+
@include keyframes(ping) {
|
2
|
+
0% {
|
3
|
+
@include transform(scale(0));
|
4
|
+
}
|
5
|
+
100% {
|
6
|
+
@include transform(scale(1));
|
7
|
+
opacity: 0;
|
8
|
+
}
|
9
|
+
}
|
10
|
+
|
11
|
+
@mixin ping($duration: 1.5s, $delay: 0s, $fill-mode: none, $count: infinite, $timing: ease-in-out) {
|
12
|
+
@include animation(ping $count $duration $delay $fill-mode $timing);
|
13
|
+
}
|
@@ -0,0 +1,14 @@
|
|
1
|
+
@include keyframes(pulsate) {
|
2
|
+
0%, 100% {
|
3
|
+
opacity: 1;
|
4
|
+
@include transform(scale(1) translateZ(0));
|
5
|
+
}
|
6
|
+
50% {
|
7
|
+
opacity: 0.85;
|
8
|
+
@include transform(scale($pulsate-scale));
|
9
|
+
}
|
10
|
+
}
|
11
|
+
|
12
|
+
@mixin pulsate($duration: 1.5s, $delay: 0s, $fill-mode: none, $count: 3) {
|
13
|
+
@include animation(pulsate $count $duration $delay $fill-mode);
|
14
|
+
}
|
@@ -0,0 +1,42 @@
|
|
1
|
+
@include keyframes(quiver) {
|
2
|
+
0%{
|
3
|
+
@include transform(translate3d(2px, 1px, 0) rotate(0deg));
|
4
|
+
}
|
5
|
+
10% {
|
6
|
+
@include transform(translate3d(-1px, 2px, 0) rotate($quiver-angle));
|
7
|
+
}
|
8
|
+
20% {
|
9
|
+
@include transform(translate3d(-3px, 0) rotate($quiver-angle * -1));
|
10
|
+
}
|
11
|
+
30% {
|
12
|
+
@include transform(translate3d(0, 2px, 0) rotate(0deg));
|
13
|
+
}
|
14
|
+
40% {
|
15
|
+
@include transform(translate3d(1px, -1px, 0) rotate($quiver-angle));
|
16
|
+
}
|
17
|
+
50% {
|
18
|
+
@include transform(translate3d(-1px, 2px, 0) rotate($quiver-angle * -1));
|
19
|
+
}
|
20
|
+
60% {
|
21
|
+
@include transform(translate3d(-3px, 1px, 0) rotate(0deg));
|
22
|
+
}
|
23
|
+
70% {
|
24
|
+
@include transform(translate3d(2px, 1px, 0) rotate($quiver-angle));
|
25
|
+
}
|
26
|
+
80% {
|
27
|
+
@include transform(translate3d(-1px, -1px, 0) rotate($quiver-angle * -1));
|
28
|
+
}
|
29
|
+
90% {
|
30
|
+
@include transform(translate3d(2px, 2px, 0) rotate(0deg));
|
31
|
+
}
|
32
|
+
100% {
|
33
|
+
@include transform(translate3d(1px, -2px, 0) rotate($quiver-angle));
|
34
|
+
}
|
35
|
+
|
36
|
+
}
|
37
|
+
|
38
|
+
@mixin quiver($duration: 0.75s, $delay: 0s, $fill-mode: none, $count: infinite) {
|
39
|
+
// hack to fix jagged edges
|
40
|
+
outline: 1px solid transparent;
|
41
|
+
@include animation(quiver $duration $delay $fill-mode $count);
|
42
|
+
}
|
@@ -0,0 +1,24 @@
|
|
1
|
+
@include keyframes(shake) {
|
2
|
+
0%, 100% {
|
3
|
+
@include transform(translateX(0) translateZ(0));
|
4
|
+
}
|
5
|
+
15% {
|
6
|
+
@include transform(translateX($shake-distance));
|
7
|
+
}
|
8
|
+
35% {
|
9
|
+
@include transform(translateX($shake-distance * -1));
|
10
|
+
}
|
11
|
+
50% {
|
12
|
+
@include transform(translateX($shake-distance / 2));
|
13
|
+
}
|
14
|
+
65% {
|
15
|
+
@include transform(translateX($shake-distance / 2 * -1));
|
16
|
+
}
|
17
|
+
85% {
|
18
|
+
@include transform(translateX($shake-distance / 3));
|
19
|
+
}
|
20
|
+
}
|
21
|
+
|
22
|
+
@mixin shake($duration: 0.5s, $delay: 0s, $fill-mode: none, $count: 1) {
|
23
|
+
@include animation(shake $duration $delay $fill-mode $count);
|
24
|
+
}
|
@@ -0,0 +1,12 @@
|
|
1
|
+
@include keyframes(spin) {
|
2
|
+
0% {
|
3
|
+
@include transform(rotate(0deg) translateZ(0));
|
4
|
+
}
|
5
|
+
100% {
|
6
|
+
@include transform(rotate(360deg));
|
7
|
+
}
|
8
|
+
}
|
9
|
+
|
10
|
+
@mixin spin($duration: 0.5s, $delay: 0s, $fill-mode: none, $count: 1, $timing: ease-in-out) {
|
11
|
+
@include animation(spin $count $duration $delay $fill-mode $timing);
|
12
|
+
}
|
@@ -0,0 +1,18 @@
|
|
1
|
+
@include keyframes(squareDance) {
|
2
|
+
0%, 100% {
|
3
|
+
@include transform(translate3d(100%, 0, 0));
|
4
|
+
}
|
5
|
+
25% {
|
6
|
+
@include transform(translate3d(100%, 100%, 0));
|
7
|
+
}
|
8
|
+
50% {
|
9
|
+
@include transform(translate3d(0, 100%, 0));
|
10
|
+
}
|
11
|
+
75% {
|
12
|
+
@include transform(translate3d(0, 0, 0));
|
13
|
+
}
|
14
|
+
}
|
15
|
+
|
16
|
+
@mixin squareDance($duration: 3s, $delay: 0s, $fill-mode: none, $count: infinite, $timing: ease-in-out) {
|
17
|
+
@include animation(squareDance $count $duration $delay $fill-mode $timing);
|
18
|
+
}
|
@@ -0,0 +1,12 @@
|
|
1
|
+
@include keyframes(sunrise) {
|
2
|
+
0% {
|
3
|
+
@include transform(rotate(0deg) translate($sunrise-arch) rotate(0deg));
|
4
|
+
}
|
5
|
+
100% {
|
6
|
+
@include transform(rotate(180deg) translate($sunrise-arch) rotate(-180deg));
|
7
|
+
}
|
8
|
+
}
|
9
|
+
|
10
|
+
@mixin sunrise($duration: 4s, $delay: 0s, $fill-mode: both, $count: 1, $timing: ease-in-out) {
|
11
|
+
@include animation(sunrise $count $duration $delay $fill-mode $timing);
|
12
|
+
}
|
@@ -0,0 +1,17 @@
|
|
1
|
+
@include keyframes(sway) {
|
2
|
+
0%, 50%, 100% {
|
3
|
+
@include transform(rotate($sway-angle) translateZ(0));
|
4
|
+
}
|
5
|
+
25% {
|
6
|
+
@include transform(rotate($sway-angle * -1));
|
7
|
+
}
|
8
|
+
75% {
|
9
|
+
@include transform(rotate($sway-angle * -1));
|
10
|
+
}
|
11
|
+
}
|
12
|
+
|
13
|
+
@mixin sway($duration: 6.5s, $delay: 0s, $fill-mode: none, $count: infinite, $timing: ease-in-out) {
|
14
|
+
// hack to fix jagged edges
|
15
|
+
outline: 1px solid transparent;
|
16
|
+
@include animation(sway $count $duration $delay $fill-mode $timing);
|
17
|
+
}
|
@@ -0,0 +1,29 @@
|
|
1
|
+
@include keyframes(teeter) {
|
2
|
+
0%, 100% {
|
3
|
+
@include transform(rotate(0deg) translateZ(0));
|
4
|
+
}
|
5
|
+
15% {
|
6
|
+
@include transform(rotate($teeter-angle));
|
7
|
+
}
|
8
|
+
30% {
|
9
|
+
@include transform(rotate($teeter-angle * -1));
|
10
|
+
}
|
11
|
+
45% {
|
12
|
+
@include transform(rotate($teeter-angle / 2));
|
13
|
+
}
|
14
|
+
60% {
|
15
|
+
@include transform(rotate($teeter-angle / 2 * -1));
|
16
|
+
}
|
17
|
+
73% {
|
18
|
+
@include transform(rotate($teeter-angle / 3));
|
19
|
+
}
|
20
|
+
86% {
|
21
|
+
@include transform(rotate($teeter-angle / 3 * -1));
|
22
|
+
}
|
23
|
+
}
|
24
|
+
|
25
|
+
@mixin teeter($duration: 1s, $delay: 0s, $fill-mode: none, $count: 1) {
|
26
|
+
// hack to fix jagged edges
|
27
|
+
outline: 1px solid transparent;
|
28
|
+
@include animation(teeter $duration $delay $fill-mode $count);
|
29
|
+
}
|
@@ -0,0 +1,62 @@
|
|
1
|
+
// Variables
|
2
|
+
@import "variables";
|
3
|
+
|
4
|
+
// Helper Mixins and Functions
|
5
|
+
@import "helpers/contains";
|
6
|
+
@import "helpers/prefix";
|
7
|
+
@import "helpers/animation";
|
8
|
+
@import "helpers/transition";
|
9
|
+
@import "helpers/transform";
|
10
|
+
@import "helpers/keyframes";
|
11
|
+
|
12
|
+
// Entrances
|
13
|
+
@import "entrances/fade-in";
|
14
|
+
@import "entrances/fade-in-up";
|
15
|
+
@import "entrances/fade-in-down";
|
16
|
+
@import "entrances/fade-in-left";
|
17
|
+
@import "entrances/fade-in-right";
|
18
|
+
@import "entrances/fade-in-zoom";
|
19
|
+
@import "entrances/fade-in-zoom-big";
|
20
|
+
@import "entrances/slide-in";
|
21
|
+
@import "entrances/drop-in";
|
22
|
+
@import "entrances/rise-in";
|
23
|
+
@import "entrances/pop-in";
|
24
|
+
@import "entrances/turn-in";
|
25
|
+
@import "entrances/stretch";
|
26
|
+
@import "entrances/newspaper";
|
27
|
+
|
28
|
+
// Exits
|
29
|
+
@import "exits/fade-out";
|
30
|
+
@import "exits/fade-out-down";
|
31
|
+
@import "exits/fade-out-up";
|
32
|
+
@import "exits/fade-out-left";
|
33
|
+
@import "exits/fade-out-right";
|
34
|
+
@import "exits/fade-out-zoom";
|
35
|
+
@import "exits/fade-out-zoom-big";
|
36
|
+
@import "exits/slide-out";
|
37
|
+
@import "exits/explode";
|
38
|
+
@import "exits/drop-out";
|
39
|
+
@import "exits/rise-out";
|
40
|
+
@import "exits/poof";
|
41
|
+
@import "exits/turn-out";
|
42
|
+
@import "exits/compress";
|
43
|
+
|
44
|
+
// In Place
|
45
|
+
@import "in-place/float";
|
46
|
+
@import "in-place/shake";
|
47
|
+
@import "in-place/expand";
|
48
|
+
@import "in-place/teeter";
|
49
|
+
@import "in-place/quiver";
|
50
|
+
@import "in-place/sway";
|
51
|
+
@import "in-place/spin";
|
52
|
+
@import "in-place/bounce";
|
53
|
+
@import "in-place/pulsate";
|
54
|
+
@import "in-place/colors";
|
55
|
+
@import "in-place/around-the-world";
|
56
|
+
@import "in-place/ping";
|
57
|
+
@import "in-place/square-dance";
|
58
|
+
@import "in-place/sunrise";
|
59
|
+
@import "in-place/enlarge";
|
60
|
+
@import "in-place/contract";
|
61
|
+
@import "in-place/flip";
|
62
|
+
@import "in-place/cube-flip";
|
data/bin/saffron
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
@disable-bundler
|
2
|
+
Feature: Install saffron
|
3
|
+
As a user
|
4
|
+
I want to easily generate the Saffron files and directories
|
5
|
+
So I can use them in my project
|
6
|
+
|
7
|
+
Scenario: Installing Saffron by default
|
8
|
+
When I run `bundle exec saffron install`
|
9
|
+
Then the output should contain "Saffron succesfully installed in saffron/"
|
10
|
+
And a directory named "saffron" should exist
|
11
|
+
And the sub directories should exist inside "saffron/"
|
12
|
+
And the following files should exist:
|
13
|
+
| saffron/saffron.scss |
|
14
|
+
| saffron/_variables.scss |
|
15
|
+
|
16
|
+
Scenario: Installing Saffron into a specific directory
|
17
|
+
When I run `bundle exec saffron install -p path/to/directory`
|
18
|
+
Then the output should contain "Saffron succesfully installed in path/to/directory/saffron"
|
19
|
+
And a directory named "path/to/directory/saffron" should exist
|
20
|
+
And the sub directories should exist inside "path/to/directory/saffron/"
|
21
|
+
And the following files should exist:
|
22
|
+
| path/to/directory/saffron/saffron.scss |
|
23
|
+
| path/to/directory/saffron/_variables.scss |
|
24
|
+
|
25
|
+
Scenario: Saffron is already installed
|
26
|
+
When I run `bundle exec saffron install`
|
27
|
+
And I run `bundle exec saffron install`
|
28
|
+
Then the output should contain "Saffron already exists"
|
@@ -0,0 +1,37 @@
|
|
1
|
+
Then(/^the output should contain the current version number$/) do
|
2
|
+
assert_partial_output Saffron::VERSION, all_output
|
3
|
+
end
|
4
|
+
|
5
|
+
Then(/^the sub directories should exist inside "(.*?)"$/) do |directory|
|
6
|
+
sub_dirs = %w{entrances exits helpers in-place}.map do |sub_dir|
|
7
|
+
"#{directory}#{sub_dir}"
|
8
|
+
end
|
9
|
+
check_directory_presence sub_dirs, true
|
10
|
+
end
|
11
|
+
|
12
|
+
Given(/^Saffron already exists$/) do
|
13
|
+
run_simple "bundle exec saffron install"
|
14
|
+
end
|
15
|
+
|
16
|
+
When(/^I modify saffron at "(.*?)" with "(.*?)"$/) do |path, mod|
|
17
|
+
append_to_file "#{path}/saffron.scss", mod
|
18
|
+
end
|
19
|
+
|
20
|
+
Given(/^Saffron was installed into a specific directory$/) do
|
21
|
+
run_simple "bundle exec saffron install -p path/to/directory"
|
22
|
+
end
|
23
|
+
|
24
|
+
Then(/^saffron at "(.*?)" should still be modified with "(.*?)"$/) do |path, mod|
|
25
|
+
run_simple "cat #{path}/saffron.scss"
|
26
|
+
assert_partial_output mod, all_output
|
27
|
+
end
|
28
|
+
|
29
|
+
Then(/^saffron at "(.*?)" should no longer contain "(.*?)"$/) do |path, mod|
|
30
|
+
run_simple "cat #{path}/saffron.scss"
|
31
|
+
assert_no_partial_output mod, all_output
|
32
|
+
end
|
33
|
+
|
34
|
+
Given(/^Saffron does not yet exist$/) do
|
35
|
+
check_directory_presence(["saffron/"], false)
|
36
|
+
end
|
37
|
+
|
@@ -0,0 +1 @@
|
|
1
|
+
require 'aruba/cucumber'
|
@@ -0,0 +1,37 @@
|
|
1
|
+
@disable-bundler
|
2
|
+
Feature: Update saffron
|
3
|
+
As a user
|
4
|
+
I want to easily update my Saffron files
|
5
|
+
So I can maintain the most up-to-date functionality
|
6
|
+
|
7
|
+
Scenario: Updating Saffron at the default directory
|
8
|
+
Given Saffron does not yet exist
|
9
|
+
When I run `bundle exec saffron update`
|
10
|
+
Then the output should contain "Saffron not found. No updates occured."
|
11
|
+
And a directory named "saffron/" should not exist
|
12
|
+
And a file named "saffron/saffron.scss" should not exist
|
13
|
+
|
14
|
+
Given Saffron already exists
|
15
|
+
When I modify saffron at "saffron/" with "modification text"
|
16
|
+
And I run `bundle exec saffron update`
|
17
|
+
Then the output should contain "Saffron succesfully updated in saffron/"
|
18
|
+
And a directory named "saffron" should exist
|
19
|
+
And the sub directories should exist inside "saffron/"
|
20
|
+
And the following files should exist:
|
21
|
+
| saffron/saffron.scss |
|
22
|
+
| saffron/_variables.scss |
|
23
|
+
And saffron at "saffron/" should no longer contain "modification text"
|
24
|
+
|
25
|
+
Scenario: Updating Saffron at a specific directory
|
26
|
+
Given Saffron was installed into a specific directory
|
27
|
+
When I modify saffron at "path/to/directory/saffron/" with "modification text"
|
28
|
+
And I run `bundle exec saffron update`
|
29
|
+
Then saffron at "path/to/directory/saffron/" should still be modified with "modification text"
|
30
|
+
And the output should contain "Saffron not found. No updates occured."
|
31
|
+
And I run `bundle exec saffron update -p path/to/directory`
|
32
|
+
Then the output should contain "Saffron succesfully updated in path/to/directory/saffron"
|
33
|
+
And a directory named "path/to/directory/saffron" should exist
|
34
|
+
And the sub directories should exist inside "path/to/directory/saffron/"
|
35
|
+
And the following files should exist:
|
36
|
+
| path/to/directory/saffron/saffron.scss |
|
37
|
+
| path/to/directory/saffron/_variables.scss |
|
@@ -0,0 +1,10 @@
|
|
1
|
+
@disable-bundler
|
2
|
+
Feature: Output version
|
3
|
+
As a user
|
4
|
+
I want to know the current version of Saffron I have installed
|
5
|
+
So I can keep it up to date
|
6
|
+
|
7
|
+
Scenario: Viewing the current version of Saffron
|
8
|
+
When I run `bundle exec saffron version`
|
9
|
+
Then the output should contain the current version number
|
10
|
+
|