agile_serializer 0.0.6 → 0.0.7
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/Rakefile +0 -10
- data/{rails/init.rb → lib/agile_serializer/active_record.rb} +0 -0
- data/lib/agile_serializer/version.rb +1 -1
- data/lib/agile_serializer.rb +15 -8
- data/test/serialize_with_options_test.rb +58 -50
- data/test/test_helper.rb +11 -5
- metadata +49 -42
    
        data/Rakefile
    CHANGED
    
    | @@ -1,6 +1,5 @@ | |
| 1 1 | 
             
            require 'rake'
         | 
| 2 2 | 
             
            require 'rake/testtask'
         | 
| 3 | 
            -
            require 'rake/rdoctask'
         | 
| 4 3 |  | 
| 5 4 | 
             
            desc 'Default: run unit tests.'
         | 
| 6 5 | 
             
            task :default => :test
         | 
| @@ -12,12 +11,3 @@ Rake::TestTask.new(:test) do |t| | |
| 12 11 | 
             
              t.pattern = 'test/**/*_test.rb'
         | 
| 13 12 | 
             
              t.verbose = true
         | 
| 14 13 | 
             
            end
         | 
| 15 | 
            -
             | 
| 16 | 
            -
            desc 'Generate documentation for the serialize_with_options plugin.'
         | 
| 17 | 
            -
            Rake::RDocTask.new(:rdoc) do |rdoc|
         | 
| 18 | 
            -
              rdoc.rdoc_dir = 'rdoc'
         | 
| 19 | 
            -
              rdoc.title    = 'SerializeWithOptions'
         | 
| 20 | 
            -
              rdoc.options << '--line-numbers' << '--inline-source'
         | 
| 21 | 
            -
              rdoc.rdoc_files.include('README')
         | 
| 22 | 
            -
              rdoc.rdoc_files.include('lib/**/*.rb')
         | 
| 23 | 
            -
            end
         | 
| 
            File without changes
         | 
    
        data/lib/agile_serializer.rb
    CHANGED
    
    | @@ -4,20 +4,25 @@ module AgileSerializer | |
| 4 4 | 
             
                require 'agile_serializer/railtie'
         | 
| 5 5 | 
             
              end
         | 
| 6 6 |  | 
| 7 | 
            +
              def self.extended(base)
         | 
| 8 | 
            +
                base.class_attribute(:serializer_configuration)
         | 
| 9 | 
            +
                base.class_attribute(:serializer_options)
         | 
| 10 | 
            +
              end
         | 
| 11 | 
            +
             | 
| 7 12 | 
             
              def serialize_with_options(set = :default, &block)
         | 
| 8 | 
            -
                configuration =  | 
| 9 | 
            -
                options       =  | 
| 13 | 
            +
                configuration = self.serializer_configuration.try(:dup) || {}
         | 
| 14 | 
            +
                options       = self.serializer_options.try(:dup) || {}
         | 
| 10 15 |  | 
| 11 16 | 
             
                configuration[set] = Config.new(configuration).instance_eval(&block)
         | 
| 12 17 |  | 
| 13 | 
            -
                 | 
| 14 | 
            -
                 | 
| 18 | 
            +
                self.serializer_configuration = configuration
         | 
| 19 | 
            +
                self.serializer_options = options
         | 
| 15 20 |  | 
| 16 21 | 
             
                include InstanceMethods
         | 
| 17 22 | 
             
              end
         | 
| 18 23 |  | 
| 19 24 | 
             
              def serialization_configuration(set)
         | 
| 20 | 
            -
                configuration =  | 
| 25 | 
            +
                configuration = self.serializer_configuration
         | 
| 21 26 | 
             
                conf = if configuration
         | 
| 22 27 | 
             
                  configuration[set] || configuration[:default]
         | 
| 23 28 | 
             
                end
         | 
| @@ -26,7 +31,8 @@ module AgileSerializer | |
| 26 31 | 
             
              end
         | 
| 27 32 |  | 
| 28 33 | 
             
              def serialization_options(set)
         | 
| 29 | 
            -
                options =  | 
| 34 | 
            +
                options = self.serializer_options
         | 
| 35 | 
            +
             | 
| 30 36 | 
             
                options[set] ||= serialization_configuration(set).tap do |opts|
         | 
| 31 37 | 
             
                  includes = opts.delete(:includes)
         | 
| 32 38 |  | 
| @@ -47,7 +53,8 @@ module AgileSerializer | |
| 47 53 | 
             
                    end
         | 
| 48 54 | 
             
                  end
         | 
| 49 55 | 
             
                end
         | 
| 50 | 
            -
             | 
| 56 | 
            +
             | 
| 57 | 
            +
                self.serializer_options = options
         | 
| 51 58 | 
             
                options[set]
         | 
| 52 59 | 
             
              end
         | 
| 53 60 |  | 
| @@ -69,7 +76,7 @@ module AgileSerializer | |
| 69 76 | 
             
                  raise "Not known configuration!" unless @conf[set]
         | 
| 70 77 | 
             
                  @data = @conf[set].dup
         | 
| 71 78 | 
             
                end
         | 
| 72 | 
            -
             | 
| 79 | 
            +
             | 
| 73 80 | 
             
              end
         | 
| 74 81 |  | 
| 75 82 | 
             
              module InstanceMethods
         | 
| @@ -4,7 +4,7 @@ class User < ActiveRecord::Base | |
| 4 4 | 
             
              has_many :posts
         | 
| 5 5 | 
             
              has_many :blog_posts
         | 
| 6 6 | 
             
              has_many :check_ins
         | 
| 7 | 
            -
             | 
| 7 | 
            +
             | 
| 8 8 | 
             
              serialize_with_options do
         | 
| 9 9 | 
             
                methods   :post_count
         | 
| 10 10 | 
             
                includes  :posts
         | 
| @@ -13,6 +13,7 @@ class User < ActiveRecord::Base | |
| 13 13 |  | 
| 14 14 | 
             
              serialize_with_options(:deep) do
         | 
| 15 15 | 
             
                includes :check_ins
         | 
| 16 | 
            +
                methods :post_count2
         | 
| 16 17 | 
             
              end
         | 
| 17 18 |  | 
| 18 19 | 
             
              serialize_with_options(:with_email) do
         | 
| @@ -23,7 +24,7 @@ class User < ActiveRecord::Base | |
| 23 24 | 
             
              serialize_with_options(:with_comments) do
         | 
| 24 25 | 
             
                includes  :posts => { :include => :comments }
         | 
| 25 26 | 
             
              end
         | 
| 26 | 
            -
             | 
| 27 | 
            +
             | 
| 27 28 | 
             
              serialize_with_options(:with_check_ins) do
         | 
| 28 29 | 
             
                includes :check_ins
         | 
| 29 30 | 
             
                dasherize false
         | 
| @@ -33,6 +34,10 @@ class User < ActiveRecord::Base | |
| 33 34 | 
             
              def post_count
         | 
| 34 35 | 
             
                self.posts.count
         | 
| 35 36 | 
             
              end
         | 
| 37 | 
            +
             | 
| 38 | 
            +
              def post_count2
         | 
| 39 | 
            +
                self.posts.count
         | 
| 40 | 
            +
              end
         | 
| 36 41 | 
             
            end
         | 
| 37 42 |  | 
| 38 43 | 
             
            class Post < ActiveRecord::Base
         | 
| @@ -41,7 +46,7 @@ class Post < ActiveRecord::Base | |
| 41 46 |  | 
| 42 47 | 
             
              serialize_with_options do
         | 
| 43 48 | 
             
                only :title
         | 
| 44 | 
            -
                includes : | 
| 49 | 
            +
                includes :comments
         | 
| 45 50 | 
             
              end
         | 
| 46 51 |  | 
| 47 52 | 
             
              serialize_with_options(:deep) do
         | 
| @@ -57,6 +62,8 @@ class BlogPost < Post | |
| 57 62 | 
             
              serialize_with_options(:with_email) do
         | 
| 58 63 | 
             
                includes :user
         | 
| 59 64 | 
             
              end
         | 
| 65 | 
            +
             | 
| 66 | 
            +
             | 
| 60 67 | 
             
            end
         | 
| 61 68 |  | 
| 62 69 | 
             
            class Comment < ActiveRecord::Base
         | 
| @@ -77,65 +84,66 @@ class CheckIn < ActiveRecord::Base | |
| 77 84 | 
             
            end
         | 
| 78 85 |  | 
| 79 86 | 
             
            class SerializeWithOptionsTest < Test::Unit::TestCase
         | 
| 80 | 
            -
              def  | 
| 81 | 
            -
                 | 
| 82 | 
            -
             | 
| 83 | 
            -
                end
         | 
| 87 | 
            +
              def json(obj, opts={})
         | 
| 88 | 
            +
                obj.as_json(opts).with_indifferent_access
         | 
| 89 | 
            +
              end
         | 
| 84 90 |  | 
| 85 | 
            -
             | 
| 86 | 
            -
             | 
| 87 | 
            -
             | 
| 91 | 
            +
              context "Serialize with options simple test" do
         | 
| 92 | 
            +
                setup do
         | 
| 93 | 
            +
                  @user = User.create(:name => "John User", :email => "john@example.com")
         | 
| 94 | 
            +
                  @post = @user.posts.create(:title => "Hello World!", :content => "Welcome to my blog.")
         | 
| 95 | 
            +
                  @blog_post = @user.blog_posts.create(:title => "Hello World!", :content => "Welcome to my blog.")
         | 
| 96 | 
            +
                  @checkin = @user.check_ins.create(:code_name => "Natasa")
         | 
| 88 97 |  | 
| 89 | 
            -
             | 
| 90 | 
            -
                  assert_equal nil, @user_hash["email"]
         | 
| 98 | 
            +
                  [@user, @post, @blog_post, @checkin].map(&:reload)
         | 
| 91 99 | 
             
                end
         | 
| 92 100 |  | 
| 93 | 
            -
                 | 
| 94 | 
            -
                  assert_equal nil, @post_hash["content"]
         | 
| 95 | 
            -
                end
         | 
| 101 | 
            +
                context "#default" do
         | 
| 96 102 |  | 
| 97 | 
            -
             | 
| 98 | 
            -
             | 
| 99 | 
            -
             | 
| 100 | 
            -
             | 
| 101 | 
            -
             | 
| 102 | 
            -
                  assert_equal @post_hash["title"], @blog_post_hash["title"]
         | 
| 103 | 
            -
                end
         | 
| 104 | 
            -
                
         | 
| 105 | 
            -
                should "include specified methods on associations" do
         | 
| 106 | 
            -
                  assert_equal @user.post_count, @post_hash["user"]["post_count"]
         | 
| 107 | 
            -
                end
         | 
| 103 | 
            +
                  setup do
         | 
| 104 | 
            +
                    @user_hash = json( @user )
         | 
| 105 | 
            +
                    @post_hash = json( @post )
         | 
| 106 | 
            +
                    @blog_post_hash = json( @blog_post )
         | 
| 107 | 
            +
                  end
         | 
| 108 108 |  | 
| 109 | 
            -
             | 
| 110 | 
            -
             | 
| 111 | 
            -
             | 
| 109 | 
            +
                  should "include active_record attributes" do
         | 
| 110 | 
            +
                    assert_equal @user.name, @user_hash["name"]
         | 
| 111 | 
            +
                  end
         | 
| 112 112 |  | 
| 113 | 
            -
             | 
| 114 | 
            -
             | 
| 115 | 
            -
             | 
| 113 | 
            +
                  should "include specified methods" do
         | 
| 114 | 
            +
                    assert_equal @user.post_count, @user_hash["post_count"]
         | 
| 115 | 
            +
                  end
         | 
| 116 116 |  | 
| 117 | 
            -
             | 
| 118 | 
            -
             | 
| 119 | 
            -
             | 
| 120 | 
            -
                
         | 
| 121 | 
            -
                should "override sets on inherited models" do
         | 
| 122 | 
            -
                  assert_equal nil, @blog_post_hash["comments"].first
         | 
| 123 | 
            -
                end
         | 
| 124 | 
            -
              end
         | 
| 117 | 
            +
                  should "exclude specified attributes" do
         | 
| 118 | 
            +
                    assert_equal nil, @user_hash["email"]
         | 
| 119 | 
            +
                  end
         | 
| 125 120 |  | 
| 126 | 
            -
             | 
| 127 | 
            -
             | 
| 128 | 
            -
                   | 
| 129 | 
            -
             | 
| 130 | 
            -
                   | 
| 121 | 
            +
                  should "exclude attributes not in :only list" do
         | 
| 122 | 
            +
                    assert_equal nil, @post_hash["content"]
         | 
| 123 | 
            +
                  end
         | 
| 124 | 
            +
             | 
| 125 | 
            +
                  should "include specified associations" do
         | 
| 126 | 
            +
                    assert_equal @post.title, @user_hash["posts"].first["title"]
         | 
| 127 | 
            +
                  end
         | 
| 128 | 
            +
             | 
| 129 | 
            +
                  should "be identical in inherited model" do
         | 
| 130 | 
            +
                    assert_equal @post_hash["title"], @blog_post_hash["title"]
         | 
| 131 | 
            +
                  end
         | 
| 131 132 | 
             
                end
         | 
| 132 133 |  | 
| 133 | 
            -
                 | 
| 134 | 
            -
                   | 
| 135 | 
            -
             | 
| 136 | 
            -
                   | 
| 134 | 
            +
                context "#deep" do
         | 
| 135 | 
            +
                  setup do
         | 
| 136 | 
            +
                    @post_hash = json( @post, :flavor => :deep )
         | 
| 137 | 
            +
                  end
         | 
| 138 | 
            +
             | 
| 139 | 
            +
                  should "include specified methods on associations" do
         | 
| 140 | 
            +
                    assert_equal @user.post_count2, @post_hash["user"]["post_count2"]
         | 
| 141 | 
            +
                  end
         | 
| 142 | 
            +
             | 
| 143 | 
            +
                  should "include specified associations of associations" do
         | 
| 144 | 
            +
                    assert_equal @checkin.code_name, @post_hash["user"]["check_ins"].first["code_name"]
         | 
| 145 | 
            +
                  end
         | 
| 137 146 | 
             
                end
         | 
| 138 | 
            -
                  
         | 
| 139 147 | 
             
              end
         | 
| 140 148 |  | 
| 141 149 | 
             
            end
         | 
    
        data/test/test_helper.rb
    CHANGED
    
    | @@ -1,17 +1,23 @@ | |
| 1 | 
            -
            require ' | 
| 1 | 
            +
            require 'bundler/setup'
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            require 'logger'
         | 
| 2 4 | 
             
            require 'active_record'
         | 
| 3 | 
            -
            require ' | 
| 5 | 
            +
            require 'turn'
         | 
| 4 6 | 
             
            require 'shoulda'
         | 
| 5 7 | 
             
            require 'json'
         | 
| 8 | 
            +
            require 'ap'
         | 
| 6 9 |  | 
| 7 | 
            -
             | 
| 8 | 
            -
             | 
| 9 | 
            -
            require  | 
| 10 | 
            +
            lib = File.expand_path('../../lib/', __FILE__)
         | 
| 11 | 
            +
            $:.unshift lib unless $:.include?(lib)
         | 
| 12 | 
            +
            require 'agile_serializer'
         | 
| 13 | 
            +
            require 'agile_serializer/active_record'
         | 
| 10 14 |  | 
| 11 15 | 
             
            ActiveRecord::Base.establish_connection(
         | 
| 12 16 | 
             
              :adapter => 'sqlite3',
         | 
| 13 17 | 
             
              :database => 'test.db'
         | 
| 14 18 | 
             
            )
         | 
| 19 | 
            +
            ActiveRecord::Base.include_root_in_json = false
         | 
| 20 | 
            +
            ActiveRecord::Base.logger = Logger.new('test.log')
         | 
| 15 21 |  | 
| 16 22 | 
             
            [:users, :posts, :comments, :check_ins, :reviews].each do |table|
         | 
| 17 23 | 
             
              ActiveRecord::Base.connection.drop_table table rescue nil
         | 
    
        metadata
    CHANGED
    
    | @@ -1,70 +1,77 @@ | |
| 1 | 
            -
            --- !ruby/object:Gem::Specification | 
| 1 | 
            +
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: agile_serializer
         | 
| 3 | 
            -
            version: !ruby/object:Gem::Version | 
| 4 | 
            -
               | 
| 5 | 
            -
               | 
| 6 | 
            -
              - 0
         | 
| 7 | 
            -
              - 0
         | 
| 8 | 
            -
              - 6
         | 
| 9 | 
            -
              version: 0.0.6
         | 
| 3 | 
            +
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            +
              version: 0.0.7
         | 
| 5 | 
            +
              prerelease: 
         | 
| 10 6 | 
             
            platform: ruby
         | 
| 11 | 
            -
            authors: | 
| 7 | 
            +
            authors:
         | 
| 12 8 | 
             
            - Christos Trochalakis
         | 
| 13 9 | 
             
            autorequire: 
         | 
| 14 10 | 
             
            bindir: bin
         | 
| 15 11 | 
             
            cert_chain: []
         | 
| 16 | 
            -
             | 
| 17 | 
            -
             | 
| 18 | 
            -
             | 
| 19 | 
            -
             | 
| 20 | 
            -
             | 
| 21 | 
            -
             | 
| 12 | 
            +
            date: 2012-09-07 00:00:00.000000000 Z
         | 
| 13 | 
            +
            dependencies:
         | 
| 14 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 15 | 
            +
              name: activesupport
         | 
| 16 | 
            +
              requirement: &34381420 !ruby/object:Gem::Requirement
         | 
| 17 | 
            +
                none: false
         | 
| 18 | 
            +
                requirements:
         | 
| 19 | 
            +
                - - ~>
         | 
| 20 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 21 | 
            +
                    version: '3.0'
         | 
| 22 | 
            +
              type: :runtime
         | 
| 23 | 
            +
              prerelease: false
         | 
| 24 | 
            +
              version_requirements: *34381420
         | 
| 25 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 26 | 
            +
              name: railties
         | 
| 27 | 
            +
              requirement: &34380920 !ruby/object:Gem::Requirement
         | 
| 28 | 
            +
                none: false
         | 
| 29 | 
            +
                requirements:
         | 
| 30 | 
            +
                - - ~>
         | 
| 31 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 32 | 
            +
                    version: '3.0'
         | 
| 33 | 
            +
              type: :runtime
         | 
| 34 | 
            +
              prerelease: false
         | 
| 35 | 
            +
              version_requirements: *34380920
         | 
| 36 | 
            +
            description: A fork of serializer_with_options enabling deep serializer and other
         | 
| 37 | 
            +
              features
         | 
| 22 38 | 
             
            email: yatiohi@ideopolis.gr
         | 
| 23 39 | 
             
            executables: []
         | 
| 24 | 
            -
             | 
| 25 40 | 
             
            extensions: []
         | 
| 26 | 
            -
             | 
| 27 41 | 
             
            extra_rdoc_files: []
         | 
| 28 | 
            -
             | 
| 29 | 
            -
            files: 
         | 
| 42 | 
            +
            files:
         | 
| 30 43 | 
             
            - README.markdown
         | 
| 31 44 | 
             
            - Rakefile
         | 
| 32 45 | 
             
            - MIT-LICENSE
         | 
| 33 46 | 
             
            - lib/agile_serializer.rb
         | 
| 34 | 
            -
            - lib/agile_serializer/version.rb
         | 
| 35 47 | 
             
            - lib/agile_serializer/railtie.rb
         | 
| 48 | 
            +
            - lib/agile_serializer/version.rb
         | 
| 49 | 
            +
            - lib/agile_serializer/active_record.rb
         | 
| 36 50 | 
             
            - test/test_helper.rb
         | 
| 37 51 | 
             
            - test/serialize_with_options_test.rb
         | 
| 38 | 
            -
            - rails/init.rb
         | 
| 39 | 
            -
            has_rdoc: true
         | 
| 40 52 | 
             
            homepage: http://github.com/ctrochalakis/agile_serializer
         | 
| 41 53 | 
             
            licenses: []
         | 
| 42 | 
            -
             | 
| 43 54 | 
             
            post_install_message: 
         | 
| 44 55 | 
             
            rdoc_options: []
         | 
| 45 | 
            -
             | 
| 46 | 
            -
            require_paths: 
         | 
| 56 | 
            +
            require_paths:
         | 
| 47 57 | 
             
            - lib
         | 
| 48 | 
            -
            required_ruby_version: !ruby/object:Gem::Requirement | 
| 49 | 
            -
               | 
| 50 | 
            -
               | 
| 51 | 
            -
             | 
| 52 | 
            -
             | 
| 53 | 
            -
                   | 
| 54 | 
            -
             | 
| 55 | 
            -
             | 
| 56 | 
            -
              requirements: | 
| 57 | 
            -
              - -  | 
| 58 | 
            -
                - !ruby/object:Gem::Version | 
| 59 | 
            -
                   | 
| 60 | 
            -
                  - 0
         | 
| 61 | 
            -
                  version: "0"
         | 
| 58 | 
            +
            required_ruby_version: !ruby/object:Gem::Requirement
         | 
| 59 | 
            +
              none: false
         | 
| 60 | 
            +
              requirements:
         | 
| 61 | 
            +
              - - ! '>='
         | 
| 62 | 
            +
                - !ruby/object:Gem::Version
         | 
| 63 | 
            +
                  version: '0'
         | 
| 64 | 
            +
            required_rubygems_version: !ruby/object:Gem::Requirement
         | 
| 65 | 
            +
              none: false
         | 
| 66 | 
            +
              requirements:
         | 
| 67 | 
            +
              - - ! '>='
         | 
| 68 | 
            +
                - !ruby/object:Gem::Version
         | 
| 69 | 
            +
                  version: '0'
         | 
| 62 70 | 
             
            requirements: []
         | 
| 63 | 
            -
             | 
| 64 71 | 
             
            rubyforge_project: 
         | 
| 65 | 
            -
            rubygems_version: 1. | 
| 72 | 
            +
            rubygems_version: 1.8.11
         | 
| 66 73 | 
             
            signing_key: 
         | 
| 67 74 | 
             
            specification_version: 3
         | 
| 68 75 | 
             
            summary: Enhanced serialize options for rails, forked from serialize_with_options
         | 
| 69 76 | 
             
            test_files: []
         | 
| 70 | 
            -
             | 
| 77 | 
            +
            has_rdoc: false
         |