activerecord-pickin 0.0.1 → 0.9.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.
data/README.md CHANGED
@@ -22,9 +22,32 @@ FromClass.relation.pickin(IntoClass, {column: value or column})
22
22
 
23
23
  Example:
24
24
 
25
- Map.where(stage_id: id).pickin(GameMap, {game_stage_id: @res.id, type: :type, x: :x, y: :y, created_at: :created_at, updated_at: :updated_at})
25
+ ### for over version 0.9.0
26
26
 
27
- INSERT INTO 'game_maps' ("game_stage_id", "type", "x", "y", "created_at", "updated_at") SELECT 24, type, x, y, created_at, updated_at FROM "maps" WHERE "maps"."stage_id" = 1
27
+ Map.where(stage_id: 1).pickin(GameMap, {game_stage_id: 24}, [:id])
28
+
29
+ INSERT INTO 'game_maps' ("id", "game_stage_id", "type", "x", "y", "created_at", "updated_at") SELECT NULL, '24', "type", "x", "y", "created_at", "updated_at" FROM "maps" WHERE "maps"."stage_id" = 1
30
+
31
+ Map.where(stage_id: 1).select([:type]).pickin(GameMap, {game_stage_id: 24}, [:id])
32
+
33
+ INSERT INTO 'game_maps' ("type") SELECT "type" FROM "maps" WHERE "maps"."stage_id" = 1
34
+
35
+ ### for only version 0.0.1
36
+
37
+ Map.where(stage_id: 1).pickin(GameMap, {game_stage_id: 24, type: :type, x: :x, y: :y, created_at: :created_at, updated_at: :updated_at})
38
+
39
+ INSERT INTO 'game_maps' ("game_stage_id", "type", "x", "y", "created_at", "updated_at") SELECT 24, type, x, y, created_at, updated_at FROM "maps" WHERE "maps"."stage_id" = 1
40
+
41
+ ## Change log
42
+
43
+ ### version 0.9.0
44
+
45
+ * Release beta
46
+ * Specification was changed. The specified column was targeted. but now used to override the value of a column in the SELECT for.
47
+
48
+ ### version 0.0.1
49
+
50
+ * Release alpha
28
51
 
29
52
  ## Contributing
30
53
 
@@ -16,4 +16,5 @@ Gem::Specification.new do |gem|
16
16
  gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
17
17
  gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
18
18
  gem.require_paths = ["lib"]
19
+ gem.add_dependency 'activerecord'
19
20
  end
@@ -2,18 +2,50 @@ require 'active_record/relation'
2
2
  module ActiveRecord
3
3
  module Pickin
4
4
  module Relation
5
- def pickin into_class, columns = {}
5
+ def pickin into_class, override = {}, ignore = []
6
6
  insert_arel = Arel::InsertManager.new(arel.engine)
7
7
  insert_arel.into into_class.table_name
8
- if columns.empty?
9
- insert_arel.ast.columns = into_class.map { |c| Arel::Attributes::Attribute.new insert_arel, c.name }
8
+
9
+ if self.select_values.empty?
10
+ columns = into_class.columns
10
11
  else
11
- insert_arel.ast.columns = columns.keys.map { |c| Arel::Attributes::Attribute.new insert_arel, c }
12
+ columns = self.select_values
12
13
  end
13
- columns.map { |c| c.to_s }
14
- select_arel = self.select(columns.values)
14
+
15
+ insert_arel.ast.columns = columns.map do |c|
16
+ unless c.class == Symbol
17
+ c = c.name
18
+ end
19
+ Arel::Attributes::Attribute.new(insert_arel, c)
20
+ end
21
+
22
+ select_column = self.get_select_column columns, override, ignore
23
+ self.select_values = []
24
+ select_arel = self.select(select_column)
15
25
  @klass.connection.execute "#{insert_arel.to_sql} #{select_arel.to_sql}"
16
26
  end
27
+
28
+ def get_select_column target, override, ignore
29
+ target.map do |c|
30
+ unless c.class == Symbol
31
+ c = c.name.to_sym
32
+ end
33
+ convert_element(c, override) unless ignore.include? c
34
+ end
35
+ end
36
+
37
+ def convert_element column, override
38
+ if override.keys.include?(column)
39
+ if override[column].class == Symbol
40
+ @klass.connection.quote_column_name override[column]
41
+ else
42
+ "'#{override[column]}'"
43
+ end
44
+ else
45
+ @klass.connection.quote_column_name column.to_s
46
+ end
47
+ end
48
+
17
49
  end
18
50
  end
19
51
  end
@@ -1,5 +1,5 @@
1
1
  module Activerecord
2
2
  module Pickin
3
- VERSION = "0.0.1"
3
+ VERSION = "0.9.0"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: activerecord-pickin
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.9.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,8 +9,19 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-01-28 00:00:00.000000000 Z
13
- dependencies: []
12
+ date: 2013-01-30 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: activerecord
16
+ requirement: &70262068386340 !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: *70262068386340
14
25
  description: INSERT SELECT Query For ActiveRecord
15
26
  email:
16
27
  - info@miio.info