serialization_scopes 0.1.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.
data/.gitignore ADDED
@@ -0,0 +1,2 @@
1
+ Gemfile.lock
2
+ pkg/
data/Gemfile ADDED
@@ -0,0 +1,6 @@
1
+ source 'http://rubygems.org'
2
+
3
+ gem "activerecord", '< 3.0.0'
4
+ gem "rspec"
5
+ gem "rake"
6
+ gem "jeweler"
data/Rakefile ADDED
@@ -0,0 +1,29 @@
1
+ require 'bundler'
2
+ Bundler.setup
3
+
4
+ require 'rake'
5
+ require 'spec/rake/spectask'
6
+
7
+ desc 'Run specs.'
8
+ Spec::Rake::SpecTask.new('spec') do |t|
9
+ t.spec_files = FileList['spec/**/*_spec.rb']
10
+ t.spec_opts = ["-c"]
11
+ end
12
+
13
+ desc 'Default: run specs.'
14
+ task :default => :spec
15
+
16
+ begin
17
+ require 'jeweler'
18
+ Jeweler::Tasks.new do |gemspec|
19
+ gemspec.name = "serialization_scopes"
20
+ gemspec.summary = "Named scopes for ActiveRecord serialization methods (to_xml, to_json)"
21
+ gemspec.description = "Adds named scopes for ActiveRecord serialization methods (to_xml, to_json)"
22
+ gemspec.email = "dimitrij@blacksquaremedia.com"
23
+ gemspec.homepage = "http://github.com/dim/serialization_scopes"
24
+ gemspec.authors = ["Dimitrij Denissenko"]
25
+ gemspec.add_runtime_dependency "activerecord", ">= 2.3.0", '< 3.0.0'
26
+ end
27
+ Jeweler::GemcutterTasks.new
28
+ rescue LoadError
29
+ end
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.1.0
@@ -0,0 +1,33 @@
1
+ module SerializationScopes
2
+
3
+ def self.included(base)
4
+ base.extend ClassMethods
5
+ base.class_inheritable_reader :serialization_scopes
6
+ base.write_inheritable_attribute :serialization_scopes, {}
7
+ end
8
+
9
+ module ClassMethods
10
+ def serialization_scope(name, options = {})
11
+ serialization_scopes[name.to_sym] = options
12
+ end
13
+
14
+ def scoped_serialization_options(options = {})
15
+ name = options.delete(:scope)
16
+ scopes = name.present? && serialization_scopes[name.to_sym] ? serialization_scopes[name.to_sym] : serialization_scopes[:default]
17
+ scopes.each do |key, values|
18
+ options[key] ||= Array(values)
19
+ options[key] = Array(options[key]) & Array(values)
20
+ end if scopes
21
+ options
22
+ end
23
+ end
24
+
25
+ def to_xml(options = {})
26
+ super self.class.scoped_serialization_options(options)
27
+ end
28
+
29
+ def to_json(options = {})
30
+ super self.class.scoped_serialization_options(options)
31
+ end
32
+
33
+ end
data/rails/init.rb ADDED
@@ -0,0 +1,4 @@
1
+ require 'serialization_scopes'
2
+ ActiveRecord::Base.class_eval do
3
+ include SerializationScopes
4
+ end
@@ -0,0 +1,49 @@
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE DIRECTLY
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
4
+ # -*- encoding: utf-8 -*-
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = %q{serialization_scopes}
8
+ s.version = "0.1.0"
9
+
10
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
+ s.authors = ["Dimitrij Denissenko"]
12
+ s.date = %q{2010-08-19}
13
+ s.description = %q{Adds named scopes for ActiveRecord serialization methods (to_xml, to_json)}
14
+ s.email = %q{dimitrij@blacksquaremedia.com}
15
+ s.files = [
16
+ ".gitignore",
17
+ "Gemfile",
18
+ "Rakefile",
19
+ "VERSION",
20
+ "lib/serialization_scopes.rb",
21
+ "rails/init.rb",
22
+ "serialization_scopes.gemspec",
23
+ "spec/helper.rb",
24
+ "spec/serialization_scopes_spec.rb"
25
+ ]
26
+ s.homepage = %q{http://github.com/dim/serialization_scopes}
27
+ s.rdoc_options = ["--charset=UTF-8"]
28
+ s.require_paths = ["lib"]
29
+ s.rubygems_version = %q{1.3.7}
30
+ s.summary = %q{Named scopes for ActiveRecord serialization methods (to_xml, to_json)}
31
+ s.test_files = [
32
+ "spec/helper.rb",
33
+ "spec/serialization_scopes_spec.rb"
34
+ ]
35
+
36
+ if s.respond_to? :specification_version then
37
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
38
+ s.specification_version = 3
39
+
40
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
41
+ s.add_runtime_dependency(%q<activerecord>, [">= 2.3.0", "< 3.0.0"])
42
+ else
43
+ s.add_dependency(%q<activerecord>, [">= 2.3.0", "< 3.0.0"])
44
+ end
45
+ else
46
+ s.add_dependency(%q<activerecord>, [">= 2.3.0", "< 3.0.0"])
47
+ end
48
+ end
49
+
data/spec/helper.rb ADDED
@@ -0,0 +1,12 @@
1
+ ENV["RAILS_ENV"] ||= 'test'
2
+ $: << File.join(File.dirname(__FILE__),'..', 'lib')
3
+
4
+ require 'rubygems'
5
+ require 'active_record'
6
+
7
+ require File.join(File.dirname(__FILE__),'..', 'rails', 'init.rb')
8
+ require 'spec/autorun'
9
+ require 'spec/mocks'
10
+
11
+ ActiveRecord::Base.stub(:establish_connection)
12
+
@@ -0,0 +1,63 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/helper')
2
+
3
+ describe SerializationScopes do
4
+
5
+ class SomeModel < ActiveRecord::Base
6
+ serialization_scope :default, :only => [:id, :name], :methods => :currency
7
+ serialization_scope :admin, :only => [:id, :secret]
8
+
9
+ def self.columns
10
+ @columns ||= [
11
+ ActiveRecord::ConnectionAdapters::Column.new('id', nil, 'integer'),
12
+ ActiveRecord::ConnectionAdapters::Column.new('name', nil, 'string'),
13
+ ActiveRecord::ConnectionAdapters::Column.new('secret', nil, 'string')
14
+ ]
15
+ end
16
+
17
+ def after_initialize
18
+ self.id = 1
19
+ self.name = 'Any'
20
+ self.secret = 'key'
21
+ end
22
+
23
+ def currency
24
+ 'USD'
25
+ end
26
+ end
27
+
28
+ it 'should constraint to_xml' do
29
+ SomeModel.new.to_xml.should == %(<?xml version="1.0" encoding="UTF-8"?>
30
+ <some-model>
31
+ <id type="integer">1</id>
32
+ <name>Any</name>
33
+ <currency>USD</currency>
34
+ </some-model>
35
+ )
36
+ end
37
+
38
+ def as_hash(options = {})
39
+ ActiveSupport::JSON.decode(SomeModel.new.to_json(options))
40
+ end
41
+
42
+ it 'should constraint to_json' do
43
+ as_hash.should == { "name" => "Any", "currency" => "USD", "id" => 1 }
44
+ end
45
+
46
+ it 'should allow further restrictions' do
47
+ as_hash(:only => :name).should == { "name" => "Any", "currency" => "USD" }
48
+ as_hash(:methods => []).should == { "name" => "Any", "id" => 1 }
49
+ end
50
+
51
+ it 'should deny extensions if (default) scope is selected' do
52
+ as_hash(:only => [:id, :secret]).should == { "id" => 1, "currency" => "USD" }
53
+ end
54
+
55
+ it 'should have separate behaviours for different scopes' do
56
+ as_hash(:scope => :admin).should == { "id" => 1, "secret" => "key" }
57
+ end
58
+
59
+ it 'should fallback to default scope if invalid scope is given' do
60
+ as_hash(:scope => :invalid).should == { "name" => "Any", "currency" => "USD", "id" => 1 }
61
+ end
62
+
63
+ end
metadata ADDED
@@ -0,0 +1,99 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: serialization_scopes
3
+ version: !ruby/object:Gem::Version
4
+ hash: 27
5
+ prerelease: false
6
+ segments:
7
+ - 0
8
+ - 1
9
+ - 0
10
+ version: 0.1.0
11
+ platform: ruby
12
+ authors:
13
+ - Dimitrij Denissenko
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2010-08-19 00:00:00 +01:00
19
+ default_executable:
20
+ dependencies:
21
+ - !ruby/object:Gem::Dependency
22
+ version_requirements: &id001 !ruby/object:Gem::Requirement
23
+ none: false
24
+ requirements:
25
+ - - ">="
26
+ - !ruby/object:Gem::Version
27
+ hash: 3
28
+ segments:
29
+ - 2
30
+ - 3
31
+ - 0
32
+ version: 2.3.0
33
+ - - <
34
+ - !ruby/object:Gem::Version
35
+ hash: 7
36
+ segments:
37
+ - 3
38
+ - 0
39
+ - 0
40
+ version: 3.0.0
41
+ requirement: *id001
42
+ prerelease: false
43
+ type: :runtime
44
+ name: activerecord
45
+ description: Adds named scopes for ActiveRecord serialization methods (to_xml, to_json)
46
+ email: dimitrij@blacksquaremedia.com
47
+ executables: []
48
+
49
+ extensions: []
50
+
51
+ extra_rdoc_files: []
52
+
53
+ files:
54
+ - .gitignore
55
+ - Gemfile
56
+ - Rakefile
57
+ - VERSION
58
+ - lib/serialization_scopes.rb
59
+ - rails/init.rb
60
+ - serialization_scopes.gemspec
61
+ - spec/helper.rb
62
+ - spec/serialization_scopes_spec.rb
63
+ has_rdoc: true
64
+ homepage: http://github.com/dim/serialization_scopes
65
+ licenses: []
66
+
67
+ post_install_message:
68
+ rdoc_options:
69
+ - --charset=UTF-8
70
+ require_paths:
71
+ - lib
72
+ required_ruby_version: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ">="
76
+ - !ruby/object:Gem::Version
77
+ hash: 3
78
+ segments:
79
+ - 0
80
+ version: "0"
81
+ required_rubygems_version: !ruby/object:Gem::Requirement
82
+ none: false
83
+ requirements:
84
+ - - ">="
85
+ - !ruby/object:Gem::Version
86
+ hash: 3
87
+ segments:
88
+ - 0
89
+ version: "0"
90
+ requirements: []
91
+
92
+ rubyforge_project:
93
+ rubygems_version: 1.3.7
94
+ signing_key:
95
+ specification_version: 3
96
+ summary: Named scopes for ActiveRecord serialization methods (to_xml, to_json)
97
+ test_files:
98
+ - spec/helper.rb
99
+ - spec/serialization_scopes_spec.rb