dashdog 0.2.0 → 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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: e5a209f39a8e469b2ff1a4ae3c37c9ef0f29a9fe
4
- data.tar.gz: 75e706697dfad0acaf3bd8e2cf0a34820d5d2a19
3
+ metadata.gz: f6f386b275c48a47a0045b7185fecde628df9559
4
+ data.tar.gz: 004b08212a20a2e55a4cd9ce36c0d1af6d09ab1b
5
5
  SHA512:
6
- metadata.gz: 382cca04591f69297f3bbc7b41ec2c736bf03f52ee9be2486f4f09b552bb3d0c66a13e2c00358e95f8c4ba01180b9172a76ae3c16d7e5021225a52c56d548bc0
7
- data.tar.gz: 11c397cdfedf957a1f9fd38b2aa83ccf80a62b0a8656a4ab07139f82dfa07d6a8c40c5da1ccab1fe1f937815fadd75ad88dd66927085714e20f9c86d6e6c893b
6
+ metadata.gz: 60b4e24201a7b27f245992f3b296de39fcd1c070e02a44203a498e79d683bd086ee4d9b476a43edc254d92d968fba6a334af7bac81a2d5d54c6a650965cb1ea9
7
+ data.tar.gz: ce8b1718de7432e021e6d4240ddf85be9396ac6ab0144bfc0624735d30342dee8daa49c9ff958e0dbe45ee888a66af50bfe5dd7f58f5bf1c23e4c6bb617ee5c3
data/CHANGELOG.md CHANGED
@@ -1,3 +1,8 @@
1
+ ## 0.3.0
2
+
3
+ - Add template support [#5][] ([@winebarrel][])
4
+ - Diff the sorted json [#6][] ([@winebarrel][])
5
+
1
6
  ## 0.2.0
2
7
 
3
8
  - Add `split` opton [#4][] ([@winebarrel][])
@@ -18,4 +23,6 @@
18
23
  [#2]: https://github.com/serverworks/dashdog/issues/2
19
24
  [#3]: https://github.com/serverworks/dashdog/issues/3
20
25
  [#4]: https://github.com/serverworks/dashdog/issues/4
21
- [@winebarrel]: https://github.com/winebarrel
26
+ [#5]: https://github.com/serverworks/dashdog/issues/5
27
+ [#6]: https://github.com/serverworks/dashdog/issues/6
28
+ [@winebarrel]: https://github.com/winebarrel
data/dashdog.gemspec CHANGED
@@ -20,11 +20,12 @@ Gem::Specification.new do |spec|
20
20
  spec.require_paths = ["lib"]
21
21
 
22
22
  spec.add_dependency "dogapi"
23
- spec.add_dependency "dslh", "~> 0.3.8"
23
+ spec.add_dependency "dslh", "~> 0.3.9"
24
24
  spec.add_dependency "thor", "~> 0.19.1"
25
25
  spec.add_dependency "coderay"
26
26
  spec.add_dependency "diffy"
27
27
  spec.add_dependency "parallel"
28
+ spec.add_dependency "hashie"
28
29
 
29
30
  spec.add_development_dependency "bundler", "~> 1.12"
30
31
  spec.add_development_dependency "rake", "~> 10.0"
data/lib/dashdog.rb CHANGED
@@ -6,6 +6,7 @@ require "dashdog/client"
6
6
  require "dashdog/converter"
7
7
  require "dashdog/actions"
8
8
  require "dashdog/cli"
9
+ require "dashdog/dsl_context"
9
10
 
10
11
  module Dashdog
11
12
  # Your code goes here...
@@ -61,40 +61,8 @@ EOS
61
61
  end
62
62
 
63
63
  def to_h(dsl_file)
64
- @_dsl_file = dsl_file
65
- instance_eval(File.read(dsl_file), dsl_file)
66
- @boards
64
+ context = DSLContext.new
65
+ context.eval_dsl(dsl_file)
67
66
  end
68
-
69
- private
70
-
71
- def require(file)
72
- boardfile = (file =~ %r|\A/|) ? file : File.expand_path(File.join(File.dirname(@_dsl_file), file))
73
-
74
- if File.exist?(boardfile)
75
- instance_eval(File.read(boardfile), boardfile)
76
- elsif File.exist?(boardfile + '.rb')
77
- instance_eval(File.read(boardfile + '.rb'), boardfile + '.rb')
78
- else
79
- Kernel.require(file)
80
- end
81
- end
82
-
83
- def timeboard(value = nil, &block)
84
- hash = Dslh.eval(
85
- allow_empty_args: true,
86
- &block)
87
- hash['title'] = value
88
- @boards['timeboards'] << hash
89
- end
90
-
91
- def screenboard(value = nil, &block)
92
- hash = Dslh.eval(
93
- allow_empty_args: true,
94
- &block)
95
- hash['board_title'] = value
96
- @boards['screenboards'] << hash
97
- end
98
-
99
67
  end
100
68
  end
@@ -0,0 +1,78 @@
1
+ require 'hashie'
2
+
3
+ module Dashdog
4
+ class DSLContext
5
+ def initialize
6
+ @boards = {'timeboards' => [], 'screenboards' => []}
7
+ @templates = {}
8
+ @context = Hashie::Mash.new()
9
+ end
10
+
11
+ def eval_dsl(dsl_file)
12
+ @_dsl_file = dsl_file
13
+ instance_eval(File.read(dsl_file), dsl_file)
14
+ @boards
15
+ end
16
+
17
+ private
18
+
19
+ def template(name, &block)
20
+ @templates[name.to_s] = block
21
+ end
22
+
23
+ def context
24
+ @context
25
+ end
26
+
27
+ def require(file)
28
+ boardfile = (file =~ %r|\A/|) ? file : File.expand_path(File.join(File.dirname(@_dsl_file), file))
29
+
30
+ if File.exist?(boardfile)
31
+ instance_eval(File.read(boardfile), boardfile)
32
+ elsif File.exist?(boardfile + '.rb')
33
+ instance_eval(File.read(boardfile + '.rb'), boardfile + '.rb')
34
+ else
35
+ Kernel.require(file)
36
+ end
37
+ end
38
+
39
+ def timeboard(value = nil, &block)
40
+ hash = dslh_eval(block)
41
+ hash['title'] = value
42
+ @boards['timeboards'] << hash
43
+ end
44
+
45
+ def screenboard(value = nil, &block)
46
+ hash = dslh_eval(block)
47
+ hash['board_title'] = value
48
+ @boards['screenboards'] << hash
49
+ end
50
+
51
+ def dslh_eval(block)
52
+ scope_hook = proc do |scope|
53
+ scope.instance_eval(<<-'EOS')
54
+ def include_template(template_name, context = {})
55
+ tmplt = @templates[template_name.to_s]
56
+
57
+ unless tmplt
58
+ raise "Template '#{template_name}' is not defined"
59
+ end
60
+
61
+ context_orig = @context
62
+ @context = @context.merge(context)
63
+ instance_eval(&tmplt)
64
+ @context = context_orig
65
+ end
66
+
67
+ def context
68
+ @context
69
+ end
70
+ EOS
71
+ end
72
+
73
+ scope_vars = {templates: @templates, context: @context}
74
+
75
+ Dslh.eval(allow_empty_args: true, scope_hook: scope_hook, scope_vars: scope_vars, &block)
76
+ end
77
+ end
78
+ end
data/lib/dashdog/utils.rb CHANGED
@@ -7,8 +7,8 @@ module Dashdog
7
7
 
8
8
  def self.diff(hash1, hash2)
9
9
  Diffy::Diff.new(
10
- JSON.pretty_generate(hash1),
11
- JSON.pretty_generate(hash2),
10
+ JSON.pretty_generate(self.deep_sort_hash(hash1)) + "\n",
11
+ JSON.pretty_generate(self.deep_sort_hash(hash2)) + "\n",
12
12
  :diff => '-u'
13
13
  ).to_s(:color)
14
14
  end
@@ -31,5 +31,24 @@ module Dashdog
31
31
  def self.print_json(json)
32
32
  puts CodeRay.scan(json, :json).terminal
33
33
  end
34
+
35
+ def self.deep_sort_hash(obj)
36
+ case obj
37
+ when Hash
38
+ new_hash = {}
39
+
40
+ obj.sort_by{|k, _| k.to_s }.each do |key, value|
41
+ new_hash[key] = self.deep_sort_hash(value)
42
+ end
43
+
44
+ new_hash
45
+ when Array
46
+ obj.map do |value|
47
+ self.deep_sort_hash(value)
48
+ end
49
+ else
50
+ obj
51
+ end
52
+ end
34
53
  end
35
54
  end
@@ -1,3 +1,3 @@
1
1
  module Dashdog
2
- VERSION = "0.2.0"
2
+ VERSION = "0.3.0"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dashdog
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Serverworks Co.,Ltd.
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2016-08-22 00:00:00.000000000 Z
11
+ date: 2016-08-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: dogapi
@@ -30,14 +30,14 @@ dependencies:
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: 0.3.8
33
+ version: 0.3.9
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: 0.3.8
40
+ version: 0.3.9
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: thor
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -94,6 +94,20 @@ dependencies:
94
94
  - - ">="
95
95
  - !ruby/object:Gem::Version
96
96
  version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: hashie
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :runtime
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
97
111
  - !ruby/object:Gem::Dependency
98
112
  name: bundler
99
113
  requirement: !ruby/object:Gem::Requirement
@@ -161,6 +175,7 @@ files:
161
175
  - lib/dashdog/cli.rb
162
176
  - lib/dashdog/client.rb
163
177
  - lib/dashdog/converter.rb
178
+ - lib/dashdog/dsl_context.rb
164
179
  - lib/dashdog/logger.rb
165
180
  - lib/dashdog/utils.rb
166
181
  - lib/dashdog/version.rb