dm-is-read_only 0.2.1 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore ADDED
@@ -0,0 +1,11 @@
1
+ doc
2
+ pkg
3
+ tmp/*
4
+ Gemfile.lock
5
+ .DS_Store
6
+ .bundle
7
+ .yardoc
8
+ *.db
9
+ *.log
10
+ *.swp
11
+ *~
data/ChangeLog.md CHANGED
@@ -1,12 +1,20 @@
1
+ ### 0.3.0 / 2012-02-17
2
+
3
+ * Require dm-core ~> 1.2.
4
+ * Replaced `DataMapper::Resource::State::ReadOnly` with
5
+ `DataMapper::Is::ReadOnly::State`.
6
+ * Replaced `DataMapper::ReadOnlyError` with
7
+ `DataMapper::Is::ReadOnly::Error`.
8
+
1
9
  ### 0.2.1 / 2011-03-23
2
10
 
3
11
  * Require dm-core ~> 1.0.
4
12
 
5
13
  ### 0.2.0 / 2010-11-05
6
14
 
7
- * Added {DataMapper::Resource::State::ReadOnly}:
15
+ * Added `DataMapper::Resource::State::ReadOnly`:
8
16
  * Inherits from the `Clean` state.
9
- * Raises {DataMapper::ReadOnlyError} exceptions when `set` or `delete`
17
+ * Raises `DataMapper::ReadOnlyError` exceptions when `set` or `delete`
10
18
  are called.
11
19
  * Fixed a bug where read-only resources with relationships were not being
12
20
  loaded.
data/Gemfile CHANGED
@@ -1,134 +1,81 @@
1
- # If you're working on more than one datamapper gem at a time, then it's
2
- # recommended to create a local Gemfile and use this instead of the git
3
- # sources. This will make sure that you are developing against your
4
- # other local datamapper sources that you currently work on. Gemfile.local
5
- # will behave identically to the standard Gemfile apart from the fact that
6
- # it fetches the datamapper gems from local paths. This means that you can
7
- # use the same environment variables, like ADAPTER(S) or PLUGIN(S) when
8
- # running
9
- # bundle commands. Gemfile.local is added to .gitignore, so you don't need
10
- # to worry about accidentally checking local development paths into git.
11
- # In order to create a local Gemfile, all you need to do is run:
12
1
  #
13
- # bundle exec rake local_gemfile
2
+ # Environment Variables:
14
3
  #
15
- # This will give you a Gemfile.local file that points to your local clones
16
- # of the various datamapper gems. It's assumed that all datamapper repo
17
- # clones reside in the same directory. You can use the Gemfile.local like
18
- # so for running any bundle command:
4
+ # DM_EDGE - Bundle against the DataMapper git repositories at
5
+ # http://github.com/datamapper
6
+ # DM_BRANCH - The branch to use across all DataMapper git repositories.
7
+ # DM_ROOT - The path to the directory containing local copies of the DataMapper
8
+ # libraries.
9
+ # ADAPTER(S) - The list of DataMapper adapters to test with.
10
+ # (sqlite, postgres, mysql, oracle, sqlserver)
11
+ # PLUGIN(S) - The list of additional DataMapper plugins to test with.
19
12
  #
20
- # BUNDLE_GEMFILE=Gemfile.local bundle foo
21
- #
22
- # You can also specify which adapter(s) should be part of the bundle by
23
- # setting an environment variable. This of course also works when using the
24
- # Gemfile.local
25
- #
26
- # bundle foo # dm-sqlite-adapter
27
- #
28
- # ADAPTER=mysql bundle foo # dm-mysql-adapter
29
- #
30
- # ADAPTERS=sqlite,mysql bundle foo # dm-sqlite-adapter, dm-mysql-adapter
31
- #
32
- # Of course you can also use the ADAPTER(S) variable when using the
33
- # Gemfile.local and running specs against selected adapters.
34
- #
35
- # For easily working with adapters supported on your machine, it's
36
- # recommended that you first install all adapters that you are planning to
37
- # use or work on by doing something like
38
- #
39
- # ADAPTERS=sqlite,mysql,postgres bundle install
40
- #
41
- # This will clone the various repositories and make them available to
42
- # bundler. Once you have them installed you can easily switch between
43
- # adapters for the various development tasks. Running something like
44
- #
45
- # ADAPTER=mysql bundle exec rake spec
46
- #
47
- # will make sure that the dm-mysql-adapter is part of the bundle, and will
48
- # be used when running the specs.
49
- #
50
- # You can also specify which plugin(s) should be part of the bundle by
51
- # setting an environment variable. This also works when using the
52
- # Gemfile.local
53
- #
54
- # bundle foo # dm-migrations
55
- #
56
- # PLUGINS=dm-validations bundle foo # dm-migrations,
57
- # # dm-validations
58
- #
59
- # PLUGINS=dm-validations,dm-types bundle foo # dm-migrations,
60
- # # dm-validations,
61
- # # dm-types
62
- #
63
- # Of course you can combine the PLUGIN(S) and ADAPTER(S) env vars to run
64
- # specs for certain adapter/plugin combinations.
65
- #
66
- # Finally, to speed up running specs and other tasks, it's recommended to
67
- # run
68
- #
69
- # bundle lock
70
- #
71
- # after running 'bundle install' for the first time. This will make
72
- # 'bundle exec' run a lot faster compared to the unlocked version. With an
73
- # unlocked bundle you would typically just run 'bundle install' from time
74
- # to time to fetch the latest sources from upstream. When you locked your
75
- # bundle, you need to run
76
- #
77
- # bundle install --relock
78
- #
79
- # to make sure to fetch the latest updates and then lock the bundle again.
80
- # Gemfile.lock is added to the .gitignore file, so you don't need to worry
81
- # about accidentally checking it into version control.
82
13
 
83
14
  source :rubygems
84
15
 
85
- DATAMAPPER = 'http://github.com/datamapper'
86
- DM_VERSION = '~> 1.1'
87
- DO_VERSION = '~> 0.10.2'
88
- DM_DO_ADAPTERS = %w[ sqlite postgres mysql oracle sqlserver ]
89
- RAILS = 'http://github.com/rails/rails.git'
16
+ gemspec
90
17
 
91
- gem 'dm-core', DM_VERSION, :git => "#{DATAMAPPER}/dm-core.git"
18
+ if ENV['DM_EDGE']
19
+ SOURCE = :git
20
+ DM_URI = 'http://github.com/datamapper'
21
+ DM_BRANCH = ENV.fetch('DM_BRANCH', 'master')
22
+ elsif ENV['DM_ROOT']
23
+ SOURCE = :path
24
+ DM_ROOT = File.expand_path(ENV['DM_ROOT'])
25
+ else
26
+ SOURCE = :gem
27
+ end
92
28
 
93
- group :development do
94
- gem 'rake', '~> 0.8.7'
29
+ DM_VERSION = '~> 1.2'
30
+ DO_VERSION = '~> 0.10.6'
31
+ DO_ADAPTERS = %w[ sqlite postgres mysql oracle sqlserver ]
95
32
 
96
- gem 'ore-tasks', '~> 0.4'
97
- gem 'rspec', '~> 2.4'
33
+ def dm_gem(name,repo=name)
34
+ options = case SOURCE
35
+ when :git
36
+ {:git => "#{DM_URI}/#{repo}.git", :branch => DM_BRANCH}
37
+ when :path
38
+ {:path => "#{DM_ROOT}/#{repo}"}
39
+ end
98
40
 
99
- gem 'kramdown', '~> 0.12'
100
- gem 'yard', '~> 0.6.0'
41
+ gem name, DM_VERSION, options
42
+ end
43
+
44
+ def do_gem(name)
45
+ dm_gem name, 'do'
101
46
  end
102
47
 
103
48
  group :datamapper do
104
- # We need this because we want to pin these dependencies to their git
105
- # master sources
49
+
50
+ dm_gem 'dm-core'
106
51
 
107
52
  adapters = ENV['ADAPTER'] || ENV['ADAPTERS']
108
53
  adapters = adapters.to_s.tr(',', ' ').split.uniq - %w[ in_memory ]
109
54
 
110
- if (do_adapters = DM_DO_ADAPTERS & adapters).any?
111
- options = {}
112
- options[:git] = "#{DATAMAPPER}/do.git" if ENV['DO_GIT'] == 'true'
113
-
114
- gem 'data_objects', DO_VERSION, options.dup
55
+ if (do_adapters = DO_ADAPTERS & adapters).any?
56
+ do_gem 'data_objects'
115
57
 
116
58
  do_adapters.each do |adapter|
117
59
  adapter = 'sqlite3' if adapter == 'sqlite'
118
- gem "do_#{adapter}", DO_VERSION, options.dup
60
+ do_gem "do_#{adapter}"
119
61
  end
120
62
 
121
- gem 'dm-do-adapter', DM_VERSION, :git => "#{DATAMAPPER}/dm-do-adapter.git"
63
+ dm_gem 'dm-do-adapter'
122
64
  end
123
65
 
124
- adapters.each do |adapter|
125
- gem "dm-#{adapter}-adapter", DM_VERSION, :git => "#{DATAMAPPER}/dm-#{adapter}-adapter.git"
126
- end
66
+ adapters.each { |adapter| dm_gem "dm-#{adapter}-adapter" }
127
67
 
128
68
  plugins = ENV['PLUGINS'] || ENV['PLUGIN']
129
69
  plugins = plugins.to_s.tr(',', ' ').split.push('dm-migrations').uniq
130
70
 
131
- plugins.each do |plugin|
132
- gem plugin, DM_VERSION, :git => "#{DATAMAPPER}/#{plugin}.git"
133
- end
71
+ plugins.each { |plugin| dm_gem plugin }
72
+
73
+ end
74
+
75
+ group :development do
76
+ gem 'rake', '~> 0.8'
77
+ gem 'ore-tasks', '~> 0.4'
78
+ gem 'rspec', '~> 2.4'
79
+
80
+ gem 'kramdown', '~> 0.12'
134
81
  end
data/LICENSE.txt CHANGED
@@ -1,4 +1,4 @@
1
- Copyright (c) 2010-2011 Hal Brodigan
1
+ Copyright (c) 2010-2012 Hal Brodigan
2
2
 
3
3
  Permission is hereby granted, free of charge, to any person obtaining
4
4
  a copy of this software and associated documentation files (the
data/README.md CHANGED
@@ -74,7 +74,7 @@ A DataMapper plugin for making Models absolutely **read-only**.
74
74
 
75
75
  ## Requirements
76
76
 
77
- * [dm-core](http://github.com/datamapper/dm-core/) ~> 1.0
77
+ * [dm-core](http://github.com/datamapper/dm-core/) ~> 1.2
78
78
 
79
79
  ## Install
80
80
 
@@ -82,6 +82,6 @@ A DataMapper plugin for making Models absolutely **read-only**.
82
82
 
83
83
  ## License
84
84
 
85
- Copyright (c) 2010-2011 Hal Brodigan
85
+ Copyright (c) 2010-2012 Hal Brodigan
86
86
 
87
87
  See {file:LICENSE.txt} for license information.
data/Rakefile CHANGED
@@ -3,16 +3,16 @@ require 'rubygems'
3
3
  begin
4
4
  require 'bundler'
5
5
  rescue LoadError => e
6
- STDERR.puts e.message
7
- STDERR.puts "Run `gem install bundler` to install Bundler."
6
+ warn e.message
7
+ warn "Run `gem install bundler` to install Bundler."
8
8
  exit e.status_code
9
9
  end
10
10
 
11
11
  begin
12
12
  Bundler.setup(:development)
13
13
  rescue Bundler::BundlerError => e
14
- STDERR.puts e.message
15
- STDERR.puts "Run `bundle install` to install missing gems"
14
+ warn e.message
15
+ warn "Run `bundle install` to install missing gems"
16
16
  exit e.status_code
17
17
  end
18
18
 
@@ -1,15 +1,127 @@
1
- # -*- encoding: utf-8 -*-
2
-
3
- begin
4
- Ore::Specification.new do |gemspec|
5
- # custom logic here
6
- end
7
- rescue NameError
8
- begin
9
- require 'ore/specification'
10
- retry
11
- rescue LoadError
12
- STDERR.puts "The 'dm-is-read_only.gemspec' file requires Ore."
13
- STDERR.puts "Run `gem install ore-core` to install Ore."
1
+ # encoding: utf-8
2
+
3
+ require 'yaml'
4
+
5
+ Gem::Specification.new do |gemspec|
6
+ files = if File.directory?('.git')
7
+ `git ls-files`.split($/)
8
+ elsif File.directory?('.hg')
9
+ `hg manifest`.split($/)
10
+ elsif File.directory?('.svn')
11
+ `svn ls -R`.split($/).select { |path| File.file?(path) }
12
+ else
13
+ Dir['{**/}{.*,*}'].select { |path| File.file?(path) }
14
+ end
15
+
16
+ filter_files = lambda { |paths|
17
+ case paths
18
+ when Array
19
+ (files & paths)
20
+ when String
21
+ (files & Dir[paths])
22
+ end
23
+ }
24
+
25
+ version = {
26
+ :file => 'lib/dm-is-read_only/version.rb',
27
+ :constant => 'DataMapper::Is::ReadOnly::VERSION'
28
+ }
29
+
30
+ defaults = {
31
+ 'name' => File.basename(File.dirname(__FILE__)),
32
+ 'files' => files,
33
+ 'executables' => filter_files['bin/*'].map { |path| File.basename(path) },
34
+ 'test_files' => filter_files['{test/{**/}*_test.rb,spec/{**/}*_spec.rb}'],
35
+ 'extra_doc_files' => filter_files['*.{txt,rdoc,md,markdown,tt,textile}'],
36
+ }
37
+
38
+ metadata = defaults.merge(YAML.load_file('gemspec.yml'))
39
+
40
+ gemspec.name = metadata.fetch('name',defaults[:name])
41
+ gemspec.version = if metadata['version']
42
+ metadata['version']
43
+ elsif File.file?(version[:file])
44
+ require File.join('.',version[:file])
45
+ eval(version[:constant])
46
+ end
47
+
48
+ gemspec.summary = metadata.fetch('summary',metadata['description'])
49
+ gemspec.description = metadata.fetch('description',metadata['summary'])
50
+
51
+ case metadata['license']
52
+ when Array
53
+ gemspec.licenses = metadata['license']
54
+ when String
55
+ gemspec.license = metadata['license']
56
+ end
57
+
58
+ case metadata['authors']
59
+ when Array
60
+ gemspec.authors = metadata['authors']
61
+ when String
62
+ gemspec.author = metadata['authors']
63
+ end
64
+
65
+ gemspec.email = metadata['email']
66
+ gemspec.homepage = metadata['homepage']
67
+
68
+ case metadata['require_paths']
69
+ when Array
70
+ gemspec.require_paths = metadata['require_paths']
71
+ when String
72
+ gemspec.require_path = metadata['require_paths']
73
+ end
74
+
75
+ gemspec.files = filter_files[metadata['files']]
76
+
77
+ gemspec.executables = metadata['executables']
78
+ gemspec.extensions = metadata['extensions']
79
+
80
+ if Gem::VERSION < '1.7.'
81
+ gemspec.default_executable = gemspec.executables.first
82
+ end
83
+
84
+ gemspec.test_files = filter_files[metadata['test_files']]
85
+
86
+ unless gemspec.files.include?('.document')
87
+ gemspec.extra_rdoc_files = metadata['extra_doc_files']
88
+ end
89
+
90
+ gemspec.post_install_message = metadata['post_install_message']
91
+ gemspec.requirements = metadata['requirements']
92
+
93
+ if gemspec.respond_to?(:required_ruby_version=)
94
+ gemspec.required_ruby_version = metadata['required_ruby_version']
95
+ end
96
+
97
+ if gemspec.respond_to?(:required_rubygems_version=)
98
+ gemspec.required_rubygems_version = metadata['required_rubygems_version']
99
+ end
100
+
101
+ parse_versions = lambda { |versions|
102
+ case versions
103
+ when Array
104
+ versions.map { |v| v.to_s }
105
+ when String
106
+ versions.split(/,\s*/)
107
+ end
108
+ }
109
+
110
+ if metadata['dependencies']
111
+ metadata['dependencies'].each do |name,versions|
112
+ gemspec.add_dependency(name,parse_versions[versions])
113
+ end
114
+ end
115
+
116
+ if metadata['runtime_dependencies']
117
+ metadata['runtime_dependencies'].each do |name,versions|
118
+ gemspec.add_runtime_dependency(name,parse_versions[versions])
119
+ end
120
+ end
121
+
122
+ if metadata['development_dependencies']
123
+ metadata['development_dependencies'].each do |name,versions|
124
+ gemspec.add_development_dependency(name,parse_versions[versions])
125
+ end
14
126
  end
15
127
  end
data/gemspec.yml CHANGED
@@ -1,5 +1,5 @@
1
1
  name: dm-is-read_only
2
- version: 0.2.1
2
+ version: 0.3.0
3
3
  summary: DataMapper plugin for making models absolutely read-only.
4
4
  description:
5
5
  A DataMapper plugin for making models absolutely read-only.
@@ -11,8 +11,8 @@ homepage: http://github.com/postmodern/dm-is-read_only
11
11
  has_yard: true
12
12
 
13
13
  dependencies:
14
- dm-core: ~> 1.0
14
+ dm-core: ~> 1.2
15
15
 
16
16
  development_dependencies:
17
17
  bundler: ~> 1.0.0
18
- yard: ~> 0.6.0
18
+ yard: ~> 0.7
@@ -0,0 +1,11 @@
1
+ module DataMapper
2
+ module Is
3
+ module ReadOnly
4
+ #
5
+ # @since 0.3.0
6
+ #
7
+ class Error < RuntimeError
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1 @@
1
+ require 'dm-is-read_only/is/read_only/exceptions/error'
@@ -1,12 +1,12 @@
1
- require 'dm-is-read_only/exceptions/read_only_error'
1
+ require 'dm-is-read_only/is/read_only/exceptions/error'
2
2
 
3
3
  module DataMapper
4
- module Resource
5
- class State
4
+ module Is
5
+ module ReadOnly
6
6
  #
7
7
  # A lazy-loaded and unmodifiable resource.
8
8
  #
9
- class ReadOnly < Clean
9
+ class State < DataMapper::Resource::PersistenceState::Clean
10
10
 
11
11
  #
12
12
  # Receives modifications attempts on a read-only resource.
@@ -17,7 +17,7 @@ module DataMapper
17
17
  # @since 0.2.0
18
18
  #
19
19
  def set(subject,value)
20
- raise(ReadOnlyError,"ReadOnly resource cannot be modified",caller)
20
+ raise(Error,"ReadOnly resource cannot be modified",caller)
21
21
  end
22
22
 
23
23
  #
@@ -29,7 +29,7 @@ module DataMapper
29
29
  # @since 0.2.0
30
30
  #
31
31
  def delete
32
- raise(ReadOnlyError,"ReadOnly resource cannot be deleted",caller)
32
+ raise(Error,"ReadOnly resource cannot be deleted",caller)
33
33
  end
34
34
 
35
35
  end
@@ -1,4 +1,4 @@
1
- require 'dm-is-read_only/resource/state/read_only'
1
+ require 'dm-is-read_only/is/read_only/state'
2
2
 
3
3
  module DataMapper
4
4
  module Is
@@ -68,14 +68,16 @@ module DataMapper
68
68
 
69
69
  module InstanceMethods
70
70
  #
71
- # Overrides the default `persisted_state` method, to always use
72
- # {DataMapper::Resource::State::ReadOnly}.
71
+ # Overrides the default `persistence_state` method, to always use
72
+ # {DataMapper::Is::ReadOnly::State}.
73
73
  #
74
- # @return [DataMapper::Resource::State::ReadOnly]
74
+ # @return [DataMapper::Is::ReadOnly::State]
75
75
  # The read-only state.
76
76
  #
77
- def persisted_state
78
- @_state ||= Resource::State::ReadOnly.new(self)
77
+ # @since 0.3.0
78
+ #
79
+ def persistence_state
80
+ @_persistence_state ||= DataMapper::Is::ReadOnly::State.new(self)
79
81
  end
80
82
 
81
83
  #
@@ -84,11 +86,13 @@ module DataMapper
84
86
  # @param [DataMapper::Resource::State] new_state
85
87
  # The new state to use.
86
88
  #
87
- # @return [DataMapper::Resource::State::ReadOnly]
89
+ # @return [DataMapper::Is::ReadOnly::State]
88
90
  # Always returns the read-only state.
89
91
  #
90
- def persisted_state=(new_state)
91
- persisted_state
92
+ # @since 0.3.0
93
+ #
94
+ def persistence_state=(new_state)
95
+ persistence_state
92
96
  end
93
97
  end
94
98
  end
@@ -1,4 +1,5 @@
1
1
  require 'dm-core'
2
+ require 'dm-is-read_only'
2
3
 
3
4
  class ReadOnlyModel
4
5
 
@@ -1,42 +1,22 @@
1
1
  require 'spec_helper'
2
2
 
3
- require 'classes/backend_model'
4
- require 'classes/read_only_model'
5
- require 'classes/related_model'
6
-
7
3
  describe DataMapper::Is::ReadOnly do
8
- context "migrate!" do
9
- before(:all) do
10
- BackendModel.auto_migrate!
11
-
12
- ('a'..'z').each do |value|
13
- BackendModel.create(:value => value)
14
- end
15
-
4
+ describe "migrate!" do
5
+ it "should not destroy the contents of the storage table" do
16
6
  ReadOnlyModel.migrate!
17
- end
18
7
 
19
- it "should not destroy the contents of the storage table" do
20
8
  ReadOnlyModel.all.length.should == 26
21
9
  end
22
10
 
23
11
  it "should still return true" do
24
- (ReadOnlyModel.auto_migrate!).should == true
12
+ (ReadOnlyModel.migrate!).should == true
25
13
  end
26
14
  end
27
15
 
28
- context "auto_migrate!" do
29
- before(:all) do
30
- BackendModel.auto_migrate!
31
-
32
- ('a'..'z').each do |value|
33
- BackendModel.create(:value => value)
34
- end
35
-
16
+ describe "auto_migrate!" do
17
+ it "should not destroy the contents of the storage table" do
36
18
  ReadOnlyModel.auto_migrate!
37
- end
38
19
 
39
- it "should not destroy the contents of the storage table" do
40
20
  ReadOnlyModel.all.length.should == 26
41
21
  end
42
22
 
@@ -45,15 +25,17 @@ describe DataMapper::Is::ReadOnly do
45
25
  end
46
26
  end
47
27
 
48
- context "auto_upgrade!" do
28
+ describe "auto_upgrade!" do
49
29
  end
50
30
 
51
- context "immutable" do
52
- before(:all) do
53
- RelatedModel.auto_migrate!
54
- BackendModel.auto_migrate!
55
- BackendModel.create(:value => 'x')
31
+ describe "immutable" do
32
+ TransientState = if defined?(DataMapper::Resource::PersistenceState)
33
+ DataMapper::Resource::PersistenceState::Transient
34
+ else
35
+ DataMapper::Resource::State::TransientState
36
+ end
56
37
 
38
+ before(:all) do
57
39
  @resource = ReadOnlyModel.first(:value => 'x')
58
40
 
59
41
  RelatedModel.create(:read_only_model => @resource)
@@ -61,16 +43,20 @@ describe DataMapper::Is::ReadOnly do
61
43
  @related_resource = RelatedModel.first
62
44
  end
63
45
 
46
+ it "should have an ReadOnly persisted state" do
47
+ @resource.persistence_state.class.should == described_class::State
48
+ end
49
+
64
50
  it "should prevent setting properties" do
65
51
  lambda {
66
52
  @resource.value = 'z'
67
- }.should raise_error(DataMapper::ReadOnlyError)
53
+ }.should raise_error(DataMapper::Is::ReadOnly::Error)
68
54
  end
69
55
 
70
56
  it "should prevent updating resources" do
71
57
  lambda {
72
58
  @resource.update(:value => 'z')
73
- }.should raise_error(DataMapper::ReadOnlyError)
59
+ }.should raise_error(DataMapper::Is::ReadOnly::Error)
74
60
  end
75
61
 
76
62
  it "should mark read-only resources as saved" do
@@ -96,26 +82,22 @@ describe DataMapper::Is::ReadOnly do
96
82
  it "should prevent calling destroy" do
97
83
  lambda {
98
84
  @resource.destroy
99
- }.should raise_error(DataMapper::ReadOnlyError)
85
+ }.should raise_error(DataMapper::Is::ReadOnly::Error)
100
86
  end
101
87
 
102
88
  it "should prevent calling destroy!" do
103
89
  lambda {
104
90
  @resource.destroy!
105
- }.should raise_error(DataMapper::ReadOnlyError)
106
- end
107
-
108
- it "should have an ReadOnly persisted state" do
109
- @resource.persisted_state.class.should == DataMapper::Resource::State::ReadOnly
91
+ }.should raise_error(DataMapper::Is::ReadOnly::Error)
110
92
  end
111
93
 
112
94
  it "should prevent forcibly changing the persisted state" do
113
- old_state = @resource.persisted_state
95
+ old_state = @resource.persistence_state
114
96
 
115
- new_state = DataMapper::Resource::State::Transient.new(@resource)
116
- @resource.persisted_state = new_state
97
+ new_state = TransientState.new(@resource)
98
+ @resource.persistence_state = new_state
117
99
 
118
- @resource.persisted_state.should == old_state
100
+ @resource.persistence_state.should == old_state
119
101
  end
120
102
 
121
103
  it "should report the resource as having already been saved" do
data/spec/spec_helper.rb CHANGED
@@ -3,9 +3,21 @@ require 'dm-core/spec/setup'
3
3
  require 'dm-core/spec/lib/adapter_helpers'
4
4
 
5
5
  require 'dm-is-read_only'
6
+ require 'classes/backend_model'
7
+ require 'classes/read_only_model'
8
+ require 'classes/related_model'
6
9
 
7
10
  DataMapper::Spec.setup
8
11
 
9
12
  RSpec.configure do |config|
10
13
  config.extend(DataMapper::Spec::Adapters::Helpers)
14
+
15
+ config.before(:suite) do
16
+ DataMapper.finalize
17
+ BackendModel.auto_migrate!
18
+
19
+ ('a'..'z').each do |value|
20
+ BackendModel.create(:value => value)
21
+ end
22
+ end
11
23
  end
metadata CHANGED
@@ -1,61 +1,59 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: dm-is-read_only
3
- version: !ruby/object:Gem::Version
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.3.0
4
5
  prerelease:
5
- version: 0.2.1
6
6
  platform: ruby
7
- authors:
7
+ authors:
8
8
  - Postmodern
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
-
13
- date: 2011-03-23 00:00:00 -04:00
14
- default_executable:
15
- dependencies:
16
- - !ruby/object:Gem::Dependency
12
+ date: 2012-02-18 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
17
15
  name: dm-core
18
- requirement: &id001 !ruby/object:Gem::Requirement
16
+ requirement: &20890100 !ruby/object:Gem::Requirement
19
17
  none: false
20
- requirements:
18
+ requirements:
21
19
  - - ~>
22
- - !ruby/object:Gem::Version
23
- version: "1.0"
20
+ - !ruby/object:Gem::Version
21
+ version: '1.2'
24
22
  type: :runtime
25
23
  prerelease: false
26
- version_requirements: *id001
27
- - !ruby/object:Gem::Dependency
24
+ version_requirements: *20890100
25
+ - !ruby/object:Gem::Dependency
28
26
  name: bundler
29
- requirement: &id002 !ruby/object:Gem::Requirement
27
+ requirement: &20886460 !ruby/object:Gem::Requirement
30
28
  none: false
31
- requirements:
29
+ requirements:
32
30
  - - ~>
33
- - !ruby/object:Gem::Version
31
+ - !ruby/object:Gem::Version
34
32
  version: 1.0.0
35
33
  type: :development
36
34
  prerelease: false
37
- version_requirements: *id002
38
- - !ruby/object:Gem::Dependency
35
+ version_requirements: *20886460
36
+ - !ruby/object:Gem::Dependency
39
37
  name: yard
40
- requirement: &id003 !ruby/object:Gem::Requirement
38
+ requirement: &20965380 !ruby/object:Gem::Requirement
41
39
  none: false
42
- requirements:
40
+ requirements:
43
41
  - - ~>
44
- - !ruby/object:Gem::Version
45
- version: 0.6.0
42
+ - !ruby/object:Gem::Version
43
+ version: '0.7'
46
44
  type: :development
47
45
  prerelease: false
48
- version_requirements: *id003
46
+ version_requirements: *20965380
49
47
  description: A DataMapper plugin for making models absolutely read-only.
50
- email:
51
- - postmodern.mod3@gmail.com
48
+ email: postmodern.mod3@gmail.com
52
49
  executables: []
53
-
54
50
  extensions: []
55
-
56
- extra_rdoc_files:
51
+ extra_rdoc_files:
52
+ - ChangeLog.md
53
+ - LICENSE.txt
57
54
  - README.md
58
- files:
55
+ files:
56
+ - .gitignore
59
57
  - .rspec
60
58
  - .yardopts
61
59
  - ChangeLog.md
@@ -66,41 +64,40 @@ files:
66
64
  - dm-is-read_only.gemspec
67
65
  - gemspec.yml
68
66
  - lib/dm-is-read_only.rb
69
- - lib/dm-is-read_only/exceptions/read_only_error.rb
70
67
  - lib/dm-is-read_only/is/read_only.rb
71
- - lib/dm-is-read_only/resource/state/read_only.rb
68
+ - lib/dm-is-read_only/is/read_only/exceptions.rb
69
+ - lib/dm-is-read_only/is/read_only/exceptions/error.rb
70
+ - lib/dm-is-read_only/is/read_only/state.rb
72
71
  - spec/classes/backend_model.rb
73
72
  - spec/classes/read_only_model.rb
74
73
  - spec/classes/related_model.rb
75
74
  - spec/integration/read_only_spec.rb
76
75
  - spec/spec_helper.rb
77
- has_rdoc: yard
78
76
  homepage: http://github.com/postmodern/dm-is-read_only
79
- licenses:
77
+ licenses:
80
78
  - MIT
81
79
  post_install_message:
82
80
  rdoc_options: []
83
-
84
- require_paths:
81
+ require_paths:
85
82
  - lib
86
- required_ruby_version: !ruby/object:Gem::Requirement
83
+ required_ruby_version: !ruby/object:Gem::Requirement
87
84
  none: false
88
- requirements:
89
- - - ">="
90
- - !ruby/object:Gem::Version
91
- version: "0"
92
- required_rubygems_version: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - ! '>='
87
+ - !ruby/object:Gem::Version
88
+ version: '0'
89
+ required_rubygems_version: !ruby/object:Gem::Requirement
93
90
  none: false
94
- requirements:
95
- - - ">="
96
- - !ruby/object:Gem::Version
97
- version: 1.3.6
91
+ requirements:
92
+ - - ! '>='
93
+ - !ruby/object:Gem::Version
94
+ version: '0'
98
95
  requirements: []
99
-
100
- rubyforge_project: dm-is-read_only
101
- rubygems_version: 1.6.2
96
+ rubyforge_project:
97
+ rubygems_version: 1.8.15
102
98
  signing_key:
103
99
  specification_version: 3
104
100
  summary: DataMapper plugin for making models absolutely read-only.
105
- test_files:
101
+ test_files:
106
102
  - spec/integration/read_only_spec.rb
103
+ has_rdoc:
@@ -1,4 +0,0 @@
1
- module DataMapper
2
- class ReadOnlyError < RuntimeError
3
- end
4
- end