store_schema 1.0.1 → 1.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: c0c899eb43370250925e1803da9c872cae0b4057
4
- data.tar.gz: 4c450014fcf2252f623034bafc530ad6e7e5ddcf
2
+ SHA256:
3
+ metadata.gz: 8e0d5a3940a73ebbeb967b4911715c13956da65f788e109001d470109e0062a5
4
+ data.tar.gz: 23edb9b000020a42596536807f688782dbcd81f66bed585c5b3a7735089d7afb
5
5
  SHA512:
6
- metadata.gz: 8415e2156dd986ca48fab50ac5dfd230739bdb4c91f4fab1ab8ed186cded196dd0c3e75ff60cc2e3079c87c897293a90f2063b0e77abfd1d15e0f8d00ffffea2
7
- data.tar.gz: 978122d82d8b8d9c393786e57dde1b2b374bec983ee61ebd96ac3f1a7428ce969c6f5e08e4423277e8bb803eac66d9fbd997c901a89600b3c2db5d7afe1a5065
6
+ metadata.gz: b1d01a28c7a68a6dfcb6b6c91b95e2b1e76f35fcd04e827f3ebf24f46acd3f3696d6b1983a7776b71333fd04ec68d2cc0136c263ded640e08248c170a964c970
7
+ data.tar.gz: 443ef25604487eebd51c0287be8f7031d8364d6300648dd0926ba1bf3f54dff6b2f160470d0ea898e73171aa1dfb60fdbfa0ff622cfa5ce8a3ab4707f2b6ad41
data/CHANGELOG.md ADDED
@@ -0,0 +1,5 @@
1
+ ## v1.1.0
2
+
3
+ * Added support for Ruby 2.5 and 2.6
4
+ * Added support for ActiveRecord 5.2 and 6.0
5
+ * Dropped support for Ruby 2.4
data/README.md CHANGED
@@ -1,10 +1,9 @@
1
1
  # Store Schema
2
2
 
3
- [![Gem Version](https://badge.fury.io/rb/store_schema.svg)](http://badge.fury.io/rb/store_schema)
4
- [![Code Climate](https://codeclimate.com/github/mrrooijen/store_schema.png)](https://codeclimate.com/github/mrrooijen/store_schema)
3
+ [![Gem Version](https://badge.fury.io/rb/store_schema.svg)](https://badge.fury.io/rb/store_schema)
5
4
  [![Build Status](https://travis-ci.org/mrrooijen/store_schema.svg)](https://travis-ci.org/mrrooijen/store_schema)
6
5
 
7
- StoreSchema, for Rails/ActiveRecord 5.1.0+, enhances `ActiveRecord::Base.store_accessor` with data conversion capabilities.
6
+ StoreSchema enhances `ActiveRecord::Base.store_accessor` with data type conversion capabilities.
8
7
 
9
8
  This library was developed for- and extracted from [HireFire].
10
9
 
@@ -13,8 +12,8 @@ The documentation can be found on [RubyDoc].
13
12
 
14
13
  ### Compatibility
15
14
 
16
- - Rails/ActiveRecord 5.1.0+
17
- - Ruby (MRI) 2.4.0+
15
+ - Ruby (MRI) 2.5 ~ 2.6
16
+ - ActiveRecord 5.1 ~ 6.0
18
17
 
19
18
 
20
19
  ### Installation
@@ -28,8 +27,7 @@ gem "store_schema"
28
27
 
29
28
  ### Example
30
29
 
31
- This example assumes you have a `websites` table with a column named
32
- `config` of type `text`.
30
+ This example assumes that you have a `websites` table with a `config` column of type `text`.
33
31
 
34
32
  Define a model and use `store_schema`.
35
33
 
@@ -39,11 +37,11 @@ class Website < ActiveRecord::Base
39
37
  # Tell ActiveRecord that we want to serialize the :config attribute
40
38
  # and store the serialized data as text in the config column.
41
39
  #
42
- # By default, `store` serializes your data as YAML. You can swap this out for
43
- # any other coder you want. For example JSON or Oj (high performance JSON).
40
+ # By default, `store` serializes your data using the YAML coder. You can
41
+ # swap the YAML coder out for other coders, such as JSON.
44
42
  #
45
- # If you're using PostgreSQL's hstore or json column-type instead of the
46
- # text column-type, you should'nt define `store :config`.
43
+ # Note: If you're using PostgresSQL hstore- or json instead of a
44
+ # plain text column type, don't define `store :config`.
47
45
  #
48
46
  store :config, coder: JSON
49
47
 
@@ -51,10 +49,10 @@ class Website < ActiveRecord::Base
51
49
  # ActiveRecord::Migration.
52
50
  #
53
51
  store_schema :config do |s|
54
- s.string :name
55
- s.integer :visitors
56
- s.float :apdex
57
- s.boolean :ssl
52
+ s.string :name
53
+ s.integer :visitors
54
+ s.float :apdex
55
+ s.boolean :ssl
58
56
  s.datetime :published_at
59
57
  end
60
58
  end
@@ -65,90 +63,100 @@ the generated accessors.
65
63
 
66
64
  ```rb
67
65
  website = Website.create(
68
- name: "Example Website",
69
- visitors: 1337,
70
- apdex: 1.0,
71
- ssl: true,
72
- published_at: Time.now
66
+ :name => "Example Website",
67
+ :visitors => 9001,
68
+ :apdex => 1.0,
69
+ :ssl => true,
70
+ :published_at => Time.now
73
71
  )
74
72
 
75
- p website.name # => "Example Website" (String)
76
- p website.visitors # => 1337 (Fixnum)
77
- p website.apdex # => 1.0 (Float)
78
- p website.ssl # => true (TrueClass)
79
- p website.published_at # => "Thu, 18 Sep 2014 23:18:11 +0000" (DateTime)
73
+ website.name # => (String) "Example Website"
74
+ website.visitors # => (Integer) 9001
75
+ website.apdex # => (Float) 1.0
76
+ website.ssl # => (TrueClass) true
77
+ website.published_at # => (DateTime) "Thu, 18 Sep 2014 23:18:11 +0000"
80
78
 
81
- p website.config
79
+ website.config
82
80
  # =>
83
81
  # {
84
- # "name" => "Example Website",
85
- # "visitors" => "1337",
86
- # "apdex" => "1.0",
87
- # "ssl" => "t",
82
+ # "name" => "Example Website",
83
+ # "visitors" => "9001",
84
+ # "apdex" => "1.0",
85
+ # "ssl" => "t",
88
86
  # "published_at" => "2014-09-18 23:18:11.583168000"
89
87
  # }
90
88
  ```
91
89
 
92
- That's it. This is similar to just using `store_accessor`, except that
93
- `store_schema` is more strict as to what data types are stored. It attempts
94
- to stay consistent with ActiveRecord's column conventions such as storing
95
- booleans (`0`, `"0"`, `1`, `"1"`, `"t"`, `"T"`, `"f"`, `"F"`, `true`,
96
- `"true"`, `"TRUE"`, `false`, `"false"`, `"FALSE"`, `"on"`, `"ON"`, `"off"`,
97
- `"OFF"`) as `"t"` and `"f"`, storing `Time`, `Date` as `DateTime`,
98
- ensuring `Time` is UTC prior to being stored, and more.
99
-
100
- When accessing stored data, it properly converts them to their data types.
101
- For example, `"t"` is converted to a TrueClass, and
102
- `"2014-09-18 23:18:11.583168000"` is converted back to a DateTime.
103
- See above example.
104
-
105
- If you need to be able to query these serialized attributes,
106
- consider using [PostgreSQL's HStore Extension]. If you do not need to
107
- be able to query the serialized data, you can simply use a text-type column
108
- and use the `store <column>[, coder: JSON]` method in your model which works
109
- with any SQL database.
90
+ This is similar to using ActiveRecord's built-in `store_accessor`, except
91
+ that `store_schema` is more strict about which data types are stored. It attempts
92
+ to remain consistent with ActiveRecord's regular column storage conventions.
93
+
94
+ * String
95
+ * Assigned as: `String`
96
+ * Stored as: `String`
97
+ * Retrieved as: `String`
98
+ * Integer
99
+ * Assigned as: `Integer`
100
+ * Stored as: `String`
101
+ * Retrieved as: `Integer`
102
+ * Float
103
+ * Assigned as: `Float`
104
+ * Stored as: `String`
105
+ * Retrieved as: `Float`
106
+ * Boolean (TrueClass)
107
+ * Assigned as: `1`, `"1"`, `"t"`, `"T"`, `true`, `"true"`, `"TRUE"`, `"on"`, `"ON"`
108
+ * Stored as: `"t"`
109
+ * Retrieved as: `true`
110
+ * Boolean (FalseClass)
111
+ * Assigned as: `0`, `"0"`, `"f"`, `"F"`, `false`, `"false"`, `"FALSE"`, `"off"`, `"OFF"`
112
+ * Stored as: `"f"`
113
+ * Retrieved as: `false`
114
+ * DateTime
115
+ * Assigned as: `Date`, `Time`, `DateTime`
116
+ * Stored as: `"2014-09-18 23:18:11.583168000"` (using UTC time zone)
117
+ * Retrieved as: `DateTime`
118
+
119
+ If you need to be able to query these serialized attributes, consider using
120
+ the PostgreSQL hstore extension. Otherwise, you can simply use a text column type
121
+ and define `store <column>[, coder: JSON]` in your model and it should work with
122
+ any ActiveRecord-compatible database.
110
123
 
111
124
 
112
125
  ### Contributing
113
126
 
114
127
  Contributions are welcome, but please conform to these requirements:
115
128
 
116
- - Ruby (MRI) 2.4.0+
117
- - ActiveRecord 5.1.0+
118
- - 100% Spec Coverage
119
- - Generated by when running the test suite
120
- - 100% [Passing Specs]
121
- - Run test suite with `$ rspec spec`
122
- - 4.0 [Code Climate Score]
123
- - Run `$ rubycritic lib` to generate the score locally and receive tips
124
- - No code smells
125
- - No duplication
129
+ - Ruby (MRI) 2.5 ~ 2.6
130
+ - ActiveRecord 5.1 ~ 6.0
131
+ - 100% Test Coverage
132
+ - Coverage results are generated after each test run at `coverage/index.html`
133
+ - 100% Passing Tests
134
+ - Run test suite with `$ rake test`
126
135
 
127
136
  To start contributing, fork the project, clone it, and install the development dependencies:
128
137
 
129
138
  ```
130
- git clone git@github.com:USERNAME/store_schema.git
131
- cd store_schema
132
- bundle
139
+ $ git clone git@github.com:USERNAME/store_schema.git
140
+ $ cd store_schema
141
+ $ bundle
133
142
  ```
134
143
 
135
- Ensure that everything works:
144
+ To run the tests:
136
145
 
137
146
  ```
138
- rspec spec
139
- rubycritic lib
147
+ $ rake test
140
148
  ```
141
149
 
142
150
  To run the local documentation server:
143
151
 
144
152
  ```
145
- yard server --reload
153
+ $ rake doc
146
154
  ```
147
155
 
148
- Create a new branch and start hacking:
156
+ Create a new branch to start contributing:
149
157
 
150
158
  ```
151
- git checkout -b my-contributions
159
+ $ git checkout -b my-contribution master
152
160
  ```
153
161
 
154
162
  Submit a pull request.
@@ -159,10 +167,7 @@ Submit a pull request.
159
167
  Released under the [MIT License] by [Michael van Rooijen].
160
168
 
161
169
  [Michael van Rooijen]: https://twitter.com/mrrooijen
162
- [HireFire]: http://hirefire.io
170
+ [HireFire]: https://www.hirefire.io
163
171
  [Passing Specs]: https://travis-ci.org/mrrooijen/store_schema
164
- [Code Climate Score]: https://codeclimate.com/github/mrrooijen/store_schema
165
- [RubyDoc]: http://rubydoc.info/github/mrrooijen/store_schema/master/frames
172
+ [RubyDoc]: https://rubydoc.info/github/mrrooijen/store_schema/master/frames
166
173
  [MIT License]: https://github.com/mrrooijen/store_schema/blob/master/LICENSE
167
- [RubyGems.org]: https://rubygems.org/gems/store_schema
168
- [PostgreSQL's HStore Extension]: http://www.postgresql.org/docs/9.3/static/hstore.html
@@ -22,9 +22,9 @@ class StoreSchema::AccessorDefiner
22
22
  # @param attribute [Symbol] the name of the {#column}'s attribute
23
23
  #
24
24
  def initialize(klass, column, type, attribute)
25
- @klass = klass
26
- @column = column
27
- @type = type
25
+ @klass = klass
26
+ @column = column
27
+ @type = type
28
28
  @attribute = attribute
29
29
  end
30
30
 
@@ -11,7 +11,7 @@ class StoreSchema::Configuration
11
11
  # @param column [Symbol] the table column to generate the accessors for
12
12
  #
13
13
  def initialize(column)
14
- @column = column
14
+ @column = column
15
15
  @attributes = {}
16
16
  end
17
17
 
@@ -9,11 +9,11 @@ class StoreSchema::Converter
9
9
  # and the converter classes.
10
10
  #
11
11
  MAPPING = {
12
- string: String,
13
- integer: Integer,
14
- float: Float,
15
- datetime: DateTime,
16
- boolean: Boolean
12
+ :string => String,
13
+ :integer => Integer,
14
+ :float => Float,
15
+ :datetime => DateTime,
16
+ :boolean => Boolean,
17
17
  }
18
18
 
19
19
  # @return [Object]
@@ -29,7 +29,7 @@ class StoreSchema::Converter
29
29
  #
30
30
  def initialize(value, type)
31
31
  @value = value
32
- @type = type
32
+ @type = type
33
33
  end
34
34
 
35
35
  # Converts {#value} from a Ruby-type value to a database-storable value.
@@ -11,14 +11,14 @@ module StoreSchema::Module
11
11
  # # Gemfile
12
12
  # gem "store_schema"
13
13
  #
14
- # # app/models/project.rb
14
+ # # app/models/website.rb
15
15
  # class Website < ActiveRecord::Base
16
16
  #
17
17
  # store_schema :config do |s|
18
- # s.string :name
19
- # s.integer :visitors
20
- # s.float :apdex
21
- # s.boolean :ssl
18
+ # s.string :name
19
+ # s.integer :visitors
20
+ # s.float :apdex
21
+ # s.boolean :ssl
22
22
  # s.datetime :published_at
23
23
  # end
24
24
  # end
@@ -1,3 +1,3 @@
1
1
  module StoreSchema
2
- VERSION = "1.0.1"
2
+ VERSION = "1.1.0"
3
3
  end
data/lib/store_schema.rb CHANGED
@@ -1,9 +1,9 @@
1
1
  module StoreSchema
2
- require "store_schema/accessor_definer"
3
- require "store_schema/configuration"
4
- require "store_schema/converter"
5
- require "store_schema/module"
6
- require "store_schema/version"
2
+ require_relative "store_schema/accessor_definer"
3
+ require_relative "store_schema/configuration"
4
+ require_relative "store_schema/converter"
5
+ require_relative "store_schema/module"
6
+ require_relative "store_schema/version"
7
7
  end
8
8
 
9
9
  if defined?(ActiveRecord::Base)
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: store_schema
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.1
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Michael van Rooijen
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-07-23 00:00:00.000000000 Z
11
+ date: 2019-10-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord
@@ -53,7 +53,7 @@ dependencies:
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
55
  - !ruby/object:Gem::Dependency
56
- name: rspec
56
+ name: minitest
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - ">="
@@ -80,48 +80,6 @@ dependencies:
80
80
  - - ">="
81
81
  - !ruby/object:Gem::Version
82
82
  version: '0'
83
- - !ruby/object:Gem::Dependency
84
- name: json
85
- requirement: !ruby/object:Gem::Requirement
86
- requirements:
87
- - - ">="
88
- - !ruby/object:Gem::Version
89
- version: '0'
90
- type: :development
91
- prerelease: false
92
- version_requirements: !ruby/object:Gem::Requirement
93
- requirements:
94
- - - ">="
95
- - !ruby/object:Gem::Version
96
- version: '0'
97
- - !ruby/object:Gem::Dependency
98
- name: database_cleaner
99
- requirement: !ruby/object:Gem::Requirement
100
- requirements:
101
- - - ">="
102
- - !ruby/object:Gem::Version
103
- version: '0'
104
- type: :development
105
- prerelease: false
106
- version_requirements: !ruby/object:Gem::Requirement
107
- requirements:
108
- - - ">="
109
- - !ruby/object:Gem::Version
110
- version: '0'
111
- - !ruby/object:Gem::Dependency
112
- name: pry
113
- requirement: !ruby/object:Gem::Requirement
114
- requirements:
115
- - - ">="
116
- - !ruby/object:Gem::Version
117
- version: '0'
118
- type: :development
119
- prerelease: false
120
- version_requirements: !ruby/object:Gem::Requirement
121
- requirements:
122
- - - ">="
123
- - !ruby/object:Gem::Version
124
- version: '0'
125
83
  - !ruby/object:Gem::Dependency
126
84
  name: simplecov
127
85
  requirement: !ruby/object:Gem::Requirement
@@ -157,14 +115,9 @@ executables: []
157
115
  extensions: []
158
116
  extra_rdoc_files: []
159
117
  files:
160
- - ".gemfiles/5.1.gemfile"
161
- - ".gitignore"
162
- - ".rspec"
163
- - ".travis.yml"
164
- - Gemfile
118
+ - CHANGELOG.md
165
119
  - LICENSE
166
120
  - README.md
167
- - Rakefile
168
121
  - lib/store_schema.rb
169
122
  - lib/store_schema/accessor_definer.rb
170
123
  - lib/store_schema/configuration.rb
@@ -177,13 +130,7 @@ files:
177
130
  - lib/store_schema/converter/string.rb
178
131
  - lib/store_schema/module.rb
179
132
  - lib/store_schema/version.rb
180
- - spec/lib/store_schema_spec.rb
181
- - spec/spec_helper.rb
182
- - spec/support/db.rb
183
- - spec/support/env.rb
184
- - spec/support/models.rb
185
- - store_schema.gemspec
186
- homepage: http://mrrooijen.github.io/store_schema/
133
+ homepage: https://github.com/mrrooijen/store_schema
187
134
  licenses:
188
135
  - MIT
189
136
  metadata: {}
@@ -195,21 +142,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
195
142
  requirements:
196
143
  - - ">="
197
144
  - !ruby/object:Gem::Version
198
- version: '0'
145
+ version: 2.5.0
199
146
  required_rubygems_version: !ruby/object:Gem::Requirement
200
147
  requirements:
201
148
  - - ">="
202
149
  - !ruby/object:Gem::Version
203
150
  version: '0'
204
151
  requirements: []
205
- rubyforge_project:
206
- rubygems_version: 2.6.8
152
+ rubygems_version: 3.0.3
207
153
  signing_key:
208
154
  specification_version: 4
209
- summary: Enhances ActiveRecord::Base.store_accessor with data conversion capabilities.
210
- test_files:
211
- - spec/lib/store_schema_spec.rb
212
- - spec/spec_helper.rb
213
- - spec/support/db.rb
214
- - spec/support/env.rb
215
- - spec/support/models.rb
155
+ summary: Enhances `ActiveRecord::Base.store_accessor` with data type conversion capabilities.
156
+ test_files: []
@@ -1,3 +0,0 @@
1
- source "https://rubygems.org"
2
- gem "activerecord", "~> 5.1.0"
3
- gemspec path: "../"
data/.gitignore DELETED
@@ -1,23 +0,0 @@
1
- *.gem
2
- *.rbc
3
- .bundle
4
- .config
5
- .yardoc
6
- Gemfile.lock
7
- InstalledFiles
8
- _yardoc
9
- coverage
10
- doc/
11
- lib/bundler/man
12
- pkg
13
- rdoc
14
- spec/reports
15
- test/tmp
16
- test/version_tmp
17
- tmp
18
- *.bundle
19
- *.so
20
- *.o
21
- *.a
22
- mkmf.log
23
- .DS_Store
data/.rspec DELETED
@@ -1,2 +0,0 @@
1
- --color
2
- --require spec_helper
data/.travis.yml DELETED
@@ -1,7 +0,0 @@
1
- language: ruby
2
- rvm:
3
- - 2.4.0
4
- gemfile:
5
- - .gemfiles/5.1.gemfile
6
- before_install:
7
- - gem install bundler
data/Gemfile DELETED
@@ -1,2 +0,0 @@
1
- source "https://rubygems.org"
2
- gemspec
data/Rakefile DELETED
@@ -1,4 +0,0 @@
1
- require "bundler/gem_tasks"
2
- require "rspec/core/rake_task"
3
- RSpec::Core::RakeTask.new(:spec)
4
- task default: :spec
@@ -1,148 +0,0 @@
1
- require "spec_helper"
2
-
3
- RSpec.describe "StoreSchema" do
4
-
5
- let(:website) { Website.create }
6
-
7
- describe "nil" do
8
-
9
- it "should stay nil" do
10
- website.update_attribute(:name, nil)
11
- expect(website.reload.name).to be_nil
12
- end
13
- end
14
-
15
- describe "string" do
16
-
17
- it "should remain a string" do
18
- website.update_attribute(:name, "Store Schema")
19
- expect(website.reload.name).to eq("Store Schema")
20
- end
21
-
22
- it "should convert to nil if incompatible type" do
23
- website.update_attribute(:name, true)
24
- expect(website.name).to eq(nil)
25
- end
26
- end
27
-
28
- describe "integer" do
29
-
30
- it "should cast to string and back to integer" do
31
- website.update_attribute(:visitors, 1337)
32
- expect(website.config["visitors"]).to eq("1337")
33
- expect(website.visitors).to eq(1337)
34
- end
35
-
36
- it "should accept a string value of a digit" do
37
- website.update_attribute(:visitors, "1337")
38
- expect(website.config["visitors"]).to eq("1337")
39
- expect(website.visitors).to eq(1337)
40
- end
41
-
42
- it "should convert to nil if incompatible value" do
43
- website.update_attribute(:visitors, "abc")
44
- expect(website.visitors).to eq(nil)
45
- end
46
-
47
- it "should convert to nil if incompatible type" do
48
- website.update_attribute(:visitors, true)
49
- expect(website.visitors).to eq(nil)
50
- end
51
- end
52
-
53
- describe "float" do
54
-
55
- it "should cast to string and back to float" do
56
- website.update_attribute(:apdex, 0.9)
57
- expect(website.config["apdex"]).to eq("0.9")
58
- expect(website.apdex).to eq(0.9)
59
- end
60
-
61
- it "should accept a string value of a float" do
62
- website.update_attribute(:apdex, "0.9")
63
- expect(website.config["apdex"]).to eq("0.9")
64
- expect(website.apdex).to eq(0.9)
65
- end
66
-
67
- it "should accept an integer value" do
68
- website.update_attribute(:apdex, 1)
69
- expect(website.config["apdex"]).to eq("1.0")
70
- expect(website.apdex).to eq(1.0)
71
- end
72
-
73
- it "should accept a string value of an integer" do
74
- website.update_attribute(:apdex, "1")
75
- expect(website.config["apdex"]).to eq("1.0")
76
- expect(website.apdex).to eq(1.0)
77
- end
78
-
79
- it "should convert to nil if incompatible value" do
80
- website.update_attribute(:apdex, "abc")
81
- expect(website.apdex).to eq(nil)
82
- end
83
-
84
- it "should convert to nil if incompatible type" do
85
- website.update_attribute(:apdex, true)
86
- expect(website.apdex).to eq(nil)
87
- end
88
- end
89
-
90
- describe "boolean" do
91
-
92
- it "should cast to string and back to boolean" do
93
- StoreSchema::Converter::Boolean::TRUE_VALUES.each do |value|
94
- website.update_attribute(:ssl, value)
95
- expect(website.config["ssl"]).to eq("t")
96
- expect(website.ssl).to eq(true)
97
- end
98
-
99
- StoreSchema::Converter::Boolean::FALSE_VALUES.each do |value|
100
- website.update_attribute(:ssl, value)
101
- expect(website.config["ssl"]).to eq("f")
102
- expect(website.ssl).to eq(false)
103
- end
104
- end
105
-
106
- it "should convert to nil if incompatible type" do
107
- website.update_attribute(:ssl, "abc")
108
- expect(website.ssl).to eq(nil)
109
- end
110
- end
111
-
112
- describe "datetime" do
113
-
114
- it "should cast Date to string and back to datetime" do
115
- value = Date.new(2020)
116
- website.update_attribute(:published_at, value)
117
- expect(website.config["published_at"]).to eq("2020-01-01 00:00:00.000000000")
118
- expect(website.published_at).to eq("Wed, 01 Jan 2020 00:00:00.000000000 +0000")
119
- expect(website.published_at.class).to eq(DateTime)
120
- end
121
-
122
- it "should cast Time to string and back to datetime" do
123
- value = Time.utc(2020)
124
- website.update_attribute(:published_at, value)
125
- expect(website.config["published_at"]).to eq("2020-01-01 00:00:00.000000000")
126
- expect(website.published_at).to eq("Wed, 01 Jan 2020 00:00:00.000000000 +0000")
127
- expect(website.published_at.class).to eq(DateTime)
128
- end
129
-
130
- it "should cast DateTime to string and back to datetime" do
131
- value = DateTime.new(2020)
132
- website.update_attribute(:published_at, value)
133
- expect(website.config["published_at"]).to eq("2020-01-01 00:00:00.000000000")
134
- expect(website.published_at).to eq("Wed, 01 Jan 2020 00:00:00.000000000 +0000")
135
- expect(website.published_at.class).to eq(DateTime)
136
- end
137
-
138
- it "should convert to nil if incompatible value" do
139
- website.update_attribute(:published_at, "abc")
140
- expect(website.published_at).to eq(nil)
141
- end
142
-
143
- it "should convert to nil if incompatible type" do
144
- website.update_attribute(:published_at, true)
145
- expect(website.published_at).to eq(nil)
146
- end
147
- end
148
- end
data/spec/spec_helper.rb DELETED
@@ -1,14 +0,0 @@
1
- $LOAD_PATH.unshift(File.expand_path("../../lib", __FILE__))
2
- require File.expand_path("../support/env", __FILE__)
3
-
4
- require "database_cleaner"
5
- require "simplecov"
6
- SimpleCov.start
7
-
8
- require "store_schema"
9
- require File.expand_path("../support/models", __FILE__)
10
-
11
- RSpec.configure do |config|
12
- config.before { DatabaseCleaner.start }
13
- config.after { DatabaseCleaner.clean }
14
- end
data/spec/support/db.rb DELETED
@@ -1,14 +0,0 @@
1
- ActiveRecord::Base.establish_connection(
2
- adapter: "sqlite3", database: ":memory:"
3
- )
4
-
5
- class Schema < ActiveRecord::Migration[4.2]
6
-
7
- def change
8
- create_table :websites do |t|
9
- t.text :config
10
- end
11
- end
12
- end
13
-
14
- Schema.new.change
data/spec/support/env.rb DELETED
@@ -1,8 +0,0 @@
1
- require "pry"
2
- require "sqlite3"
3
- require "active_record"
4
-
5
- ROOT_PATH = File.expand_path("../../..", __FILE__)
6
- SPEC_PATH = File.join(ROOT_PATH, "spec")
7
-
8
- require "#{SPEC_PATH}/support/db"
@@ -1,12 +0,0 @@
1
- class Website < ActiveRecord::Base
2
-
3
- store :config, coder: JSON
4
-
5
- store_schema :config do |s|
6
- s.string :name
7
- s.integer :visitors
8
- s.float :apdex
9
- s.boolean :ssl
10
- s.datetime :published_at
11
- end
12
- end
data/store_schema.gemspec DELETED
@@ -1,29 +0,0 @@
1
- lib = File.expand_path("../lib", __FILE__)
2
- $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
3
- require "store_schema/version"
4
-
5
- Gem::Specification.new do |spec|
6
- spec.name = "store_schema"
7
- spec.version = StoreSchema::VERSION
8
- spec.authors = ["Michael van Rooijen"]
9
- spec.email = ["michael@vanrooijen.io"]
10
- spec.summary = %q{Enhances ActiveRecord::Base.store_accessor with data conversion capabilities.}
11
- spec.homepage = "http://mrrooijen.github.io/store_schema/"
12
- spec.license = "MIT"
13
-
14
- spec.files = `git ls-files -z`.split("\x0")
15
- spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
16
- spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
17
- spec.require_paths = ["lib"]
18
-
19
- spec.add_dependency "activerecord", ">= 5.1.0"
20
- spec.add_development_dependency "bundler"
21
- spec.add_development_dependency "rake"
22
- spec.add_development_dependency "rspec"
23
- spec.add_development_dependency "sqlite3"
24
- spec.add_development_dependency "json"
25
- spec.add_development_dependency "database_cleaner"
26
- spec.add_development_dependency "pry"
27
- spec.add_development_dependency "simplecov"
28
- spec.add_development_dependency "yard"
29
- end