codeziner 0.0.1 → 0.0.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 +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
|