rhail 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (53) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE +21 -0
  3. data/README.md +77 -0
  4. data/bin/rhail +78 -0
  5. data/generator_folders/.DS_Store +0 -0
  6. data/generator_folders/json/.DS_Store +0 -0
  7. data/generator_folders/json/.ruby-version +1 -0
  8. data/generator_folders/json/Gemfile +6 -0
  9. data/generator_folders/json/Gemfile.lock +17 -0
  10. data/generator_folders/json/config.ru +61 -0
  11. data/generator_folders/json/db/database.sqlite3 +0 -0
  12. data/generator_folders/json/db/seed.rb +31 -0
  13. data/generator_folders/json/public/.DS_Store +0 -0
  14. data/generator_folders/json/public/img/.DS_Store +0 -0
  15. data/generator_folders/json/public/img/favicon.png +0 -0
  16. data/generator_folders/json/settings.yml +1 -0
  17. data/generator_folders/plain/.DS_Store +0 -0
  18. data/generator_folders/plain/.ruby-version +1 -0
  19. data/generator_folders/plain/Gemfile +6 -0
  20. data/generator_folders/plain/Gemfile.lock +17 -0
  21. data/generator_folders/plain/config.ru +59 -0
  22. data/generator_folders/plain/db/database.sqlite3 +0 -0
  23. data/generator_folders/plain/db/seed.rb +31 -0
  24. data/generator_folders/plain/public/.DS_Store +0 -0
  25. data/generator_folders/plain/public/css/styles.css +123 -0
  26. data/generator_folders/plain/public/html/example_one.html +35 -0
  27. data/generator_folders/plain/public/html/example_three.html +75 -0
  28. data/generator_folders/plain/public/html/example_two.html +50 -0
  29. data/generator_folders/plain/public/html/foot.html +22 -0
  30. data/generator_folders/plain/public/html/head.html +51 -0
  31. data/generator_folders/plain/public/html/home.html +29 -0
  32. data/generator_folders/plain/public/img/favicon.png +0 -0
  33. data/generator_folders/plain/public/img/jumbotron.jpg +0 -0
  34. data/generator_folders/spa/.DS_Store +0 -0
  35. data/generator_folders/spa/.ruby-version +1 -0
  36. data/generator_folders/spa/Gemfile +6 -0
  37. data/generator_folders/spa/Gemfile.lock +17 -0
  38. data/generator_folders/spa/config.ru +49 -0
  39. data/generator_folders/spa/db/database.sqlite3 +0 -0
  40. data/generator_folders/spa/db/seed.rb +31 -0
  41. data/generator_folders/spa/public/.DS_Store +0 -0
  42. data/generator_folders/spa/public/css/styles.css +123 -0
  43. data/generator_folders/spa/public/html/index.html +186 -0
  44. data/generator_folders/spa/public/img/favicon.png +0 -0
  45. data/generator_folders/spa/public/img/jumbotron.jpg +0 -0
  46. data/generator_folders/spa/public/js/another-component.js +72 -0
  47. data/generator_folders/spa/public/js/app.js +16 -0
  48. data/lib/rhail.rb +13 -0
  49. data/lib/rhail/generator.rb +46 -0
  50. data/lib/rhail/helper.rb +117 -0
  51. data/lib/rhail/main.rb +8 -0
  52. data/rhail.gemspec +46 -0
  53. metadata +123 -0
@@ -0,0 +1,31 @@
1
+ require 'sequel'
2
+
3
+ DB = Sequel.sqlite('db/database.sqlite3')
4
+
5
+ DB.run "DROP TABLE IF EXISTS addresses"
6
+ DB.run "DROP TABLE IF EXISTS people"
7
+
8
+ DB.create_table :addresses do
9
+ primary_key :id
10
+ String :street_1, :size => 255
11
+ String :street_2, :size => 255
12
+ String :city
13
+ String :state, :size => 2
14
+ String :zipcode, :size => 5
15
+ end
16
+
17
+ DB.run "INSERT INTO addresses(city, state, zipcode) VALUES('Atlanta', 'GA', '30305')"
18
+ DB.run "INSERT INTO addresses(city, state, zipcode) VALUES('Houston', 'TX', '77001')"
19
+ DB.run "INSERT INTO addresses(city, state, zipcode) VALUES('Fargo', 'ND', '58102')"
20
+
21
+
22
+ DB.create_table :people do
23
+ primary_key :id
24
+ String :name, :size => 255
25
+ Integer :address_id
26
+ end
27
+
28
+ DB.run "INSERT INTO people(name, address_id) VALUES('George', 1)"
29
+ DB.run "INSERT INTO people(name, address_id) VALUES('Thomas', 2)"
30
+ DB.run "INSERT INTO people(name, address_id) VALUES('Douglas', 3)"
31
+
@@ -0,0 +1,123 @@
1
+ body {
2
+ min-height: 1000px;
3
+ }
4
+
5
+ .navbar {
6
+ margin-bottom: 0px;
7
+ }
8
+
9
+ /* Sticky footer styles
10
+ -------------------------------------------------- */
11
+
12
+ html {
13
+ position: relative;
14
+ min-height: 100%;
15
+ }
16
+
17
+ body {
18
+ margin-bottom: 100px; /* Margin bottom by footer height */
19
+ }
20
+
21
+ .footer {
22
+ position: absolute;
23
+ bottom: 0;
24
+ width: 100%;
25
+ height: 100px; /* Set the fixed height of the footer here */
26
+ background-color: #f5f5f5;
27
+ }
28
+
29
+ /* Navbar Colors
30
+ -------------------------------------------------- */
31
+
32
+ .navbar-default .navbar-brand {
33
+ color: #fff;
34
+ }
35
+
36
+ .navbar-default {
37
+ background-color: #2da3f3;
38
+ border-color: #14264d;
39
+ }
40
+
41
+ .navbar-default .navbar-nav>li>a {
42
+ color: #fff;
43
+ }
44
+
45
+ .navbar-default .navbar-nav>.active>a, .navbar-default .navbar-nav>.active>a:focus, .navbar-default .navbar-nav>.active>a:hover {
46
+ color: #9acdef;
47
+ background-color: #263b66;
48
+ }
49
+
50
+ .navbar-default .navbar-nav>li>a:focus, .navbar-default .navbar-nav>li>a:hover {
51
+ color: #263b66;
52
+ background-color: transparent;
53
+ }
54
+
55
+
56
+ .navbar-default .navbar-brand:focus, .navbar-default .navbar-brand:hover {
57
+ color: #263b66;
58
+ background-color: transparent;
59
+ }
60
+
61
+ .navbar-default .navbar-nav>.open>a, .navbar-default .navbar-nav>.open>a:focus, .navbar-default .navbar-nav>.open>a:hover {
62
+ color: #9acdef;
63
+ background-color: #263b66;
64
+ }
65
+
66
+ .dropdown-menu {
67
+ background-color: #263b66;
68
+ }
69
+
70
+ .dropdown-menu>li>a {
71
+ color: #9acdef;
72
+ }
73
+
74
+ .dropdown-header {
75
+ color: #ddd;
76
+ }
77
+
78
+ /* Navbar (mobile stacked) colors
79
+ -------------------------------------------------- */
80
+ .navbar-default .navbar-toggle .icon-bar {
81
+ background-color: #eee;
82
+ }
83
+
84
+ .navbar-default .navbar-toggle:focus, .navbar-default .navbar-toggle:hover {
85
+ background-color: #263b66;
86
+ }
87
+
88
+ /* Jumbotron
89
+ -------------------------------------------------- */
90
+
91
+ .jumbotron {
92
+ background-color: #ddd;
93
+ background: url('/img/jumbotron.jpg') no-repeat; /* LICENSE: I (Maksim Sundukov) do own rights for this picture, I made it, feel free to use it fo free. */
94
+ background-position: 0% 30%;
95
+ background-size: auto;
96
+ }
97
+
98
+ .jumbotron .h1, .jumbotron h1 {
99
+ color: #444;
100
+ }
101
+
102
+ .jumbotron p {
103
+ color: #fff;
104
+ text-shadow: 1px 1px 4px #000;
105
+ }
106
+
107
+ /* Footer
108
+ -------------------------------------------------- */
109
+
110
+ .footer-links {
111
+ margin-top: 20px;
112
+ }
113
+
114
+ .footer-links a {
115
+ margin-right: 20px;
116
+ }
117
+
118
+ /* IDs
119
+ -------------------------------------------------- */
120
+
121
+ #features-form {
122
+ margin-top: 50px;
123
+ }
@@ -0,0 +1,186 @@
1
+ <html>
2
+ <head>
3
+ <title>Ruby Hail. SPA.</title>
4
+
5
+ <link rel="icon" type="image/png" href="/img/favicon.png" />
6
+
7
+ <link rel="stylesheet" type="text/css" href="//fonts.googleapis.com/css?family=Open+Sans" />
8
+ <link rel="stylesheet" type="text/css" href="//maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
9
+ <link rel="stylesheet" type="text/css" href="/css/styles.css">
10
+
11
+ </head>
12
+
13
+ <body>
14
+
15
+ <div id="app">
16
+
17
+ <!-- Menu -->
18
+ <nav class="navbar navbar-default navbar-static-top">
19
+ <div class="container">
20
+ <div class="navbar-header">
21
+ <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar">
22
+ <span class="icon-bar"></span>
23
+ <span class="icon-bar"></span>
24
+ <span class="icon-bar"></span>
25
+ </button>
26
+ <a class="navbar-brand" href="/">Ruby Hail SPA</a>
27
+ </div>
28
+ <div id="navbar" class="navbar-collapse collapse">
29
+ <ul class="nav navbar-nav">
30
+ <router-link to="/main" tag="li" active-class="active"><a>Home</a></router-link>
31
+ <router-link to="/example_one" tag="li" active-class="active"><a>Example One</a></router-link>
32
+ <li class="dropdown">
33
+ <a href="#" class="dropdown-toggle" data-toggle="dropdown">Drop-down Menu <span class="caret"></span></a>
34
+ <ul class="dropdown-menu">
35
+ <li><a href="#">One</a></li>
36
+ <li><a href="#">Two</a></li>
37
+ <li><a href="#">Three</a></li>
38
+ <li role="separator" class="divider"></li>
39
+ <li class="dropdown-header">Text</li>
40
+ <li><a href="#">Four</a></li>
41
+ <li><a href="#">Five</a></li>
42
+ </ul>
43
+ </li>
44
+ </ul>
45
+ <ul class="nav navbar-nav navbar-right">
46
+ <li><a href="#">Contact</a></li>
47
+ <li><a href="#">Visit</a></li>
48
+ <li><a href="#">Jobs</a></li>
49
+ </ul>
50
+ </div><!--/.nav-collapse -->
51
+ </div>
52
+ </nav>
53
+ <router-view></router-view>
54
+ </div>
55
+
56
+ <template id="main">
57
+ <div><!- - This wrapping div is very important, template will work only with first child element- ->
58
+ <div class="jumbotron">
59
+ <div class="container">
60
+ <h1>Ruby Hail. SPA Example.</h1>
61
+ <p>Ea qui laoreet repudiandae neglegentur, cu detraxit euripidis vim, sit ex odio choro dicam. Cu eos lucilius postulant maiestatis, no alii commodo placerat per. Mei an dicta atomorum urbanitas, mei impetus noluisse in. Vim at solet viderer gloriatur, quo ut duis facete melius.</p>
62
+ <p>
63
+ <a class="btn btn-lg btn-primary" href="#">More info &raquo;</a>
64
+ </p>
65
+ </div>
66
+ </div>
67
+
68
+ <div class="container">
69
+ <div class="row">
70
+ <div class="col-md-4">
71
+ <h2>Heading</h2>
72
+ <p>Donec sed odio dui. Cras justo odio, dapibus ac facilisis in, egestas eget quam. Vestibulum id ligula porta felis euismod semper. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa.</p>
73
+ <p><a class="btn btn-primary" href="#">View details &raquo;</a></p>
74
+ </div>
75
+ <div class="col-md-4">
76
+ <h2>Heading</h2>
77
+ <p>Donec id elit non mi porta gravida at eget metus. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Etiam porta sem malesuada magna mollis euismod. Donec sed odio dui. </p>
78
+ <p><a class="btn btn-primary" href="#">View details &raquo;</a></p>
79
+ </div>
80
+ <div class="col-md-4">
81
+ <h2>Heading</h2>
82
+ <p>Donec sed odio dui. Cras justo odio, dapibus ac facilisis in, egestas eget quam. Vestibulum id ligula porta felis euismod semper. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa.</p>
83
+ <p><a class="btn btn-primary" href="#">View details &raquo;</a></p>
84
+ </div>
85
+ </div>
86
+ </div> <!-- /container -->
87
+ </div>
88
+ </template>
89
+
90
+ <template id="another-component">
91
+ <div><!- - This wrapping div is very important, template will work only with first child element- ->
92
+
93
+ <div class="container">
94
+ <div class="row">
95
+ <div class="col-md-4">
96
+ <form id="features-form">
97
+
98
+ <input type="hidden" name="csrf_token" value="local_vars[:csrf_token]" />
99
+
100
+ <div class="form-group">
101
+ <label for="name">Name</label>
102
+ <input class="form-control" placeholder='John Doe' id="name" name="name" v-model="name">
103
+ </div>
104
+
105
+ <div class="form-group">
106
+ <label for="city">City</label>
107
+ <input class="form-control" placeholder='Atlanta' id="city" name="city" v-model="city">
108
+ </div>
109
+
110
+ <div class="form-group">
111
+ <label for="state">State</label>
112
+ <input class="form-control" placeholder='GA' id="state" name="state" v-model="state">
113
+ </div>
114
+
115
+ <div class="form-group">
116
+ <label for="zipcode">Zip</label>
117
+ <input class="form-control" placeholder='30303' id="zipcode" name="zipcode" v-model="zipcode">
118
+ </div>
119
+
120
+ <div class="form-group">
121
+ <button class="btn btn-primary" v-on:click="sendData($event)">Add</button>
122
+ </div>
123
+
124
+ </form>
125
+ </div>
126
+ </div>
127
+
128
+ <div class="row">
129
+ <div class="col-md-4">
130
+ <h4>Results:</h4>
131
+ </div>
132
+ </div>
133
+
134
+ <div class="row">
135
+ <div class="col-md-8">
136
+ <table id="people-table" class="table table-striped table-hover table-condensed table-responsive">
137
+ <thead>
138
+ <tr>
139
+ <th>Name</th>
140
+ <th>City</th>
141
+ <th>State</th>
142
+ <th>Zip</th>
143
+ </tr>
144
+ </thead>
145
+ <tbody>
146
+ <tr v-for="p in peopleWithAddresses">
147
+ <td><div class="person-name">{{p.name}}</div></td>
148
+ <td><div class="person-city">{{p.city}}</div></td>
149
+ <td><div class="person-state">{{p.state}}</div></td>
150
+ <td><div class="person-zip">{{p.zipcode}}</div></td>
151
+ </tr>
152
+ </tbody>
153
+ </table>
154
+ </div>
155
+ </div>
156
+
157
+ </div>
158
+ </div>
159
+ </template>
160
+
161
+ <footer class="footer">
162
+ <div class="container">
163
+ <div class="row">
164
+ <div class="col-md-offset-2 col-md-8">
165
+ <p class="footer-links">
166
+ <a href="#">Donec&nbsp;id&nbsp;elit</a>
167
+ <a href="#">Non&nbsp;mi&nbsp;porta</a>
168
+ <a href="#">Gravida&nbsp;at&nbsp;eget</a>
169
+ <a href="#">Metus</a>
170
+ <a href="#">Fusce&nbsp;dapibus</a>
171
+ </p>
172
+ <p>&copy; 2016 Company, Inc.</p>
173
+ </div>
174
+ </div>
175
+ </div>
176
+ </footer>
177
+
178
+ <script src="//unpkg.com/jquery@3.1.1/dist/jquery.min.js"></script>
179
+ <script src="//maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
180
+ <script src="//unpkg.com/vue@2.1.4/dist/vue.min.js"></script>
181
+ <script src="//unpkg.com/vue-router@2.1.1/dist/vue-router.min.js"></script>
182
+ <script src="//unpkg.com/axios@0.15.3/dist/axios.min.js"></script>
183
+ <script src="/js/another-component.js"></script>
184
+ <script src="/js/app.js"></script>
185
+ </body>
186
+ </html>
@@ -0,0 +1,72 @@
1
+ const anotherComponent = {
2
+ template: '#another-component',
3
+
4
+ data: function() { return {
5
+ peopleWithAddresses: {},
6
+ name: '',
7
+ city: '',
8
+ state: '',
9
+ zipcode: '',
10
+ csrfToken: ''
11
+ }},
12
+
13
+ created: function() {
14
+ this.callOnCreate()
15
+ },
16
+
17
+ methods: {
18
+ getData: function() {
19
+ var vm = this
20
+ var res = {}
21
+
22
+ axios.get('/api/example_one')
23
+ .then(function(response) {
24
+ vm.peopleWithAddresses = response.data
25
+ vm.csrfToken = response.headers.csrf_token
26
+ })
27
+ .catch(function(error){
28
+ console.log('ERROR in getData')
29
+ console.log(error)
30
+ })
31
+ },
32
+
33
+ sendData: function(event) {
34
+ var vm = this
35
+ event.preventDefault() // Otherwise browser will submit form too
36
+
37
+ axios({
38
+ method: 'post',
39
+ url: '/api/example_two',
40
+ data: {
41
+
42
+ name: vm.name,
43
+ city: vm.city,
44
+ state: vm.state,
45
+ zipcode: vm.zipcode
46
+
47
+ },
48
+ headers: {'CSRF-Token': vm.csrfToken}
49
+ })
50
+ .then(function(response) {
51
+
52
+ // Clean the form
53
+ vm.name = ''
54
+ vm.city = ''
55
+ vm.state = ''
56
+ vm.zip = ''
57
+
58
+ vm.getData()
59
+ })
60
+ .catch(function(error){
61
+ console.log('ERROR in sendData')
62
+ console.log(error)
63
+ })
64
+ },
65
+
66
+ callOnCreate: function() {
67
+ this.getData()
68
+ }
69
+
70
+ }
71
+ }
72
+
@@ -0,0 +1,16 @@
1
+ const mainComponent = {
2
+ template: '#main'
3
+ }
4
+
5
+ var vm = new Vue({
6
+ el: '#app',
7
+ router: new VueRouter({
8
+ routes: [
9
+ { path: '/main', component: mainComponent },
10
+ { path: '/example_one', component: anotherComponent }, // nother-component.js
11
+ { path: '*', redirect: '/main'}
12
+ ]
13
+ }),
14
+ })
15
+
16
+
data/lib/rhail.rb ADDED
@@ -0,0 +1,13 @@
1
+ require 'rhail/main'
2
+
3
+ ##
4
+ # Parent module for gem classes
5
+ #
6
+ module Rhail
7
+ USAGE = <<-EOF
8
+
9
+ \e[32mUSAGE: rhail generate <plain|json|spa> [folder]\e[0m
10
+
11
+ EOF
12
+
13
+ end