muster 0.0.7 → 0.0.8
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/Authors +2 -2
- data/Changes +5 -1
- data/lib/muster/strategies/active_record.rb +18 -1
- data/lib/muster/version.rb +1 -1
- data/spec/muster/strategies/active_record_spec.rb +25 -3
- metadata +2 -2
    
        data/Authors
    CHANGED
    
    | @@ -1,2 +1,2 @@ | |
| 1 | 
            -
            - Chris Laco <claco@chrislaco.com | 
| 2 | 
            -
            - Nikica Jokić  | 
| 1 | 
            +
            - Chris Laco <claco@chrislaco.com>
         | 
| 2 | 
            +
            - Nikica Jokić <neektza@gmail.com>
         | 
    
        data/Changes
    CHANGED
    
    
| @@ -42,7 +42,8 @@ module Muster | |
| 42 42 | 
             
                      :limit    => pagination[:limit],
         | 
| 43 43 | 
             
                      :offset   => pagination[:offset],
         | 
| 44 44 | 
             
                      :where    => self.parse_where(query_string),
         | 
| 45 | 
            -
                      :joins    => self.parse_joins(query_string)
         | 
| 45 | 
            +
                      :joins    => self.parse_joins(query_string),
         | 
| 46 | 
            +
                      :includes => self.parse_includes(query_string)
         | 
| 46 47 | 
             
                    )
         | 
| 47 48 |  | 
| 48 49 | 
             
                    parameters.regular_writer('pagination', pagination[:pagination].symbolize_keys)
         | 
| @@ -131,6 +132,22 @@ module Muster | |
| 131 132 |  | 
| 132 133 | 
             
                    return results[:joins] || {}
         | 
| 133 134 | 
             
                  end
         | 
| 135 | 
            +
                  
         | 
| 136 | 
            +
                  # Returns includes clauses for AR queries
         | 
| 137 | 
            +
                  #
         | 
| 138 | 
            +
                  # @param query_string [String] the original query string to parse join statements from
         | 
| 139 | 
            +
                  #
         | 
| 140 | 
            +
                  # @return [Hash]
         | 
| 141 | 
            +
                  #
         | 
| 142 | 
            +
                  # @example
         | 
| 143 | 
            +
                  #
         | 
| 144 | 
            +
                  #   value = self.parse_joins('includes=authors')  #=> {'includes' => 'authors'}
         | 
| 145 | 
            +
                  def parse_includes( query_string )
         | 
| 146 | 
            +
                    strategy = Muster::Strategies::JoinsExpression.new(:field => :includes)
         | 
| 147 | 
            +
                    results  = strategy.parse(query_string)
         | 
| 148 | 
            +
             | 
| 149 | 
            +
                    return results[:includes] || {}
         | 
| 150 | 
            +
                  end
         | 
| 134 151 |  | 
| 135 152 | 
             
                end
         | 
| 136 153 | 
             
              end
         | 
    
        data/lib/muster/version.rb
    CHANGED
    
    
| @@ -6,7 +6,7 @@ describe Muster::Strategies::ActiveRecord do | |
| 6 6 |  | 
| 7 7 | 
             
              describe '#parse' do
         | 
| 8 8 | 
             
                it 'returns a Muster::Results instance' do
         | 
| 9 | 
            -
                  subject.parse('').should == {"select"=>[], "order"=>[], "limit"=>30, "offset"=>nil, "where"=>{}, "joins"=>{}, "pagination"=>{:page=>1, :per_page=>30}}
         | 
| 9 | 
            +
                  subject.parse('').should == {"select"=>[], "order"=>[], "limit"=>30, "offset"=>nil, "where"=>{}, "joins"=>{}, "includes"=>{}, "pagination"=>{:page=>1, :per_page=>30}}
         | 
| 10 10 | 
             
                  subject.parse('').should be_an_instance_of(Muster::Results)
         | 
| 11 11 | 
             
                end
         | 
| 12 12 |  | 
| @@ -67,6 +67,24 @@ describe Muster::Strategies::ActiveRecord do | |
| 67 67 | 
             
                  end
         | 
| 68 68 | 
             
                end
         | 
| 69 69 |  | 
| 70 | 
            +
                context 'includes' do
         | 
| 71 | 
            +
                  it 'returns single value in Array' do
         | 
| 72 | 
            +
                    subject.parse('includes=author')[:includes].should eq ['author']
         | 
| 73 | 
            +
                  end
         | 
| 74 | 
            +
                  
         | 
| 75 | 
            +
                  it 'returns multiple values in Array' do
         | 
| 76 | 
            +
                    subject.parse('includes=author,voter')[:includes].should eq ['author', 'voter']
         | 
| 77 | 
            +
                  end
         | 
| 78 | 
            +
             | 
| 79 | 
            +
                  it 'returns a nested hash of separated values' do
         | 
| 80 | 
            +
                    subject.parse('includes=author.country.name')[:includes].should eq [{'author' => { 'country' => 'name'}}]
         | 
| 81 | 
            +
                  end
         | 
| 82 | 
            +
                  
         | 
| 83 | 
            +
                  it 'returns an array of nested hashes' do
         | 
| 84 | 
            +
                    subject.parse('includes=author.country.name,activity.rule')[:includes].should eq [{'author' => { 'country' => 'name'}}, {'activity' => 'rule'}]
         | 
| 85 | 
            +
                  end
         | 
| 86 | 
            +
                end
         | 
| 87 | 
            +
             | 
| 70 88 | 
             
                context 'pagination' do
         | 
| 71 89 | 
             
                  it 'returns default will paginate compatible pagination' do
         | 
| 72 90 | 
             
                    subject.parse('')[:pagination].should == {:page => 1, :per_page => 30}
         | 
| @@ -132,24 +150,28 @@ describe Muster::Strategies::ActiveRecord do | |
| 132 150 |  | 
| 133 151 | 
             
                context 'the full monty' do
         | 
| 134 152 | 
             
                  it 'returns a hash of all options' do
         | 
| 135 | 
            -
                    query_string = 'select=id,guid,name&where=name:foop&order=id:desc&order=name&page=3&page_size=5'
         | 
| 153 | 
            +
                    query_string = 'select=id,guid,name&where=name:foop&order=id:desc&order=name&page=3&page_size=5&includes=author.country,comments&joins=activity'
         | 
| 136 154 | 
             
                    results = subject.parse(query_string)
         | 
| 137 155 |  | 
| 138 156 | 
             
                    results[:select].should == ['id', 'guid', 'name']
         | 
| 139 157 | 
             
                    results[:where].should  == {'name' => 'foop'}
         | 
| 140 158 | 
             
                    results[:order].should  == ['id desc', 'name asc']
         | 
| 159 | 
            +
                    results[:includes].should == [{'author' => 'country'}, 'comments']
         | 
| 160 | 
            +
                    results[:joins].should == ['activity']
         | 
| 141 161 | 
             
                    results[:pagination].should == {:page => 3, :per_page => 5}
         | 
| 142 162 | 
             
                    results[:offset].should == 10
         | 
| 143 163 | 
             
                    results[:limit].should == 5
         | 
| 144 164 | 
             
                  end
         | 
| 145 165 |  | 
| 146 166 | 
             
                  it 'supports indifferent access' do
         | 
| 147 | 
            -
                    query_string = 'select=id,guid,name&where=name:foop&order=id:desc&order=name&page=3&page_size=5'
         | 
| 167 | 
            +
                    query_string = 'select=id,guid,name&where=name:foop&order=id:desc&order=name&page=3&page_size=5&includes=author.country,comments&joins=activity'
         | 
| 148 168 | 
             
                    results = subject.parse(query_string)
         | 
| 149 169 |  | 
| 150 170 | 
             
                    results['select'].should == ['id', 'guid', 'name']
         | 
| 151 171 | 
             
                    results['where'].should  == {'name' => 'foop'}
         | 
| 152 172 | 
             
                    results['order'].should  == ['id desc', 'name asc']
         | 
| 173 | 
            +
                    results['includes'].should == [{'author' => 'country'}, 'comments']
         | 
| 174 | 
            +
                    results['joins'].should == ['activity']
         | 
| 153 175 | 
             
                    results['pagination'].should == {:page => 3, :per_page => 5}
         | 
| 154 176 | 
             
                    results['offset'].should == 10
         | 
| 155 177 | 
             
                    results['limit'].should == 5
         | 
    
        metadata
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: muster
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0.0. | 
| 4 | 
            +
              version: 0.0.8
         | 
| 5 5 | 
             
              prerelease: 
         | 
| 6 6 | 
             
            platform: ruby
         | 
| 7 7 | 
             
            authors:
         | 
| @@ -9,7 +9,7 @@ authors: | |
| 9 9 | 
             
            autorequire: 
         | 
| 10 10 | 
             
            bindir: bin
         | 
| 11 11 | 
             
            cert_chain: []
         | 
| 12 | 
            -
            date: 2013-03- | 
| 12 | 
            +
            date: 2013-03-17 00:00:00.000000000 Z
         | 
| 13 13 | 
             
            dependencies:
         | 
| 14 14 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 15 15 | 
             
              name: activesupport
         |