dm-is-read_only 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/.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