sql-builder 0.2.0 → 0.3.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 +4 -4
 - data/README.md +2 -2
 - data/lib/sql-builder/builder.rb +25 -7
 - data/lib/sql-builder/version.rb +1 -1
 - metadata +2 -2
 
    
        checksums.yaml
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ---
         
     | 
| 
       2 
2 
     | 
    
         
             
            SHA256:
         
     | 
| 
       3 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       4 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: 5bcc084c0688d944d96e0ee1714b177d32c879cac4d1ef3fae67cd05ada5a47b
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: 5d31a28f462ba242b1d473bda0305796c6b9862c5b2b4e4f94c1861fb03579ab
         
     | 
| 
       5 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: f3adb6c21540df083abf0c1480c314acae8362191e0389cba9318ca86d716f286eaa02f9a600b369228d341e0984e297b8cc699d5df9ded21938d596f1752863
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: 5cd5ad219554c76dcf07561cbf094d3ab5306a531e6b3414461bbc8b376e4f850328602b8ab0af9275fab0b87aa8dc2071127309e8ebc1ce2c4424120e8d20ea
         
     | 
    
        data/README.md
    CHANGED
    
    | 
         @@ -47,7 +47,7 @@ Add the conditions by request params: 
     | 
|
| 
       47 
47 
     | 
    
         | 
| 
       48 
48 
     | 
    
         
             
            ```ruby
         
     | 
| 
       49 
49 
     | 
    
         
             
            query.where("age >= ?", params[:age]) unless params[:age].blank?
         
     | 
| 
       50 
     | 
    
         
            -
            query.where( 
     | 
| 
      
 50 
     | 
    
         
            +
            query.where(status: params[:status]) unless params[:status].nil?
         
     | 
| 
       51 
51 
     | 
    
         
             
            if params[:created_at_from] && params[:created_at_to]
         
     | 
| 
       52 
52 
     | 
    
         
             
              query.where("created_at >= ? and created_at <= ?", params[:created_at_from], params[:created_at_to])
         
     | 
| 
       53 
53 
     | 
    
         
             
            end
         
     | 
| 
         @@ -67,7 +67,7 @@ ORDER BY id desc LIMIT 100 OFFSET 0 
     | 
|
| 
       67 
67 
     | 
    
         | 
| 
       68 
68 
     | 
    
         
             
            ```rb
         
     | 
| 
       69 
69 
     | 
    
         
             
            query = SQLBuilder.new("select user_id, name, count(ip) as ip_count from user_visits")
         
     | 
| 
       70 
     | 
    
         
            -
            query.where( 
     | 
| 
      
 70 
     | 
    
         
            +
            query.where(status: 1).where("created_at > ?", params[:created_at])
         
     | 
| 
       71 
71 
     | 
    
         
             
            query.group("user_id").group("name").having("count(ip) > 2")
         
     | 
| 
       72 
72 
     | 
    
         
             
            query.to_sql
         
     | 
| 
       73 
73 
     | 
    
         
             
            ```
         
     | 
    
        data/lib/sql-builder/builder.rb
    CHANGED
    
    | 
         @@ -12,7 +12,7 @@ require "active_record" 
     | 
|
| 
       12 
12 
     | 
    
         
             
            #      .to_sql
         
     | 
| 
       13 
13 
     | 
    
         
             
            class SQLBuilder
         
     | 
| 
       14 
14 
     | 
    
         
             
              attr_reader :sql, :conditions, :havings, :orders, :groups, :limit_options, :page_options
         
     | 
| 
       15 
     | 
    
         
            -
              delegate : 
     | 
| 
      
 15 
     | 
    
         
            +
              delegate :sanitize_sql_array, :sanitize_sql_for_order, to: ActiveRecord::Base
         
     | 
| 
       16 
16 
     | 
    
         | 
| 
       17 
17 
     | 
    
         
             
              # Create a new SQLBuilder
         
     | 
| 
       18 
18 
     | 
    
         
             
              #
         
     | 
| 
         @@ -44,7 +44,7 @@ class SQLBuilder 
     | 
|
| 
       44 
44 
     | 
    
         
             
                  query_scope = condition.first
         
     | 
| 
       45 
45 
     | 
    
         
             
                  @conditions = query_scope.conditions
         
     | 
| 
       46 
46 
     | 
    
         
             
                else
         
     | 
| 
       47 
     | 
    
         
            -
                  conditions <<  
     | 
| 
      
 47 
     | 
    
         
            +
                  conditions << sanitize_sql_for_assignment(condition)
         
     | 
| 
       48 
48 
     | 
    
         
             
                end
         
     | 
| 
       49 
49 
     | 
    
         | 
| 
       50 
50 
     | 
    
         
             
                self
         
     | 
| 
         @@ -108,7 +108,7 @@ class SQLBuilder 
     | 
|
| 
       108 
108 
     | 
    
         
             
              #   # => "GROUP BY name HAVING count(name) > 5"
         
     | 
| 
       109 
109 
     | 
    
         
             
              #
         
     | 
| 
       110 
110 
     | 
    
         
             
              def having(*condition)
         
     | 
| 
       111 
     | 
    
         
            -
                havings <<  
     | 
| 
      
 111 
     | 
    
         
            +
                havings << sanitize_sql_for_assignment(condition)
         
     | 
| 
       112 
112 
     | 
    
         
             
                self
         
     | 
| 
       113 
113 
     | 
    
         
             
              end
         
     | 
| 
       114 
114 
     | 
    
         | 
| 
         @@ -137,16 +137,16 @@ class SQLBuilder 
     | 
|
| 
       137 
137 
     | 
    
         
             
              def to_sql
         
     | 
| 
       138 
138 
     | 
    
         
             
                sql_parts = [sql]
         
     | 
| 
       139 
139 
     | 
    
         
             
                if conditions.any?
         
     | 
| 
       140 
     | 
    
         
            -
                  sql_parts << "WHERE " + conditions.join(" AND ")
         
     | 
| 
      
 140 
     | 
    
         
            +
                  sql_parts << "WHERE " + conditions.flatten.join(" AND ")
         
     | 
| 
       141 
141 
     | 
    
         
             
                end
         
     | 
| 
       142 
142 
     | 
    
         
             
                if orders.any?
         
     | 
| 
       143 
     | 
    
         
            -
                  sql_parts << "ORDER BY " + orders.join(", ")
         
     | 
| 
      
 143 
     | 
    
         
            +
                  sql_parts << "ORDER BY " + orders.flatten.join(", ")
         
     | 
| 
       144 
144 
     | 
    
         
             
                end
         
     | 
| 
       145 
145 
     | 
    
         
             
                if groups.any?
         
     | 
| 
       146 
     | 
    
         
            -
                  sql_parts << "GROUP BY " + groups.join(", ")
         
     | 
| 
      
 146 
     | 
    
         
            +
                  sql_parts << "GROUP BY " + groups.flatten.join(", ")
         
     | 
| 
       147 
147 
     | 
    
         
             
                end
         
     | 
| 
       148 
148 
     | 
    
         
             
                if havings.any?
         
     | 
| 
       149 
     | 
    
         
            -
                  sql_parts << "HAVING " + havings.join(" AND ")
         
     | 
| 
      
 149 
     | 
    
         
            +
                  sql_parts << "HAVING " + havings.flatten.join(" AND ")
         
     | 
| 
       150 
150 
     | 
    
         
             
                end
         
     | 
| 
       151 
151 
     | 
    
         
             
                if limit_options[:limit]
         
     | 
| 
       152 
152 
     | 
    
         
             
                  sql_parts << "LIMIT " + limit_options[:limit].to_s
         
     | 
| 
         @@ -156,4 +156,22 @@ class SQLBuilder 
     | 
|
| 
       156 
156 
     | 
    
         
             
                end
         
     | 
| 
       157 
157 
     | 
    
         
             
                sql_parts.join(" ")
         
     | 
| 
       158 
158 
     | 
    
         
             
              end
         
     | 
| 
      
 159 
     | 
    
         
            +
             
     | 
| 
      
 160 
     | 
    
         
            +
              private
         
     | 
| 
      
 161 
     | 
    
         
            +
             
     | 
| 
      
 162 
     | 
    
         
            +
              # https://api.rubyonrails.org/classes/ActiveRecord/Sanitization/ClassMethods.html#method-i-sanitize_sql_for_assignment
         
     | 
| 
      
 163 
     | 
    
         
            +
              def sanitize_sql_for_assignment(assignments)
         
     | 
| 
      
 164 
     | 
    
         
            +
                case assignments.first
         
     | 
| 
      
 165 
     | 
    
         
            +
                when Hash; sanitize_sql_hash_for_assignment(assignments.first)
         
     | 
| 
      
 166 
     | 
    
         
            +
                else
         
     | 
| 
      
 167 
     | 
    
         
            +
                  sanitize_sql_array(assignments)
         
     | 
| 
      
 168 
     | 
    
         
            +
                end
         
     | 
| 
      
 169 
     | 
    
         
            +
              end
         
     | 
| 
      
 170 
     | 
    
         
            +
             
     | 
| 
      
 171 
     | 
    
         
            +
              # https://api.rubyonrails.org/classes/ActiveRecord/Sanitization/ClassMethods.html#method-i-sanitize_sql_hash_for_assignment
         
     | 
| 
      
 172 
     | 
    
         
            +
              def sanitize_sql_hash_for_assignment(attrs)
         
     | 
| 
      
 173 
     | 
    
         
            +
                attrs.map do |attr, value|
         
     | 
| 
      
 174 
     | 
    
         
            +
                  sanitize_sql_array(["#{attr} = ?", value])
         
     | 
| 
      
 175 
     | 
    
         
            +
                end
         
     | 
| 
      
 176 
     | 
    
         
            +
              end
         
     | 
| 
       159 
177 
     | 
    
         
             
            end
         
     | 
    
        data/lib/sql-builder/version.rb
    CHANGED
    
    
    
        metadata
    CHANGED
    
    | 
         @@ -1,14 +1,14 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: sql-builder
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version
         
     | 
| 
       4 
     | 
    
         
            -
              version: 0. 
     | 
| 
      
 4 
     | 
    
         
            +
              version: 0.3.0
         
     | 
| 
       5 
5 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       6 
6 
     | 
    
         
             
            authors:
         
     | 
| 
       7 
7 
     | 
    
         
             
            - Jason Lee
         
     | 
| 
       8 
8 
     | 
    
         
             
            autorequire: 
         
     | 
| 
       9 
9 
     | 
    
         
             
            bindir: bin
         
     | 
| 
       10 
10 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       11 
     | 
    
         
            -
            date: 2020- 
     | 
| 
      
 11 
     | 
    
         
            +
            date: 2020-04-03 00:00:00.000000000 Z
         
     | 
| 
       12 
12 
     | 
    
         
             
            dependencies:
         
     | 
| 
       13 
13 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       14 
14 
     | 
    
         
             
              name: activerecord
         
     |