fastapi 0.1.16 → 0.1.17

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.
Files changed (3) hide show
  1. checksums.yaml +4 -4
  2. data/lib/fastapi.rb +131 -86
  3. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: af20b323da9210dc71e62a30ea44667d3376da1d
4
- data.tar.gz: f3de2e210499133ad71a998657e28f0f7b817191
3
+ metadata.gz: 832572badad40969dcb8f6d057c0027d1715475d
4
+ data.tar.gz: 5ee51023d5100554b269cb038ba86083abca8667
5
5
  SHA512:
6
- metadata.gz: 55fbc45d21255e8a7a6090f3eb86d6dae5299074ac91f352c1343567a99f95130c06e14020a8777c5306dd1b30496e01960990dddde483d332a8aba08f1b30a5
7
- data.tar.gz: 208b4dc1fe024a49a84b20476faee6b1935302f4e54e36cf7da6f3dfa354cd89c9874fb098131da4b0694c882e83b53d66255a31df13566401189e601ac44a73
6
+ metadata.gz: 99cb06224e1c33548b2feb9c788d30f528f66dfe3c314dcc6f0930475eff980afd7213a3d9a08b5d6813bcee6be82c8758f8e50d182569e2f28640a4c5e163ca
7
+ data.tar.gz: 7cd11d4be9b02ba8f1d261b35411e76ed129f924838f791c92af706b85b00249760bbde389a2fb7516937a6d37eccd5673c0fdb97f46bedfc83bd5faaae7175a
data/lib/fastapi.rb CHANGED
@@ -536,21 +536,36 @@ class FastAPI
536
536
  filters[:__order] = [:created_at, :DESC]
537
537
  end
538
538
 
539
+ params = []
540
+
541
+ if filters.has_key? :__params
542
+ params = filters[:__params]
543
+ filters.delete :__params
544
+ end
545
+
546
+ if not params.is_a? Array and not params.is_a? Hash
547
+ params = [params]
548
+ end
539
549
 
540
550
  filters.each do |key, value|
541
- if [:__order, :__offset, :__count].include? key
551
+
552
+ if [:__order, :__offset, :__count, :__params].include? key
542
553
  next
543
554
  end
555
+
544
556
  found_index = key.to_s.rindex('__')
545
557
  key_root = found_index.nil? ? key : key.to_s[0...found_index].to_sym
558
+
546
559
  if not self_obj.column_names.include? key_root.to_s
547
560
  if not model.nil? or not (
548
561
  @model.reflect_on_all_associations(:has_many).map(&:name).include? key_root or
549
- @model.reflect_on_all_associations(:belongs_to).map(&:name).include? key_root
562
+ @model.reflect_on_all_associations(:belongs_to).map(&:name).include? key_root or
563
+ @model.reflect_on_all_associations(:has_one).map(&:name).include? key_root
550
564
  )
551
565
  raise 'Filter "' + key.to_s + '" not supported'
552
566
  end
553
567
  end
568
+
554
569
  end
555
570
 
556
571
 
@@ -562,130 +577,155 @@ class FastAPI
562
577
  order_has_many = {}
563
578
  order_belongs_to = {}
564
579
 
565
- if filters.size > 0
580
+ # get the order first
566
581
 
567
- filters.each do |key, value|
582
+ if filters.has_key? :__order
568
583
 
569
- if key == :__order
584
+ value = filters[:__order]
570
585
 
571
- if model.nil? and (value.is_a? String or value.is_a? Symbol) and @model.fastapi_custom_order.has_key? value.to_sym
586
+ order = value.clone()
572
587
 
573
- order = @model.fastapi_custom_order[value.to_sym].gsub('self.', self_string_table + '.')
588
+ if order.is_a? String
589
+ order = order.split(',')
590
+ if order.size < 2
591
+ order << 'ASC'
592
+ end
593
+ elsif order.is_a? Array
594
+ order = order.map { |v| v.to_s }
595
+ while order.size < 2
596
+ order << ''
597
+ end
598
+ else
599
+ order = ['', '']
600
+ end
574
601
 
575
- else
602
+ if not ['ASC', 'DESC'].include? order[1]
603
+ order[1] = 'ASC'
604
+ end
576
605
 
577
- order = value.clone()
606
+ if model.nil? and @model.fastapi_custom_order.has_key? order[0].to_sym
578
607
 
579
- if order.is_a? String
580
- order = order.split(',')
581
- if order.size < 2
582
- order << 'ASC'
583
- end
584
- elsif order.is_a? Array
585
- order = order.map { |v| v.to_s }
586
- while order.size < 2
587
- order << ''
588
- end
589
- else
590
- order = ['', '']
591
- end
608
+ order[0] = @model.fastapi_custom_order[order[0].to_sym].gsub('self.', self_string_table + '.')
592
609
 
593
- if not self_obj.column_names.include? order[0]
594
- order = nil
595
- else
596
- order[0] = self_string_table + '.' + order[0]
597
- if not ['ASC', 'DESC'].include? order[1]
598
- order[1] = 'ASC'
599
- end
600
- order = order.join(' ')
601
- end
610
+ if params.is_a? Array
602
611
 
603
- end
612
+ order[0] = order[0].gsub(/\$params\[([\w\d_-]+)\]/) { ActiveRecord::Base.connection.quote(params[Regexp.last_match[1].to_i].to_s) }
604
613
 
605
614
  else
606
615
 
607
- field = key.to_s
616
+ order[0] = order[0].gsub(/\$params\[([\w\d_-]+)\]/) { ActiveRecord::Base.connection.quote(params[Regexp.last_match[1]].to_s) }
608
617
 
609
- if field.rindex('__').nil?
610
- comparator = 'is'
611
- else
618
+ end
612
619
 
613
- comparator = field[(field.rindex('__') + 2)..-1]
614
- field = field[0...field.rindex('__')]
620
+ order[0] = '(' + order[0] + ')'
621
+ order = order.join(' ')
615
622
 
616
- if not @@api_comparator_list.include? comparator
617
- next # skip dis bro
618
- end
623
+ else
619
624
 
620
- end
625
+ if not self_obj.column_names.include? order[0]
626
+
627
+ order = nil
628
+
629
+ else
630
+
631
+ order[0] = self_string_table + '.' + order[0]
632
+ order = order.join(' ')
621
633
 
622
- if model.nil?
634
+ end
623
635
 
624
- if self_obj.reflect_on_all_associations(:has_many).map(&:name).include? key
636
+ end
625
637
 
626
- filter_result = parse_filters(value, safe, field.singularize.classify.constantize)
627
- # puts filter_result
628
- filter_has_many[key] = filter_result[:main]
629
- order_has_many[key] = filter_result[:main_order]
638
+ filters.delete :__order
630
639
 
631
- elsif self_obj.reflect_on_all_associations(:belongs_to).map(&:name).include? key
640
+ end
632
641
 
633
- filter_result = parse_filters(value, safe, field.singularize.classify.constantize)
634
- # puts filter_result
635
- filter_belongs_to[key] = filter_result[:main]
636
- order_belongs_to[key] = filter_result[:main_order]
642
+ if filters.size > 0
637
643
 
638
- elsif self_obj.column_names.include? field
644
+ filters.each do |key, value|
639
645
 
640
- if self_obj.columns_hash[field].type == :boolean
646
+ field = key.to_s
641
647
 
642
- if !!value != value
648
+ if field.rindex('__').nil?
643
649
 
644
- bool_lookup = {
645
- 't' => true,
646
- 'f' => false,
647
- 'true' => true,
648
- 'false' => false
649
- }
650
+ comparator = 'is'
650
651
 
651
- value = value.to_s.downcase
652
+ else
652
653
 
653
- if bool_lookup.has_key? value
654
- value = bool_lookup[value]
655
- else
656
- value = true
657
- end
654
+ comparator = field[(field.rindex('__') + 2)..-1]
655
+ field = field[0...field.rindex('__')]
658
656
 
659
- end
657
+ if not @@api_comparator_list.include? comparator
658
+ next # skip dis bro
659
+ end
660
+
661
+ end
662
+
663
+ if model.nil?
664
+
665
+ if self_obj.reflect_on_all_associations(:has_many).map(&:name).include? key
666
+
667
+ filter_result = parse_filters(value, safe, field.singularize.classify.constantize)
668
+ # puts filter_result
669
+ filter_has_many[key] = filter_result[:main]
670
+ order_has_many[key] = filter_result[:main_order]
671
+
672
+ elsif self_obj.reflect_on_all_associations(:belongs_to).map(&:name).include? key or
673
+ self_obj.reflect_on_all_associations(:has_one).map(&:name).include? key
674
+
675
+ filter_result = parse_filters(value, safe, field.singularize.classify.constantize)
676
+ # puts filter_result
677
+ filter_belongs_to[key] = filter_result[:main]
678
+ order_belongs_to[key] = filter_result[:main_order]
679
+
680
+ elsif self_obj.column_names.include? field
660
681
 
661
- if !!value == value
682
+ if self_obj.columns_hash[field].type == :boolean
662
683
 
663
- if comparator == 'is'
664
- filter_array << self_string_table + '.' + field + ' IS ' + value.to_s.upcase
665
- elsif comparator == 'not'
666
- filter_array << self_string_table + '.' + field + ' IS NOT ' + value.to_s.upcase
667
- end
684
+ if !!value != value
668
685
 
686
+ bool_lookup = {
687
+ 't' => true,
688
+ 'f' => false,
689
+ 'true' => true,
690
+ 'false' => false
691
+ }
692
+
693
+ value = value.to_s.downcase
694
+
695
+ if bool_lookup.has_key? value
696
+ value = bool_lookup[value]
697
+ else
698
+ value = true
669
699
  end
670
700
 
671
- elsif value == nil and comparator != 'is_null' and comparator != 'not_null'
701
+ end
702
+
703
+ if !!value == value
672
704
 
673
705
  if comparator == 'is'
674
- filter_array << self_string_table + '.' + field + ' IS NULL'
706
+ filter_array << self_string_table + '.' + field + ' IS ' + value.to_s.upcase
675
707
  elsif comparator == 'not'
676
- filter_array << self_string_table + '.' + field + ' IS NOT NULL'
708
+ filter_array << self_string_table + '.' + field + ' IS NOT ' + value.to_s.upcase
677
709
  end
678
710
 
679
- elsif value.is_a? Range and comparator == 'is'
711
+ end
680
712
 
681
- filter_array << self_string_table + '.' + field + ' >= ' + ActiveRecord::Base.connection.quote(value.first.to_s)
682
- filter_array << self_string_table + '.' + field + ' <= ' + ActiveRecord::Base.connection.quote(value.last.to_s)
713
+ elsif value == nil and comparator != 'is_null' and comparator != 'not_null'
683
714
 
684
- else
715
+ if comparator == 'is'
716
+ filter_array << self_string_table + '.' + field + ' IS NULL'
717
+ elsif comparator == 'not'
718
+ filter_array << self_string_table + '.' + field + ' IS NOT NULL'
719
+ end
685
720
 
686
- filter_array << self_string_table + '.' + field + api_comparison(comparator, value)
721
+ elsif value.is_a? Range and comparator == 'is'
687
722
 
688
- end
723
+ filter_array << self_string_table + '.' + field + ' >= ' + ActiveRecord::Base.connection.quote(value.first.to_s)
724
+ filter_array << self_string_table + '.' + field + ' <= ' + ActiveRecord::Base.connection.quote(value.last.to_s)
725
+
726
+ else
727
+
728
+ filter_array << self_string_table + '.' + field + api_comparison(comparator, value)
689
729
 
690
730
  end
691
731
 
@@ -720,7 +760,8 @@ class FastAPI
720
760
 
721
761
  @model.fastapi_fields.each do |field|
722
762
 
723
- if @model.reflect_on_all_associations(:belongs_to).map(&:name).include? field
763
+ if (@model.reflect_on_all_associations(:belongs_to).map(&:name).include? field or
764
+ @model.reflect_on_all_associations(:has_one).map(&:name).include? field)
724
765
 
725
766
  class_name = @model.reflect_on_association(field).options[:class_name]
726
767
 
@@ -729,16 +770,20 @@ class FastAPI
729
770
  else
730
771
  model = class_name.constantize
731
772
  end
732
-
773
+
733
774
  model_lookup[field] = model
734
775
  belongs << {model: model, alias: field}
735
776
 
736
777
  elsif @model.reflect_on_all_associations(:has_many).map(&:name).include? field
778
+
737
779
  model = field.to_s.singularize.classify.constantize
738
780
  model_lookup[field] = model
739
781
  has_many << model
782
+
740
783
  elsif @model.column_names.include? field.to_s
784
+
741
785
  fields << field
786
+
742
787
  end
743
788
 
744
789
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fastapi
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.16
4
+ version: 0.1.17
5
5
  platform: ruby
6
6
  authors:
7
7
  - Keith Horwood
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-02-10 00:00:00.000000000 Z
11
+ date: 2015-02-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: oj