easy_settings 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: b576c4cc8f7df5949f577776925dd2cf736f25b9
4
- data.tar.gz: f752df3e59269a8fc30ab5461452d236ecc0537a
3
+ metadata.gz: 2085b197801aa7b23546218a9a2cd4d187c0997b
4
+ data.tar.gz: f017d3d8cfcac1ad5e3acd50e3420445058b2ea5
5
5
  SHA512:
6
- metadata.gz: a07f2b0934754767fea381bc86e9ee33e75be14395cf87ed1fa98bde1931f0cbfa3000ea3910f0c19512e3f66737537cd7c152251efaf804580b9278f8b27b4d
7
- data.tar.gz: aef00e04a6612a1055ef9c494fe1b49a04a1c24a2a90288f183271545c3277c29ccf404d69ea659a0cd8373ea89939d61b0f2b939a7ed1cea14aefa50a954052
6
+ metadata.gz: 235f5f02e84ccc6ac2be90c03e5bafb55035040122feaed01fe4c25857c81dc037ca4adeff405ac4566829694de51d6b8cbf93cdff16c7269685d46d4e9f58a7
7
+ data.tar.gz: 8af02731d7090dd8b535a84008057e4f4a5a39371dc1ff9cc8b0ac608cc1115beb4aa351df9e039559ef23441ea4e44a3ef145a8cd8c3fd2891d9785ac2e24d6
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --color
2
+ --require spec_helper
data/Rakefile CHANGED
@@ -1,2 +1,6 @@
1
1
  require "bundler/gem_tasks"
2
+ require "rspec/core/rake_task"
3
+
4
+ RSpec::Core::RakeTask.new(:spec)
5
+ task default: :spec
2
6
 
@@ -22,5 +22,6 @@ Gem::Specification.new do |spec|
22
22
  spec.add_development_dependency "bundler", "~> 1.7"
23
23
  spec.add_development_dependency "rake", "~> 10.0"
24
24
  spec.add_development_dependency "rspec"
25
+ spec.add_development_dependency "simplecov"
25
26
  spec.add_development_dependency "pry"
26
27
  end
data/lib/easy_settings.rb CHANGED
@@ -51,7 +51,7 @@ class EasySettings < Hashie::Mash
51
51
 
52
52
  def _source_from_file
53
53
  unless FileTest.exist?(source_file)
54
- raise(SourceFileNotExist, "Your source file '#{file}' does not exist.")
54
+ raise(SourceFileNotExist, "Your source file '#{source_file}' does not exist.")
55
55
  end
56
56
  _load_file(source_file)
57
57
  end
@@ -1,3 +1,3 @@
1
1
  module EasySettingsVersion
2
- VERSION = "0.0.3"
2
+ VERSION = "0.0.4"
3
3
  end
@@ -0,0 +1,263 @@
1
+ shared_examples_for "EasySettings" do |proc|
2
+ let(:settings, &proc)
3
+
4
+ it "can access by dot" do
5
+ expect(settings.app_name).to eq app_name
6
+ end
7
+
8
+ it "can access by [Srting]" do
9
+ expect(settings["app_name"]).to eq app_name
10
+ end
11
+
12
+ it "can access by [Symbol]" do
13
+ expect(settings[:app_name]).to eq app_name
14
+ end
15
+
16
+ it "can access nested hash by dot" do
17
+ expect(settings.admins.admin1.password).to eq "PassWord1"
18
+ end
19
+
20
+ it "can access nested hash by []" do
21
+ expect(settings[:admins][:admin1][:password]).to eq "PassWord1"
22
+ end
23
+
24
+ it "return nil when access key that doesn't exist by dot" do
25
+ expect(settings.admins.admin3).to be_nil
26
+ end
27
+
28
+ it "return nil when access key that doesn't exist by []" do
29
+ expect(settings[:admins][:admin3]).to be_nil
30
+ end
31
+
32
+ it "can be set value by dot" do
33
+ settings.foo = :bar
34
+ expect(settings.foo).to eq :bar
35
+
36
+ admin3 = {"password" => "PassWord3", "role" => "administrator"}
37
+ settings.admins.admin3 = admin3
38
+ expect(settings.admins.admin3.to_h).to eq admin3
39
+ end
40
+
41
+ it "can be set value by []" do
42
+ settings[:foo] = :bar
43
+ expect(settings.foo).to eq :bar
44
+
45
+ admin3 = {"password" => "PassWord3", "role" => "administrator"}
46
+ settings[:admins][:admin3] = admin3
47
+ expect(settings.admins.admin3.to_h).to eq admin3
48
+ end
49
+
50
+ it "can be rewrited by dot" do
51
+ settings.app_name = "hoge"
52
+ expect(settings.app_name).to eq "hoge"
53
+
54
+ password = "PASSWORD"
55
+ settings.admins.admin1 = password
56
+ expect(settings.admins.admin1).to eq password
57
+ end
58
+
59
+ it "can be rewrited by []" do
60
+ settings[:app_name] = "hoge"
61
+ expect(settings.app_name).to eq "hoge"
62
+
63
+ password = "PASSWORD"
64
+ settings[:admins][:admin1] = password
65
+ expect(settings.admins.admin1).to eq password
66
+ end
67
+
68
+ it "can treat ERB format" do
69
+ unless settings.source_hash
70
+ expect(settings.erb).to eq "This was set by ERB"
71
+ end
72
+ end
73
+
74
+ describe "method?" do
75
+ it "return true when key exist" do
76
+ expect(settings.app_name?).to be_truthy
77
+ end
78
+
79
+ it "return false when key doesn't exist" do
80
+ expect(settings.not_exist?).to be_falsey
81
+ end
82
+ end
83
+
84
+ describe "method!" do
85
+ it "return new hash when key doesn't exist" do
86
+ ret = settings.newkey!
87
+ expect(ret).to be_an_instance_of settings
88
+ expect(ret.to_h).to eq({})
89
+ end
90
+
91
+ it "return existing value when key exist" do
92
+ expect(settings.app_name!).to eq app_name
93
+ end
94
+ end
95
+
96
+ describe "method_" do
97
+ it "return new hash but doesn't set when key doesn't exist" do
98
+ ret = settings.newkey_
99
+ expect(ret).to be_an_instance_of settings
100
+ expect(ret.to_h).to eq({})
101
+ expect(settings.newkey).to be_nil
102
+ end
103
+
104
+ it "return existing value when key exist" do
105
+ expect(settings.app_name_).to eq app_name
106
+ end
107
+ end
108
+
109
+ describe "method()" do
110
+ it "can set new value when key doesn't exist" do
111
+ new_value = "NEWVAL"
112
+ expect(settings.newkey(new_value)).to eq new_value
113
+ expect(settings.newkey).to eq new_value
114
+ end
115
+
116
+ it "doesn't set new value when key already exist" do
117
+ expect(settings.app_name("NEWVAL")).to eq "EasySettingsTest"
118
+ expect(settings.app_name).to eq "EasySettingsTest"
119
+ end
120
+
121
+ it "can set nil when using nil option" do
122
+ expect(settings.newkey(nil, nil: true)).to be_nil
123
+ expect(settings.has_key?(:newkey)).to be_truthy
124
+ expect(settings.newkey).to be_nil
125
+ end
126
+
127
+ it "doesn't set nil when not using nil option" do
128
+ expect(settings.newkey(nil)).to be_nil
129
+ expect(settings.has_key?(:newkey)).to be_falsey
130
+ end
131
+ end
132
+ end
133
+
134
+ describe EasySettings do
135
+ before do
136
+ FileUtils.mkdir File.expand_path("../../config", __FILE__)
137
+ end
138
+
139
+ after do
140
+ FileUtils.rm_rf File.expand_path("../../config", __FILE__)
141
+ end
142
+
143
+ let(:settings) do
144
+ Class.new(EasySettings)
145
+ end
146
+
147
+ let(:test_settings_file) do
148
+ File.expand_path("../settings.yml", __FILE__)
149
+ end
150
+
151
+ let(:default_settings_path1) do
152
+ File.expand_path("../../settings.yml", __FILE__)
153
+ end
154
+
155
+ let(:default_settings_path2) do
156
+ File.expand_path("../../config/settings.yml", __FILE__)
157
+ end
158
+
159
+ let(:custom_settings_path) do
160
+ File.expand_path("../../config/application.yml", __FILE__)
161
+ end
162
+
163
+ let(:app_name) do
164
+ "EasySettingsTest"
165
+ end
166
+
167
+ context "from settings.yml" do
168
+ before do
169
+ FileUtils.cp test_settings_file, default_settings_path1
170
+ end
171
+
172
+ after do
173
+ FileUtils.rm_f default_settings_path1
174
+ end
175
+
176
+ it_behaves_like("EasySettings", Proc.new{Class.new(EasySettings)})
177
+
178
+ describe ".reload!" do
179
+ it "can reload source" do
180
+ expect(settings.app_name).to eq app_name
181
+ settings.source_hash = {app_name: "RELOAD"}
182
+ expect(settings.reload!).to be_truthy
183
+ expect(settings.app_name).to eq "RELOAD"
184
+ end
185
+ end
186
+ end
187
+
188
+ context "from config/settings.yml" do
189
+ before do
190
+ FileUtils.cp test_settings_file, default_settings_path2
191
+ end
192
+
193
+ after do
194
+ FileUtils.rm_f default_settings_path2
195
+ end
196
+
197
+ it_behaves_like("EasySettings", Proc.new{Class.new(EasySettings)})
198
+ end
199
+
200
+ context "from custom path" do
201
+ before do
202
+ FileUtils.cp test_settings_file, custom_settings_path
203
+ end
204
+
205
+ after do
206
+ FileUtils.rm_f custom_settings_path
207
+ end
208
+
209
+ it_behaves_like(
210
+ "EasySettings",
211
+ Proc.new do
212
+ Class.new(EasySettings) do
213
+ self.source_file = File.expand_path("../../config/application.yml", __FILE__)
214
+ end
215
+ end
216
+ )
217
+ end
218
+
219
+ context "from source hash" do
220
+ it_behaves_like(
221
+ "EasySettings",
222
+ Proc.new do
223
+ source_file = File.expand_path("../settings.yml", __FILE__)
224
+ Class.new(EasySettings) do
225
+ self.source_file = source_file
226
+ self.source_hash = YAML.load_file(source_file)
227
+ end
228
+ end
229
+ )
230
+ end
231
+
232
+ context "with namespace" do
233
+ it_behaves_like(
234
+ "EasySettings",
235
+ Proc.new do
236
+ Class.new(EasySettings) do
237
+ self.source_file = File.expand_path("../settings_with_namespace.yml", __FILE__)
238
+ self.namespace = "test"
239
+ end
240
+ end
241
+ )
242
+ end
243
+
244
+ context "source does not exist" do
245
+ it "EasySettings is empty hash" do
246
+ expect(settings.to_h).to eq({})
247
+ end
248
+ end
249
+
250
+ context "with empty source" do
251
+ it "EasySettings become empty hash" do
252
+ settings.source_file = File.expand_path("../empty_settings.yml", __FILE__)
253
+ expect(settings.to_h).to eq({})
254
+ end
255
+ end
256
+
257
+ context "specify wrong source path" do
258
+ it "raise error" do
259
+ settings.source_file = "notexist.yml"
260
+ expect{settings.to_h}.to raise_error(EasySettings::SourceFileNotExist)
261
+ end
262
+ end
263
+ end
File without changes
data/spec/settings.yml ADDED
@@ -0,0 +1,9 @@
1
+ app_name: EasySettingsTest
2
+ admins:
3
+ admin1:
4
+ password: PassWord1
5
+ role: administrator
6
+ admin2:
7
+ password: PassWord2
8
+ role: manager
9
+ erb: <%= "This was set by ERB" %>
@@ -0,0 +1,14 @@
1
+ defaults: &defaults
2
+ app_name: EasySettingsTestDefault
3
+ admins:
4
+ admin1:
5
+ password: PassWord1
6
+ role: administrator
7
+ admin2:
8
+ password: PassWord2
9
+ role: manager
10
+ erb: <%= "This was set by ERB" %>
11
+
12
+ test:
13
+ <<: *defaults
14
+ app_name: EasySettingsTest
@@ -0,0 +1,85 @@
1
+ require "simplecov"
2
+ SimpleCov.start do
3
+ add_filter "vendor"
4
+ add_filter "spec"
5
+ end
6
+
7
+ require "fileutils"
8
+ require "easy_settings"
9
+
10
+ RSpec.configure do |config|
11
+ # rspec-expectations config goes here. You can use an alternate
12
+ # assertion/expectation library such as wrong or the stdlib/minitest
13
+ # assertions if you prefer.
14
+ config.expect_with :rspec do |expectations|
15
+ # This option will default to `true` in RSpec 4. It makes the `description`
16
+ # and `failure_message` of custom matchers include text for helper methods
17
+ # defined using `chain`, e.g.:
18
+ # be_bigger_than(2).and_smaller_than(4).description
19
+ # # => "be bigger than 2 and smaller than 4"
20
+ # ...rather than:
21
+ # # => "be bigger than 2"
22
+ expectations.include_chain_clauses_in_custom_matcher_descriptions = true
23
+ end
24
+
25
+ # rspec-mocks config goes here. You can use an alternate test double
26
+ # library (such as bogus or mocha) by changing the `mock_with` option here.
27
+ config.mock_with :rspec do |mocks|
28
+ # Prevents you from mocking or stubbing a method that does not exist on
29
+ # a real object. This is generally recommended, and will default to
30
+ # `true` in RSpec 4.
31
+ mocks.verify_partial_doubles = true
32
+ end
33
+
34
+ config.filter_run :focus
35
+ config.run_all_when_everything_filtered = true
36
+
37
+ # The settings below are suggested to provide a good initial experience
38
+ # with RSpec, but feel free to customize to your heart's content.
39
+ =begin
40
+ # These two settings work together to allow you to limit a spec run
41
+ # to individual examples or groups you care about by tagging them with
42
+ # `:focus` metadata. When nothing is tagged with `:focus`, all examples
43
+ # get run.
44
+ config.filter_run :focus
45
+ config.run_all_when_everything_filtered = true
46
+
47
+ # Limits the available syntax to the non-monkey patched syntax that is
48
+ # recommended. For more details, see:
49
+ # - http://myronmars.to/n/dev-blog/2012/06/rspecs-new-expectation-syntax
50
+ # - http://teaisaweso.me/blog/2013/05/27/rspecs-new-message-expectation-syntax/
51
+ # - http://myronmars.to/n/dev-blog/2014/05/notable-changes-in-rspec-3#new__config_option_to_disable_rspeccore_monkey_patching
52
+ config.disable_monkey_patching!
53
+
54
+ # This setting enables warnings. It's recommended, but in some cases may
55
+ # be too noisy due to issues in dependencies.
56
+ config.warnings = true
57
+
58
+ # Many RSpec users commonly either run the entire suite or an individual
59
+ # file, and it's useful to allow more verbose output when running an
60
+ # individual spec file.
61
+ if config.files_to_run.one?
62
+ # Use the documentation formatter for detailed output,
63
+ # unless a formatter has already been configured
64
+ # (e.g. via a command-line flag).
65
+ config.default_formatter = 'doc'
66
+ end
67
+
68
+ # Print the 10 slowest examples and example groups at the
69
+ # end of the spec run, to help surface which specs are running
70
+ # particularly slow.
71
+ config.profile_examples = 10
72
+
73
+ # Run specs in random order to surface order dependencies. If you find an
74
+ # order dependency and want to debug it, you can fix the order by providing
75
+ # the seed, which is printed after each run.
76
+ # --seed 1234
77
+ config.order = :random
78
+
79
+ # Seed global randomization in this process using the `--seed` CLI option.
80
+ # Setting this allows you to use `--seed` to deterministically reproduce
81
+ # test failures related to randomization by passing the same `--seed` value
82
+ # as the one that triggered the failure.
83
+ Kernel.srand config.seed
84
+ =end
85
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: easy_settings
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - nownabe
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-03-06 00:00:00.000000000 Z
11
+ date: 2015-03-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: hashie
@@ -66,6 +66,20 @@ dependencies:
66
66
  - - ">="
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: simplecov
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
69
83
  - !ruby/object:Gem::Dependency
70
84
  name: pry
71
85
  requirement: !ruby/object:Gem::Requirement
@@ -88,6 +102,7 @@ extensions: []
88
102
  extra_rdoc_files: []
89
103
  files:
90
104
  - ".gitignore"
105
+ - ".rspec"
91
106
  - Gemfile
92
107
  - LICENSE.txt
93
108
  - README.md
@@ -95,6 +110,11 @@ files:
95
110
  - easy_settings.gemspec
96
111
  - lib/easy_settings.rb
97
112
  - lib/easy_settings_version.rb
113
+ - spec/easy_settings_spec.rb
114
+ - spec/empty_settings.yml
115
+ - spec/settings.yml
116
+ - spec/settings_with_namespace.yml
117
+ - spec/spec_helper.rb
98
118
  homepage: https://github.com/nownabe/easy_settings
99
119
  licenses:
100
120
  - MIT
@@ -119,4 +139,9 @@ rubygems_version: 2.4.5
119
139
  signing_key:
120
140
  specification_version: 4
121
141
  summary: EasySettings is a simple settings with YAML file.
122
- test_files: []
142
+ test_files:
143
+ - spec/easy_settings_spec.rb
144
+ - spec/empty_settings.yml
145
+ - spec/settings.yml
146
+ - spec/settings_with_namespace.yml
147
+ - spec/spec_helper.rb