sunstone 2.0.1 → 2.0.4

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
2
  SHA1:
3
- metadata.gz: e7571ad32bf7197a480c1f59c5a5158ce0f1d492
4
- data.tar.gz: d10ec4207fc78c2e6ec8d3dee815469a7b4b868a
3
+ metadata.gz: 9d7b7cb926a0045ee4a771a87ce5f3f3096fb035
4
+ data.tar.gz: 0edf0869c5ac58e901579d47b8979ed4ecf98c39
5
5
  SHA512:
6
- metadata.gz: 121532495ba520b5e66de7cc054e9fc1958076c6953c2dc10e710816d9944fc76e940a4dd6018cea3a5599aa43faecdee9c81259fd7d569ea659abcbc6ccb4d9
7
- data.tar.gz: 815d5f4f6a5c89a1552b8dc8cde45ac8cf508608b5403c75f4516569fd834f2f3becf1fa3af3cf25c622cba2d3ade471dca215029d4aa2230a9b46fc916e730b
6
+ metadata.gz: 2bf1d1921cf1cad5967be3398b0a49de76cac94b65bc268952c549b994b1e48487913b062a29e33f4968c84fecb90aec0691f24cce06261c61f0a7cf2bce5ddb
7
+ data.tar.gz: 8bce1e614955c036c7d46df1c109b2650dec40ad5d0b3168d9c33963005c94f91a80a6737d1b00b045ffafea006efc43faaef28f66053f811975e0efa33e2f46
@@ -1,52 +1,48 @@
1
- # module ActiveRecord::Associations::Builder
2
- # class HasAndBelongsToMany # :nodoc:
3
- #
4
- # def through_model
5
- # habtm = JoinTableResolver.build lhs_model, association_name, options
6
- #
7
- # join_model = Class.new(lhs_model.base_class.superclass) { # Don't use ActiveRecord::Base here because that might not be the abstract class that we need and the connection may be different
8
- # class << self;
9
- # attr_accessor :left_model
10
- # attr_accessor :name
11
- # attr_accessor :table_name_resolver
12
- # attr_accessor :left_reflection
13
- # attr_accessor :right_reflection
14
- # end
15
- #
16
- # def self.table_name
17
- # table_name_resolver.join_table
18
- # end
19
- #
20
- # def self.compute_type(class_name)
21
- # left_model.compute_type class_name
22
- # end
23
- #
24
- # def self.add_left_association(name, options)
25
- # belongs_to name, options
26
- # self.left_reflection = _reflect_on_association(name)
27
- # end
28
- #
29
- # def self.add_right_association(name, options)
30
- # rhs_name = name.to_s.singularize.to_sym
31
- # belongs_to rhs_name, options
32
- # self.right_reflection = _reflect_on_association(rhs_name)
33
- # end
34
- #
35
- # def self.retrieve_connection
36
- # left_model.retrieve_connection
37
- # end
38
- #
39
- # }
40
- #
41
- # join_model.name = "HABTM_#{association_name.to_s.camelize}"
42
- # join_model.table_name_resolver = habtm
43
- # join_model.class_resolver = lhs_model
44
- # join_model.primary_key = nil
45
- #
46
- # join_model.add_left_association :left_side, anonymous_class: lhs_model
47
- # join_model.add_right_association association_name, belongs_to_options(options)
48
- # join_model
49
- # end
50
- #
51
- # end
52
- # end
1
+ module ActiveRecord::Associations::Builder
2
+ class HasAndBelongsToMany # :nodoc:
3
+
4
+ def through_model
5
+ habtm = JoinTableResolver.build lhs_model, association_name, options
6
+
7
+ join_model = Class.new(lhs_model.base_class.superclass) {
8
+ class << self;
9
+ attr_accessor :class_resolver
10
+ attr_accessor :name
11
+ attr_accessor :table_name_resolver
12
+ attr_accessor :left_reflection
13
+ attr_accessor :right_reflection
14
+ end
15
+
16
+ def self.table_name
17
+ table_name_resolver.join_table
18
+ end
19
+
20
+ def self.compute_type(class_name)
21
+ class_resolver.compute_type class_name
22
+ end
23
+
24
+ def self.add_left_association(name, options)
25
+ belongs_to name, options
26
+ self.left_reflection = _reflect_on_association(name)
27
+ end
28
+
29
+ def self.add_right_association(name, options)
30
+ rhs_name = name.to_s.singularize.to_sym
31
+ belongs_to rhs_name, options
32
+ self.right_reflection = _reflect_on_association(rhs_name)
33
+ end
34
+
35
+ }
36
+
37
+ join_model.name = "HABTM_#{association_name.to_s.camelize}"
38
+ join_model.table_name_resolver = habtm
39
+ join_model.class_resolver = lhs_model
40
+ join_model.primary_key = nil
41
+
42
+ join_model.add_left_association :left_side, anonymous_class: lhs_model
43
+ join_model.add_right_association association_name, belongs_to_options(options)
44
+ join_model
45
+ end
46
+
47
+ end
48
+ end
@@ -1,28 +1,28 @@
1
- # module ActiveRecord
2
- # module Calculations
3
- # def pluck(*column_names)
4
- #
5
- # # column_names.map! do |column_name|
6
- # # if column_name.is_a?(Symbol) && attribute_alias?(column_name)
7
- # # attribute_alias(column_name)
8
- # # else
9
- # # column_name.to_s
10
- # # end
11
- # # end
12
- #
13
- # if has_include?(column_names.first)
14
- # construct_relation_for_association_calculations.pluck(*column_names)
15
- # else
16
- # relation = spawn
17
- # relation.select_values = column_names.map { |cn|
18
- # columns_hash.key?(cn) ? arel_table[cn] : cn
19
- # }
20
- #
21
- # result = klass.connection.exec_query(relation.arel, nil, relation.arel.bind_values + bind_values)
22
- # result.cast_values(klass.column_types)
23
- # end
24
- # end
25
- #
26
- # end
27
- # end
28
- #
1
+ module ActiveRecord
2
+ module Calculations
3
+ def pluck(*column_names)
4
+
5
+ # column_names.map! do |column_name|
6
+ # if column_name.is_a?(Symbol) && attribute_alias?(column_name)
7
+ # attribute_alias(column_name)
8
+ # else
9
+ # column_name.to_s
10
+ # end
11
+ # end
12
+
13
+ if has_include?(column_names.first)
14
+ construct_relation_for_association_calculations.pluck(*column_names)
15
+ else
16
+ relation = spawn
17
+ relation.select_values = column_names.map { |cn|
18
+ columns_hash.key?(cn) ? arel_table[cn] : cn
19
+ }
20
+
21
+ result = klass.connection.exec_query(relation.arel, nil, relation.arel.bind_values + bind_values)
22
+ result.cast_values(klass.column_types)
23
+ end
24
+ end
25
+
26
+ end
27
+ end
28
+
@@ -1,29 +1,23 @@
1
- # module ActiveRecord
2
- # class PredicateBuilder # :nodoc:
3
- #
4
- # def self.expand(klass, table, column, value)
5
- # queries = []
6
- #
7
- # # In standard Rails where takes :table => { columns }, but in sunstone we
8
- # # can can do nested tables eg: where(:properties => { :regions => {:id => 1}})
9
- # if klass && reflection = klass._reflect_on_association(column)
10
- # base_class = polymorphic_base_class_from_value(value)
11
- #
12
- # if reflection.polymorphic? && base_class
13
- # queries << build(table[reflection.foreign_type], base_class)
14
- # end
15
- #
16
- # column = reflection.foreign_key
17
- #
18
- # if base_class
19
- # primary_key = reflection.association_primary_key(base_class)
20
- # value = convert_value_to_association_ids(value, primary_key)
21
- # end
22
- # end
23
- #
24
- # queries << build(table[column], value)
25
- # queries
26
- # end
27
- #
28
- # end
29
- # end
1
+ module ActiveRecord
2
+ class PredicateBuilder # :nodoc:
3
+
4
+ def self.expand(klass, table, column, value)
5
+ queries = []
6
+
7
+ # In standard Rails where takes :table => { columns }, but in sunstone we
8
+ # can can do nested tables eg: where(:properties => { :regions => {:id => 1}})
9
+ if klass && reflection = klass._reflect_on_association(column)
10
+ if reflection.polymorphic? && base_class = polymorphic_base_class_from_value(value)
11
+ queries << build(table[reflection.foreign_type], base_class)
12
+ end
13
+
14
+ # column = reflection.foreign_key
15
+ column # Don't need Rails to assume we are referencing a table
16
+ end
17
+
18
+ queries << build(table[column], value)
19
+ queries
20
+ end
21
+
22
+ end
23
+ end
@@ -0,0 +1,7 @@
1
+ class NilClass
2
+
3
+ def to_query(namespace)
4
+ namespace
5
+ end
6
+
7
+ end
@@ -0,0 +1,31 @@
1
+ require 'rgeo'
2
+
3
+ module ActiveRecord
4
+ module ConnectionAdapters
5
+ module Sunstone
6
+ module Type
7
+ class EWKB < ActiveRecord::Type::Value
8
+
9
+ def type
10
+ :ewkb
11
+ end
12
+
13
+ def type_cast_for_database(value)
14
+ if value
15
+ ::RGeo::WKRep::WKBGenerator.new(hex_format: true, type_format: :ewkb, emit_ewkb_srid: true).generate(value)
16
+ end
17
+ end
18
+
19
+ private
20
+
21
+ def cast_value(string)
22
+ return string unless string.is_a?(::String)
23
+
24
+ ::RGeo::WKRep::WKBParser.new(RGeo::Geos.factory_generator, support_ewkb: true).parse(string)
25
+ end
26
+
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
@@ -8,11 +8,12 @@ require 'active_record/connection_adapters/sunstone/column'
8
8
 
9
9
  require 'active_record/connection_adapters/sunstone/type/date_time'
10
10
  require 'active_record/connection_adapters/sunstone/type/array'
11
+ require 'active_record/connection_adapters/sunstone/type/ewkb'
11
12
 
12
13
  module ActiveRecord
13
14
  module ConnectionHandling # :nodoc:
14
15
 
15
- VALID_SUNSTONE_CONN_PARAMS = [:site, :host, :port, :api_key, :use_ssl, :user_agent]
16
+ VALID_SUNSTONE_CONN_PARAMS = [:site, :host, :port, :api_key, :use_ssl, :user_agent, :ca_cert]
16
17
 
17
18
  # Establishes a connection to the database that's used by all Active Record
18
19
  # objects
@@ -158,6 +159,7 @@ module ActiveRecord
158
159
  m.register_type 'decimal', Type::Decimal.new
159
160
  m.register_type 'datetime', Sunstone::Type::DateTime.new
160
161
  m.register_type 'hash', Type::Value.new
162
+ m.register_type 'ewkb', Sunstone::Type::EWKB.new
161
163
  end
162
164
 
163
165
  def exec(arel, name='SAR', binds=[])
@@ -18,6 +18,8 @@ require File.expand_path(File.join(__FILE__, '../../ext/active_record/relation')
18
18
  require File.expand_path(File.join(__FILE__, '../../ext/active_record/query_methods'))
19
19
  # require File.expand_path(File.join(__FILE__, '../../ext/active_record/associations/builder/has_and_belongs_to_many'))
20
20
 
21
+ require File.expand_path(File.join(__FILE__, '../../ext/active_support/core_ext/object/to_query'))
22
+
21
23
  require File.expand_path(File.join(__FILE__, '../../ext/arel/select_manager'))
22
24
  require File.expand_path(File.join(__FILE__, '../../ext/arel/nodes/eager_load'))
23
25
  require File.expand_path(File.join(__FILE__, '../../ext/arel/nodes/select_statement'))
@@ -36,6 +36,12 @@ module Sunstone
36
36
 
37
37
  @connection = Net::HTTP.new(host, port)
38
38
  @connection.use_ssl = use_ssl
39
+ if use_ssl && config[:ca_cert]
40
+ @connection.cert_store = OpenSSL::X509::Store.new
41
+ @connection.cert_store.add_cert(OpenSSL::X509::Certificate.new(File.read(config[:ca_cert])))
42
+ end
43
+
44
+ true
39
45
  end
40
46
 
41
47
  # Ping the Sunstone. If everything is configured and operating correctly
@@ -1,3 +1,3 @@
1
1
  module Sunstone
2
- VERSION = '2.0.1'
2
+ VERSION = '2.0.4'
3
3
  end
@@ -58,6 +58,12 @@ class QueryTest < Minitest::Test
58
58
  assert_equal [], Ship.where(:id => 10).to_a
59
59
  end
60
60
 
61
+ test '::where column is nil' do
62
+ stub_request(:get, URI::escape('malomalo.io/ships?where[leased_at]')).to_return(body: [].to_json)
63
+
64
+ assert_equal [], Ship.where(:leased_at => nil).to_a
65
+ end
66
+
61
67
  test '::where on belongs_to relation' do
62
68
  stub_request(:get, URI::escape('malomalo.io/ships?where[fleet][id]=1')).to_return(body: [].to_json)
63
69
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sunstone
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.1
4
+ version: 2.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jon Bracy
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-08-31 00:00:00.000000000 Z
11
+ date: 2015-12-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -269,6 +269,7 @@ files:
269
269
  - ext/active_record/relation.rb
270
270
  - ext/active_record/relation/predicate_builder.rb
271
271
  - ext/active_record/statement_cache.rb
272
+ - ext/active_support/core_ext/object/to_query.rb
272
273
  - ext/arel/nodes/eager_load.rb
273
274
  - ext/arel/nodes/select_statement.rb
274
275
  - ext/arel/select_manager.rb
@@ -277,6 +278,7 @@ files:
277
278
  - lib/active_record/connection_adapters/sunstone/schema_statements.rb
278
279
  - lib/active_record/connection_adapters/sunstone/type/array.rb
279
280
  - lib/active_record/connection_adapters/sunstone/type/date_time.rb
281
+ - lib/active_record/connection_adapters/sunstone/type/ewkb.rb
280
282
  - lib/active_record/connection_adapters/sunstone_adapter.rb
281
283
  - lib/arel/collectors/sunstone.rb
282
284
  - lib/arel/visitors/sunstone.rb