serialization_scopes 0.2.1 → 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.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.2.1
1
+ 0.3.0
@@ -1,32 +1,41 @@
1
1
  module SerializationScopes
2
+ extend ActiveSupport::Concern
2
3
 
3
- def self.included(base)
4
- base.extend ClassMethods
5
- base.class_inheritable_reader :serialization_scopes
6
- base.write_inheritable_attribute :serialization_scopes, {}
4
+ included do
5
+ class_inheritable_reader :serialization_scopes
6
+ write_inheritable_attribute :serialization_scopes, {}
7
7
  end
8
8
 
9
9
  module ClassMethods
10
+
10
11
  def serialization_scope(name, options = {})
11
12
  serialization_scopes[name.to_sym] = options
12
13
  end
13
14
 
14
15
  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)
16
+ options ||= {}
17
+ name = (options || {})[:scope]
18
+ scopes = name.present? && serialization_scopes[name.to_sym] ? serialization_scopes[name.to_sym] : serialization_scopes[:default]
19
+ scopes.each do |key, scope_options|
20
+ custom_options = options[key]
21
+ options[key] = if key == :except
22
+ custom_options ? (Array.wrap(custom_options) + Array.wrap(scope_options)).uniq : Array.wrap(scope_options)
23
+ elsif [:only, :methods, :include].include?(key)
24
+ custom_options ? Array.wrap(custom_options) & Array.wrap(scope_options) : Array.wrap(scope_options)
25
+ else
26
+ custom_options ? custom_options : scope_options
27
+ end
20
28
  end if scopes
21
29
  options
22
30
  end
31
+
23
32
  end
24
33
 
25
34
  def to_xml(options = {})
26
35
  super self.class.scoped_serialization_options(options)
27
36
  end
28
37
 
29
- def to_json(options = {})
38
+ def as_json(options = {})
30
39
  super self.class.scoped_serialization_options(options)
31
40
  end
32
41
 
@@ -34,4 +43,8 @@ end
34
43
 
35
44
  ActiveRecord::Base.class_eval do
36
45
  include SerializationScopes
37
- end
46
+ end if defined?(ActiveRecord::Base)
47
+
48
+ ActiveResource::Base.class_eval do
49
+ include SerializationScopes
50
+ end if defined?(ActiveResource::Base)
metadata CHANGED
@@ -1,68 +1,47 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: serialization_scopes
3
3
  version: !ruby/object:Gem::Version
4
- hash: 21
5
- prerelease: false
4
+ hash: 19
5
+ prerelease:
6
6
  segments:
7
7
  - 0
8
- - 2
9
- - 1
10
- version: 0.2.1
8
+ - 3
9
+ - 0
10
+ version: 0.3.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Dimitrij Denissenko
14
+ - Evgeniy Dolzhenko
14
15
  autorequire:
15
16
  bindir: bin
16
17
  cert_chain: []
17
18
 
18
- date: 2010-08-19 00:00:00 +01:00
19
+ date: 2011-04-20 00:00:00 +01:00
19
20
  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: 27
28
- segments:
29
- - 2
30
- - 5
31
- - 0
32
- version: 2.5.0
33
- requirement: *id001
34
- prerelease: false
35
- type: :runtime
36
- name: activerecord
37
- description: Adds named scopes for ActiveRecord serialization methods (to_xml, to_json)
38
- email: dimitrij@blacksquaremedia.com
21
+ dependencies: []
22
+
23
+ description: Adds named scopes for ActiveRecord/ActiveResource serialization methods (to_xml, to_json)
24
+ email: info@blacksquaremedia.com
39
25
  executables: []
40
26
 
41
27
  extensions: []
42
28
 
43
- extra_rdoc_files:
44
- - README
29
+ extra_rdoc_files: []
30
+
45
31
  files:
46
- - .gitignore
47
- - Gemfile
48
- - Gemfile.lock
49
- - README
50
- - Rakefile
51
32
  - VERSION
33
+ - README
52
34
  - lib/serialization_scopes.rb
53
- - lib/serialization_scopes/matchers.rb
54
35
  - lib/serialization_scopes/matchers/serialize_matcher.rb
36
+ - lib/serialization_scopes/matchers.rb
55
37
  - rails/init.rb
56
- - serialization_scopes.gemspec
57
- - spec/helper.rb
58
- - spec/serialization_scopes_spec.rb
59
38
  has_rdoc: true
60
39
  homepage: http://github.com/dim/serialization_scopes
61
40
  licenses: []
62
41
 
63
42
  post_install_message:
64
- rdoc_options:
65
- - --charset=UTF-8
43
+ rdoc_options: []
44
+
66
45
  require_paths:
67
46
  - lib
68
47
  required_ruby_version: !ruby/object:Gem::Requirement
@@ -70,26 +49,29 @@ required_ruby_version: !ruby/object:Gem::Requirement
70
49
  requirements:
71
50
  - - ">="
72
51
  - !ruby/object:Gem::Version
73
- hash: 3
52
+ hash: 57
74
53
  segments:
75
- - 0
76
- version: "0"
54
+ - 1
55
+ - 8
56
+ - 7
57
+ version: 1.8.7
77
58
  required_rubygems_version: !ruby/object:Gem::Requirement
78
59
  none: false
79
60
  requirements:
80
61
  - - ">="
81
62
  - !ruby/object:Gem::Version
82
- hash: 3
63
+ hash: 23
83
64
  segments:
84
- - 0
85
- version: "0"
65
+ - 1
66
+ - 3
67
+ - 6
68
+ version: 1.3.6
86
69
  requirements: []
87
70
 
88
71
  rubyforge_project:
89
- rubygems_version: 1.3.7
72
+ rubygems_version: 1.6.2
90
73
  signing_key:
91
74
  specification_version: 3
92
- summary: Named scopes for ActiveRecord serialization methods (to_xml, to_json)
93
- test_files:
94
- - spec/helper.rb
95
- - spec/serialization_scopes_spec.rb
75
+ summary: Named scopes for ActiveRecord/ActiveResource serialization methods (to_xml, to_json)
76
+ test_files: []
77
+
data/.gitignore DELETED
@@ -1 +0,0 @@
1
- pkg/
data/Gemfile DELETED
@@ -1,6 +0,0 @@
1
- source 'http://rubygems.org'
2
-
3
- gem "activerecord", '>= 3.0.0.rc'
4
- gem "rspec", ">= 2.0.0.beta.17"
5
- gem "rake"
6
- gem "jeweler"
@@ -1,46 +0,0 @@
1
- GEM
2
- remote: http://rubygems.org/
3
- specs:
4
- activemodel (3.0.0.rc)
5
- activesupport (= 3.0.0.rc)
6
- builder (~> 2.1.2)
7
- i18n (~> 0.4.1)
8
- activerecord (3.0.0.rc)
9
- activemodel (= 3.0.0.rc)
10
- activesupport (= 3.0.0.rc)
11
- arel (~> 0.4.0)
12
- tzinfo (~> 0.3.22)
13
- activesupport (3.0.0.rc)
14
- arel (0.4.0)
15
- activesupport (>= 3.0.0.beta)
16
- builder (2.1.2)
17
- diff-lcs (1.1.2)
18
- gemcutter (0.6.1)
19
- git (1.2.5)
20
- i18n (0.4.1)
21
- jeweler (1.4.0)
22
- gemcutter (>= 0.1.0)
23
- git (>= 1.2.5)
24
- rubyforge (>= 2.0.0)
25
- json_pure (1.4.6)
26
- rake (0.8.7)
27
- rspec (2.0.0.beta.19)
28
- rspec-core (= 2.0.0.beta.19)
29
- rspec-expectations (= 2.0.0.beta.19)
30
- rspec-mocks (= 2.0.0.beta.19)
31
- rspec-core (2.0.0.beta.19)
32
- rspec-expectations (2.0.0.beta.19)
33
- diff-lcs (>= 1.1.2)
34
- rspec-mocks (2.0.0.beta.19)
35
- rubyforge (2.0.4)
36
- json_pure (>= 1.1.7)
37
- tzinfo (0.3.22)
38
-
39
- PLATFORMS
40
- ruby
41
-
42
- DEPENDENCIES
43
- activerecord (>= 3.0.0.rc)
44
- jeweler
45
- rake
46
- rspec (>= 2.0.0.beta.17)
data/Rakefile DELETED
@@ -1,26 +0,0 @@
1
- require 'bundler'
2
- Bundler.setup
3
-
4
- require 'rake'
5
- require 'rspec/mocks/version'
6
- require 'rspec/core/rake_task'
7
-
8
- RSpec::Core::RakeTask.new(:spec)
9
-
10
- desc 'Default: run specs.'
11
- task :default => :spec
12
-
13
- begin
14
- require 'jeweler'
15
- Jeweler::Tasks.new do |gemspec|
16
- gemspec.name = "serialization_scopes"
17
- gemspec.summary = "Named scopes for ActiveRecord serialization methods (to_xml, to_json)"
18
- gemspec.description = "Adds named scopes for ActiveRecord serialization methods (to_xml, to_json)"
19
- gemspec.email = "dimitrij@blacksquaremedia.com"
20
- gemspec.homepage = "http://github.com/dim/serialization_scopes"
21
- gemspec.authors = ["Dimitrij Denissenko"]
22
- gemspec.add_runtime_dependency "activerecord", "> 2.5.0"
23
- end
24
- Jeweler::GemcutterTasks.new
25
- rescue LoadError
26
- end
@@ -1,56 +0,0 @@
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.2.1"
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.extra_rdoc_files = [
16
- "README"
17
- ]
18
- s.files = [
19
- ".gitignore",
20
- "Gemfile",
21
- "Gemfile.lock",
22
- "README",
23
- "Rakefile",
24
- "VERSION",
25
- "lib/serialization_scopes.rb",
26
- "lib/serialization_scopes/matchers.rb",
27
- "lib/serialization_scopes/matchers/serialize_matcher.rb",
28
- "rails/init.rb",
29
- "serialization_scopes.gemspec",
30
- "spec/helper.rb",
31
- "spec/serialization_scopes_spec.rb"
32
- ]
33
- s.homepage = %q{http://github.com/dim/serialization_scopes}
34
- s.rdoc_options = ["--charset=UTF-8"]
35
- s.require_paths = ["lib"]
36
- s.rubygems_version = %q{1.3.7}
37
- s.summary = %q{Named scopes for ActiveRecord serialization methods (to_xml, to_json)}
38
- s.test_files = [
39
- "spec/helper.rb",
40
- "spec/serialization_scopes_spec.rb"
41
- ]
42
-
43
- if s.respond_to? :specification_version then
44
- current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
45
- s.specification_version = 3
46
-
47
- if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
48
- s.add_runtime_dependency(%q<activerecord>, ["> 2.5.0"])
49
- else
50
- s.add_dependency(%q<activerecord>, ["> 2.5.0"])
51
- end
52
- else
53
- s.add_dependency(%q<activerecord>, ["> 2.5.0"])
54
- end
55
- end
56
-
@@ -1,26 +0,0 @@
1
- ENV["RAILS_ENV"] ||= 'test'
2
- $:.unshift File.dirname(__FILE__)
3
- $:.unshift File.expand_path('../../lib', __FILE__)
4
-
5
- require 'rubygems'
6
-
7
- # Set up gems listed in the Gemfile.
8
- gemfile = File.expand_path('../../Gemfile', __FILE__)
9
- begin
10
- require 'bundler'
11
- Bundler.setup
12
- rescue Bundler::GemNotFound => e
13
- STDERR.puts e.message
14
- STDERR.puts "Try running `bundle install`."
15
- exit!
16
- end
17
-
18
- require 'active_record'
19
- require 'serialization_scopes'
20
- require 'rspec'
21
-
22
- RSpec.configure do |c|
23
- c.mock_with :rspec
24
- end
25
-
26
- ActiveRecord::Base.include_root_in_json = false
@@ -1,68 +0,0 @@
1
- require File.expand_path(File.dirname(__FILE__) + '/helper')
2
-
3
- describe SerializationScopes do
4
-
5
- before do
6
- ActiveRecord::Base.stub!(:establish_connection)
7
- end
8
-
9
- class SomeModel < ActiveRecord::Base
10
- serialization_scope :default, :only => [:id, :name], :methods => :currency
11
- serialization_scope :admin, :only => [:id, :secret]
12
- after_initialize :set_defaults
13
-
14
- def self.columns
15
- @columns ||= [
16
- ActiveRecord::ConnectionAdapters::Column.new('id', nil, 'integer'),
17
- ActiveRecord::ConnectionAdapters::Column.new('name', nil, 'string'),
18
- ActiveRecord::ConnectionAdapters::Column.new('secret', nil, 'string')
19
- ]
20
- end
21
-
22
- def set_defaults
23
- self.id = 1
24
- self.name = 'Any'
25
- self.secret = 'key'
26
- end
27
-
28
- def currency
29
- 'USD'
30
- end
31
- end
32
-
33
- it 'should constraint to_xml' do
34
- SomeModel.new.to_xml.should == %(<?xml version="1.0" encoding="UTF-8"?>
35
- <some-model>
36
- <name>Any</name>
37
- <id type="integer">1</id>
38
- <currency>USD</currency>
39
- </some-model>
40
- )
41
- end
42
-
43
- def as_hash(options = {})
44
- ActiveSupport::JSON.decode(SomeModel.new.to_json(options))
45
- end
46
-
47
- it 'should constraint to_json' do
48
- as_hash.should == { "name" => "Any", "currency" => "USD", "id" => 1 }
49
- end
50
-
51
- it 'should allow further restrictions' do
52
- as_hash(:only => :name).should == { "name" => "Any", "currency" => "USD" }
53
- as_hash(:methods => []).should == { "name" => "Any", "id" => 1 }
54
- end
55
-
56
- it 'should deny extensions if (default) scope is selected' do
57
- as_hash(:only => [:id, :secret]).should == { "id" => 1, "currency" => "USD" }
58
- end
59
-
60
- it 'should have separate behaviours for different scopes' do
61
- as_hash(:scope => :admin).should == { "id" => 1, "secret" => "key" }
62
- end
63
-
64
- it 'should fallback to default scope if invalid scope is given' do
65
- as_hash(:scope => :invalid).should == { "name" => "Any", "currency" => "USD", "id" => 1 }
66
- end
67
-
68
- end