atchu 0.0.1 → 0.0.3
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/README.md +4 -0
- data/lib/atchu.rb +20 -0
- data/lib/atchu/connection.rb +20 -0
- data/lib/atchu/model.rb +28 -0
- data/lib/atchu/model_file_maker.rb +30 -0
- data/lib/atchu/queries.rb +21 -0
- data/lib/atchu/template/model.eruby +10 -0
- data/spec/spec_helper.rb +2 -0
- data/spec/unit/model_file_maker_spec.rb +11 -0
- data/spec/unit/model_spec.rb +15 -0
- metadata +25 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d42132be4b71d56a6624717847bdd28d3951e252
|
4
|
+
data.tar.gz: 8845b8d2edbf2382b6c29d764d5a195694e62dbd
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 931a67e2bb69818e36a48cd254f3553ab3470c7a1b1ef98ce6181c50ca07965fa5e817d8c4a7bcbd56d9452e1ed1cc1acf159321c5cd2989802478787f88c5d4
|
7
|
+
data.tar.gz: f115e21ee0fa428eaf6364bdc47e33280685f06e875475690cbcdd1117a1f11efffca0e9e8b87b9e6c062574e6585ec566a07dfac2e19d769f54a4c7ac7e4c81
|
data/README.md
CHANGED
data/lib/atchu.rb
CHANGED
@@ -1 +1,21 @@
|
|
1
|
+
require "atchu/connection"
|
2
|
+
require "atchu/model_file_maker"
|
3
|
+
require "atchu/model"
|
1
4
|
|
5
|
+
binding.pry
|
6
|
+
|
7
|
+
module Atchu
|
8
|
+
extend self
|
9
|
+
|
10
|
+
def load db_config
|
11
|
+
Connection.connect db_config
|
12
|
+
generate_models
|
13
|
+
end
|
14
|
+
|
15
|
+
private
|
16
|
+
def generate_models
|
17
|
+
tables = Connection.get.tables
|
18
|
+
models = tables.map{|table| Model.for_table(table)}
|
19
|
+
models.each{|model|ModelFileMaker.new(model).write_to "tmp"}
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require "yaml"
|
2
|
+
|
3
|
+
module Atchu
|
4
|
+
module Connection
|
5
|
+
extend self
|
6
|
+
|
7
|
+
def connect yml_file
|
8
|
+
return if yml_file.empty?
|
9
|
+
if @connection.blank?
|
10
|
+
ActiveRecord::Base.establish_connection(YAML.load_file(yml_file)[:db])
|
11
|
+
@connection = ActiveRecord::Base.connection
|
12
|
+
end
|
13
|
+
@connection
|
14
|
+
end
|
15
|
+
|
16
|
+
def get
|
17
|
+
@connection
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
data/lib/atchu/model.rb
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
require "atchu/queries"
|
2
|
+
require "active_support/inflector"
|
3
|
+
|
4
|
+
class Model
|
5
|
+
attr_accessor :table_name
|
6
|
+
|
7
|
+
def self.for_table table_name
|
8
|
+
model = Model.new
|
9
|
+
model.table_name = table_name
|
10
|
+
model
|
11
|
+
end
|
12
|
+
|
13
|
+
def class_name
|
14
|
+
table_name.classify
|
15
|
+
end
|
16
|
+
|
17
|
+
def file_name
|
18
|
+
table_name.classify.underscore
|
19
|
+
end
|
20
|
+
|
21
|
+
def primary_key
|
22
|
+
query = Atchu::Queries.primary_key table_name
|
23
|
+
keys = Atchu::Connection.get.select_all(query).rows
|
24
|
+
return "" if keys.eql? []
|
25
|
+
keys.reduce(:+).map{|x|x.intern}.to_s.gsub("[","").gsub("]","")
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
require "erubis"
|
2
|
+
|
3
|
+
module Atchu
|
4
|
+
class ModelFileMaker
|
5
|
+
|
6
|
+
def initialize input_model
|
7
|
+
@model = input_model
|
8
|
+
end
|
9
|
+
|
10
|
+
def write_to output_folder
|
11
|
+
file_content = get_file_content
|
12
|
+
write_to_file output_folder,file_content
|
13
|
+
end
|
14
|
+
|
15
|
+
private
|
16
|
+
attr_accessor :model
|
17
|
+
def get_file_content
|
18
|
+
eruby = Erubis::Eruby.new(File.read(File.join(File.expand_path("./../template/", __FILE__), 'model.eruby')))
|
19
|
+
eruby.result({:class_name => model.class_name,:table_name=>model.table_name,:primary_key=>model.primary_key})
|
20
|
+
end
|
21
|
+
|
22
|
+
def write_to_file output_path,file_content
|
23
|
+
FileUtils.mkdir_p(output_path)
|
24
|
+
File.open(File.join(Dir.pwd,output_path, "#{model.file_name}.rb"), "w") { |file| file.write file_content }
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module Atchu
|
2
|
+
module Queries
|
3
|
+
extend self
|
4
|
+
|
5
|
+
def primary_key table_name
|
6
|
+
sql = <<-SQL
|
7
|
+
SELECT
|
8
|
+
pg_attribute.attname
|
9
|
+
FROM pg_index, pg_class, pg_attribute
|
10
|
+
WHERE
|
11
|
+
pg_class.oid = '#{table_name}'::regclass AND
|
12
|
+
indrelid = pg_class.oid AND
|
13
|
+
pg_attribute.attrelid = pg_class.oid AND
|
14
|
+
pg_attribute.attnum = any(pg_index.indkey)
|
15
|
+
AND indisprimary
|
16
|
+
SQL
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
|
@@ -0,0 +1,10 @@
|
|
1
|
+
class <%= class_name %> < ActiveRecord::Base
|
2
|
+
<% unless class_name == table_name %>
|
3
|
+
<%= "self.table_name = '#{table_name}'" -%>
|
4
|
+
<% end %>
|
5
|
+
|
6
|
+
<% unless "id" == primary_key || primary_key.nil? %>
|
7
|
+
<%= "self.primary_key = #{primary_key}" -%>
|
8
|
+
<% end %>
|
9
|
+
|
10
|
+
end
|
data/spec/spec_helper.rb
CHANGED
@@ -0,0 +1,11 @@
|
|
1
|
+
describe Atchu::ModelFileMaker,"ModelFileMaker" do
|
2
|
+
before(:each) do
|
3
|
+
@model = instance_double("Model", :table_name => "table", :class_name => "klass", :file_name => "klass_file", :primary_key => [:id,:name])
|
4
|
+
@model_file = Atchu::ModelFileMaker.new(@model)
|
5
|
+
end
|
6
|
+
|
7
|
+
it "should create file for a model" do
|
8
|
+
@model_file.write_to "tmp"
|
9
|
+
expect(File).to exist("tmp/#{@model.file_name}.rb")
|
10
|
+
end
|
11
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
describe Model,"model with table name, 'car_parts'" do
|
2
|
+
|
3
|
+
before(:each) do
|
4
|
+
@model = Model.for_table("car_parts")
|
5
|
+
end
|
6
|
+
|
7
|
+
it "model class name is CarPart" do
|
8
|
+
expect(@model.class_name).to eq("CarPart")
|
9
|
+
end
|
10
|
+
|
11
|
+
it "model file name is car_part" do
|
12
|
+
expect(@model.file_name).to eq("car_part")
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: atchu
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Deepak
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-12-
|
11
|
+
date: 2014-12-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rspec
|
@@ -108,6 +108,20 @@ dependencies:
|
|
108
108
|
- - ">="
|
109
109
|
- !ruby/object:Gem::Version
|
110
110
|
version: '0'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: erubis
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - ">="
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0'
|
118
|
+
type: :runtime
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - ">="
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '0'
|
111
125
|
description: Reverse engineer DB with composite keys to Active Records
|
112
126
|
email:
|
113
127
|
executables: []
|
@@ -116,7 +130,14 @@ extra_rdoc_files: []
|
|
116
130
|
files:
|
117
131
|
- README.md
|
118
132
|
- lib/atchu.rb
|
133
|
+
- lib/atchu/connection.rb
|
134
|
+
- lib/atchu/model.rb
|
135
|
+
- lib/atchu/model_file_maker.rb
|
136
|
+
- lib/atchu/queries.rb
|
137
|
+
- lib/atchu/template/model.eruby
|
119
138
|
- spec/spec_helper.rb
|
139
|
+
- spec/unit/model_file_maker_spec.rb
|
140
|
+
- spec/unit/model_spec.rb
|
120
141
|
homepage: https://github.com/paramadeep/atchu
|
121
142
|
licenses:
|
122
143
|
- MIT
|
@@ -142,4 +163,6 @@ signing_key:
|
|
142
163
|
specification_version: 4
|
143
164
|
summary: Reverse engineer DB with composite keys to Active Records
|
144
165
|
test_files:
|
166
|
+
- spec/unit/model_file_maker_spec.rb
|
167
|
+
- spec/unit/model_spec.rb
|
145
168
|
- spec/spec_helper.rb
|