likelion 0.1.1 → 0.1.2
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
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 882d3fd0b9fef34884e3826649c45214ac73511a
|
4
|
+
data.tar.gz: 1fb3b6e745ec45442220eeb783ba607bd60eb143
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: fd93b86cc1d393e26277ac58c312c8a35cb6b7b1b74c1878f6db51d1b712572948dd522360dc245c81fc7aedb13a009b8037392210cc393569cffc97eecf26d2
|
7
|
+
data.tar.gz: edd9c6fe9f64172a870bdeef29d5791c87bd1761da6554d982b5be3d0594cf28a68362c8cf33a18e18928fa7150163e79b90c742e268bbfb5b5e44427610965b
|
data/README.md
CHANGED
@@ -1,4 +1,9 @@
|
|
1
1
|
# Likelion
|
2
|
+
멋쟁이 사자처럼 수업 때 사용된 코드들을 생성하는 Gem 입니다.
|
3
|
+
수업 종료할 때 작성된 코드를 생성합니다.
|
4
|
+
|
5
|
+
## Dependency
|
6
|
+
- Ruby >= 2.1.2
|
2
7
|
|
3
8
|
|
4
9
|
## Installation
|
@@ -24,11 +29,165 @@ Gem을 설치한 후 아래와 같이 사용합니다.
|
|
24
29
|
$ rails generate likelion:install [날짜]
|
25
30
|
|
26
31
|
날짜는 'YYMMDD' 형식으로 입력됩니다. 예를 들어 16년 4월 8일에 진행된 수업의 코드는
|
32
|
+
|
27
33
|
$ rails generate likelion:install 160408
|
28
34
|
|
29
35
|
와 같이 불러올 수 있습니다.
|
30
36
|
|
31
37
|
## Contributing
|
38
|
+
이 Gem은 누구든지 추가할 수 있습니다. 내용을 추가하기 위해선 생성하고자 하는 폴더의 상위 폴더에서 아래의 명령어를 실행합니다.
|
39
|
+
|
40
|
+
$ git clone 'https://github.com/LEECHHE/likelion'
|
41
|
+
$ cd likelion
|
42
|
+
|
43
|
+
Gem의 파일 중 lib에 파일을 추가합니다. 구조는 아래와 같습니다.
|
44
|
+
|
45
|
+
└── lib
|
46
|
+
└── generators
|
47
|
+
└── likelion
|
48
|
+
└── create_templates.rb
|
49
|
+
├── install_generator.rb
|
50
|
+
├── USAGE
|
51
|
+
└── templates
|
52
|
+
└── 160408
|
53
|
+
└── command.txt
|
54
|
+
├── [CONTROLLER].rb (ex. home_controller.rb)
|
55
|
+
├── routes.rb
|
56
|
+
├── views.txt
|
57
|
+
├── [CONTROLLER_NAME].[METHOD].html.erb (ex. home.index.html.erb)
|
58
|
+
├── ....
|
59
|
+
|
60
|
+
|
61
|
+
- install_generator.rb
|
62
|
+
- create_templates.rb를 실행하며 rails generator를 생성합니다.
|
63
|
+
|
64
|
+
- create_templates.rb
|
65
|
+
- Model, Controller, View, 파일 복사 등을 담당합니다.
|
66
|
+
|
67
|
+
### Templates
|
68
|
+
Templates 폴더는 'YYMMDD' 형식으로 된 날짜를 이름으로 갖는 폴더로 구성되어 있습니다. 이 날짜는 강의를 한 날짜에 해당합니다. 각 파일들은 위와 같이 5가지 종류의 파일로 구성되어 있습니다.
|
69
|
+
- command.txt : 커맨드 창에 직접 입력한 명령어 중 Model과 Controller 관련 내용입니다. ##은 주석으로 간주되며 실행하지 않습니다.
|
70
|
+
|
71
|
+
```
|
72
|
+
## 컨트롤러 생성
|
73
|
+
rails g controller home
|
74
|
+
```
|
75
|
+
|
76
|
+
- [CONTROLLER].rb : Controller에 작성한 내용 중 <b>클래스의 메소드만</b> 작성한 것입니다. 각 라인마다 Tab으로 한 칸씩 띄워야하며 마지막 end 뒤에 Enter를 입력해 새로운 줄로 끝내야 합니다.
|
77
|
+
|
78
|
+
|
79
|
+
```ruby
|
80
|
+
def index
|
81
|
+
end
|
82
|
+
def write
|
83
|
+
@almond = params[:title]
|
84
|
+
@anchovy = params[:content]
|
85
|
+
end
|
86
|
+
|
87
|
+
```
|
88
|
+
|
89
|
+
- routes.rb : routes.rb에 추가해야할 내용입니다. Devise는 자동으로 routes가 추가되므로 이 곳에 작성하지 않습니다. 마찬가지로 각 라인은 Tab으로 한 칸 띄우고 새로운 줄로 끝내야 합니다.
|
90
|
+
|
91
|
+
|
92
|
+
```ruby
|
93
|
+
root 'home#index'
|
94
|
+
|
95
|
+
get '/' => 'home#index'
|
96
|
+
post '/write' => 'home#write'
|
97
|
+
|
98
|
+
|
99
|
+
```
|
100
|
+
|
101
|
+
- views.txt : view 파일들의 목록입니다. 주의할 점은 [컨트롤러 이름].[메소드 이름].html.erb 로 앞에 컨트롤러 이름이 추가된 점입니다. 예를 들어 home_controller.rb의 index 메소드와 연관된 view는 home.index.html.erb 입니다.
|
102
|
+
|
103
|
+
|
104
|
+
```
|
105
|
+
home.index.html.erb
|
106
|
+
home.write.html.erb
|
107
|
+
|
108
|
+
```
|
109
|
+
|
110
|
+
- [CONTROLLER_NAME].[METHOD].html.erb : View 파일입니다. 앞에 컨트롤러 이름이 붙는 것에 유의해주시기 바랍니다. 16년 4월 8일에 진행된 강의에서 index.html.erb는 아래와 같습니다.
|
111
|
+
|
112
|
+
```erb
|
113
|
+
<div class="container">
|
114
|
+
<h1>게시판입니다.</h1>
|
115
|
+
<form action="/write" method="POST">
|
116
|
+
<div class="form-group">
|
117
|
+
<label for="exampleInputEmail1">글 제목</label>
|
118
|
+
<input type="text" class="form-control" id="exampleInputEmail1" name="title">
|
119
|
+
</div>
|
120
|
+
<div class="form-group">
|
121
|
+
<label for="exampleInputPassword1">글 내용</label>
|
122
|
+
<textarea name="content" class="form-control" id="exampleInputPassword1">
|
123
|
+
</div>
|
124
|
+
<button type="submit" class="btn btn-default">전송완료</button>
|
125
|
+
</form>
|
126
|
+
</div>
|
127
|
+
```
|
128
|
+
|
129
|
+
#### 생성 순서
|
130
|
+
create_templates::process에서 실행되며 순서는 아래와 같습니다.
|
131
|
+
|
132
|
+
1. views.txt를 한 줄 씩 읽으며 view를 추가합니다.
|
133
|
+
2. command.txt를 한 줄 씩 읽으며 model과 controller를 생성합니다.
|
134
|
+
3. application_controller.rb 에 protect_from_forgery를 주석 처리합니다.
|
135
|
+
4. Bootstrap CDN을 application.html.erb에 추가합니다.
|
136
|
+
5. routes.rb를 읽어 routes 설정을 합니다.
|
137
|
+
|
138
|
+
## Testing
|
139
|
+
추가한 코드가 제대로 동작하는지 테스트해볼 수 있습니다. 작성한 파일의 Commit을 완료한 상태에서
|
140
|
+
|
141
|
+
$ gem build likelion.gemspec
|
142
|
+
|
143
|
+
위 명령어를 입력하면 likelion-[VERSION].gem 이 생성됩니다. 2016년 5월 27일 기준으로 likelion-0.1.1.gem 이 생성됩니다. 새로운 rails application을 만들어 테스트해봅시다.
|
144
|
+
|
145
|
+
$ cd ..
|
146
|
+
$ rails new blog
|
147
|
+
$ cd ./blog
|
148
|
+
|
149
|
+
Gemfile 에 아래와 같은 내용을 추가합니다.
|
150
|
+
```ruby
|
151
|
+
gem 'likelion', path:"../likelion"
|
152
|
+
```
|
153
|
+
Gem을 설치합니다.
|
154
|
+
|
155
|
+
$ bundle install
|
156
|
+
|
157
|
+
|
158
|
+
이제 만든 Gem을 테스트해볼 수 있습니다. Usage를 참고하여 아래와 같은 명령어를 입력합니다.
|
159
|
+
|
160
|
+
$ rails generate likelion:install 160408
|
161
|
+
|
162
|
+
위 명령어의 날짜에 추가한 날의 날짜를 넣으면 아래와 같이 추가됩니다.
|
163
|
+
|
164
|
+
```ruby
|
165
|
+
➜ blog rails g likelion:install 160408
|
166
|
+
Running via Spring preloader in process 70972
|
167
|
+
run ruby /Users/leechhe/Documents/Development/likelion/lib/generators/likelion/create_templates.rb 160408 from "."
|
168
|
+
create app/views/home/index.html.erb
|
169
|
+
create app/views/home/write.html.erb
|
170
|
+
run rails g controller home from "."
|
171
|
+
Running via Spring preloader in process 70978
|
172
|
+
create app/controllers/home_controller.rb
|
173
|
+
invoke erb
|
174
|
+
exist app/views/home
|
175
|
+
invoke test_unit
|
176
|
+
create test/controllers/home_controller_test.rb
|
177
|
+
invoke helper
|
178
|
+
create app/helpers/home_helper.rb
|
179
|
+
invoke test_unit
|
180
|
+
invoke assets
|
181
|
+
invoke coffee
|
182
|
+
create app/assets/javascripts/home.coffee
|
183
|
+
invoke scss
|
184
|
+
create app/assets/stylesheets/home.scss
|
185
|
+
insert app/controllers/home_controller.rb
|
186
|
+
gsub app/controllers/application_controller.rb
|
187
|
+
insert app/views/layouts/application.html.erb
|
188
|
+
insert config/routes.rb
|
189
|
+
```
|
190
|
+
|
32
191
|
|
33
192
|
Bug reports and pull requests are welcome on GitHub at https://github.com/LEECHHE/likelion. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.
|
34
193
|
|
@@ -1,15 +1,18 @@
|
|
1
|
-
require '
|
1
|
+
require 'thor'
|
2
2
|
class CreateTemplates < Thor::Group
|
3
3
|
include Thor::Actions
|
4
4
|
|
5
5
|
raise ArgumentError, "The date should be input." if ARGV[0] == nil
|
6
6
|
@@path = "#{File.dirname(__FILE__)}/templates/#{ARGV[0]}"
|
7
|
+
|
7
8
|
def self.source_root
|
8
9
|
File.dirname(__FILE__)
|
9
10
|
end
|
10
11
|
|
11
12
|
def process
|
12
13
|
source_paths << @@path
|
14
|
+
#view 생성
|
15
|
+
copy_files
|
13
16
|
#모델, 컨트롤러 등 생성
|
14
17
|
run_commands
|
15
18
|
#application_controller.rb 주석 처리
|
@@ -22,17 +25,14 @@ class CreateTemplates < Thor::Group
|
|
22
25
|
end
|
23
26
|
|
24
27
|
def run_commands
|
25
|
-
|
26
|
-
#view 생성
|
27
|
-
copy_files
|
28
|
-
File.open([@@path,'command.txt'].join('/'),"r") do |infile|
|
28
|
+
File.open("#{@@path}/command.txt","r") do |infile|
|
29
29
|
#command.txt 내에 있는 커맨드 읽기
|
30
30
|
while( line = infile.gets )
|
31
31
|
#주석은 통과
|
32
32
|
if line[0] == '#'
|
33
33
|
next
|
34
34
|
end
|
35
|
-
#Command
|
35
|
+
#Command 실행. Thor::Actions::run(cmd)
|
36
36
|
run (line)
|
37
37
|
#Model과 Controller인 경우 내용(method, attributes 등) 추가
|
38
38
|
add_attributes(line)
|
@@ -42,8 +42,9 @@ class CreateTemplates < Thor::Group
|
|
42
42
|
|
43
43
|
def add_attributes(line)
|
44
44
|
#TODO : Devise는...?
|
45
|
+
# Thor::Actions::inject_into_class
|
45
46
|
line = line.split
|
46
|
-
if line[2].eql?"controller"
|
47
|
+
if line[2].eql?"controller"
|
47
48
|
inject_into_class "app/controllers/#{line[3]}_controller.rb", \
|
48
49
|
"#{line[3].capitalize}Controller", \
|
49
50
|
File.read("#{@@path}/#{line[3]}_controller.rb")
|
@@ -56,11 +57,13 @@ class CreateTemplates < Thor::Group
|
|
56
57
|
|
57
58
|
def comment_application_controller
|
58
59
|
# appication_controller.rb에 protect_from_forgery 주석 처리
|
60
|
+
# Thor::Actions::comment_lines
|
59
61
|
comment_lines 'app/controllers/application_controller.rb', /protect_from_forgery with: :exception/
|
60
62
|
end
|
61
63
|
|
62
64
|
def add_bootstraps
|
63
65
|
#Bootstrap CDN 추가
|
66
|
+
# Thor::Actions::insert_into_file
|
64
67
|
insert_into_file "app/views/layouts/application.html.erb", bootstrap_cdn, :before => "</head>\n"
|
65
68
|
end
|
66
69
|
|
@@ -72,15 +75,17 @@ class CreateTemplates < Thor::Group
|
|
72
75
|
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap-theme.min.css" integrity="sha384-fLW2N01lMqjakBkx3l/M9EahuwpSfeNvV63J5ezn3uZzapT0u7EYsXMjQV+0En5r" crossorigin="anonymous">
|
73
76
|
|
74
77
|
<!-- Latest compiled and minified JavaScript -->
|
75
|
-
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js" integrity="sha384-0mSbJDEHialfmuBBQP6A4Qrprq5OVfW37PRR3j5ELqxss1yVqOtnepnHVP9aJ7xS" crossorigin="anonymous"></script
|
78
|
+
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js" integrity="sha384-0mSbJDEHialfmuBBQP6A4Qrprq5OVfW37PRR3j5ELqxss1yVqOtnepnHVP9aJ7xS" crossorigin="anonymous"></script>'
|
76
79
|
end
|
77
80
|
|
78
81
|
def set_routes
|
79
82
|
#routes.rb 내용을 복사
|
83
|
+
# Thor::Actions::insert_into_file
|
80
84
|
insert_into_file "config/routes.rb", \
|
81
85
|
File.read("#{@@path}/routes.rb"), \
|
82
86
|
:after => "Rails.application.routes.draw do\n"
|
83
87
|
end
|
88
|
+
|
84
89
|
def copy_files
|
85
90
|
File.open("#{@@path}/views.txt","r") do |infile|
|
86
91
|
while(filename = infile.gets)
|
data/lib/likelion/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: likelion
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- ChangHee Lee
|
@@ -143,7 +143,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
143
143
|
version: '0'
|
144
144
|
requirements: []
|
145
145
|
rubyforge_project:
|
146
|
-
rubygems_version: 2.
|
146
|
+
rubygems_version: 2.4.5
|
147
147
|
signing_key:
|
148
148
|
specification_version: 4
|
149
149
|
summary: "멋쟁이 사자처럼 수업 때 사용된 코드들을 쉽게 생성해줍니다."
|