arison 0.1.3 → 0.2.0

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 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