codeziner 0.0.1 → 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/bin/codeziner +170 -4
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: cac48a7ea5fec003e18429e7ad76466ed2e5ea1e
|
4
|
+
data.tar.gz: 327a85c414867d31f666fc346b5a8186608ec50c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c2177e9788cb3f42e05f578c8a7ff74923927eb7bd2ac35e5ae68bd7b5e3d0456589d28a2fed1a1bca81c04755cf7faaa5c3e22d20ba16ed1e26b66ab2ac0f9a
|
7
|
+
data.tar.gz: 25afbccfd67210cf1374dce3d9e154bcbb6339cd9bc711bb0832ae5a9a136e63a0cf02d80c73a08d3f01f0233fb69a69bf6a3ca84de2342469ea3e70fcc55efb
|
data/bin/codeziner
CHANGED
@@ -1,24 +1,190 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
3
|
require 'codeziner'
|
4
|
+
require 'fileutils'
|
4
5
|
|
5
6
|
class String
|
6
7
|
def red; "\e[31m#{self}\e[0m" end
|
7
8
|
def green; "\e[32m#{self}\e[0m" end
|
8
9
|
def blue; "\e[34m#{self}\e[0m" end
|
9
10
|
def bold; "\e[1m#{self}\e[22m" end
|
11
|
+
|
12
|
+
def classify
|
13
|
+
split("/").map { |x| x.split('_').collect!{ |w| w.capitalize }.join }.join("::")
|
14
|
+
end
|
15
|
+
|
16
|
+
def underscore
|
17
|
+
gsub(/::/, '/').
|
18
|
+
gsub(/([A-Z]+)([A-Z][a-z])/,'\1_\2').
|
19
|
+
gsub(/([a-z\d])([A-Z])/,'\1_\2').
|
20
|
+
tr("-", "_").
|
21
|
+
downcase
|
22
|
+
end
|
10
23
|
end
|
11
24
|
|
12
25
|
class Generator
|
13
26
|
|
14
|
-
def self.
|
15
|
-
|
27
|
+
def self.generate(entity_type, name)
|
28
|
+
self.const_get(entity_type.to_s.classify).new(name).create
|
29
|
+
Spec.new(name).create
|
30
|
+
end
|
31
|
+
|
32
|
+
class Entity
|
33
|
+
def initialize(name, embed: [])
|
34
|
+
@name = name
|
35
|
+
@embed = embed
|
36
|
+
end
|
37
|
+
|
38
|
+
attr_reader :name, :embed
|
39
|
+
|
40
|
+
def create
|
41
|
+
create_dir
|
42
|
+
create_code
|
43
|
+
log_message
|
44
|
+
end
|
45
|
+
|
46
|
+
|
47
|
+
def code_content
|
48
|
+
if dir_name_or_nil
|
49
|
+
code_content_with_wraper
|
50
|
+
else
|
51
|
+
code_content_without_wraper
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
private
|
56
|
+
|
57
|
+
def base_name
|
58
|
+
@base_name ||= File.basename(name)
|
59
|
+
end
|
60
|
+
|
61
|
+
def dir_name
|
62
|
+
@dir_name ||= File.dirname(name).gsub(/^\.$/,"")
|
63
|
+
end
|
64
|
+
|
65
|
+
def dir_name_or_nil
|
66
|
+
if dir_name.empty? then nil else dir_name end
|
67
|
+
end
|
68
|
+
|
69
|
+
def log_message
|
70
|
+
puts("Codeziner " + "create".green.bold + " #{content_type} #{keyword} #{full_entity_name.blue.bold} in #{code_file.bold}")
|
71
|
+
end
|
72
|
+
|
73
|
+
def content_type
|
74
|
+
"code"
|
75
|
+
end
|
76
|
+
|
77
|
+
def create_dir
|
78
|
+
FileUtils.mkdir_p(full_dir_path)
|
79
|
+
end
|
80
|
+
|
81
|
+
def create_code
|
82
|
+
File.write(code_file, code_content)
|
83
|
+
end
|
84
|
+
|
85
|
+
def code_file
|
86
|
+
"#{full_dir_path}/#{base_name}#{file_suffix}"
|
87
|
+
end
|
88
|
+
|
89
|
+
def file_suffix
|
90
|
+
".rb"
|
91
|
+
end
|
92
|
+
|
93
|
+
|
94
|
+
def full_entity_name
|
95
|
+
name.classify
|
96
|
+
end
|
97
|
+
|
98
|
+
def full_dir_path
|
99
|
+
[
|
100
|
+
"lib",
|
101
|
+
dir_name_or_nil
|
102
|
+
].compact.join("/")
|
103
|
+
end
|
104
|
+
|
105
|
+
def code_content_with_wraper
|
106
|
+
i = dir_name.split("/").count
|
107
|
+
Module.new(dir_name, embed: code_content_without_wraper_array).code_content
|
108
|
+
end
|
109
|
+
|
110
|
+
def code_content_without_wraper_array
|
111
|
+
[
|
112
|
+
"#{tabs}#{keyword} #{entity_name}#{header_suffix}",
|
113
|
+
embed,
|
114
|
+
"#{tabs}end"
|
115
|
+
]
|
116
|
+
end
|
117
|
+
|
118
|
+
def header_suffix
|
119
|
+
""
|
120
|
+
end
|
121
|
+
|
122
|
+
def tabs
|
123
|
+
" "*tabs_count
|
124
|
+
end
|
125
|
+
|
126
|
+
def tabs_count
|
127
|
+
dir_name.split("/").count
|
128
|
+
end
|
129
|
+
|
130
|
+
def code_content_without_wraper
|
131
|
+
code_content_without_wraper_array.join("\n")
|
132
|
+
end
|
133
|
+
|
134
|
+
def keyword
|
135
|
+
self.class.name.split('::').last.underscore
|
136
|
+
end
|
137
|
+
|
138
|
+
def entity_name
|
139
|
+
base_name.classify
|
140
|
+
end
|
141
|
+
end
|
142
|
+
|
143
|
+
class Spec < Entity
|
144
|
+
|
145
|
+
private
|
146
|
+
|
147
|
+
def content_type
|
148
|
+
"spec"
|
149
|
+
end
|
150
|
+
|
151
|
+
def header_suffix
|
152
|
+
" do"
|
153
|
+
end
|
154
|
+
|
155
|
+
def keyword
|
156
|
+
:describe
|
157
|
+
end
|
158
|
+
|
159
|
+
def full_dir_path
|
160
|
+
"spec/#{super}"
|
161
|
+
end
|
162
|
+
|
163
|
+
def file_suffix
|
164
|
+
"_spec#{super}"
|
165
|
+
end
|
166
|
+
|
167
|
+
def code_content_with_wraper
|
168
|
+
[
|
169
|
+
"require 'spec_helper'",
|
170
|
+
"require '#{dir_name}/#{base_name}'",
|
171
|
+
super,
|
172
|
+
].join("\n")
|
173
|
+
end
|
174
|
+
|
175
|
+
|
176
|
+
end
|
177
|
+
|
178
|
+
class Module < Entity
|
179
|
+
end
|
180
|
+
|
181
|
+
class Class < Entity
|
16
182
|
end
|
17
183
|
|
18
184
|
end
|
19
185
|
|
20
186
|
if ARGV[0] == 'generate'
|
21
|
-
Generator.send
|
187
|
+
Generator.send(*ARGV)
|
22
188
|
else
|
23
|
-
puts
|
189
|
+
puts "Codeziner - unknown command: #{ARGV[0].to_s.bold}".red
|
24
190
|
end
|