codeziner 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. checksums.yaml +4 -4
  2. data/bin/codeziner +170 -4
  3. metadata +1 -1
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: e2db0e6b7abbf848d5421213547646c0ef7deedc
4
- data.tar.gz: af8d1ac4e137253d399f3f4859a2c8b54bffbdc1
3
+ metadata.gz: cac48a7ea5fec003e18429e7ad76466ed2e5ea1e
4
+ data.tar.gz: 327a85c414867d31f666fc346b5a8186608ec50c
5
5
  SHA512:
6
- metadata.gz: fec81cc8586c6b120938fd31145c0c161e35750e4e2de384dfc4515c425a3b4f324778813df8fdf91eda56d7c8815a69b1831d52279928a8201b7c5db7522547
7
- data.tar.gz: 34f162b4f6bfbfdd0971a4906631de57b336bca612c083a47c18c33b6a6fb8301523dea563ddc51f3428f77303c663854bb36ffca636a6445a5f1d89cc5a5621
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.klass(name)
15
- puts "Generating klass #{name}".green.bold
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 *ARGV.slice(1..-1)
187
+ Generator.send(*ARGV)
22
188
  else
23
- puts 'Unknown Command'.red.bold
189
+ puts "Codeziner - unknown command: #{ARGV[0].to_s.bold}".red
24
190
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: codeziner
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Yaron Weil