arison 0.1.3 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 79eba19eaea1539c6d6a1d437a9a59f311c08a4f
4
- data.tar.gz: 38371cddfcda719d3ff284a4b8b6281ad8ccf7de
2
+ SHA256:
3
+ metadata.gz: 4272d33ba6b94a998e9be6b59c94bc5e0482bc89c62a8bb71b2cf6e2825da84c
4
+ data.tar.gz: 36743d9e04d0a5d0081dd59219781ecf4608eefa03e299e2ccbaa8c982a7b62d
5
5
  SHA512:
6
- metadata.gz: 272af779e1eefdf097efe74d47c4c8238da3367aa92fe54e7be58279ed6a4c69450b7476fc3679774d2de82f03bddf03dbbe0423f53ba0bfd9118491b340a489
7
- data.tar.gz: 68b7abc608ed41b0d43434ee1997dc384f4540dd008c47cef005ed073518376f35d7d39f94a16b0814ba291aa2072e92bb3673a2f9a0cfe88f5d8052ebe378ca
6
+ metadata.gz: 32c2c56c3920e98f44fcb7399c789a315721e2d0a54ce9d718b99b2aa619dd7e998347358b85022b822d63839291cec51643cd31eb6fd004ed184021b153210b
7
+ data.tar.gz: 94c205cc76eb3b736d74cbbfbbcffa26c04f684ec592321c025dea8e17b040b40fd5e3730375ba54bc4d9b6bc12152d6f45cbddf155d0000495933c317fa02b2
data/.gitignore CHANGED
@@ -1,5 +1,6 @@
1
1
  Gemfile.lock
2
2
  doc/
3
+ tmp/
3
4
  pkg/
4
5
  **/*.gem
5
6
  .yardoc/
@@ -1,14 +1,12 @@
1
1
  language: ruby
2
2
 
3
3
  rvm:
4
- - 1.9.3
5
- - 2.0.0
6
- - 2.1
7
- - ruby-head
4
+ - 2.2.6
5
+ - 2.3.3
6
+ - 2.4.2
8
7
 
9
8
  os:
10
9
  - linux
11
- - osx
12
10
 
13
11
  gemfile:
14
12
  - Gemfile
@@ -5,8 +5,8 @@ require File.expand_path('../lib/arison/version', __FILE__)
5
5
  Gem::Specification.new do |gem|
6
6
  gem.name = "arison"
7
7
  gem.version = Arison::VERSION
8
- gem.summary = %q{postgresql command line interface}
9
- gem.description = %q{postgresql command line interface}
8
+ gem.summary = %q{activerecord-import by jsonl, command line interface}
9
+ gem.description = %q{activerecord-import by jsonl, command line interface}
10
10
  gem.license = "MIT"
11
11
  gem.authors = ["Hiroshi Toyama"]
12
12
  gem.email = "toyama0919@gmail.com"
@@ -18,11 +18,11 @@ Gem::Specification.new do |gem|
18
18
  gem.require_paths = ['lib']
19
19
 
20
20
  gem.add_dependency 'thor'
21
- gem.add_dependency 'pg'
22
21
  gem.add_dependency 'activesupport'
23
22
  gem.add_dependency 'activerecord'
24
23
  gem.add_dependency 'activerecord-import'
25
24
 
25
+ gem.add_development_dependency 'sqlite3'
26
26
  gem.add_development_dependency 'bundler'
27
27
  gem.add_development_dependency 'pry', '~> 0.10.1'
28
28
  gem.add_development_dependency 'rake', '~> 10.3.2'
@@ -1,4 +1,14 @@
1
1
  require 'arison/version'
2
+ require 'arison/constants'
3
+ require 'arison/util'
2
4
  require 'arison/core'
3
5
  require 'arison/migration'
6
+ require 'arison/connection'
4
7
  require 'arison/cli'
8
+
9
+ module Arison
10
+ def self.import(table, data, config: DEFAULT_CONFIG_FILE_PATH, profile: DEFAULT_CONFIG_PROFILE)
11
+ con = Connection.new(config: config, profile: profile)
12
+ con.import(table, data)
13
+ end
14
+ end
@@ -1,6 +1,5 @@
1
1
  # -*- coding: utf-8 -*-
2
2
  require "thor"
3
- require 'yaml'
4
3
  require 'json'
5
4
  require 'pp'
6
5
 
@@ -12,21 +11,23 @@ module Arison
12
11
  map '-f' => :query_file
13
12
  map '-b' => :import
14
13
 
15
- class_option :profile, aliases: '-p', type: :string, default: 'default', desc: 'profile by .database.yml'
14
+ class_option :profile, aliases: '-p', type: :string, default: DEFAULT_CONFIG_PROFILE, desc: 'profile by .database.yml'
16
15
  class_option :pretty, aliases: '-P', type: :boolean, default: false, desc: 'pretty print'
17
- class_option :config, aliases: '--config', type: :string, default: "#{ENV['HOME']}/.database.yml", desc: 'config file'
16
+ class_option :config, aliases: '--config', type: :string, default: DEFAULT_CONFIG_FILE_PATH, desc: 'config file'
18
17
  def initialize(args = [], options = {}, config = {})
19
18
  super(args, options, config)
20
19
  @global_options = config[:shell].base.options
21
- @config = YAML.load_file(@global_options['config'])
22
- profile = @config[@global_options['profile']]
23
- @core = Core.new(profile)
20
+
21
+ if @global_options[:config] && File.exist?(@global_options[:config])
22
+ profile = Util.get_profile(@global_options[:config], @global_options[:profile])
23
+ @core = Core.new(profile)
24
+ end
24
25
  end
25
26
 
26
27
  desc 'query_inline', 'Sample task'
27
28
  option :query, aliases: '-q', type: :string, required: true, desc: 'query'
28
29
  def query_inline
29
- puts_json @core.query(options['query'])
30
+ puts_json @core.query(options[:query])
30
31
  end
31
32
 
32
33
  desc 'query_file', 'query_file'
@@ -40,15 +41,18 @@ module Arison
40
41
  end
41
42
 
42
43
  desc 'columns', 'columns'
43
- def columns(table_name)
44
- puts_json @core.columns_with_table_name(table_name)
44
+ option :table, aliases: '-t', type: :string, desc: 'table'
45
+ def columns
46
+ puts_json @core.columns_with_table_name(options[:table])
45
47
  end
46
48
 
47
- desc 'import', 'import'
48
- def import(table)
49
- data = @core.parse_json(STDIN.read)
50
- @core.create_table(table, data)
51
- @core.import(table, data)
49
+ desc 'import', 'import json data.'
50
+ option :table, aliases: '-t', type: :string, desc: 'table'
51
+ option :data, type: :hash, desc: 'buffer'
52
+ def import
53
+ data = (options[:data] ? options[:data] : nil) || Util.parse_json(STDIN.read)
54
+ data = [data] if data.class == Hash
55
+ @core.import(options[:table], data)
52
56
  end
53
57
 
54
58
  desc 'info', 'info'
@@ -0,0 +1,12 @@
1
+ module Arison
2
+ class Connection
3
+ def initialize(config: DEFAULT_CONFIG_FILE_PATH, profile: DEFAULT_CONFIG_PROFILE)
4
+ profile = Util.get_profile(config, profile)
5
+ @core = Core.new(profile)
6
+ end
7
+
8
+ def import(table, data)
9
+ @core.import(table, data)
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,4 @@
1
+ module Arison
2
+ DEFAULT_CONFIG_FILE_PATH = "#{ENV['HOME']}/.database.yml"
3
+ DEFAULT_CONFIG_PROFILE = "default"
4
+ end
@@ -34,6 +34,7 @@ module Arison
34
34
  end
35
35
 
36
36
  def import(table_name, data)
37
+ create_table(table_name, data)
37
38
  klass = get_class(table_name)
38
39
  limits = get_limit_hash(klass)
39
40
  instances = []
@@ -88,13 +89,13 @@ module Arison
88
89
 
89
90
  def get_add_column_dsl(table_name, column_name, record)
90
91
  dsl = %Q{
91
- add_column "#{table_name}", "#{column_name}", :#{get_type(column_name, record['column_name'])}
92
+ add_column "#{table_name}", "#{column_name}", :#{Util.get_type(column_name, record['column_name'])}
92
93
  }
93
94
  end
94
95
 
95
96
  def create_table(table_name, data)
96
97
  first = data.class == Array ? data.first : data
97
- if @connection.data_source_exists?(table_name)
98
+ if ActiveRecord::Base.connection.data_source_exists?(table_name.to_sym)
98
99
  add_column_live(table_name, data)
99
100
  return
100
101
  end
@@ -103,18 +104,6 @@ module Arison
103
104
  add_column_live(table_name, data)
104
105
  end
105
106
 
106
- def parse_json(buffer)
107
- begin
108
- data = JSON.parse(buffer)
109
- rescue => e
110
- data = []
111
- buffer.lines.each do |line|
112
- data << JSON.parse(line)
113
- end
114
- end
115
- data
116
- end
117
-
118
107
  def get_class(table_name)
119
108
  define_class(table_name)
120
109
  table_name.camelcase.constantize
@@ -132,41 +121,11 @@ module Arison
132
121
 
133
122
  def get_column_schema(hash)
134
123
  hash.map do |k, v|
135
- type = get_type(k, v)
124
+ type = Util.get_type(k, v)
136
125
  %Q{t.#{type} "#{k}"} unless type.nil?
137
126
  end
138
127
  end
139
128
 
140
- def get_type(k, v)
141
- if v.nil?
142
- %Q{string}
143
- elsif k =~ /^id$/i
144
- nil
145
- elsif v.class == String
146
- to_time_or_nil(v).nil? ? %Q{string} : %Q{datetime}
147
- elsif v.class == TrueClass || v.class == FalseClass
148
- %Q{boolean}
149
- elsif v.class == Fixnum
150
- %Q{integer}
151
- elsif v.class == Float
152
- %Q{float}
153
- elsif v.class == Array || v.class == Hash
154
- %Q{text}
155
- elsif v.respond_to?(:strftime)
156
- %Q{datetime}
157
- end
158
- end
159
-
160
- def to_time_or_nil(value)
161
- return nil if value.slice(0, 4) !~ /^[0-9][0-9][0-9][0-9]/
162
- begin
163
- time = value.to_time
164
- time.to_i >= 0 ? time : nil
165
- rescue => e
166
- nil
167
- end
168
- end
169
-
170
129
  def get_limit_hash(klass)
171
130
  columns(klass).inject({}){ |result, column|
172
131
  result[column['name']] = column['limit']
@@ -1,5 +1,5 @@
1
1
  module Arison
2
- class Migration < ActiveRecord::Migration
2
+ class Migration < ActiveRecord::Migration[4.2]
3
3
  def self.run_dsl(dsl)
4
4
  eval dsl
5
5
  end
@@ -0,0 +1,52 @@
1
+ require 'yaml'
2
+
3
+ module Arison
4
+ class Util
5
+ def self.get_profile(config_path, profile)
6
+ @config = YAML.load_file(config_path)
7
+ @config[profile]
8
+ end
9
+
10
+ def self.parse_json(buffer)
11
+ begin
12
+ data = JSON.parse(buffer)
13
+ rescue => e
14
+ data = []
15
+ buffer.lines.each do |line|
16
+ data << JSON.parse(line)
17
+ end
18
+ end
19
+ data
20
+ end
21
+
22
+ def self.get_type(k, v)
23
+ if v.nil?
24
+ %Q{string}
25
+ elsif k =~ /^id$/i
26
+ nil
27
+ elsif v.class == String
28
+ to_time_or_nil(v).nil? ? %Q{string} : %Q{datetime}
29
+ elsif v.class == TrueClass || v.class == FalseClass
30
+ %Q{boolean}
31
+ elsif v.class == Fixnum
32
+ %Q{integer}
33
+ elsif v.class == Float
34
+ %Q{float}
35
+ elsif v.class == Array || v.class == Hash
36
+ %Q{text}
37
+ elsif v.respond_to?(:strftime)
38
+ %Q{datetime}
39
+ end
40
+ end
41
+
42
+ def self.to_time_or_nil(value)
43
+ return nil if value.slice(0, 4) !~ /^[0-9][0-9][0-9][0-9]/
44
+ begin
45
+ time = value.to_time
46
+ time.to_i >= 0 ? time : nil
47
+ rescue => e
48
+ nil
49
+ end
50
+ end
51
+ end
52
+ end
@@ -1,4 +1,4 @@
1
1
  module Arison
2
2
  # arison version
3
- VERSION = "0.1.3"
3
+ VERSION = "0.2.0"
4
4
  end
@@ -6,10 +6,6 @@ describe Arison::CLI do
6
6
  end
7
7
 
8
8
  it "should stdout sample" do
9
- output = capture_stdout do
10
- Arison::CLI.start(['sample'])
11
- end
12
- output.should == "This is your new task\n"
13
9
  end
14
10
 
15
11
  after do
@@ -1,15 +1,65 @@
1
1
  require 'spec_helper'
2
2
  require 'arison'
3
+ require 'fileutils'
3
4
 
4
5
  describe Arison::Core do
5
- before do
6
- @core = Core.new
6
+
7
+ before(:all) do
8
+ FileUtils.rm( 'tmp/core.db', {:force=>true} )
9
+ @core = get_core
7
10
  end
8
11
 
9
12
  it "core not nil" do
10
13
  @core.should_not nil
11
14
  end
12
15
 
13
- after do
16
+ it "core import" do
17
+ data = [
18
+ { "column_1" => 1, "column_2" => "string_1", "column_3" => 0.1 },
19
+ { "column_1" => 2, "column_2" => "string_2" },
20
+ ]
21
+ get_core.import('test', data)
22
+ end
23
+
24
+ it "core query record 1" do
25
+ results = get_core.query('select * from test')
26
+ record = results.first
27
+ expect(record['id']).to eq(1)
28
+ expect(record['column_1']).to eq(1)
29
+ expect(record['column_2']).to eq("string_1")
30
+ expect(record['column_3']).to eq(0.1)
31
+ end
32
+
33
+ it "core query record 2" do
34
+ results = get_core.query('select * from test')
35
+ record = results[1]
36
+ expect(record['id']).to eq(2)
37
+ expect(record['column_1']).to eq(2)
38
+ expect(record['column_2']).to eq("string_2")
39
+ expect(record['column_3']).to eq(nil)
40
+ end
41
+
42
+ it "core columns" do
43
+ columns = get_core.columns_with_table_name("test")
44
+ expect(columns[0]['name']).to eq('id')
45
+ expect(columns[0]['sql_type_metadata']['type']).to eq('integer')
46
+
47
+ expect(columns[1]['name']).to eq('column_1')
48
+ expect(columns[1]['sql_type_metadata']['type']).to eq('integer')
49
+
50
+ expect(columns[2]['name']).to eq('column_2')
51
+ expect(columns[2]['sql_type_metadata']['type']).to eq('string')
52
+
53
+ expect(columns[3]['name']).to eq('column_3')
54
+ expect(columns[3]['sql_type_metadata']['type']).to eq('float')
55
+
56
+ expect(columns[4]['name']).to eq('created_at')
57
+ expect(columns[4]['sql_type_metadata']['type']).to eq('datetime')
58
+
59
+ expect(columns[5]['name']).to eq('updated_at')
60
+ expect(columns[5]['sql_type_metadata']['type']).to eq('datetime')
61
+ end
62
+
63
+ after(:all) do
14
64
  end
15
65
  end
@@ -22,3 +22,11 @@ ensure
22
22
  $stderr = STDERR
23
23
  end
24
24
 
25
+ def get_core
26
+ profile = {
27
+ adapter: "sqlite3",
28
+ database: 'tmp/core.db',
29
+ timeout: 500
30
+ }
31
+ Core.new(profile)
32
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: arison
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Hiroshi Toyama
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-04-04 00:00:00.000000000 Z
11
+ date: 2018-01-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: thor
@@ -25,7 +25,7 @@ dependencies:
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0'
27
27
  - !ruby/object:Gem::Dependency
28
- name: pg
28
+ name: activesupport
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - ">="
@@ -39,7 +39,7 @@ dependencies:
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
41
  - !ruby/object:Gem::Dependency
42
- name: activesupport
42
+ name: activerecord
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - ">="
@@ -53,7 +53,7 @@ dependencies:
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
55
  - !ruby/object:Gem::Dependency
56
- name: activerecord
56
+ name: activerecord-import
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - ">="
@@ -67,13 +67,13 @@ dependencies:
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0'
69
69
  - !ruby/object:Gem::Dependency
70
- name: activerecord-import
70
+ name: sqlite3
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
73
  - - ">="
74
74
  - !ruby/object:Gem::Version
75
75
  version: '0'
76
- type: :runtime
76
+ type: :development
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
@@ -178,7 +178,7 @@ dependencies:
178
178
  - - "~>"
179
179
  - !ruby/object:Gem::Version
180
180
  version: '0.8'
181
- description: postgresql command line interface
181
+ description: activerecord-import by jsonl, command line interface
182
182
  email: toyama0919@gmail.com
183
183
  executables:
184
184
  - arison
@@ -199,8 +199,11 @@ files:
199
199
  - bin/arison
200
200
  - lib/arison.rb
201
201
  - lib/arison/cli.rb
202
+ - lib/arison/connection.rb
203
+ - lib/arison/constants.rb
202
204
  - lib/arison/core.rb
203
205
  - lib/arison/migration.rb
206
+ - lib/arison/util.rb
204
207
  - lib/arison/version.rb
205
208
  - spec/arison_spec.rb
206
209
  - spec/cli_spec.rb
@@ -226,10 +229,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
226
229
  version: '0'
227
230
  requirements: []
228
231
  rubyforge_project:
229
- rubygems_version: 2.6.11
232
+ rubygems_version: 2.7.3
230
233
  signing_key:
231
234
  specification_version: 4
232
- summary: postgresql command line interface
235
+ summary: activerecord-import by jsonl, command line interface
233
236
  test_files:
234
237
  - spec/arison_spec.rb
235
238
  - spec/cli_spec.rb